cfndsl 0.16.6 → 0.16.7
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/CHANGELOG.md +14 -7
- data/bin/cfndsl +1 -0
- data/cfndsl.gemspec +1 -1
- data/lib/cfndsl/jsonable.rb +4 -0
- data/lib/cfndsl/orchestration_template.rb +2 -0
- data/lib/cfndsl/patches.rb +51 -39
- data/lib/cfndsl/plurals.rb +9 -9
- data/lib/cfndsl/rake_task.rb +1 -0
- data/lib/cfndsl/specification.rb +9 -7
- data/lib/cfndsl/types.rb +1 -0
- data/lib/cfndsl/version.rb +1 -1
- data/lib/deep_merge/core.rb +2 -0
- data/sample/autoscale.rb +0 -1
- data/sample/autoscale2.rb +2 -2
- data/sample/export.rb +3 -3
- data/sample/import.rb +2 -2
- data/spec/fixtures/test.rb +2 -2
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d5288f90b75b1ba02860fc1b9a7a6feea6a90d1d18476dc4f9f6779ffea073d1
|
4
|
+
data.tar.gz: f4b821f8261b474bd85bbf9d248b83a4971e017932df31f54e0d99fbcea105c8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9dce8cb78e563d0d8a514c7c4a5c9034c2b94f05a7abc0cdef51b83ab6dba0b5edfbf0af791d51283af69ab4820abb4f57c048f5ca2d1955edc0f8ea41b6c5b1
|
7
|
+
data.tar.gz: 1ca869af3522ddc2b719b1d6620bed102bfd691de702271bff9c3cb633dd353070f0e3929cd1249f02cc832ad03f2c2aaaab957b53ebb760475f5ecd41afcbfd
|
data/CHANGELOG.md
CHANGED
@@ -1,7 +1,19 @@
|
|
1
1
|
# Change Log
|
2
2
|
|
3
|
-
## [0.16.
|
4
|
-
[Full Changelog](https://github.com/cfndsl/cfndsl/compare/v0.16.
|
3
|
+
## [0.16.7](https://github.com/cfndsl/cfndsl/tree/0.16.7) (2018-11-12)
|
4
|
+
[Full Changelog](https://github.com/cfndsl/cfndsl/compare/v0.16.6...0.16.7)
|
5
|
+
|
6
|
+
**Closed issues:**
|
7
|
+
|
8
|
+
- Cloudformation Specification version 2.12.0 has missing types [\#377](https://github.com/cfndsl/cfndsl/issues/377)
|
9
|
+
- Value of property CreditSpecification must be an object [\#376](https://github.com/cfndsl/cfndsl/issues/376)
|
10
|
+
|
11
|
+
**Merged pull requests:**
|
12
|
+
|
13
|
+
- add missing types fixes \#377 [\#378](https://github.com/cfndsl/cfndsl/pull/378) ([gergnz](https://github.com/gergnz))
|
14
|
+
|
15
|
+
## [v0.16.6](https://github.com/cfndsl/cfndsl/tree/v0.16.6) (2018-05-30)
|
16
|
+
[Full Changelog](https://github.com/cfndsl/cfndsl/compare/v0.16.5...v0.16.6)
|
5
17
|
|
6
18
|
**Fixed bugs:**
|
7
19
|
|
@@ -49,10 +61,6 @@
|
|
49
61
|
## [v0.16.1](https://github.com/cfndsl/cfndsl/tree/v0.16.1) (2017-12-02)
|
50
62
|
[Full Changelog](https://github.com/cfndsl/cfndsl/compare/v0.16.0...v0.16.1)
|
51
63
|
|
52
|
-
**Closed issues:**
|
53
|
-
|
54
|
-
- Metadata / AWS::CloudFormation::Interface support? [\#357](https://github.com/cfndsl/cfndsl/issues/357)
|
55
|
-
|
56
64
|
**Merged pull requests:**
|
57
65
|
|
58
66
|
- 352 update contacts repos [\#355](https://github.com/cfndsl/cfndsl/pull/355) ([gergnz](https://github.com/gergnz))
|
@@ -83,7 +91,6 @@
|
|
83
91
|
**Closed issues:**
|
84
92
|
|
85
93
|
- backtrace shown when incorrect resource name is passed to -g [\#338](https://github.com/cfndsl/cfndsl/issues/338)
|
86
|
-
- Condition and ALB ListenerRule Conditions get merged [\#337](https://github.com/cfndsl/cfndsl/issues/337)
|
87
94
|
- Request to include support for AWS::Logs::SubscriptionFilter [\#335](https://github.com/cfndsl/cfndsl/issues/335)
|
88
95
|
- Support for Lambda backed custom resources with shorthand [\#315](https://github.com/cfndsl/cfndsl/issues/315)
|
89
96
|
- Merging cfnlego, cfn2dsl into cfndsl [\#272](https://github.com/cfndsl/cfndsl/issues/272)
|
data/bin/cfndsl
CHANGED
data/cfndsl.gemspec
CHANGED
data/lib/cfndsl/jsonable.rb
CHANGED
@@ -44,6 +44,7 @@ module CfnDsl
|
|
44
44
|
# Equivalent to the CloudFormation template built in function Fn::And
|
45
45
|
def FnAnd(array)
|
46
46
|
raise 'The array passed to Fn::And must have at least 2 elements and no more than 10' if !array || array.count < 2 || array.count > 10
|
47
|
+
|
47
48
|
Fn.new('And', array)
|
48
49
|
end
|
49
50
|
|
@@ -69,6 +70,7 @@ module CfnDsl
|
|
69
70
|
# Equivalent to the CloudFormation template built in function Fn::Or
|
70
71
|
def FnOr(array)
|
71
72
|
raise 'The array passed to Fn::Or must have at least 2 elements and no more than 10' if !array || array.count < 2 || array.count > 10
|
73
|
+
|
72
74
|
Fn.new('Or', array)
|
73
75
|
end
|
74
76
|
|
@@ -80,8 +82,10 @@ module CfnDsl
|
|
80
82
|
# Equivalent to the CloudFormation template built in function Fn::Sub
|
81
83
|
def FnSub(string, substitutions = nil)
|
82
84
|
raise ArgumentError, 'The first argument passed to Fn::Sub must be a string' unless string.is_a? String
|
85
|
+
|
83
86
|
if substitutions
|
84
87
|
raise ArgumentError, 'The second argument passed to Fn::Sub must be a Hash' unless substitutions.is_a? Hash
|
88
|
+
|
85
89
|
Fn.new('Sub', [string, substitutions])
|
86
90
|
else
|
87
91
|
Fn.new('Sub', string)
|
@@ -29,6 +29,7 @@ module CfnDsl
|
|
29
29
|
parts = resource.split('::')
|
30
30
|
until parts.empty?
|
31
31
|
break if CfnDsl.reserved_items.include? parts.first
|
32
|
+
|
32
33
|
abreve_name = parts.join('_')
|
33
34
|
if accessors.key? abreve_name
|
34
35
|
accessors.delete abreve_name # Delete potentially ambiguous names
|
@@ -78,6 +79,7 @@ module CfnDsl
|
|
78
79
|
sname = CfnDsl::Plurals.singularize pname
|
79
80
|
|
80
81
|
return if sname == pname
|
82
|
+
|
81
83
|
resource.class_eval do
|
82
84
|
CfnDsl.method_names(sname) do |method|
|
83
85
|
define_method(method) do |value = nil, &block|
|
data/lib/cfndsl/patches.rb
CHANGED
@@ -8,56 +8,56 @@ module CfnDsl
|
|
8
8
|
{
|
9
9
|
'AWS::Serverless::Function' => {
|
10
10
|
'Properties' => {
|
11
|
-
'Handler'
|
12
|
-
'Runtime'
|
13
|
-
'CodeUri'
|
14
|
-
'FunctionName'
|
15
|
-
'Description'
|
16
|
-
'MemorySize'
|
17
|
-
'Timeout'
|
18
|
-
'Role'
|
19
|
-
'Policies'
|
20
|
-
'Environment'
|
21
|
-
'VpcConfig'
|
22
|
-
'Events'
|
23
|
-
'Tags'
|
24
|
-
'Tracing'
|
25
|
-
'KmsKeyArn'
|
26
|
-
'DeadLetterQueue'
|
27
|
-
'DeploymentPreference'
|
28
|
-
'AutoPublishAlias'
|
11
|
+
'Handler' => { 'PrimitiveType' => 'String' },
|
12
|
+
'Runtime' => { 'PrimitiveType' => 'String' },
|
13
|
+
'CodeUri' => { 'PrimitiveType' => 'String' },
|
14
|
+
'FunctionName' => { 'PrimitiveType' => 'String' },
|
15
|
+
'Description' => { 'PrimitiveType' => 'String' },
|
16
|
+
'MemorySize' => { 'PrimitiveType' => 'Integer' },
|
17
|
+
'Timeout' => { 'PrimitiveType' => 'Integer' },
|
18
|
+
'Role' => { 'PrimitiveType' => 'String' },
|
19
|
+
'Policies' => { 'Type' => 'List', 'ItemType' => 'Policy' },
|
20
|
+
'Environment' => { 'PrimitiveType' => 'Json' },
|
21
|
+
'VpcConfig' => { 'Type' => 'VpcConfig' },
|
22
|
+
'Events' => { 'PrimitiveType' => 'Json' },
|
23
|
+
'Tags' => { 'PrimitiveType' => 'Json' },
|
24
|
+
'Tracing' => { 'PrimitiveType' => 'String' },
|
25
|
+
'KmsKeyArn' => { 'PrimitiveType' => 'String' },
|
26
|
+
'DeadLetterQueue' => { 'PrimitiveType' => 'Json' },
|
27
|
+
'DeploymentPreference' => { 'Type' => 'DeploymentPreference' },
|
28
|
+
'AutoPublishAlias' => { 'PrimitiveType' => 'String' },
|
29
29
|
'ReservedConcurrentExecutions' => { 'PrimitiveType' => 'Integer' }
|
30
30
|
}
|
31
31
|
},
|
32
32
|
'AWS::Serverless::Api' => {
|
33
33
|
'Properties' => {
|
34
|
-
'Name'
|
35
|
-
'StageName'
|
36
|
-
'DefinitionUri'
|
37
|
-
'DefinitionBody'
|
38
|
-
'CacheClusterEnabled'
|
39
|
-
'CacheClusterSize'
|
40
|
-
'Variables'
|
41
|
-
'MethodSettings'
|
34
|
+
'Name' => { 'PrimitiveType' => 'String' },
|
35
|
+
'StageName' => { 'PrimitiveType' => 'String' },
|
36
|
+
'DefinitionUri' => { 'PrimitiveType' => 'String' },
|
37
|
+
'DefinitionBody' => { 'PrimitiveType' => 'Json' },
|
38
|
+
'CacheClusterEnabled' => { 'PrimitiveType' => 'Boolean' },
|
39
|
+
'CacheClusterSize' => { 'PrimitiveType' => 'String' },
|
40
|
+
'Variables' => { 'PrimitiveType' => 'Json' },
|
41
|
+
'MethodSettings' => { 'PrimitiveType' => 'Json' },
|
42
42
|
'EndpointConfiguration' => { 'PrimitiveType' => 'String' },
|
43
|
-
'BinaryMediaTypes'
|
44
|
-
'Cors'
|
43
|
+
'BinaryMediaTypes' => { 'Type' => 'List', 'PrimitiveType' => 'String' },
|
44
|
+
'Cors' => { 'PrimitiveType' => 'String' }
|
45
45
|
}
|
46
46
|
},
|
47
47
|
'AWS::Serverless::SimpleTable' => {
|
48
48
|
'Properties' => {
|
49
49
|
'PrimaryKey' => { 'Type' => 'PrimaryKey' },
|
50
50
|
'ProvisionedThroughput' => { 'Type' => 'ProvisionedThroughput' },
|
51
|
-
'Tags'
|
52
|
-
'TableName'
|
51
|
+
'Tags' => { 'PrimitiveType' => 'Json' },
|
52
|
+
'TableName' => { 'PrimitiveType' => 'String' }
|
53
53
|
}
|
54
54
|
},
|
55
55
|
'AWS::SSM::Parameter' => {
|
56
56
|
'Properties' => {
|
57
|
-
'Name'
|
57
|
+
'Name' => { 'PrimitiveType' => 'String' },
|
58
58
|
'Description' => { 'PrimitiveType' => 'String' },
|
59
|
-
'Type'
|
60
|
-
'Value'
|
59
|
+
'Type' => { 'PrimitiveType' => 'String' },
|
60
|
+
'Value' => { 'PrimitiveType' => 'String' }
|
61
61
|
}
|
62
62
|
}
|
63
63
|
}
|
@@ -71,7 +71,19 @@ module CfnDsl
|
|
71
71
|
'AWS::EC2::LaunchTemplate.Tag' => {
|
72
72
|
'Properties' => {
|
73
73
|
'Value' => { 'PrimitiveType' => 'String' },
|
74
|
-
'Key'
|
74
|
+
'Key' => { 'PrimitiveType' => 'String' }
|
75
|
+
}
|
76
|
+
},
|
77
|
+
'AWS::EC2::SpotFleet.Tag' => {
|
78
|
+
'Properties' => {
|
79
|
+
'Value' => { 'PrimitiveType' => 'String' },
|
80
|
+
'Key' => { 'PrimitiveType' => 'String' }
|
81
|
+
}
|
82
|
+
},
|
83
|
+
'AWS::DLM::LifecyclePolicy.Tag' => {
|
84
|
+
'Properties' => {
|
85
|
+
'Value' => { 'PrimitiveType' => 'String' },
|
86
|
+
'Key' => { 'PrimitiveType' => 'String' }
|
75
87
|
}
|
76
88
|
},
|
77
89
|
'AWS::Serverless::SimpleTable.PrimaryKey' => {
|
@@ -82,14 +94,14 @@ module CfnDsl
|
|
82
94
|
},
|
83
95
|
'AWS::Serverless::SimpleTable.ProvisionedThroughput' => {
|
84
96
|
'Properties' => {
|
85
|
-
'ReadCapacityUnits'
|
97
|
+
'ReadCapacityUnits' => { 'PrimitiveType' => 'Integer' },
|
86
98
|
'WriteCapacityUnits' => { 'PrimitiveType' => 'Integer' }
|
87
99
|
}
|
88
100
|
},
|
89
101
|
'AWS::Serverless::Function.Policy' => {
|
90
102
|
'Properties' => {
|
91
103
|
'PolicyDocument' => { 'PrimitiveType' => 'Json' },
|
92
|
-
'PolicyName'
|
104
|
+
'PolicyName' => { 'PrimitiveType' => 'String' }
|
93
105
|
}
|
94
106
|
},
|
95
107
|
'AWS::Serverless::Function.VpcConfig' => {
|
@@ -101,9 +113,9 @@ module CfnDsl
|
|
101
113
|
'AWS::Serverless::Function.DeploymentPreference' => {
|
102
114
|
'Properties' => {
|
103
115
|
'Enabled' => { 'PrimitiveType' => 'Boolean' },
|
104
|
-
'Type'
|
105
|
-
'Alarms'
|
106
|
-
'Hooks'
|
116
|
+
'Type' => { 'PrimitiveType' => 'String' },
|
117
|
+
'Alarms' => { 'Type' => 'List', 'PrimitiveType' => 'String' },
|
118
|
+
'Hooks' => { 'Type' => 'List', 'PrimitiveType' => 'String' }
|
107
119
|
}
|
108
120
|
}
|
109
121
|
}
|
data/lib/cfndsl/plurals.rb
CHANGED
@@ -5,15 +5,15 @@ module CfnDsl
|
|
5
5
|
|
6
6
|
@plurals = {
|
7
7
|
'AssumeRolePolicyDocument' => 'AssumeRolePolicyDocument',
|
8
|
-
'CreationPolicy'
|
9
|
-
'DBSecurityGroupIngress'
|
10
|
-
'Metadata'
|
11
|
-
'Policy'
|
12
|
-
'PolicyDocument'
|
13
|
-
'Property'
|
14
|
-
'SecurityGroupEgress'
|
15
|
-
'SecurityGroupIngress'
|
16
|
-
'UpdatePolicy'
|
8
|
+
'CreationPolicy' => 'CreationPolicy',
|
9
|
+
'DBSecurityGroupIngress' => 'DBSecurityGroupIngress',
|
10
|
+
'Metadata' => 'Metadata',
|
11
|
+
'Policy' => 'Policies',
|
12
|
+
'PolicyDocument' => 'PolicyDocument',
|
13
|
+
'Property' => 'Properties',
|
14
|
+
'SecurityGroupEgress' => 'SecurityGroupEgress',
|
15
|
+
'SecurityGroupIngress' => 'SecurityGroupIngress',
|
16
|
+
'UpdatePolicy' => 'UpdatePolicy'
|
17
17
|
}
|
18
18
|
@singles = @plurals.invert
|
19
19
|
|
data/lib/cfndsl/rake_task.rb
CHANGED
data/lib/cfndsl/specification.rb
CHANGED
@@ -41,14 +41,14 @@ module CfnDsl
|
|
41
41
|
# rubocop:disable Metrics/MethodLength, Metrics/AbcSize, Metrics/PerceivedComplexity
|
42
42
|
def self.extract_types(spec)
|
43
43
|
primitive_types = {
|
44
|
-
'String'
|
45
|
-
'Boolean'
|
46
|
-
'Json'
|
47
|
-
'Integer'
|
48
|
-
'Number'
|
49
|
-
'Double'
|
44
|
+
'String' => 'String',
|
45
|
+
'Boolean' => 'Boolean',
|
46
|
+
'Json' => 'Json',
|
47
|
+
'Integer' => 'Integer',
|
48
|
+
'Number' => 'Number',
|
49
|
+
'Double' => 'Double',
|
50
50
|
'Timestamp' => 'Timestamp',
|
51
|
-
'Long'
|
51
|
+
'Long' => 'Long'
|
52
52
|
}
|
53
53
|
spec.each_with_object(primitive_types) do |(property_name, property_info), types|
|
54
54
|
# In order to name things uniquely and allow for connections
|
@@ -58,6 +58,7 @@ module CfnDsl
|
|
58
58
|
root_resource_name = root_resource ? root_resource[1].gsub(/::/, '') : property_name
|
59
59
|
property_name = property_name.gsub(/::|\./, '')
|
60
60
|
next unless property_info['Properties']
|
61
|
+
|
61
62
|
properties = property_info['Properties'].each_with_object({}) do |(nested_prop_name, nested_prop_info), extracted|
|
62
63
|
if nested_prop_info['Type'] == 'Map' || nested_prop_info['Type'] == 'Json'
|
63
64
|
# The Map type and the incorrectly labelled Json type
|
@@ -84,6 +85,7 @@ module CfnDsl
|
|
84
85
|
|
85
86
|
def self.determine_spec_file
|
86
87
|
return CfnDsl.specification_file if File.exist? CfnDsl.specification_file
|
88
|
+
|
87
89
|
File.expand_path('aws/resource_specification.json', __dir__)
|
88
90
|
end
|
89
91
|
|
data/lib/cfndsl/types.rb
CHANGED
@@ -58,6 +58,7 @@ module CfnDsl
|
|
58
58
|
classes.each_pair do |typename, type|
|
59
59
|
typeval = types_list['Types'][typename]
|
60
60
|
next unless typeval.respond_to?(:each_pair)
|
61
|
+
|
61
62
|
typeval.each_pair do |attr_name, attr_type|
|
62
63
|
if attr_type.is_a?(Array)
|
63
64
|
klass = type_def.const_get(attr_type[0])
|
data/lib/cfndsl/version.rb
CHANGED
data/lib/deep_merge/core.rb
CHANGED
@@ -85,6 +85,7 @@ module DeepMerge
|
|
85
85
|
knockout_prefix = options[:knockout_prefix] || nil
|
86
86
|
raise InvalidParameter, 'knockout_prefix cannot be an empty string in deep_merge!' if knockout_prefix == ''
|
87
87
|
raise InvalidParameter, 'overwrite_unmergeable must be true if knockout_prefix is specified in deep_merge!' if knockout_prefix && !overwrite_unmergeable
|
88
|
+
|
88
89
|
# if present: we will split and join arrays on this char before merging
|
89
90
|
array_split_char = options[:unpack_arrays] || false
|
90
91
|
# request that we avoid merging arrays
|
@@ -103,6 +104,7 @@ module DeepMerge
|
|
103
104
|
di = options[:debug_indent] || ''
|
104
105
|
# do nothing if source is nil
|
105
106
|
return dest if !merge_nil_values && source.nil?
|
107
|
+
|
106
108
|
# if dest doesn't exist, then simply copy source to it
|
107
109
|
if !dest && overwrite_unmergeable
|
108
110
|
dest = source; return dest
|
data/sample/autoscale.rb
CHANGED
data/sample/autoscale2.rb
CHANGED
@@ -89,8 +89,8 @@ a stack from this template.
|
|
89
89
|
AutoScalingGroup('WebServerGroup') do
|
90
90
|
UpdatePolicy('AutoScalingRollingUpdate',
|
91
91
|
'MinInstancesInService' => '1',
|
92
|
-
'MaxBatchSize'
|
93
|
-
'PauseTime'
|
92
|
+
'MaxBatchSize' => '1',
|
93
|
+
'PauseTime' => 'PT15M')
|
94
94
|
AvailabilityZones FnGetAZs('')
|
95
95
|
LaunchConfigurationName Ref('LaunchConfig')
|
96
96
|
MinSize 1
|
data/sample/export.rb
CHANGED
@@ -3,10 +3,10 @@ CloudFormation do
|
|
3
3
|
GroupDescription 'Allow incoming HTTP traffic from anywhere'
|
4
4
|
SecurityGroupIngress [
|
5
5
|
{
|
6
|
-
'CidrIp'
|
6
|
+
'CidrIp' => '0.0.0.0/0',
|
7
7
|
'IpProtocol' => 'tcp',
|
8
|
-
'FromPort'
|
9
|
-
'ToPort'
|
8
|
+
'FromPort' => 80,
|
9
|
+
'ToPort' => 80
|
10
10
|
}
|
11
11
|
]
|
12
12
|
end
|
data/sample/import.rb
CHANGED
data/spec/fixtures/test.rb
CHANGED
@@ -73,8 +73,8 @@ CloudFormation do
|
|
73
73
|
AutoScalingGroup('ASG') do
|
74
74
|
UpdatePolicy('AutoScalingRollingUpdate',
|
75
75
|
'MinInstancesInService' => '1',
|
76
|
-
'MaxBatchSize'
|
77
|
-
'PauseTime'
|
76
|
+
'MaxBatchSize' => '1',
|
77
|
+
'PauseTime' => 'PT15M')
|
78
78
|
AvailabilityZones FnGetAZs('')
|
79
79
|
LaunchConfigurationName Ref('LaunchConfig')
|
80
80
|
MinSize 1
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cfndsl
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.16.
|
4
|
+
version: 0.16.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Steven Jack
|
@@ -11,7 +11,7 @@ authors:
|
|
11
11
|
autorequire:
|
12
12
|
bindir: bin
|
13
13
|
cert_chain: []
|
14
|
-
date: 2018-
|
14
|
+
date: 2018-11-11 00:00:00.000000000 Z
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: bundler
|
@@ -143,7 +143,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
143
143
|
requirements:
|
144
144
|
- - "~>"
|
145
145
|
- !ruby/object:Gem::Version
|
146
|
-
version: '2.
|
146
|
+
version: '2.2'
|
147
147
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
148
148
|
requirements:
|
149
149
|
- - ">="
|
@@ -151,7 +151,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
151
151
|
version: '0'
|
152
152
|
requirements: []
|
153
153
|
rubyforge_project:
|
154
|
-
rubygems_version: 2.7.
|
154
|
+
rubygems_version: 2.7.8
|
155
155
|
signing_key:
|
156
156
|
specification_version: 4
|
157
157
|
summary: AWS Cloudformation DSL
|