moonshot 0.7.7 → 1.0.0.rc1

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.
Files changed (50) hide show
  1. checksums.yaml +4 -4
  2. data/bin/moonshot +11 -0
  3. data/lib/default/Moonfile.rb +0 -0
  4. data/lib/moonshot.rb +33 -6
  5. data/lib/moonshot/always_use_default_source.rb +17 -0
  6. data/lib/moonshot/artifact_repository/s3_bucket_via_github_releases.rb +140 -3
  7. data/lib/moonshot/ask_user_source.rb +38 -0
  8. data/lib/moonshot/build_mechanism/github_release.rb +1 -1
  9. data/lib/moonshot/build_mechanism/script.rb +1 -1
  10. data/lib/moonshot/command.rb +64 -0
  11. data/lib/moonshot/command_line.rb +150 -0
  12. data/lib/moonshot/commands/build.rb +12 -0
  13. data/lib/moonshot/commands/console.rb +19 -0
  14. data/lib/moonshot/commands/create.rb +37 -0
  15. data/lib/moonshot/commands/delete.rb +12 -0
  16. data/lib/moonshot/commands/deploy.rb +12 -0
  17. data/lib/moonshot/commands/doctor.rb +12 -0
  18. data/lib/moonshot/commands/list.rb +16 -0
  19. data/lib/moonshot/commands/new.rb +99 -0
  20. data/lib/moonshot/commands/parameter_arguments.rb +27 -0
  21. data/lib/moonshot/commands/push.rb +12 -0
  22. data/lib/moonshot/commands/ssh.rb +12 -0
  23. data/lib/moonshot/commands/status.rb +12 -0
  24. data/lib/moonshot/commands/update.rb +29 -0
  25. data/lib/moonshot/commands/version.rb +12 -0
  26. data/lib/moonshot/config.rb +0 -0
  27. data/lib/moonshot/controller.rb +106 -42
  28. data/lib/moonshot/controller_config.rb +31 -13
  29. data/lib/moonshot/deployment_mechanism/code_deploy.rb +17 -7
  30. data/lib/moonshot/json_stack_template.rb +17 -0
  31. data/lib/moonshot/parameter_collection.rb +50 -0
  32. data/lib/moonshot/parent_stack_parameter_loader.rb +51 -0
  33. data/lib/moonshot/resources.rb +3 -3
  34. data/lib/moonshot/resources_helper.rb +2 -2
  35. data/lib/moonshot/ssh_command.rb +31 -0
  36. data/lib/moonshot/ssh_config.rb +1 -1
  37. data/lib/moonshot/stack.rb +66 -77
  38. data/lib/moonshot/stack_list_printer.rb +21 -0
  39. data/lib/moonshot/stack_lister.rb +16 -6
  40. data/lib/moonshot/stack_parameter.rb +64 -0
  41. data/lib/moonshot/stack_parameter_printer.rb +3 -49
  42. data/lib/moonshot/stack_template.rb +13 -25
  43. data/lib/moonshot/task.rb +10 -0
  44. data/lib/moonshot/tools/asg_rollout.rb +1 -1
  45. data/lib/moonshot/tools/asg_rollout/instance_health.rb +1 -1
  46. data/lib/moonshot/tools/asg_rollout_config.rb +1 -1
  47. data/lib/moonshot/yaml_stack_template.rb +17 -0
  48. metadata +51 -9
  49. data/lib/moonshot/cli.rb +0 -220
  50. data/lib/moonshot/environment_parser.rb +0 -32
@@ -0,0 +1,21 @@
1
+ module Moonshot
2
+ class StackListPrinter
3
+ attr_accessor :stacks
4
+
5
+ def initialize(stacks)
6
+ @stacks = stacks
7
+ @table = UnicodeTable.new('Environment List')
8
+ end
9
+
10
+ def print
11
+ rows = @stacks.map do |stack|
12
+ [stack.name, stack.creation_time, stack.status]
13
+ end
14
+
15
+ @table.add_table(rows)
16
+
17
+ @table.draw
18
+ @table.draw_children
19
+ end
20
+ end
21
+ end
@@ -1,20 +1,30 @@
1
1
  module Moonshot
