humidifier-reservoir 0.2.3 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -118,16 +118,16 @@
118
118
 
119
119
  <li class="even ">
120
120
  <div class="item">
121
- <span class='object_link'><a href="Humidifier/Reservoir/CLI.html#deploy-instance_method" title="Humidifier::Reservoir::CLI#deploy (method)">#deploy</a></span>
122
- <small>Humidifier::Reservoir::CLI</small>
121
+ <span class='object_link'><a href="Humidifier/Reservoir/Stack.html#deploy-instance_method" title="Humidifier::Reservoir::Stack#deploy (method)">#deploy</a></span>
122
+ <small>Humidifier::Reservoir::Stack</small>
123
123
  </div>
124
124
  </li>
125
125
 
126
126
 
127
127
  <li class="odd ">
128
128
  <div class="item">
129
- <span class='object_link'><a href="Humidifier/Reservoir/Stack.html#deploy-instance_method" title="Humidifier::Reservoir::Stack#deploy (method)">#deploy</a></span>
130
- <small>Humidifier::Reservoir::Stack</small>
129
+ <span class='object_link'><a href="Humidifier/Reservoir/CLI.html#deploy-instance_method" title="Humidifier::Reservoir::CLI#deploy (method)">#deploy</a></span>
130
+ <small>Humidifier::Reservoir::CLI</small>
131
131
  </div>
132
132
  </li>
133
133
 
@@ -166,29 +166,37 @@
166
166
 
167
167
  <li class="even ">
168
168
  <div class="item">
169
- <span class='object_link'><a href="Humidifier/Reservoir/Stack.html#initialize-instance_method" title="Humidifier::Reservoir::Stack#initialize (method)">#initialize</a></span>
170
- <small>Humidifier::Reservoir::Stack</small>
169
+ <span class='object_link'><a href="Humidifier/Reservoir/ParameterList.html#from-class_method" title="Humidifier::Reservoir::ParameterList.from (method)">from</a></span>
170
+ <small>Humidifier::Reservoir::ParameterList</small>
171
171
  </div>
172
172
  </li>
173
173
 
174
174
 
175
175
  <li class="odd ">
176
176
  <div class="item">
177
- <span class='object_link'><a href="Humidifier/Reservoir/Mapping.html#initialize-instance_method" title="Humidifier::Reservoir::Mapping#initialize (method)">#initialize</a></span>
178
- <small>Humidifier::Reservoir::Mapping</small>
177
+ <span class='object_link'><a href="Humidifier/Reservoir/Config.html#initialize-instance_method" title="Humidifier::Reservoir::Config#initialize (method)">#initialize</a></span>
178
+ <small>Humidifier::Reservoir::Config</small>
179
179
  </div>
180
180
  </li>
181
181
 
182
182
 
183
183
  <li class="even ">
184
184
  <div class="item">
185
- <span class='object_link'><a href="Humidifier/Reservoir/Config.html#initialize-instance_method" title="Humidifier::Reservoir::Config#initialize (method)">#initialize</a></span>
186
- <small>Humidifier::Reservoir::Config</small>
185
+ <span class='object_link'><a href="Humidifier/Reservoir/Mapping.html#initialize-instance_method" title="Humidifier::Reservoir::Mapping#initialize (method)">#initialize</a></span>
186
+ <small>Humidifier::Reservoir::Mapping</small>
187
187
  </div>
188
188
  </li>
189
189
 
190
190
 
191
191
  <li class="odd ">
192
+ <div class="item">
193
+ <span class='object_link'><a href="Humidifier/Reservoir/Stack.html#initialize-instance_method" title="Humidifier::Reservoir::Stack#initialize (method)">#initialize</a></span>
194
+ <small>Humidifier::Reservoir::Stack</small>
195
+ </div>
196
+ </li>
197
+
198
+
199
+ <li class="even ">
192
200
  <div class="item">
193
201
  <span class='object_link'><a href="Humidifier/Reservoir/Config.html#map-instance_method" title="Humidifier::Reservoir::Config#map (method)">#map</a></span>
194
202
  <small>Humidifier::Reservoir::Config</small>
@@ -196,7 +204,7 @@
196
204
  </li>
197
205
 
198
206
 
199
- <li class="even ">
207
+ <li class="odd ">
200
208
  <div class="item">
201
209
  <span class='object_link'><a href="Humidifier/Reservoir/Mapping.html#mapper-instance_method" title="Humidifier::Reservoir::Mapping#mapper (method)">#mapper</a></span>
