cfndsl 0.16.6 → 0.16.7

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 32406255a9011d3aed5a47d015a3b55e3d7f2f500cff17847aba34e29f02e03f
4
- data.tar.gz: f340711869f18db7f011c2a9e4dadf928ca32efa12ab977590d54f72d0db37a3
3
+ metadata.gz: d5288f90b75b1ba02860fc1b9a7a6feea6a90d1d18476dc4f9f6779ffea073d1
4
+ data.tar.gz: f4b821f8261b474bd85bbf9d248b83a4971e017932df31f54e0d99fbcea105c8
5
5
  SHA512:
6
- metadata.gz: 7186f763335491c5777d1194cddce0b96687cfd335cc6d50dcff13ee7491ee25b37713f968d8579c980688bbfa399d3c5b8cd783bef2164416c15214a0ccd029
7
- data.tar.gz: 8793e4e15dfad5a6d03ffaf7c43742ee9aedd24d649780366f197a5e9fa7c2f5b81a06cd30122155f8034b0d8011e1e8f7e96ef34d0e1e945945befa999228f1
6
+ metadata.gz: 9dce8cb78e563d0d8a514c7c4a5c9034c2b94f05a7abc0cdef51b83ab6dba0b5edfbf0af791d51283af69ab4820abb4f57c048f5ca2d1955edc0f8ea41b6c5b1
7
+ data.tar.gz: 1ca869af3522ddc2b719b1d6620bed102bfd691de702271bff9c3cb633dd353070f0e3929cd1249f02cc832ad03f2c2aaaab957b53ebb760475f5ecd41afcbfd
@@ -1,7 +1,19 @@
1
1
  # Change Log
2
2
 
3
- ## [0.16.6](https://github.com/cfndsl/cfndsl/tree/0.16.6) (2018-05-31)
4
- [Full Changelog](https://github.com/cfndsl/cfndsl/compare/v0.16.5...0.16.6)
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
@@ -39,6 +39,7 @@ optparse = OptionParser.new do |opts|
39
39
 
40
40
  opts.on('-f', '--format FORMAT', 'Specify the output format (JSON default)') do |format|
41
41
  raise "Format #{format} not supported" unless %w[json yaml].include?(format)
42
+
42
43
  options[:outformat] = format
43
44
  end
44
45
 
@@ -14,7 +14,7 @@ Gem::Specification.new do |s|
14
14
  s.license = 'MIT'
15
15
  s.test_files = s.files.grep(%r{^(test|spec|features)/})
16
16
  s.require_paths = ['lib']
17
- s.required_ruby_version = '~> 2.1'
17
+ s.required_ruby_version = '~> 2.2'
18
18
 
19
19
  s.executables << 'cfndsl'
20
20
 
@@ -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|
@@ -8,56 +8,56 @@ module CfnDsl
8
8
  {
9
9
  'AWS::Serverless::Function' => {
10
10
  'Properties' => {
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' },
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' => { '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' },
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' => { 'Type' => 'List', 'PrimitiveType' => 'String' },
44
- 'Cors' => { 'PrimitiveType' => 'String' }
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' => { 'PrimitiveType' => 'Json' },
52
- 'TableName' => { 'PrimitiveType' => 'String' }
51
+ 'Tags' => { 'PrimitiveType' => 'Json' },
52
+ 'TableName' => { 'PrimitiveType' => 'String' }
53
53
  }
54
54
  },
55
55
  'AWS::SSM::Parameter' => {
56
56
  'Properties' => {
57
- 'Name' => { 'PrimitiveType' => 'String' },
57
+ 'Name' => { 'PrimitiveType' => 'String' },
58
58
  'Description' => { 'PrimitiveType' => 'String' },
59
- 'Type' => { 'PrimitiveType' => 'String' },
60
- 'Value' => { 'PrimitiveType' => 'String' }
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' => { 'PrimitiveType' => 'String' }
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' => { 'PrimitiveType' => 'Integer' },
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' => { 'PrimitiveType' => 'String' }
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' => { 'PrimitiveType' => 'String' },
105
- 'Alarms' => { 'Type' => 'List', 'PrimitiveType' => 'String' },
106
- 'Hooks' => { 'Type' => 'List', 'PrimitiveType' => 'String' }
116
+ 'Type' => { 'PrimitiveType' => 'String' },
117
+ 'Alarms' => { 'Type' => 'List', 'PrimitiveType' => 'String' },
118
+ 'Hooks' => { 'Type' => 'List', 'PrimitiveType' => 'String' }
107
119
  }
108
120
  }
109
121
  }
@@ -5,15 +5,15 @@ module CfnDsl
5
5
 
6
6
  @plurals = {
7
7
  'AssumeRolePolicyDocument' => 'AssumeRolePolicyDocument',
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'
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
 
@@ -44,6 +44,7 @@ module CfnDsl
44
44
 
45
45
  def model(filename)
46
46
  raise "#{filename} doesn't exist" unless File.exist?(filename)
47
+
47
48
  verbose.puts("using extras #{extra}") if verbose
48
49
  CfnDsl.eval_file_with_extras(filename, extra, verbose)
49
50
  end
@@ -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' => 'String',
45
- 'Boolean' => 'Boolean',
46
- 'Json' => 'Json',
47
- 'Integer' => 'Integer',
48
- 'Number' => 'Number',
49
- 'Double' => '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' => '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
 
@@ -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])
@@ -1,3 +1,3 @@
1
1
  module CfnDsl
