cloud_former 0.7.12 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/cloud_former.rb +28 -0
- data/lib/cloud_former/resource_properties/efs/file_system_tag.rb +9 -0
- data/lib/cloud_former/resources/efs/file_system.rb +8 -0
- data/lib/cloud_former/resources/efs/mount_target.rb +11 -0
- data/lib/cloud_former/template.rb +11 -1
- data/lib/cloud_former/version.rb +1 -1
- data/spec/cloud_former_spec.rb +18 -0
- data/spec/has_properties_and_attributes_spec.rb +0 -39
- data/spec/metadata_spec.rb +1 -3
- data/spec/resources/efs/file_system_spec.rb +26 -0
- data/spec/resources/efs/mount_target_spec.rb +20 -0
- data/spec/template_spec.rb +19 -1
- metadata +12 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7572dd274fed161720cc0bf56518b9fdb0d4cfe2
|
4
|
+
data.tar.gz: 608558f4dd6f2fd242130b6a22dbda0cadf29a9e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ee3881b6dea3cd6bfee8ec8ebc22fea001e19fdd5e2589a0e11c78b981f29550daa5ead304a6a8e5401afa6065ad49dfdecdb26506b0633e0bb6f20b21c00c0b
|
7
|
+
data.tar.gz: 336f51df5f003b6ca5e9fc7038f6975503e4afc5fba8795f6dc609ca1d0f452a743988dc15659b1f0797375b3808294f64b78b1b172d8671ac6d82f22735d7a2
|
data/lib/cloud_former.rb
CHANGED
@@ -3,6 +3,28 @@ require 'cloud_former/has_properties_and_attributes'
|
|
3
3
|
require 'cloud_former/makes_json'
|
4
4
|
|
5
5
|
module CloudFormer
|
6
|
+
def self.types
|
7
|
+
@types ||= {}
|
8
|
+
end
|
9
|
+
|
10
|
+
def self.type_to_class(type)
|
11
|
+
mod, name = types[type]
|
12
|
+
return nil if mod.nil?
|
13
|
+
value = mod.const_get(name)
|
14
|
+
value.is_a?(Class) && value < Resource ? value : nil
|
15
|
+
end
|
16
|
+
|
17
|
+
refine Module do
|
18
|
+
def autoload(constant_name, path)
|
19
|
+
super
|
20
|
+
namespace = self.name.to_s.sub(/\ACloudFormer::/, '').gsub(/([a-z])([A-Z])/, '\\1_\\2').gsub('::', '.').downcase
|
21
|
+
base_name = constant_name.to_s.gsub(/([a-z])([A-Z])/, '\\1_\\2').downcase
|
22
|
+
::CloudFormer.types["#{namespace}.#{base_name}"] = [self, constant_name]
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
using self
|
27
|
+
|
6
28
|
autoload :Boolean, 'cloud_former/boolean'
|
7
29
|
autoload :Parameter, 'cloud_former/parameters/parameter'
|
8
30
|
autoload :CommaDelimitedListParameter, 'cloud_former/parameters/comma_delimited_list_parameter'
|
@@ -132,6 +154,12 @@ module CloudFormer
|
|
132
154
|
autoload :VPNGatewayRoutePropagation, 'cloud_former/resources/ec2/vpn_gateway_route_propagation'
|
133
155
|
end
|
134
156
|
|
157
|
+
module EFS
|
158
|
+
autoload :FileSystem, 'cloud_former/resources/efs/file_system'
|
159
|
+
autoload :FileSystemTag, 'cloud_former/resource_properties/efs/file_system_tag'
|
160
|
+
autoload :MountTarget, 'cloud_former/resources/efs/mount_target'
|
161
|
+
end
|
162
|
+
|
135
163
|
module ElastiCache
|
136
164
|
autoload :CacheCluster, 'cloud_former/resources/elasti_cache/cache_cluster'
|
137
165
|
autoload :ParameterGroup, 'cloud_former/resources/elasti_cache/parameter_group'
|
@@ -0,0 +1,9 @@
|
|
1
|
+
# http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-efs-filesystem-filesystemtags.html
|
2
|
+
module CloudFormer
|
3
|
+
module EFS
|
4
|
+
class FileSystemTag < ResourceProperty
|
5
|
+
aws_attribute :key, type: String
|
6
|
+
aws_attribute :value, type: String
|
7
|
+
end
|
8
|
+
end
|
9
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
# http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-efs-mounttarget.html
|
2
|
+
module CloudFormer
|
3
|
+
module EFS
|
4
|
+
class MountTarget < Resource
|
5
|
+
aws_property :file_system_id, type: String
|
6
|
+
aws_property :ip_address, type: String
|
7
|
+
aws_property :security_groups, list: true, type: String
|
8
|
+
aws_property :subnet_id, type: String
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
@@ -25,9 +25,19 @@ module CloudFormer
|
|
25
25
|
param
|
26
26
|
end
|
27
27
|
|
28
|
-
def add_resource(
|
28
|
+
def add_resource(*args, &block)
|
29
|
+
if args.size == 1
|
30
|
+
resource = args.first
|
31
|
+
elsif args.size == 2
|
32
|
+
type, name = *args
|
33
|
+
klass = CloudFormer.type_to_class(type)
|
34
|
+
resource = klass.new(name, &block)
|
35
|
+
else
|
36
|
+
raise ArgumentErrror, "wrong number of args (#{args.size} for 1..2)"
|
37
|
+
end
|
29
38
|
raise "Overwriting resource with name #{resource.get_name}" if @resources.any? { |r| r.get_name == resource.get_name }
|
30
39
|
@resources << resource
|
40
|
+
resource
|
31
41
|
end
|
32
42
|
|
33
43
|
def resource(name)
|
data/lib/cloud_former/version.rb
CHANGED
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe CloudFormer do
|
4
|
+
describe ".type_to_class" do
|
5
|
+
it "returns the class for the given resource type" do
|
6
|
+
klass = CloudFormer.type_to_class('ec2.security_group')
|
7
|
+
expect(klass).to be(CloudFormer::EC2::SecurityGroup)
|
8
|
+
end
|
9
|
+
|
10
|
+
it "is nil for non-Resource constants" do
|
11
|
+
expect(CloudFormer.type_to_class('ec2.mount_point')).to be_nil
|
12
|
+
end
|
13
|
+
|
14
|
+
it "is nil for rubbish" do
|
15
|
+
expect(CloudFormer.type_to_class('rubbish')).to be_nil
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -24,45 +24,6 @@ describe CloudFormer::HasPropertiesAndAttributes do
|
|
24
24
|
)
|
25
25
|
end
|
26
26
|
|
27
|
-
it "supports builds nested resource lists via blocks" do
|
28
|
-
auto_scaling_group = CloudFormer::AutoScaling::LaunchConfiguration.new('myconfig') do
|
29
|
-
image_id 'ami-123456'
|
30
|
-
security_groups(2) do |i|
|
31
|
-
name "name #{i}"
|
32
|
-
group_description "security group #{i}"
|
33
|
-
end
|
34
|
-
end
|
35
|
-
template.add_resource(auto_scaling_group)
|
36
|
-
|
37
|
-
expect(template.dump_json).to eq(
|
38
|
-
"AWSTemplateFormatVersion" => "2010-09-09",
|
39
|
-
"Resources" => {
|
40
|
-
"myconfig" => {
|
41
|
-
"Type" => "AWS::AutoScaling::LaunchConfiguration",
|
42
|
-
"Properties" => {
|
43
|
-
"ImageId" => "ami-123456",
|
44
|
-
"SecurityGroups" => [
|
45
|
-
{"Ref" => "name 0"},
|
46
|
-
{"Ref" => "name 1"},
|
47
|
-
],
|
48
|
-
},
|
49
|
-
},
|
50
|
-
"name 0" => {
|
51
|
-
"Type" => "AWS::EC2::SecurityGroup",
|
52
|
-
"Properties" => {
|
53
|
-
"GroupDescription" => "security group 0",
|
54
|
-
},
|
55
|
-
},
|
56
|
-
"name 1" => {
|
57
|
-
"Type" => "AWS::EC2::SecurityGroup",
|
58
|
-
"Properties" => {
|
59
|
-
"GroupDescription" => "security group 1",
|
60
|
-
},
|
61
|
-
},
|
62
|
-
},
|
63
|
-
)
|
64
|
-
end
|
65
|
-
|
66
27
|
it "supports builds nested resource properties via blocks" do
|
67
28
|
instance = CloudFormer::EC2::Instance.new('myinstance') do
|
68
29
|
# list
|
data/spec/metadata_spec.rb
CHANGED
@@ -55,7 +55,7 @@ describe 'stupid metadata' do
|
|
55
55
|
},
|
56
56
|
'Metadata' => {
|
57
57
|
'AWS::CloudFormation::Authentication' => {
|
58
|
-
authentication_item.
|
58
|
+
authentication_item.get_name => {
|
59
59
|
'accessKeyId' => 12,
|
60
60
|
'password' => 'ack',
|
61
61
|
'secretKey' => 'boom'
|
@@ -148,5 +148,3 @@ describe 'stupid metadata' do
|
|
148
148
|
end
|
149
149
|
|
150
150
|
end
|
151
|
-
|
152
|
-
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe CloudFormer::EFS::FileSystem do
|
4
|
+
it "should generate correct json" do
|
5
|
+
fs = CloudFormer::EFS::FileSystem.new('file_system') do
|
6
|
+
file_system_tags :list do
|
7
|
+
entry do
|
8
|
+
key 'Name'
|
9
|
+
value 'TestFileSystem'
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
expect(fs.dump_json).to eq({
|
15
|
+
"Type" => "AWS::EFS::FileSystem",
|
16
|
+
"Properties" => {
|
17
|
+
"FileSystemTags" => [
|
18
|
+
{
|
19
|
+
"Key" => "Name",
|
20
|
+
"Value" => "TestFileSystem",
|
21
|
+
},
|
22
|
+
]
|
23
|
+
}
|
24
|
+
})
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe CloudFormer::EFS::MountTarget do
|
4
|
+
it "should generate correct json" do
|
5
|
+
fs = CloudFormer::EFS::MountTarget.new('mount_target') do
|
6
|
+
file_system_id 'fs-123'
|
7
|
+
subnet_id 'subnet-123'
|
8
|
+
security_groups ['sg-123', 'sg-456']
|
9
|
+
end
|
10
|
+
|
11
|
+
expect(fs.dump_json).to eq({
|
12
|
+
"Type" => "AWS::EFS::MountTarget",
|
13
|
+
"Properties" => {
|
14
|
+
"FileSystemId"=> "fs-123",
|
15
|
+
"SubnetId" => "subnet-123",
|
16
|
+
"SecurityGroups" => ["sg-123", "sg-456"],
|
17
|
+
}
|
18
|
+
})
|
19
|
+
end
|
20
|
+
end
|
data/spec/template_spec.rb
CHANGED
@@ -37,7 +37,7 @@ describe CloudFormer::Template do
|
|
37
37
|
expect(template.dump_json).to eq(
|
38
38
|
'AWSTemplateFormatVersion' => '2010-09-09',
|
39
39
|
'Resources' => {
|
40
|
-
resource.
|
40
|
+
resource.get_name => {
|
41
41
|
'Type' => resource.aws_type,
|
42
42
|
'Properties' => {
|
43
43
|
'Status' => 'Active',
|
@@ -47,4 +47,22 @@ describe CloudFormer::Template do
|
|
47
47
|
},
|
48
48
|
)
|
49
49
|
end
|
50
|
+
|
51
|
+
it "can add resources inline" do
|
52
|
+
resource = template.add_resource 'ec2.instance', 'MyInstance' do
|
53
|
+
availability_zone 'us-east-1a'
|
54
|
+
end
|
55
|
+
expect(template.dump_json).to eq(
|
56
|
+
'AWSTemplateFormatVersion' => '2010-09-09',
|
57
|
+
'Resources' => {
|
58
|
+
'MyInstance' => {
|
59
|
+
'Type' => 'AWS::EC2::Instance',
|
60
|
+
'Properties' => {
|
61
|
+
'AvailabilityZone' => 'us-east-1a',
|
62
|
+
},
|
63
|
+
},
|
64
|
+
},
|
65
|
+
)
|
66
|
+
expect(resource).to be_a(CloudFormer::EC2::Instance)
|
67
|
+
end
|
50
68
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cloud_former
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.8.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Aubrey Holland
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-07-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -167,6 +167,7 @@ files:
|
|
167
167
|
- lib/cloud_former/resource_properties/ec2/private_ip_address_specification.rb
|
168
168
|
- lib/cloud_former/resource_properties/ec2/security_group_rule.rb
|
169
169
|
- lib/cloud_former/resource_properties/ec2/tag.rb
|
170
|
+
- lib/cloud_former/resource_properties/efs/file_system_tag.rb
|
170
171
|
- lib/cloud_former/resource_properties/elastic_beanstalk/environment_tier.rb
|
171
172
|
- lib/cloud_former/resource_properties/elastic_beanstalk/option_setting.rb
|
172
173
|
- lib/cloud_former/resource_properties/elastic_beanstalk/source_bundle.rb
|
@@ -249,6 +250,8 @@ files:
|
|
249
250
|
- lib/cloud_former/resources/ec2/vpn_connection_route.rb
|
250
251
|
- lib/cloud_former/resources/ec2/vpn_gateway.rb
|
251
252
|
- lib/cloud_former/resources/ec2/vpn_gateway_route_propagation.rb
|
253
|
+
- lib/cloud_former/resources/efs/file_system.rb
|
254
|
+
- lib/cloud_former/resources/efs/mount_target.rb
|
252
255
|
- lib/cloud_former/resources/elasti_cache/cache_cluster.rb
|
253
256
|
- lib/cloud_former/resources/elasti_cache/parameter_group.rb
|
254
257
|
- lib/cloud_former/resources/elasti_cache/security_group.rb
|
@@ -290,6 +293,7 @@ files:
|
|
290
293
|
- lib/cloud_former/resources/sqs/queue_policy.rb
|
291
294
|
- lib/cloud_former/template.rb
|
292
295
|
- lib/cloud_former/version.rb
|
296
|
+
- spec/cloud_former_spec.rb
|
293
297
|
- spec/conditions_spec.rb
|
294
298
|
- spec/has_properties_and_attributes_spec.rb
|
295
299
|
- spec/metadata_spec.rb
|
@@ -298,6 +302,8 @@ files:
|
|
298
302
|
- spec/resources/auto_scaling/auto_scaling_group_spec.rb
|
299
303
|
- spec/resources/auto_scaling/launch_configuration_spec.rb
|
300
304
|
- spec/resources/auto_scaling/notification_configuration_spec.rb
|
305
|
+
- spec/resources/efs/file_system_spec.rb
|
306
|
+
- spec/resources/efs/mount_target_spec.rb
|
301
307
|
- spec/resources/iam/access_key_spec.rb
|
302
308
|
- spec/resources/iam/user_spec.rb
|
303
309
|
- spec/resources/list_spec.rb
|
@@ -326,11 +332,12 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
326
332
|
version: '0'
|
327
333
|
requirements: []
|
328
334
|
rubyforge_project:
|
329
|
-
rubygems_version: 2.
|
335
|
+
rubygems_version: 2.6.6
|
330
336
|
signing_key:
|
331
337
|
specification_version: 4
|
332
338
|
summary: A Ruby DSL for creating CloudFormation templates
|
333
339
|
test_files:
|
340
|
+
- spec/cloud_former_spec.rb
|
334
341
|
- spec/conditions_spec.rb
|
335
342
|
- spec/has_properties_and_attributes_spec.rb
|
336
343
|
- spec/metadata_spec.rb
|
@@ -339,6 +346,8 @@ test_files:
|
|
339
346
|
- spec/resources/auto_scaling/auto_scaling_group_spec.rb
|
340
347
|
- spec/resources/auto_scaling/launch_configuration_spec.rb
|
341
348
|
- spec/resources/auto_scaling/notification_configuration_spec.rb
|
349
|
+
- spec/resources/efs/file_system_spec.rb
|
350
|
+
- spec/resources/efs/mount_target_spec.rb
|
342
351
|
- spec/resources/iam/access_key_spec.rb
|
343
352
|
- spec/resources/iam/user_spec.rb
|
344
353
|
- spec/resources/list_spec.rb
|