moonshot 0.7.7 → 1.0.0.rc1

Sign up to get free protection for your applications and to get access to all the features.
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