2
- VERSION = '0.16.6'.freeze
2
+ VERSION = '0.16.7'.freeze
3
3
  end
@@ -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
@@ -1,4 +1,3 @@
1
-
2
1
  # We start things off by calling the CloudFormation function.
3
2
  CloudFormation do
4
3
  # Declare the template format version
@@ -89,8 +89,8 @@ a stack from this template.
89
89
  AutoScalingGroup('WebServerGroup') do
90
90
  UpdatePolicy('AutoScalingRollingUpdate',
91
91
  'MinInstancesInService' => '1',
92
- 'MaxBatchSize' => '1',
93
- 'PauseTime' => 'PT15M')
92
+ 'MaxBatchSize' => '1',
93
+ 'PauseTime' => 'PT15M')
94
94
  AvailabilityZones FnGetAZs('')
95
95
  LaunchConfigurationName Ref('LaunchConfig')
96
96
  MinSize 1
@@ -3,10 +3,10 @@ CloudFormation do
3
3
  GroupDescription 'Allow incoming HTTP traffic from anywhere'
4
4
  SecurityGroupIngress [
5
5
  {
6
- 'CidrIp' => '0.0.0.0/0',
6
+ 'CidrIp' => '0.0.0.0/0',
7
7
  'IpProtocol' => 'tcp',
8
- 'FromPort' => 80,
9
- 'ToPort' => 80
8
+ 'FromPort' => 80,
9
+ 'ToPort' => 80
10
10
  }
11
11
  ]
12
12
  end
@@ -5,8 +5,8 @@ CloudFormation do
5
5
  {
6
6
  'SourceSecurityGroupId' => FnImportValue(:webSecurityGroupId),
7
7
  'IpProtocol' => 'tcp',
8
- 'FromPort' => 7777,
9
- 'ToPort' => 7777
8
+ 'FromPort' => 7777,
9
+ 'ToPort' => 7777
10
10
  }
11
11
  ]
12
12
  end
@@ -73,8 +73,8 @@ CloudFormation do
73
73
  AutoScalingGroup('ASG') do
74
74
  UpdatePolicy('AutoScalingRollingUpdate',
75
75
  'MinInstancesInService' => '1',
76
- 'MaxBatchSize' => '1',
77
- 'PauseTime' => 'PT15M')
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.6
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-05-31 00:00:00.000000000 Z
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.1'
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.7
154
+ rubygems_version: 2.7.8
155
155
  signing_key:
156
156
  specification_version: 4
157
157
  summary: AWS Cloudformation DSL