Class: Jets::Commands::Deploy
- Inherits:
-
Object
- Object
- Jets::Commands::Deploy
show all
- Extended by:
- Memoist
- Includes:
- StackInfo
- Defined in:
- lib/jets/commands/deploy.rb
Instance Method Summary
collapse
Methods included from StackInfo
#first_run?, #parent_stack_name, #s3_bucket, #stack_type
#apigateway, #cfn, #lambda, #logs, #s3, #s3_resource, #sns, #sqs, #sts
#lookup, #stack_exists?, #stack_in_progress?
Constructor Details
#initialize(options) ⇒ Deploy
Returns a new instance of Deploy.
5
6
7
|
# File 'lib/jets/commands/deploy.rb', line 5
def initialize(options)
@options = options
end
|
Instance Method Details
#check_dev_mode ⇒ Object
41
42
43
44
45
46
|
# File 'lib/jets/commands/deploy.rb', line 41
def check_dev_mode
if File.exist?("#{Jets.root}dev.mode")
puts "The dev.mode file exists. Please removed it and run bundle update before you deploy.".colorize(:red)
exit 1
end
end
|
#delete_minimal_stack ⇒ Object
34
35
36
37
38
39
|
# File 'lib/jets/commands/deploy.rb', line 34
def delete_minimal_stack
puts "Existing stack is in ROLLBACK_COMPLETE state from a previous failed minimal deploy. Deleting stack and continuing."
cfn.delete_stack(stack_name: stack_name)
status.wait
status.reset
end
|
#exit_unless_updateable! ⇒ Object
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
|
# File 'lib/jets/commands/deploy.rb', line 109
def exit_unless_updateable!
stack_name = Jets::Naming.parent_stack_name
exists = stack_exists?(stack_name)
return unless exists
stack = cfn.describe_stacks(stack_name: stack_name).stacks.first
status = stack["stack_status"]
if status =~ /^ROLLBACK_/ ||
status =~ /_IN_PROGRESS$/
region = `aws configure get region`.strip rescue "us-east-1"
url = "https://console.aws.amazon.com/cloudformation/home?region=#{region}#/stacks"
puts "The parent stack of the #{Jets.config.project_name.colorize(:green)} project is not in an updateable state."
puts "Stack name #{stack_name.colorize(:yellow)} status #{stack["stack_status"].colorize(:yellow)}"
puts "Here's the CloudFormation url to check for more details #{url}"
exit 1
end
end
|
#find_stack(stack_name) ⇒ Object
96
97
98
99
100
101
102
103
104
105
106
|
# File 'lib/jets/commands/deploy.rb', line 96
def find_stack(stack_name)
resp = cfn.describe_stacks(stack_name: stack_name)
resp.stacks.first
rescue Aws::CloudFormation::Errors::ValidationError => e
if e.message =~ /Stack with/ && e.message =~ /does not exist/
nil
else
raise
end
end
|
#minimal_rollback_complete? ⇒ Boolean
Checks for a few things before deciding to delete the parent stack
* Parent stack status status is ROLLBACK_COMPLETE
* Parent resources are in the DELETE_COMPLETE state
84
85
86
87
88
89
90
91
92
93
94
|
# File 'lib/jets/commands/deploy.rb', line 84
def minimal_rollback_complete?
stack = find_stack(stack_name)
return false unless stack
return false unless stack.stack_status == 'ROLLBACK_COMPLETE'
resp = cfn.describe_stack_resources(stack_name: stack_name)
resource_statuses = resp.stack_resources.map(&:resource_status).uniq
resource_statuses == ['DELETE_COMPLETE']
end
|
#run ⇒ Object
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
# File 'lib/jets/commands/deploy.rb', line 9
def run
deployment_env = Jets.config.project_namespace.colorize(:green)
puts "Deploying to Lambda #{deployment_env} environment..."
return if @options[:noop]
check_dev_mode
validate_routes!
delete_minimal_stack if minimal_rollback_complete?
exit_unless_updateable!
if first_run?
ship(stack_type: :minimal)
Jets.application.reload_configs!
end
build_code
ship(stack_type: :full, s3_bucket: s3_bucket)
end
|
#ship(stack_options) ⇒ Object
#status ⇒ Object
70
71
72
|
# File 'lib/jets/commands/deploy.rb', line 70
def status
Jets::Cfn::Status.new(stack_name)
end
|
#validate_routes! ⇒ Object
Checks that all routes are validate and have corresponding lambda functions
53
54
55
56
57
58
59
60
61
62
|
# File 'lib/jets/commands/deploy.rb', line 53
def validate_routes!
return if Jets::Router.all_routes_valid
puts "Deploy fail: The jets application contain invalid routes.".colorize(:red)
puts "Please double check the routes below map to valid controllers:"
Jets::Router.invalid_routes.each do |route|
puts " /#{route.path} => #{route.controller_name}##{route.action_name}"
end
exit 1
end
|