cfndsl 1.0.0.pre.1 → 1.0.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.
@@ -0,0 +1,86 @@
1
+ {
2
+ "ResourceTypes": {
3
+ "AWS::Lambda::Permission": {
4
+ "patch": {
5
+ "description": "Permission scrutiny",
6
+ "operations": [
7
+ {
8
+ "op": "add",
9
+ "path": "/ScrutinyType",
10
+ "value": "LambdaPermission"
11
+ }
12
+ ]
13
+ }
14
+ },
15
+ "AWS::SNS::Subscription": {
16
+ "patch": {
17
+ "description": "SNS: These are not IAM policies",
18
+ "operations": [
19
+ {
20
+ "op": "add",
21
+ "path": "/Properties/DeliveryPolicy/ScrutinyType",
22
+ "value": "None"
23
+ },
24
+ {
25
+ "op": "add",
26
+ "path": "/Properties/FilterPolicy/ScrutinyType",
27
+ "value": "None"
28
+ }
29
+ ]
30
+ }
31
+ },
32
+ "AWS::SQS::Queue": {
33
+ "patch": {
34
+ "description": "SQS: Not an IAM policy",
35
+ "operations": [
36
+ {
37
+ "op": "add",
38
+ "path": "/Properties/RedrivePolicy/ScrutinyType",
39
+ "value": "None"
40
+ }
41
+ ]
42
+ }
43
+ },
44
+ "AWS::EC2::SecurityGroup": {
45
+ "patch": {
46
+ "description": "SecurityGroup: Mark ingress/egress rules",
47
+ "operations": [
48
+ {
49
+ "op": "add",
50
+ "path": "/Properties/SecurityGroupIngress/ScrutinyType",
51
+ "value": "IngressRules"
52
+ },
53
+ {
54
+ "op": "add",
55
+ "path": "/Properties/SecurityGroupEgress/ScrutinyType",
56
+ "value": "EgressRules"
57
+ }
58
+ ]
59
+ }
60
+ },
61
+ "AWS::EC2::SecurityGroupIngress": {
62
+ "patch": {
63
+ "description": "SecurityGroupIngress: Mark ingress rules",
64
+ "operations": [
65
+ {
66
+ "op": "add",
67
+ "path": "/ScrutinyType",
68
+ "value": "IngressRuleResource"
69
+ }
70
+ ]
71
+ }
72
+ },
73
+ "AWS::EC2::SecurityGroupEgress": {
74
+ "patch": {
75
+ "description": "SecurityGroupEgress: Mark egress rules",
76
+ "operations": [
77
+ {
78
+ "op": "add",
79
+ "path": "/ScrutinyType",
80
+ "value": "EgressRuleResource"
81
+ }
82
+ ]
83
+ }
84
+ }
85
+ }
86
+ }
@@ -0,0 +1,16 @@
1
+ {
2
+ "ResourceTypes": {
3
+ "AWS::EC2::NetworkAclEntry": {
4
+ "patch": {
5
+ "description": "https://github.com/aws/aws-cdk/issues/1517",
6
+ "operations": [
7
+ {
8
+ "op": "add",
9
+ "path": "/Properties/CidrBlock/Required",
10
+ "value": false
11
+ }
12
+ ]
13
+ }
14
+ }
15
+ }
16
+ }
@@ -0,0 +1,16 @@
1
+ {
2
+ "ResourceTypes": {
3
+ "AWS::ServiceDiscovery::Instance": {
4
+ "patch": {
5
+ "description": "Treat Map primitive type as Json",
6
+ "operations": [
7
+ {
8
+ "op": "replace",
9
+ "path": "/Properties/InstanceAttributes/PrimitiveType",
10
+ "value": "Json"
11
+ }
12
+ ]
13
+ }
14
+ }
15
+ }
16
+ }
@@ -42,7 +42,14 @@ module CfnDsl
42
42
  logstream.puts("Loading #{klass_name} file #{file}") if logstream
43
43
  params.load_file file
44
44
  when :raw
