stackup 0.3.0 → 0.4.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ff49d4bc734ae1d359d0727319dfd73bafde86f9
4
- data.tar.gz: 79b3705ee2af79a3a268e74b0a589ab2fbe8f107
3
+ metadata.gz: 3b649897af4dba63a33163c2c265e71e3883b73c
4
+ data.tar.gz: fb24cad02b8e50e5f7ee2f6411b7faa64cc18d3e
5
5
  SHA512:
6
- metadata.gz: 5ea9f0efed3b79d32fc842a5a726114a7b5d70731626c355072ebc510e0ff016361e34db90f225ff3ec952cd229411a5d4dabd505901831393c825bc8753d0b7
7
- data.tar.gz: d6a435c32e8203114d2f671ac56e66764d044da56b6e1f5c20227a6b80cfc6de2b511079f03538aed79b592efb866d6ddce843de1ac2a7f8b699aefa693895fd
6
+ metadata.gz: 68f9c58d118c8d766c4e2837bf8c0846fe08f240dbedf583d30fe3637554bbfa23efe320239ea29a5d8eb84b9890982ff6dac852ccdbcae437efc37da531e802
7
+ data.tar.gz: cf8dde6a511662558fc0a0a77f6ded5dc5d4d978c9e83c729f4b1fb80f3f59ec6165e952f17beb46279c0e0a55fa77c14b5a34b68dd3a48f96d5834036afe09c
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- stackup (0.3.0)
4
+ stackup (0.4.0)
5
5
  aws-sdk (~> 2.0)
6
6
  clamp (~> 1.0)
7
7
  console_logger
data/bin/stackup CHANGED
@@ -78,19 +78,32 @@ Clamp do
78
78
 
79
79
  subcommand "up", "Create/update the stack" do
80
80
 
81
- option "--disable-rollback", :flag, "disable stack rollback"
81
+ option ["-t", "--template"], "FILE", "template file",
82
+ :attribute_name => :template_file
82
83
 
83
- parameter "TEMPLATE", "CloudFormation template file",
84
- :attribute_name => :template_file
84
+ option ["-T", "--use-previous-template"], :flag,
85
+ "reuse the existing template"
85
86
 
86
- parameter "[PARAMETERS]", "CloudFormation parameters file",
87
- :attribute_name => :parameters_file
87
+ option ["-p", "--parameters"], "FILE", "parameters file",
88
+ :attribute_name => :parameters_file
89
+
90
+ option "--policy", "FILE", "stack policy file",
91
+ :attribute_name => :policy_file
92
+
93
+ option "--on-failure", "ACTION",
94
+ "when stack creation fails: DO_NOTHING, ROLLBACK, or DELETE",
95
+ :default => "ROLLBACK"
88
96
 
89
97
  def execute
98
+ unless template_file || use_previous_template?
99
+ signal_usage_error "Specify either --template or --use-previous-template"
100
+ end
90
101
  options = {}
91
- options[:template] = template
92
- options[:parameters] = parameters if parameters
93
- options[:disable_rollback] = disable_rollback?
102
+ options[:template] = load_data(template_file) if template_file
103
+ options[:on_failure] = on_failure
104
+ options[:parameters] = load_data(parameters_file) if parameters_file
105
+ options[:stack_policy] = load_data(policy_file) if policy_file
106
+ options[:use_previous_template] = use_previous_template?
94
107
  report_change do
95
108
  stack.create_or_update(options)
96
109
  end
@@ -104,14 +117,6 @@ Clamp do
104
117
  signal_error "no such file: #{file.inspect}"
105
118
  end
106
119
 
107
- def template
108
- @template ||= load_data(template_file)
109
- end
110
-
111
- def parameters
112
- @parameters ||= load_data(parameters_file) if parameters_file
113
- end
114
-
115
120
  end
116
121
 
117
122
  subcommand ["down", "delete"], "Remove the stack." do
@@ -134,6 +139,14 @@ Clamp do
134
139
 
135
140
  end
136
141
 
142
+ subcommand "wait", "Wait until stack is stable" do
143
+
144
+ def execute
145
+ puts stack.wait
146
+ end
147
+
148
+ end
149
+
137
150
  subcommand "template", "Display stack template." do
138
151
 
139
152
  def execute
data/lib/stackup/stack.rb CHANGED
@@ -19,7 +19,7 @@ module Stackup
19
19
  end
20
20
  end
21
21
 
22
- attr_reader :name, :cf_client, :watcher
22
+ attr_reader :name
23
23
 
24
24
  # Register a handler for reporting of stack events.
25
25
  # @param [Proc] event_handler
@@ -62,23 +62,27 @@ module Stackup
62
62
  # if true, disable rollback if stack creation fails
63
63
  # @option options [String] :notification_arns
64
64
  # ARNs for the Amazon SNS topics associated with this stack