202
210
  <small>Humidifier::Reservoir::Mapping</small>
@@ -204,7 +212,7 @@
204
212
  </li>
205
213
 
206
214
 
207
- <li class="odd ">
215
+ <li class="even ">
208
216
  <div class="item">
209
217
  <span class='object_link'><a href="Humidifier/Reservoir/Config.html#mapping_for-instance_method" title="Humidifier::Reservoir::Config#mapping_for (method)">#mapping_for</a></span>
210
218
  <small>Humidifier::Reservoir::Config</small>
@@ -212,7 +220,7 @@
212
220
  </li>
213
221
 
214
222
 
215
- <li class="even ">
223
+ <li class="odd ">
216
224
  <div class="item">
217
225
  <span class='object_link'><a href="Humidifier/Reservoir.html#mapping_for-class_method" title="Humidifier::Reservoir.mapping_for (method)">mapping_for</a></span>
218
226
  <small>Humidifier::Reservoir</small>
@@ -220,7 +228,7 @@
220
228
  </li>
221
229
 
222
230
 
223
- <li class="odd ">
231
+ <li class="even ">
224
232
  <div class="item">
225
233
  <span class='object_link'><a href="Humidifier/Reservoir/Config.html#mappings-instance_method" title="Humidifier::Reservoir::Config#mappings (method)">#mappings</a></span>
226
234
  <small>Humidifier::Reservoir::Config</small>
@@ -228,6 +236,14 @@
228
236
  </li>
229
237
 
230
238
 
239
+ <li class="odd ">
240
+ <div class="item">
241
+ <span class='object_link'><a href="Humidifier/Reservoir/Stack/Export.html#name-instance_method" title="Humidifier::Reservoir::Stack::Export#name (method)">#name</a></span>
242
+ <small>Humidifier::Reservoir::Stack::Export</small>
243
+ </div>
244
+ </li>
245
+
246
+
231
247
  <li class="even ">
232
248
  <div class="item">
233
249
  <span class='object_link'><a href="Humidifier/Reservoir/Stack.html#name-instance_method" title="Humidifier::Reservoir::Stack#name (method)">#name</a></span>
@@ -238,8 +254,8 @@
238
254
 
239
255
  <li class="odd ">
240
256
  <div class="item">
241
- <span class='object_link'><a href="Humidifier/Reservoir/Stack/Export.html#name-instance_method" title="Humidifier::Reservoir::Stack::Export#name (method)">#name</a></span>
242
- <small>Humidifier::Reservoir::Stack::Export</small>
257
+ <span class='object_link'><a href="Humidifier/Reservoir/Stack.html#parameters-instance_method" title="Humidifier::Reservoir::Stack#parameters (method)">#parameters</a></span>
258
+ <small>Humidifier::Reservoir::Stack</small>
243
259
  </div>
244
260
  </li>
245
261
 
@@ -262,16 +278,16 @@
262
278
 
263
279
  <li class="even ">
264
280
  <div class="item">
265
- <span class='object_link'><a href="Humidifier/Reservoir/Mapping.html#resource_for-instance_method" title="Humidifier::Reservoir::Mapping#resource_for (method)">#resource_for</a></span>
266
- <small>Humidifier::Reservoir::Mapping</small>
281
+ <span class='object_link'><a href="Humidifier/Reservoir/BaseMapper.html#resource_for-instance_method" title="Humidifier::Reservoir::BaseMapper#resource_for (method)">#resource_for</a></span>
282
+ <small>Humidifier::Reservoir::BaseMapper</small>
267
283
  </div>
268
284
  </li>
269
285
 
270
286
 
271
287
  <li class="odd ">
272
288
  <div class="item">
273
- <span class='object_link'><a href="Humidifier/Reservoir/BaseMapper.html#resource_for-instance_method" title="Humidifier::Reservoir::BaseMapper#resource_for (method)">#resource_for</a></span>
274
- <small>Humidifier::Reservoir::BaseMapper</small>
289
+ <span class='object_link'><a href="Humidifier/Reservoir/Mapping.html#resource_for-instance_method" title="Humidifier::Reservoir::Mapping#resource_for (method)">#resource_for</a></span>
290
+ <small>Humidifier::Reservoir::Mapping</small>
275
291
  </div>
276
292
  </li>
277
293
 
