cloudformation-ruby-dsl 1.2.4 → 1.2.5
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/PULL_REQUEST_TEMPLATE.md +30 -0
- data/lib/cloudformation-ruby-dsl/cfntemplate.rb +15 -27
- data/lib/cloudformation-ruby-dsl/dsl.rb +11 -91
- data/lib/cloudformation-ruby-dsl/version.rb +1 -1
- metadata +25 -24
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0c0ff566160bc6cd49546a86129814e4f7456149
|
4
|
+
data.tar.gz: f2b3e70794460d1214c1c336762f2d4e238b3247
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 87f36d247b8db1ec5fcbe951f35a84a71d127883185788fc29676d0be65bac0e5f05648ad81f9d4c0f602a0b52b00d52c4c4b958c837f0b0069b1ac42eff1c9b
|
7
|
+
data.tar.gz: 63de25f85683010039ec5215b41fd05a2e0924b6b69582d691a512c152aff19e98f1f6bbe8950d4580fc68c0eafafc29c03e170c4ccca1d5b76a644a12a17cea
|
@@ -0,0 +1,30 @@
|
|
1
|
+
## Description
|
2
|
+
Describe the objective of this PR.
|
3
|
+
|
4
|
+
## Steps to Test or Reproduce
|
5
|
+
Outline the steps to test or reproduce the PR here.
|
6
|
+
```
|
7
|
+
Code that reproduces the behaviour of the PR/to be fixed by the PR
|
8
|
+
```
|
9
|
+
### Environment
|
10
|
+
Describe the environment the bug or feature can be observed in. This may include platform, ruby version, DSL info, etc.
|
11
|
+
|
12
|
+
## Deploy Notes
|
13
|
+
If the change affects the way in which the gem is released, or requires a bump in version, note this here.
|
14
|
+
|
15
|
+
## Related Issues and PRs
|
16
|
+
|
17
|
+
### Issues
|
18
|
+
- [issue_link]()
|
19
|
+
|
20
|
+
### PRs
|
21
|
+
- [pr1]()
|
22
|
+
- [pr2]()
|
23
|
+
|
24
|
+
## Todos
|
25
|
+
- [x] Pull Request
|
26
|
+
- [ ] Tests
|
27
|
+
- [ ] Documentation
|
28
|
+
|
29
|
+
## Request to Review
|
30
|
+
@jonaf/@temujin9
|
@@ -78,32 +78,26 @@ end
|
|
78
78
|
|
79
79
|
# Parse command-line arguments and return the parameters and region
|
80
80
|
def parse_args
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
:profile => nil,
|
87
|
-
:nopretty => false,
|
88
|
-
}
|
81
|
+
stack_name = nil
|
82
|
+
parameters = {}
|
83
|
+
region = default_region
|
84
|
+
profile = nil
|
85
|
+
nopretty = false
|
89
86
|
ARGV.slice_before(/^--/).each do |name, value|
|
90
87
|
case name
|
91
88
|
when '--stack-name'
|
92
|
-
|
89
|
+
stack_name = value
|
93
90
|
when '--parameters'
|
94
|
-
|
95
|
-
when '--interactive'
|
96
|
-
args[:interactive] = true
|
91
|
+
parameters = Hash[value.split(/;/).map { |pair| pair.split(/=/, 2) }] #/# fix for syntax highlighting
|
97
92
|
when '--region'
|
98
|
-
|
93
|
+
region = value
|
99
94
|
when '--profile'
|
100
|
-
|
95
|
+
profile = value
|
101
96
|
when '--nopretty'
|
102
|
-
|
97
|
+
nopretty = true
|
103
98
|
end
|
104
99
|
end
|
105
|
-
|
106
|
-
args
|
100
|
+
[stack_name, parameters, region, profile, nopretty]
|
107
101
|
end
|
108
102
|
|
109
103
|
def validate_action(action)
|
@@ -300,16 +294,13 @@ def cfn(template)
|
|
300
294
|
template_body: template_string,
|
301
295
|
parameters: template.parameters.map { |k,v| {parameter_key: k, parameter_value: v}}.to_a,
|
302
296
|
tags: cfn_tags.map { |k,v| {"key" => k.to_s, "value" => v} }.to_a,
|
303
|
-
capabilities: ["
|
297
|
+
capabilities: ["CAPABILITY_IAM"],
|
304
298
|
}
|
305
299
|
|
306
300
|
# fill in options from the command line
|
307
301
|
extra_options = parse_arg_array_as_hash(options)
|
308
302
|
create_stack_opts = extra_options.merge(create_stack_opts)
|
309
303
|
|
310
|
-
# remove custom options
|
311
|
-
create_stack_opts.delete(:interactive)
|
312
|
-
|
313
304
|
# create stack
|
314
305
|
create_result = cfn_client.create_stack(create_stack_opts)
|
315
306
|
if create_result.successful?
|
@@ -495,16 +486,13 @@ def cfn(template)
|
|
495
486
|
template_body: template_string,
|
496
487
|
parameters: template.parameters.map { |k,v| {parameter_key: k, parameter_value: v}}.to_a,
|
497
488
|
tags: cfn_tags.map { |k,v| {"key" => k.to_s, "value" => v.to_s} }.to_a,
|
498
|
-
capabilities: ["
|
489
|
+
capabilities: ["CAPABILITY_IAM"],
|
499
490
|
}
|
500
491
|
|
501
492
|
# fill in options from the command line
|
502
493
|
extra_options = parse_arg_array_as_hash(options)
|
503
494
|
update_stack_opts = extra_options.merge(update_stack_opts)
|
504
495
|
|
505
|
-
# remove custom options
|
506
|
-
update_stack_opts.delete(:interactive)
|
507
|
-
|
508
496
|
# update the stack
|
509
497
|
update_result = cfn_client.update_stack(update_stack_opts)
|
510
498
|
if update_result.successful?
|
@@ -579,6 +567,6 @@ end
|
|
579
567
|
|
580
568
|
# Main entry point
|
581
569
|
def template(&block)
|
582
|
-
|
583
|
-
raw_template(
|
570
|
+
stack_name, parameters, aws_region, aws_profile, nopretty = parse_args
|
571
|
+
raw_template(parameters, stack_name, aws_region, aws_profile, nopretty, &block)
|
584
572
|
end
|
@@ -44,8 +44,8 @@ end
|
|
44
44
|
############################# CloudFormation DSL
|
45
45
|
|
46
46
|
# Main entry point
|
47
|
-
def raw_template(
|
48
|
-
TemplateDSL.new(
|
47
|
+
def raw_template(parameters = {}, stack_name = nil, aws_region = default_region, aws_profile = nil, nopretty = false, &block)
|
48
|
+
TemplateDSL.new(parameters, stack_name, aws_region, aws_profile, nopretty, &block)
|
49
49
|
end
|
50
50
|
|
51
51
|
def default_region
|
@@ -54,20 +54,14 @@ end
|
|
54
54
|
|
55
55
|
# Core interpreter for the DSL
|
56
56
|
class TemplateDSL < JsonObjectDSL
|
57
|
-
attr_reader :parameters,
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
@parameters = options[:parameters]
|
66
|
-
@interactive = options[:interactive]
|
67
|
-
@stack_name = options[:stack_name]
|
68
|
-
@aws_region = options[:region]
|
69
|
-
@aws_profile = options[:profile]
|
70
|
-
@nopretty = options[:nopretty]
|
57
|
+
attr_reader :parameters, :aws_region, :nopretty, :stack_name, :aws_profile
|
58
|
+
|
59
|
+
def initialize(parameters = {}, stack_name = nil, aws_region = default_region, aws_profile = nil, nopretty = false)
|
60
|
+
@parameters = parameters
|
61
|
+
@stack_name = stack_name
|
62
|
+
@aws_region = aws_region
|
63
|
+
@aws_profile = aws_profile
|
64
|
+
@nopretty = nopretty
|
71
65
|
super()
|
72
66
|
end
|
73
67
|
|
@@ -77,12 +71,7 @@ class TemplateDSL < JsonObjectDSL
|
|
77
71
|
|
78
72
|
def parameter(name, options)
|
79
73
|
default(:Parameters, {})[name] = options
|
80
|
-
|
81
|
-
if @interactive
|
82
|
-
@parameters[name] ||= _get_parameter_from_cli(name, options)
|
83
|
-
else
|
84
|
-
@parameters[name] ||= options[:Default]
|
85
|
-
end
|
74
|
+
@parameters[name] ||= options[:Default]
|
86
75
|
end
|
87
76
|
|
88
77
|
# Find parameters where the specified attribute is true then remove the attribute from the cfn template.
|
@@ -173,73 +162,6 @@ class TemplateDSL < JsonObjectDSL
|
|
173
162
|
{ :'Fn::FindInMap' => [ map, key, name ] }
|
174
163
|
end
|
175
164
|
end
|
176
|
-
|
177
|
-
private
|
178
|
-
def _get_parameter_from_cli(name, options)
|
179
|
-
# basic request
|
180
|
-
param_request = "Parameter '#{name}' (#{options[:Type]})"
|
181
|
-
|
182
|
-
# add description to request
|
183
|
-
if options.has_key?(:Description)
|
184
|
-
param_request += "\nDescription: #{options[:Description]}"
|
185
|
-
end
|
186
|
-
|
187
|
-
# add validation to the request
|
188
|
-
|
189
|
-
# allowed pattern
|
190
|
-
if options.has_key?(:AllowedPattern)
|
191
|
-
param_request += "\nAllowed Pattern: /#{options[:AllowedPattern]}/"
|
192
|
-
end
|
193
|
-
|
194
|
-
# allowed values
|
195
|
-
if options.has_key?(:AllowedValues)
|
196
|
-
param_request += "\nAllowed Values: #{options[:AllowedValues].join(', ')}"
|
197
|
-
end
|
198
|
-
|
199
|
-
# min/max length
|
200
|
-
if options.has_key?(:MinLength) or options.has_key?(:MaxLength)
|
201
|
-
min_length = "-infinity"
|
202
|
-
max_length = "+infinity"
|
203
|
-
if options.has_key?(:MinLength)
|
204
|
-
min_length = options[:MinLength]
|
205
|
-
end
|
206
|
-
if options.has_key?(:MaxLength)
|
207
|
-
max_length = options[:MaxLength]
|
208
|
-
end
|
209
|
-
param_request += "\nValid Length: #{min_length} < string < #{max_length}"
|
210
|
-
end
|
211
|
-
|
212
|
-
# min/max value
|
213
|
-
if options.has_key?(:MinValue) or options.has_key?(:MaxValue)
|
214
|
-
min_value = "-infinity"
|
215
|
-
max_value = "+infinity"
|
216
|
-
if options.has_key?(:MinValue)
|
217
|
-
min_value = options[:MinValue]
|
218
|
-
end
|
219
|
-
if options.has_key?(:MaxValue)
|
220
|
-
max_value = options[:MaxValue]
|
221
|
-
end
|
222
|
-
param_request += "\nValid Number: #{min_value} < number < #{max_value}"
|
223
|
-
end
|
224
|
-
|
225
|
-
# add default to request
|
226
|
-
if options.has_key?(:Default) and !options[:Default].nil?
|
227
|
-
param_request += "\nLeave value empty for default: #{options[:Default]}"
|
228
|
-
end
|
229
|
-
|
230
|
-
param_request += "\nValue: "
|
231
|
-
|
232
|
-
# request the param
|
233
|
-
$stdout.puts "===================="
|
234
|
-
$stdout.print param_request
|
235
|
-
input = $stdin.gets.chomp
|
236
|
-
|
237
|
-
if input.nil? or input.empty?
|
238
|
-
options[:Default]
|
239
|
-
else
|
240
|
-
input
|
241
|
-
end
|
242
|
-
end
|
243
165
|
end
|
244
166
|
|
245
167
|
def base64(value) { :'Fn::Base64' => value } end
|
@@ -250,8 +172,6 @@ def get_att(resource, attribute) { :'Fn::GetAtt' => [ resource, attribute ] } en
|
|
250
172
|
|
251
173
|
def get_azs(region = '') { :'Fn::GetAZs' => region } end
|
252
174
|
|
253
|
-
def import_value(value) { :'Fn::ImportValue' => value } end
|
254
|
-
|
255
175
|
def join(delim, *list)
|
256
176
|
case list.length
|
257
177
|
when 0 then ''
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cloudformation-ruby-dsl
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.2.
|
4
|
+
version: 1.2.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Shawn Smith
|
@@ -15,132 +15,132 @@ authors:
|
|
15
15
|
autorequire:
|
16
16
|
bindir: bin
|
17
17
|
cert_chain: []
|
18
|
-
date: 2016-10-
|
18
|
+
date: 2016-10-18 00:00:00.000000000 Z
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
21
21
|
name: detabulator
|
22
22
|
requirement: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- -
|
24
|
+
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '0'
|
27
27
|
type: :runtime
|
28
28
|
prerelease: false
|
29
29
|
version_requirements: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- -
|
31
|
+
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '0'
|
34
34
|
- !ruby/object:Gem::Dependency
|
35
35
|
name: json
|
36
36
|
requirement: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- -
|
38
|
+
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
41
|
type: :runtime
|
42
42
|
prerelease: false
|
43
43
|
version_requirements: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- -
|
45
|
+
- - ">="
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: '0'
|
48
48
|
- !ruby/object:Gem::Dependency
|
49
49
|
name: bundler
|
50
50
|
requirement: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- -
|
52
|
+
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0'
|
55
55
|
type: :runtime
|
56
56
|
prerelease: false
|
57
57
|
version_requirements: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- -
|
59
|
+
- - ">="
|
60
60
|
- !ruby/object:Gem::Version
|
61
61
|
version: '0'
|
62
62
|
- !ruby/object:Gem::Dependency
|
63
63
|
name: aws-sdk
|
64
64
|
requirement: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- -
|
66
|
+
- - ">="
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: 2.5.1
|
69
69
|
type: :runtime
|
70
70
|
prerelease: false
|
71
71
|
version_requirements: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
|
-
- -
|
73
|
+
- - ">="
|
74
74
|
- !ruby/object:Gem::Version
|
75
75
|
version: 2.5.1
|
76
76
|
- !ruby/object:Gem::Dependency
|
77
77
|
name: diffy
|
78
78
|
requirement: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
|
-
- -
|
80
|
+
- - ">="
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '0'
|
83
83
|
type: :runtime
|
84
84
|
prerelease: false
|
85
85
|
version_requirements: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
|
-
- -
|
87
|
+
- - ">="
|
88
88
|
- !ruby/object:Gem::Version
|
89
89
|
version: '0'
|
90
90
|
- !ruby/object:Gem::Dependency
|
91
91
|
name: highline
|
92
92
|
requirement: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
|
-
- -
|
94
|
+
- - ">="
|
95
95
|
- !ruby/object:Gem::Version
|
96
96
|
version: '0'
|
97
97
|
type: :runtime
|
98
98
|
prerelease: false
|
99
99
|
version_requirements: !ruby/object:Gem::Requirement
|
100
100
|
requirements:
|
101
|
-
- -
|
101
|
+
- - ">="
|
102
102
|
- !ruby/object:Gem::Version
|
103
103
|
version: '0'
|
104
104
|
- !ruby/object:Gem::Dependency
|
105
105
|
name: rake
|
106
106
|
requirement: !ruby/object:Gem::Requirement
|
107
107
|
requirements:
|
108
|
-
- -
|
108
|
+
- - ">="
|
109
109
|
- !ruby/object:Gem::Version
|
110
110
|
version: '0'
|
111
111
|
type: :runtime
|
112
112
|
prerelease: false
|
113
113
|
version_requirements: !ruby/object:Gem::Requirement
|
114
114
|
requirements:
|
115
|
-
- -
|
115
|
+
- - ">="
|
116
116
|
- !ruby/object:Gem::Version
|
117
117
|
version: '0'
|
118
118
|
- !ruby/object:Gem::Dependency
|
119
119
|
name: rspec
|
120
120
|
requirement: !ruby/object:Gem::Requirement
|
121
121
|
requirements:
|
122
|
-
- -
|
122
|
+
- - ">="
|
123
123
|
- !ruby/object:Gem::Version
|
124
124
|
version: '0'
|
125
125
|
type: :development
|
126
126
|
prerelease: false
|
127
127
|
version_requirements: !ruby/object:Gem::Requirement
|
128
128
|
requirements:
|
129
|
-
- -
|
129
|
+
- - ">="
|
130
130
|
- !ruby/object:Gem::Version
|
131
131
|
version: '0'
|
132
132
|
- !ruby/object:Gem::Dependency
|
133
133
|
name: pry
|
134
134
|
requirement: !ruby/object:Gem::Requirement
|
135
135
|
requirements:
|
136
|
-
- -
|
136
|
+
- - ">="
|
137
137
|
- !ruby/object:Gem::Version
|
138
138
|
version: '0'
|
139
139
|
type: :development
|
140
140
|
prerelease: false
|
141
141
|
version_requirements: !ruby/object:Gem::Requirement
|
142
142
|
requirements:
|
143
|
-
- -
|
143
|
+
- - ">="
|
144
144
|
- !ruby/object:Gem::Version
|
145
145
|
version: '0'
|
146
146
|
description: Ruby DSL library that provides a wrapper around the CloudFormation.
|
@@ -158,10 +158,11 @@ executables:
|
|
158
158
|
extensions: []
|
159
159
|
extra_rdoc_files: []
|
160
160
|
files:
|
161
|
-
- .gitignore
|
161
|
+
- ".gitignore"
|
162
162
|
- Gemfile
|
163
163
|
- LICENSE
|
164
164
|
- OWNERS
|
165
|
+
- PULL_REQUEST_TEMPLATE.md
|
165
166
|
- README.md
|
166
167
|
- Rakefile
|
167
168
|
- bin/cfntemplate-to-ruby
|
@@ -199,17 +200,17 @@ require_paths:
|
|
199
200
|
- bin
|
200
201
|
required_ruby_version: !ruby/object:Gem::Requirement
|
201
202
|
requirements:
|
202
|
-
- -
|
203
|
+
- - ">="
|
203
204
|
- !ruby/object:Gem::Version
|
204
205
|
version: '0'
|
205
206
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
206
207
|
requirements:
|
207
|
-
- -
|
208
|
+
- - ">="
|
208
209
|
- !ruby/object:Gem::Version
|
209
210
|
version: '0'
|
210
211
|
requirements: []
|
211
212
|
rubyforge_project:
|
212
|
-
rubygems_version: 2.
|
213
|
+
rubygems_version: 2.5.1
|
213
214
|
signing_key:
|
214
215
|
specification_version: 4
|
215
216
|
summary: Ruby DSL library that provides a wrapper around the CloudFormation. Written
|