65
- # @option options [String] :on_failure (DO_NOTHING)
65
+ # @option options [String] :on_failure (ROLLBACK)
66
66
  # if stack creation fails: DO_NOTHING, ROLLBACK, or DELETE
67
67
  # @option options [Hash, Array<Hash>] :parameters
68
68
  # stack parameters, either as a Hash, or as an Array of
69
69
  # +Aws::CloudFormation::Types::Parameter+ structures
70
70
  # @option options [Array<String>] :resource_types
71
71
  # resource types that you have permissions to work with
72
- # @option options [Hash] :template
73
- # stack template, as Ruby data
72
+ # @option options [Hash] :stack_policy
73
+ # stack policy, as Ruby data
74
74
  # @option options [String] :stack_policy_body
75
75
  # stack policy, as JSON
76
76
  # @option options [String] :stack_policy_url
77
77
  # location of stack policy
78
+ # @option options [Hash] :stack_policy_during_update
79
+ # temporary stack policy, as Ruby data
78
80
  # @option options [String] :stack_policy_during_update_body
79
81
  # temporary stack policy, as JSON
80
82
  # @option options [String] :stack_policy_during_update_url
81
83
  # location of temporary stack policy
84
+ # @option options [Hash] :template
85
+ # stack template, as Ruby data
82
86
  # @option options [String] :template_body
83
87
  # stack template, as JSON
84
88
  # @option options [String] :template_url
@@ -98,6 +102,12 @@ module Stackup
98
102
  if (parameters = options[:parameters])
99
103
  options[:parameters] = normalise_parameters(parameters)
100
104
  end
105
+ if (policy_data = options.delete(:stack_policy))
106
+ options[:stack_policy_body] = MultiJson.dump(policy_data)
107
+ end
108
+ if (policy_data = options.delete(:stack_policy_during_update))
109
+ options[:stack_policy_during_update_body] = MultiJson.dump(policy_data)
110
+ end
101
111
  options[:capabilities] ||= ["CAPABILITY_IAM"]
102
112
  delete if ALMOST_DEAD_STATUSES.include?(status)
103
113
  update(options)
@@ -150,6 +160,16 @@ module Stackup
150
160
  nil
151
161
  end
152
162
 
163
+ # Wait until stack reaches a stable state
164
+ #
165
+ # @return [String] status, once stable
166
+ #
167
+ def wait
168
+ modify_stack do
169
+ # nothing
170
+ end
171
+ end
172
+
153
173
  # Get the current template.
154
174
  #
155
175
  # @return [Hash] current stack template, as Ruby data
@@ -210,6 +230,17 @@ module Stackup
210
230
 
211
231
  private
212
232
 
233
+ attr_reader :cf_client
234
+
235
+ def cf
236
+ Aws::CloudFormation::Resource.new(:client => cf_client)
237
+ end
238
+
239
+ def cf_stack
240
+ id_or_name = @stack_id || name
241
+ cf.stack(id_or_name)
242
+ end
243
+
213
244
  def create(options)
214
245
  options[:stack_name] = name
215
246
  options.delete(:stack_policy_during_update_body)
@@ -239,15 +270,6 @@ module Stackup
239
270
  @logger ||= Logger.new($stdout).tap { |l| l.level = Logger::INFO }
240
271
  end
241
272
 
242
- def cf
243
- Aws::CloudFormation::Resource.new(:client => cf_client)
244
- end
245
-
246
- def cf_stack
247
- id_or_name = @stack_id || name
248
- cf.stack(id_or_name)
249
- end
250
-
251
273
  def event_handler
252
274
  @event_handler ||= lambda do |e|
253
275
  fields = [e.logical_resource_id, e.resource_status, e.resource_status_reason]
Binary file
data/stackup.gemspec CHANGED
@@ -4,7 +4,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
4
  Gem::Specification.new do |spec|
5
5
 
6
6
  spec.name = "stackup"
7
- spec.version = "0.3.0"
7
+ spec.version = "0.4.0"
8
8
  spec.authors = ["Mike Williams", "Arvind Kunday"]
9
9
  spec.email = ["mike.williams@rea-group.com", "arvind.kunday@rea-group.com"]
10
10
  spec.summary = "Manage CloudFormation stacks"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: stackup
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mike Williams
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2015-10-09 00:00:00.000000000 Z
12
+ date: 2015-10-11 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: aws-sdk
@@ -112,6 +112,7 @@ files:
112
112
  - lib/stackup/stack.rb
113
113
  - lib/stackup/stack_watcher.rb
114
114
  - pkg/stackup-0.2.0.gem
115
+ - pkg/stackup-0.3.0.gem
115
116
  - spec/spec_helper.rb
116
117
  - spec/stackup/stack_spec.rb
117
118
  - spec/stackup/stack_watcher_spec.rb