@@ -342,16 +358,16 @@
342
358
 
343
359
  <li class="even ">
344
360
  <div class="item">
345
- <span class='object_link'><a href="Humidifier/Reservoir/Stack.html#upload-instance_method" title="Humidifier::Reservoir::Stack#upload (method)">#upload</a></span>
346
- <small>Humidifier::Reservoir::Stack</small>
361
+ <span class='object_link'><a href="Humidifier/Reservoir/CLI.html#upload-instance_method" title="Humidifier::Reservoir::CLI#upload (method)">#upload</a></span>
362
+ <small>Humidifier::Reservoir::CLI</small>
347
363
  </div>
348
364
  </li>
349
365
 
350
366
 
351
367
  <li class="odd ">
352
368
  <div class="item">
353
- <span class='object_link'><a href="Humidifier/Reservoir/CLI.html#upload-instance_method" title="Humidifier::Reservoir::CLI#upload (method)">#upload</a></span>
354
- <small>Humidifier::Reservoir::CLI</small>
369
+ <span class='object_link'><a href="Humidifier/Reservoir/Stack.html#upload-instance_method" title="Humidifier::Reservoir::Stack#upload (method)">#upload</a></span>
370
+ <small>Humidifier::Reservoir::Stack</small>
355
371
  </div>
356
372
  </li>
357
373
 
@@ -100,7 +100,7 @@
100
100
  </div>
101
101
 
102
102
  <div id="footer">
103
- Generated on Tue Dec 5 14:49:51 2017 by
103
+ Generated on Tue Dec 5 18:38:21 2017 by
104
104
  <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
105
105
  0.9.12 (ruby-2.4.2).
106
106
  </div>
@@ -9,6 +9,7 @@ require 'humidifier/reservoir/cli'
9
9
  require 'humidifier/reservoir/config'
10
10
  require 'humidifier/reservoir/error'
11
11
  require 'humidifier/reservoir/mapping'
12
+ require 'humidifier/reservoir/parameter_list'
12
13
  require 'humidifier/reservoir/stack'
13
14
  require 'humidifier/reservoir/version'
14
15
 
@@ -21,18 +21,18 @@ module Humidifier
21
21
  end
22
22
  end
23
23
 
24
- desc 'deploy [?stack]', 'Update one or all stacks'
24
+ desc 'deploy [?stack] [*parameters]', 'Update one or all stacks'
25
25
  option :wait, desc: 'Wait for the stack to create/update',
26
26
  type: :boolean, default: false
27
27
  option :prefix, desc: 'The prefix to use for the stack'
28
- def deploy(name = nil)
28
+ def deploy(name = nil, *parameters)
29
29
  stack_names = stack_names_from(name)
30
30
  authorize
31
31
 
32
32
  stack_names.each do |stack_name|
33
33
  stack = Stack.new(stack_name, prefix: options[:prefix])
34
34
  puts "Deploying #{stack.stack_name}"
35
- stack.deploy(options[:wait])
35
+ stack.deploy(options[:wait], parameters_from(parameters))
36
36
  end
37
37
  end
38
38
 
@@ -76,6 +76,13 @@ module Humidifier
76
76
  Aws::SharedCredentials.new(profile_name: options[:aws_profile])
77
77
  end
78
78
 
79
+ def parameters_from(opts)
80
+ opts.map do |opt|
81
+ key, value = opt.split('=')
82
+ { parameter_key: key, parameter_value: value }
83
+ end
84
+ end
85
+
79
86
  def safe_execute
80
87
  yield
81
88
  rescue Error => error
@@ -0,0 +1,16 @@
1
+ module Humidifier
2
+ module Reservoir
3
+ # The list of parameters for a given stack parsed from the given filepath.
4
+ module ParameterList
5
+ def self.from(filepath)
6
+ loaded = YAML.load_file(filepath)
7
+ return {} unless loaded
8
+
9
+ loaded.each_with_object({}) do |(name, opts), params|
10
+ opts = opts.map { |key, value| [key.to_sym, value] }.to_h
11
+ params[name] = Parameter.new(opts)
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
@@ -3,7 +3,7 @@ module Humidifier
3
3
  # Represents a CloudFormation stack. This contains all of the logic for
4
4
  # interfacing with humidifier to deploy stacks, validate them, and display
5
5
  # them.
6
- class Stack
6
+ class Stack # rubocop:disable Metrics/ClassLength
7
7
  # Represents an exported resource in a stack for use in cross-stack