45
- params.set_param(*file.split('='))
45
+ file_parts = file.split('=')
46
+ if file_parts[1].downcase == 'true'
47
+ params.set_param(file_parts[0], true)
48
+ elsif file_parts[1].downcase == 'false'
49
+ params.set_param(file_parts[0], false)
50
+ else
51
+ params.set_param(*file.split('='))
52
+ end
46
53
  end
47
54
  end
48
55
 
@@ -133,6 +133,7 @@ module CfnDsl
133
133
  # Instance variables that begin with two underscores have one of
134
134
  # them removed.
135
135
  def as_json(_options = {})
136
+ check_names
136
137
  hash = {}
137
138
  instance_variables.each do |var|
138
139
  name = var[1..-1]
@@ -162,6 +163,19 @@ module CfnDsl
162
163
  instance_eval(&block) if block_given?
163
164
  self
164
165
  end
166
+
167
+ private
168
+
169
+ def check_names
170
+ return if instance_variable_get('@Resources').nil?
171
+
172
+ instance_variable_get('@Resources').keys.each do |name|
173
+ next unless name !~ /\A\p{Alnum}+\z/
174
+
175
+ warn "Resource name: #{name} is invalid"
176
+ exit 1
177
+ end
178
+ end
165
179
  end
166
180
 
167
181
  # Handles all of the Fn:: objects
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module CfnDsl
4
- VERSION = '1.0.0.pre.1'
4
+ VERSION = '1.0.0'
5
5
  end
@@ -5,7 +5,7 @@ CloudFormation do
5
5
 
6
6
  Description 'Creates SNS, SQS, S3 bucket and enables AWS Config.'
7
7
 
8
- Queue('ConfigServiceQueue') do
8
+ SQS_Queue('ConfigServiceQueue') do
9
9
  QueueName 'ConfigServiceQueue'
10
10
  end
11
11
 
@@ -135,6 +135,20 @@ Specification ([0-9]+\.){2}[0-9]+ successfully written to #{ENV['HOME']}/.cfndsl
135
135
  end
136
136
  end
137
137
 
138
+ context 'cfndsl FILE --define VARIABLE=true' do
139
+ it 'interpolates the command line variable with value true in the CloudFormation template ' do
140
+ run_command 'cfndsl template.rb --define "DESC=true"'
141
+ expect(last_command_started).to have_output_on_stdout('{"AWSTemplateFormatVersion":"2010-09-09","Description":true}')
142
+ end
143
+ end
144
+
145
+ context 'cfndsl FILE --define VARIABLE=false' do
146
+ it 'interpolates the command line variable with value false in the CloudFormation template ' do
147
+ run_command 'cfndsl template.rb --define "DESC=false"'
148
+ expect(last_command_started).to have_output_on_stdout('{"AWSTemplateFormatVersion":"2010-09-09","Description":"default"}')
149
+ end
150
+ end
151
+
138
152
  context 'cfndsl FILE --verbose' do
139
153
  before { write_file('params.yaml', 'DESC: yaml') }
140
154
 
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+
5
+ describe 'cfndsl', type: :aruba do
6
+ let(:template_content) do
7
+ <<-TEMPLATE.gsub(/^ {6}/, '')
8
+ CloudFormation do
9
+ EC2_Instance(:my_instance) do
10
+ end
11
+ end
12
+ TEMPLATE
13
+ end
14
+ before(:each) { write_file('template.rb', template_content) }
15
+ context 'cfndsl FILE' do
16
+ it 'errors because the name is invalid' do
17
+ run_command 'cfndsl template.rb'
18
+ expect(last_command_started).to have_output_on_stderr('Resource name: my_instance is invalid')
19
+ end
20
+ end
21
+ end
@@ -15,4 +15,4 @@ require 'cfndsl/globals'
15
15
  # use local fixture for tests
16
16
  CfnDsl.specification_file CfnDsl::LOCAL_SPEC_FILE
17
17
  require 'cfndsl'