2
2
  # The StackLister is world renoun for it's ability to list stacks.
3
3
  class StackLister
4
+ EnvironmentDescription = Struct.new(:name, :creation_time, :status)
4
5
  include CredsHelper
5
6
 
6
- def initialize(app_name, log:)
7
+ def initialize(app_name)
7
8
  @app_name = app_name
8
- @log = log
9
9
  end
10
10
 
11
11
  def list
12
- all_stacks = cf_client.describe_stacks.stacks
13
- app_stacks = all_stacks.reject { |s| s.stack_name !~ /^#{@app_name}/ }
12
+ result = []
13
+ next_token = nil
14
+ loop do
15
+ resp = cf_client.describe_stacks(next_token: next_token)
16
+ resp.stacks.each do |stack|
17
+ app_tag = stack.tags.find { |t| t.key == 'moonshot_application' }
18
+ env_tag = stack.tags.find { |t| t.key == 'moonshot_environment' }
14
19
 
15
- app_stacks.each do |stack|
16
- puts stack.stack_name
20
+ next unless app_tag && app_tag.value == Moonshot.config.app_name
21
+ result <<
22
+ EnvironmentDescription.new(env_tag.value, stack.creation_time, stack.stack_status)
23
+ end
24
+ break unless resp.next_token
25
+ next_token = resp.next_token
17
26
  end
27
+ result.sort_by(&:name)
18
28
  end
19
29
  end
20
30
  end
@@ -0,0 +1,64 @@
1
+ module Moonshot
2
+ class StackParameter
3
+ attr_reader :name
4
+ attr_reader :default
5
+ attr_reader :description
6
+
7
+ def initialize(name, default: nil, use_previous: false, description: '')
8
+ @default = default
9
+ @description = description
10
+ @name = name
11
+ @use_previous = use_previous
12
+ @value = nil
13
+ end
14
+
15
+ # Does this Stack Parameter have a default value that will be used?
16
+ def default?
17
+ !@default.nil?
18
+ end
19
+
20
+ def use_previous?
21
+ @use_previous ? true : false
22
+ end
23
+
24
+ # Has the user provided a value for this parameter?
25
+ def set?
26
+ !@value.nil?
27
+ end
28
+
29
+ def set(value)
30
+ @value = value
31
+ @use_previous = false
32
+ end
33
+
34
+ def use_previous!(value)
35
+ if @value
36
+ raise "Value already set for StackParameter #{@name}, cannot use previous value!"
37
+ end
38
+
39
+ # Make the current value available to plugins.
40
+ @value = value
41
+ @use_previous = true
42
+ end
43
+
44
+ def value
45
+ unless @value || default?
46
+ raise "No value set and no default for StackParameter #{@name}!"
47
+ end
48
+
49
+ @value || default
50
+ end
51
+
52
+ def to_cf
53
+ result = { parameter_key: @name }
54
+
55
+ if use_previous?
56
+ result[:use_previous_value] = true
57
+ else
58
+ result[:parameter_value] = value
59
+ end
60
+
61
+ result
62
+ end
63
+ end
64
+ end
@@ -9,62 +9,16 @@ module Moonshot
9
9
 
10
10
  def print
11
11
  p_table = @table.add_leaf('Stack Parameters')
12
- overrides = @stack.overrides
13
12
  rows = @stack.parameters.sort.map do |key, value|
14
- t_param = @stack.template.parameters.find do |p|
15
- p.name == key
16
- end
17
-
18
- properties = determine_change(t_param ? t_param.default : nil,
19
- overrides[key],
20
- value)
21
-
22
- [
23
- "#{key}:",
24
- format_value(value),
25
- format_properties(properties)
26
- ]
13
+ ["#{key}:", format_value(value)]
27
14
  end
28
15
 
29
16
  p_table.add_table(rows)
30
17
  end
31
18
 
32
- def determine_change(default, override, current)
33
- properties = []
34
-
35
- # If there is a stack override, determine if it would change the current
36
- # stack.
37
- if override
38
- properties << 'overridden'
39
- if current == '****'
40
- properties << 'may be updated, NoEcho set'
41
- elsif override != current
42
- properties << "would be updated to #{override}"
43
- end
44
-
45
- else
46
- # Otherwise, compare the template default with the current value to
47
- # determine outcome.
48
- properties << 'default'
49
- properties << "would be updated to #{default}" if default != current
50
- end
51
-
52
- properties
53
- end
54
-
55
- def format_properties(properties)
56
- string = " (#{properties.join(', ')})"
57
-
58
- if properties.any? { |p| p =~ /be updated/ }
59
- string.yellow
60
- else
61
- string.green
62
- end
63
- end
64
-
65
19
  def format_value(value)
66
- if value.size > 40
67
- value[0..40] + '...'
20
+ if value.size > 60
21
+ value[0..60] + '...'
68
22
  else
69
23
  value
70
24
  end
@@ -1,39 +1,27 @@
1
- require 'json'
1
+ require_relative 'stack_parameter'
2
2
 
3
3
  module Moonshot
4
- # A StackTemplate loads the JSON template from disk and stores information
4
+ # A StackTemplate loads the template from disk and stores information
5
5
  # about it.
6
6
  class StackTemplate
7
- Parameter = Struct.new(:name, :default) do
8
- def required?
9
- default.nil?
10
- end
11
- end
12
-
13
- attr_reader :body
14
-
15
- def initialize(filename, log:)
16
- @log = log
17
-
18
- unless File.exist?(filename)
19
- @log.error("Could not find CloudFormation template at #{filename}")
20
- raise
21
- end
22
-
23
- # The maximum TemplateBody length is 51,200 bytes, so we remove
24
- # formatting white space.
25
- @body = JSON.parse(File.read(filename)).to_json
7
+ def initialize(filename)
8
+ @filename = filename
26
9
  end
27
10
 
28
11
  def parameters
29
- JSON.parse(@body).fetch('Parameters', {}).map do |k, v|
30
- Parameter.new(k, v['Default'])
12
+ template_body.fetch('Parameters', {}).map do |k, v|
13
+ StackParameter.new(k,
14
+ default: v['Default'],
15
+ description: v.fetch('Description', ''))
31
16
  end
32
17
  end
33
18
 
34
- # Return a list of defined resource names in the template.
35
19
  def resource_names
36
- JSON.parse(@body).fetch('Resources', {}).keys
20
+ template_body.fetch('Resources', {}).keys
21
+ end
22
+
23
+ def exist?
24
+ File.exist?(@filename)
37
25
  end
38
26
  end
39
27
  end
@@ -0,0 +1,10 @@
1
+ module Moonshot
2
+ class Task
3
+ attr_reader :name, :desc, :block
4
+ def initialize(name, desc, &block)
5
+ @name = name.to_sym
6
+ @desc = desc
7
+ @block = block
8
+ end
9
+ end
10
+ end
@@ -4,7 +4,7 @@ require_relative 'asg_rollout/hook_exec_environment'
4
4
 
5
5
  module Moonshot
6
6
  module Tools
7
- class ASGRollout # rubocop:disable Documentation
7
+ class ASGRollout
8
8
  attr_accessor :config
9
9
 
10
10
  def initialize(controller:, logical_id:)
@@ -1,7 +1,7 @@
1
1
  module Moonshot
2
2
  module Tools
3
3
  class ASGRollout
4
- class InstanceHealth # rubocop:disable Documentation
4
+ class InstanceHealth
5
5
  attr_reader :asg_status, :elb_status
6
6
 
7
7
  VALID_ASG_IN_SERVICE_STATES = ['InService'].freeze
@@ -1,6 +1,6 @@
1
1
  module Moonshot
2
2
  module Tools
3
- class ASGRolloutConfig # rubocop:disable Documentation
3
+ class ASGRolloutConfig
4
4
  attr_reader :pre_detach, :terminate_when, :terminate_when_timeout, :terminate
5
5
  attr_accessor :terminate_when_delay, :instance_health_delay
6
6
 
@@ -0,0 +1,17 @@
1
+ require 'yaml'
2
+ require_relative 'stack_template'
3
+
4
+ module Moonshot
5
+ # Handles YAML formatted AWS template files.
6
+ class YamlStackTemplate < StackTemplate
7
+ def body
8
+ template_body.to_yaml
9
+ end
10
+
11
+ private
12
+
13
+ def template_body
14
+ @template_body ||= YAML.load_file(@filename)
15
+ end
16
+ end
17
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: moonshot
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.7
4
+ version: 1.0.0.rc1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Cloud Engineering <engineering@acquia.com>
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-09-20 00:00:00.000000000 Z
11
+ date: 2016-10-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: aws-sdk
@@ -170,6 +170,20 @@ dependencies:
170
170
  - - ">="
171
171
  - !ruby/object:Gem::Version
172
172
  version: '0'
173
+ - !ruby/object:Gem::Dependency
174
+ name: pry
175
+ requirement: !ruby/object:Gem::Requirement
176
+ requirements:
177
+ - - ">="
178
+ - !ruby/object:Gem::Version
179
+ version: '0'
180
+ type: :runtime
181
+ prerelease: false
182
+ version_requirements: !ruby/object:Gem::Requirement
183
+ requirements:
184
+ - - ">="
185
+ - !ruby/object:Gem::Version
186
+ version: '0'
173
187
  - !ruby/object:Gem::Dependency
174
188
  name: rspec
175
189
  requirement: !ruby/object:Gem::Requirement
@@ -212,32 +226,56 @@ dependencies:
212
226
  - - ">="
213
227
  - !ruby/object:Gem::Version
214
228
  version: '0'
215
- description: A library for launching services into AWS.
229
+ description: A library and CLI tool for launching services into AWS.
216
230
  email: engineering@acquia.com
217
- executables: []
231
+ executables:
232
+ - moonshot
218
233
  extensions: []
219
234
  extra_rdoc_files: []
220
235
  files:
236
+ - bin/moonshot
237
+ - lib/default/Moonfile.rb
221
238
  - lib/moonshot.rb
239
+ - lib/moonshot/always_use_default_source.rb
222
240
  - lib/moonshot/artifact_repository/s3_bucket.rb
223
241
  - lib/moonshot/artifact_repository/s3_bucket_via_github_releases.rb
242
+ - lib/moonshot/ask_user_source.rb
224
243
  - lib/moonshot/build_mechanism/github_release.rb
225
244
  - lib/moonshot/build_mechanism/script.rb
226
245
  - lib/moonshot/build_mechanism/travis_deploy.rb
227
246
  - lib/moonshot/build_mechanism/version_proxy.rb
228
- - lib/moonshot/cli.rb
247
+ - lib/moonshot/command.rb
248
+ - lib/moonshot/command_line.rb
249
+ - lib/moonshot/commands/build.rb
250
+ - lib/moonshot/commands/console.rb
251
+ - lib/moonshot/commands/create.rb
252
+ - lib/moonshot/commands/delete.rb
253
+ - lib/moonshot/commands/deploy.rb
254
+ - lib/moonshot/commands/doctor.rb
255
+ - lib/moonshot/commands/list.rb
256
+ - lib/moonshot/commands/new.rb
257
+ - lib/moonshot/commands/parameter_arguments.rb
258
+ - lib/moonshot/commands/push.rb
259
+ - lib/moonshot/commands/ssh.rb
260
+ - lib/moonshot/commands/status.rb
261
+ - lib/moonshot/commands/update.rb
262
+ - lib/moonshot/commands/version.rb
263
+ - lib/moonshot/config.rb
229
264
  - lib/moonshot/controller.rb
230
265
  - lib/moonshot/controller_config.rb
231
266
  - lib/moonshot/creds_helper.rb
232
267
  - lib/moonshot/default_strategy.rb
233
268
  - lib/moonshot/deployment_mechanism/code_deploy.rb
234
269
  - lib/moonshot/doctor_helper.rb
235
- - lib/moonshot/environment_parser.rb
236
270
  - lib/moonshot/interactive_logger_proxy.rb
271
+ - lib/moonshot/json_stack_template.rb
237
272
  - lib/moonshot/merge_strategy.rb
273
+ - lib/moonshot/parameter_collection.rb
274
+ - lib/moonshot/parent_stack_parameter_loader.rb
238
275
  - lib/moonshot/resources.rb
239
276
  - lib/moonshot/resources_helper.rb
240
277
  - lib/moonshot/shell.rb
278
+ - lib/moonshot/ssh_command.rb
241
279
  - lib/moonshot/ssh_command_builder.rb
242
280
  - lib/moonshot/ssh_config.rb
243
281
  - lib/moonshot/ssh_fork_executor.rb
@@ -246,10 +284,13 @@ files:
246
284
  - lib/moonshot/stack_asg_printer.rb
247
285
  - lib/moonshot/stack_config.rb
248
286
  - lib/moonshot/stack_events_poller.rb
287
+ - lib/moonshot/stack_list_printer.rb
249
288
  - lib/moonshot/stack_lister.rb
250
289
  - lib/moonshot/stack_output_printer.rb
290
+ - lib/moonshot/stack_parameter.rb
251
291
  - lib/moonshot/stack_parameter_printer.rb
252
292
  - lib/moonshot/stack_template.rb
293
+ - lib/moonshot/task.rb
253
294
  - lib/moonshot/tools/asg_rollout.rb
254
295
  - lib/moonshot/tools/asg_rollout/asg.rb
255
296
  - lib/moonshot/tools/asg_rollout/asg_instance.rb
@@ -257,6 +298,7 @@ files:
257
298
  - lib/moonshot/tools/asg_rollout/instance_health.rb
258
299
  - lib/moonshot/tools/asg_rollout_config.rb
259
300
  - lib/moonshot/unicode_table.rb
301
+ - lib/moonshot/yaml_stack_template.rb
260
302
  - lib/plugins/backup.rb
261
303
  homepage: https://github.com/acquia/moonshot
262
304
  licenses:
@@ -273,14 +315,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
273
315
  version: '0'
274
316
  required_rubygems_version: !ruby/object:Gem::Requirement
275
317
  requirements:
276
- - - ">="
318
+ - - ">"
277
319
  - !ruby/object:Gem::Version
278
- version: '0'
320
+ version: 1.3.1
279
321
  requirements: []
280
322
  rubyforge_project:
281
323
  rubygems_version: 2.4.8
282
324
  signing_key:
283
325
  specification_version: 4
284
- summary: A library for launching services into AWS
326
+ summary: A library and CLI tool for launching services into AWS
285
327
  test_files: []
286
328
  has_rdoc:
data/lib/moonshot/cli.rb DELETED
@@ -1,220 +0,0 @@
1
- require 'interactive-logger'
2
- require_relative 'default_strategy'
3
- require_relative 'merge_strategy'
4
-
5
- # Base class for Moonshot-powered project tooling.
6
- module Moonshot
7
- # The main entry point for Moonshot, this class should be extended by
8
- # project tooling.
9
- class CLI < Thor # rubocop:disable ClassLength
10
- class_option(:name, aliases: 'n', default: nil, type: :string)
11
- class_option(:interactive_logger, type: :boolean, default: true)
12
- class_option(:verbose, aliases: 'v', type: :boolean)
13
-
14
- class << self
15
- attr_accessor :application_name
16
- attr_accessor :artifact_repository
17
- attr_accessor :auto_prefix_stack
18
- attr_accessor :build_mechanism
19
- attr_accessor :deployment_mechanism
20
- attr_accessor :default_parent_stack
21
- attr_accessor :default_parameter_strategy
22
- attr_reader :plugins
23
-
24
- def plugin(plugin)
25
- @plugins ||= []
26
- @plugins << plugin
27
- end
28
-
29
- def parent(value)
30
- @default_parent_stack = value
31
- end
32
-
33
- def parameter_strategy(strategy)
34
- @default_parameter_strategy = strategy
35
- end
36
-
37
- def check_class_configuration
38
- raise Thor::Error, 'No application_name is set!' unless application_name
39
- end
40
-
41
- def exit_on_failure?
42
- true
43
- end
44
-
45
- def inherited(base)
46
- base.include(Moonshot::ArtifactRepository)
47
- base.include(Moonshot::BuildMechanism)
48
- base.include(Moonshot::DeploymentMechanism)
49
- end
50
-
51
- def ssh_options!
52
- option :user, default: ENV['MOONSHOT_SSH_USER'] || ENV['USER'], type: :string,
53
- aliases: '-l',
54
- desc: 'Specifies the user to log in as on the remote machine.'
55
- option :identity_file, default: ENV['MOONSHOT_SSH_KEY_FILE'], type: :string,
56
- aliases: '-i',
57
- desc: 'Selects a file from which the identity (private key) for '\
58
- 'public key authentication is read.'
59
- option :instance, default: nil, type: :string, aliases: '-s',
60
- desc: 'Connect to specified instance ID instead of the first one.'
61
- option :command, default: nil, type: :string, aliases: '-c',
62
- desc: 'Execute the specified command instead of opening a shell.'
63
- option :auto_scaling_group, default: nil, type: :string, aliases: '-g',
64
- desc: 'The logical ID of the auto scaling group to SSH into. '\
65
- 'Mandatory if the stack has multiple ASGs, '\
66
- 'ignored if you have only one.'
67
- end
68
- end
69
-
70
- def initialize(*args)
71
- super
72
- @log = Logger.new(STDOUT)
73
- @log.formatter = proc do |s, d, _, msg|
74
- "[#{self.class.name} #{s} #{d.strftime('%T')}] #{msg}\n"
75
- end
76
- @log.level = options[:verbose] ? Logger::DEBUG : Logger::INFO
77
-
78
- EnvironmentParser.parse(@log)
79
- self.class.check_class_configuration
80
- end
81
-
82
- no_tasks do
83
- # Build a Moonshot::Controller from the CLI options.
84
- def controller # rubocop:disable AbcSize, CyclomaticComplexity, PerceivedComplexity
85
- Moonshot::Controller.new do |config|
86
- config.app_name = self.class.application_name
87
- config.artifact_repository = self.class.artifact_repository
88
- config.auto_prefix_stack = self.class.auto_prefix_stack
89
- config.build_mechanism = self.class.build_mechanism
90
- config.deployment_mechanism = self.class.deployment_mechanism
91
- config.environment_name = options[:name]
92
- config.logger = @log
93
-
94
- # Degrade to a more compatible logger if the terminal seems outdated,
95
- # or at the users request.
96
- if !$stdout.isatty || !options[:interactive_logger]
97
- config.interactive_logger = InteractiveLoggerProxy.new(@log)
98
- end
99
-
100
- config.show_all_stack_events = true if options[:show_all_events]
101
- config.plugins = self.class.plugins if self.class.plugins
102
-
103
- if options[:parent]
104
- config.parent_stacks << options[:parent]
105
- elsif self.class.default_parent_stack
106
- config.parent_stacks << self.class.default_parent_stack
107
- end
108
-
109
- parameter_strategy = options[:parameter_strategy] || self.class.default_parameter_strategy
110
- config.parameter_strategy = parameter_strategy_factory(parameter_strategy) \
111
- unless parameter_strategy.nil?
112
-
113
- config.ssh_config.ssh_user = options[:user]
114
- config.ssh_config.ssh_identity_file = options[:identity_file]
115
- config.ssh_instance = options[:instance]
116
- config.ssh_command = options[:command]
117
- config.ssh_auto_scaling_group_name = options[:auto_scaling_group]
118
- end
119
- rescue => e
120
- raise Thor::Error, e.message
121
- end
122
-
123
- def parameter_strategy_factory(value)
124
- case value.to_sym
125
- when :default
126
- Moonshot::ParameterStrategy::DefaultStrategy.new
127
- when :merge
128
- Moonshot::ParameterStrategy::MergeStrategy.new
129
- else
130
- raise Thor::Error, "Unknown parameter strategy: #{value}"
131
- end
132
- end
133
-
134
- def ssh_command(command)
135
- arguments = ARGV.drop(1)
136
- arguments += ['--command', command]
137
- invoke :ssh, [], arguments
138
- end
139
- end
140
-
141
- desc :list, 'List stacks for this application.'
142
- def list
143
- controller.list
144
- end
145
-
146
- desc :create, 'Create a new environment.'
147
- option(
148
- :parent,
149
- type: :string,
150
- aliases: '-p',
151
- desc: "Parent stack to import parameters from. (Default: #{default_parent_stack || 'None'})")
152
- option :deploy, default: true, type: :boolean, aliases: '-d',
153
- desc: 'Choose if code should be deployed after stack is created'
154
- option :version, default: nil, type: :string,
155
- desc: 'Version to deploy. Only valid if deploy flag is set.'
156
- option :show_all_events, desc: 'Show all stack events during update. (Default: errors only)'
157
- def create
158
- controller.create
159
-
160
- if options[:deploy]
161
- if options[:version].nil?
162
- controller.deploy_code
163
- else
164
- controller.deploy_version(options[:version])
165
- end
166
- end
167
- end
168
-
169
- desc :update, 'Update the CloudFormation stack within an environment.'
170
- option(
171
- :parameter_strategy,
172
- type: :string,
173
- desc: 'Override default parameter strategy.')
174
- option(
175
- :show_all_events,
176
- type: :boolean,
177
- desc: 'Show all stack events during update. (Default: errors only)')
178
- def update
179
- controller.update
180
- end
181
-
182
- desc :status, 'Get the status of an existing environment.'
183
- def status
184
- controller.status
185
- end
186
-
187
- desc 'deploy-code', 'Create a build from the working directory, and deploy it.' # rubocop:disable LineLength
188
- def deploy_code
189
- controller.deploy_code
190
- end
191
-
192
- desc 'build-version VERSION', 'Build a tarball of the software, ready for deployment.' # rubocop:disable LineLength
193
- def build_version(version_name)
194
- controller.build_version(version_name)
195
- end
196
-
197
- desc 'deploy-version VERSION_NAME', 'Deploy a versioned release to both EB environments in an environment.' # rubocop:disable LineLength
198
- def deploy_version(version_name)
199
- controller.deploy_version(version_name)
200
- end
201
-
202
- desc :delete, 'Delete an existing environment.'
203
- option :show_all_events, desc: 'Show all stack events during update. (Default: errors only)'
204
- def delete
205
- controller.delete
206
- end
207
-
208
- desc :doctor, 'Run configuration checks against current environment.'
209
- def doctor
210
- success = controller.doctor
211
- raise Thor::Error, 'One or more checks failed.' unless success
212
- end
213
-
214
- desc :ssh, 'SSH into the first or specified instance on the stack.'
215
- ssh_options!
216
- def ssh
217
- controller.ssh
218
- end
219
- end
220
- end