8
8
  # references.
9
9
  Export =
@@ -27,24 +27,42 @@ module Humidifier
27
27
  end
28
28
 
29
29
  def create_change_set
30
- return unless ensure_resources
31
- valid?
30
+ return if !ensure_resources('change') || !valid?
32
31
 
33
32
  opts = { capabilities: %w[CAPABILITY_IAM CAPABILITY_NAMED_IAM] }
34
33
  humidifier_stack.create_change_set(opts)
35
34
  end
36
35
 
37
- def deploy(wait = false)
38
- return unless ensure_resources
39
- valid?
36
+ def deploy(wait = false, parameter_values = {})
37
+ return if !ensure_resources('deploy') || !valid?
40
38
 
41
- opts = { capabilities: %w[CAPABILITY_IAM CAPABILITY_NAMED_IAM] }
39
+ opts = {
40
+ capabilities: %w[CAPABILITY_IAM CAPABILITY_NAMED_IAM],
41
+ parameters: parameter_values
42
+ }
42
43
  humidifier_stack.public_send(wait ? :deploy_and_wait : :deploy, opts)
43
44
  end
44
45
 
46
+ def parameters
47
+ @parameters ||=
48
+ begin
49
+ parameter_filepath =
50
+ Reservoir.files_for(name).detect do |filepath|
51
+ File.basename(filepath, '.yml') == 'parameters'
52
+ end
53
+
54
+ parameter_filepath ? ParameterList.from(parameter_filepath) : {}
55
+ end
56
+ end
57
+
45
58
  def resources
46
59
  Reservoir.files_for(name).each_with_object({}) do |filepath, resources|
47
- resources.merge!(parse(filepath, File.basename(filepath, '.yml')))
60
+ basename = File.basename(filepath, '.yml')
61
+
62
+ # Explicitly skip past parameters so we can pull them out later
63
+ next if basename == 'parameters'
64
+
65
+ resources.merge!(parse(filepath, basename))
48
66
  end
49
67
  end
50
68
 
@@ -57,6 +75,7 @@ module Humidifier
57
75
  end
58
76
 
59
77
  def upload
78
+ return if !ensure_resources('upload') || !valid?
60
79
  humidifier_stack.upload
61
80
  end
62
81
 
@@ -72,9 +91,9 @@ module Humidifier
72
91
 
73
92
  private
74
93
 
75
- def ensure_resources
94
+ def ensure_resources(action = 'deploy')
76
95
  return true if humidifier_stack.resources.any?
77
- puts "Refusing to deploy stack #{humidifier_stack.name} with no " \
96
+ puts "Refusing to #{action} stack #{humidifier_stack.name} with no " \
78
97
  'resources'
79
98
  false
80
99
  end
@@ -84,7 +103,8 @@ module Humidifier
84
103
  name: stack_name,
85
104
  description: "Resources for #{stack_name}",
86
105
  resources: resources,
87
- outputs: outputs
106
+ outputs: outputs,
107
+ parameters: parameters
88
108
  )
89
109
  end
90
110
 
@@ -1,6 +1,6 @@
1
1
  module Humidifier
2
2
  module Reservoir
3
3
  # The current version.
4
- VERSION = '0.2.3'.freeze
4
+ VERSION = '0.3.0'.freeze
5
5
  end
6
6
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: humidifier-reservoir
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.3
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Localytics
@@ -192,6 +192,7 @@ files:
192
192
  - docs/Humidifier/Reservoir/Config.html
193
193
  - docs/Humidifier/Reservoir/Error.html
194
194
  - docs/Humidifier/Reservoir/Mapping.html
195
+ - docs/Humidifier/Reservoir/ParameterList.html
195
196
  - docs/Humidifier/Reservoir/Stack.html
196
197
  - docs/Humidifier/Reservoir/Stack/Export.html
197
198
  - docs/_index.html
@@ -216,6 +217,7 @@ files:
216
217
  - lib/humidifier/reservoir/config.rb
217
218
  - lib/humidifier/reservoir/error.rb
218
219
  - lib/humidifier/reservoir/mapping.rb
220
+ - lib/humidifier/reservoir/parameter_list.rb
219
221
  - lib/humidifier/reservoir/stack.rb
220
222
  - lib/humidifier/reservoir/version.rb
221
223
  homepage: https://github.com/localytics/humidifier-reservoir