18
- Dir[File.expand_path('support/**/*.rb', __dir__)].each { |f| require f }
18
+ Dir[File.expand_path('support/**/*.rb', __dir__)].sort.each { |f| require f }
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: 1.0.0.pre.1
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Steven Jack
@@ -11,7 +11,7 @@ authors:
11
11
  autorequire:
12
12
  bindir: exe
13
13
  cert_chain: []
14
- date: 2019-10-27 00:00:00.000000000 Z
14
+ date: 2020-01-16 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: bundler
@@ -19,14 +19,14 @@ dependencies:
19
19
  requirements:
20
20
  - - "~>"
21
21
  - !ruby/object:Gem::Version
22
- version: '2.0'
22
+ version: '2.1'
23
23
  type: :development
24
24
  prerelease: false
25
25
  version_requirements: !ruby/object:Gem::Requirement
26
26
  requirements:
27
27
  - - "~>"
28
28
  - !ruby/object:Gem::Version
29
- version: '2.0'
29
+ version: '2.1'
30
30
  - !ruby/object:Gem::Dependency
31
31
  name: hana
32
32
  requirement: !ruby/object:Gem::Requirement
@@ -66,15 +66,19 @@ files:
66
66
  - exe/cfndsl
67
67
  - lib/cfndsl.rb
68
68
  - lib/cfndsl/aws/cloud_formation_template.rb
69
+ - lib/cfndsl/aws/patches/000_CloudFormationResourceSpecification.json
69
70
  - lib/cfndsl/aws/patches/000_sam.spec.json
70
71
  - lib/cfndsl/aws/patches/100_sam.spec_DeploymentPreference_patch.json
72
+ - lib/cfndsl/aws/patches/200_Scrutinies_patch.json
71
73
  - lib/cfndsl/aws/patches/500_Cognito_IdentityPoolRoleAttachment_patches.json
72
74
  - lib/cfndsl/aws/patches/500_IoT1Click_patch_PlacementTemplate_DeviceTemplates.json
75
+ - lib/cfndsl/aws/patches/500_NetworkAclEntry_patch.json
73
76
  - lib/cfndsl/aws/patches/500_SAM_Serverless_Function_S3Event_Events_patch.json
74
77
  - lib/cfndsl/aws/patches/500_SAM_Serverless_Function_S3Location_Version_patch.json
75
78
  - lib/cfndsl/aws/patches/500_SSM_AssociationName_patch.json
76
79
  - lib/cfndsl/aws/patches/500_VPCEndpoint_patch.json
77
80
  - lib/cfndsl/aws/patches/510_ElasticSearch_Domain_patches.json
81
+ - lib/cfndsl/aws/patches/520_ServiceDiscovery_InstanceAttributes_patch.json
78
82
  - lib/cfndsl/aws/patches/600_RefKinds_patch.json
79
83
  - lib/cfndsl/aws/patches/700_SAM_Serverless_Function_InlineCode_patch.json
80
84
  - lib/cfndsl/aws/patches/800_List_types_patch.json
@@ -159,6 +163,7 @@ files:
159
163
  - spec/names_spec.rb
160
164
  - spec/output_spec.rb
161
165
  - spec/plurals_spec.rb
166
+ - spec/resource_name_spec.rb
162
167
  - spec/resources_spec.rb
163
168
  - spec/rule_spec.rb
164
169
  - spec/spec_helper.rb
@@ -180,9 +185,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
180
185
  version: '2.3'
181
186
  required_rubygems_version: !ruby/object:Gem::Requirement
182
187
  requirements:
183
- - - ">"
188
+ - - ">="
184
189
  - !ruby/object:Gem::Version
185
- version: 1.3.1
190
+ version: '0'
186
191
  requirements: []
187
192
  rubyforge_project:
188
193
  rubygems_version: 2.7.7
@@ -221,6 +226,7 @@ test_files:
221
226
  - spec/names_spec.rb
222
227
  - spec/output_spec.rb
223
228
  - spec/plurals_spec.rb
229
+ - spec/resource_name_spec.rb
224
230
  - spec/resources_spec.rb
225
231
  - spec/rule_spec.rb
226
232
  - spec/spec_helper.rb