jets 0.8.15 → 0.8.17
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +8 -0
- data/Gemfile.lock +2 -2
- data/README.md +5 -0
- data/lib/jets.rb +1 -0
- data/lib/jets/cfn/ship.rb +2 -3
- data/lib/jets/commands/deploy.rb +54 -4
- data/lib/jets/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1c79e90582a2e523c69fc73f18e77632854a9f2af07068520cadf3f66b087542
|
4
|
+
data.tar.gz: 1f977706cd38f61a72a921486e3e318894da5a9b54ecf5d5676250997649b033
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 17346b2c0a6555166ae17d7e5e8236e44cb3a8cea385f9d619d877f4899a31566a48558b57b0cf0be8c412bbe0cdd6b594a57e835ea27a46ecb47d4209fee48e
|
7
|
+
data.tar.gz: 8edf25b912614f8536d30ce1c90f6fc10bc841077db20be03a4f61fa3d5fb2fc2ca72d0b866d2284850db07a968b3009106bb64c59ab632e426c7add0918795e
|
data/CHANGELOG.md
CHANGED
@@ -3,6 +3,14 @@
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
4
4
|
This project *loosely tries* to adhere to [Semantic Versioning](http://semver.org/), even before v1.0.
|
5
5
|
|
6
|
+
## [0.8.17]
|
7
|
+
- fix Jets.eager_load
|
8
|
+
|
9
|
+
## [0.8.16]
|
10
|
+
- add minimal deploy iam policy docs
|
11
|
+
- harden deploy, auto delete minimal stack in rollback_completed
|
12
|
+
- Merge pull request #38 from tongueroo/harden-deploy-rollbacks
|
13
|
+
|
6
14
|
## [0.8.15]
|
7
15
|
- fix route resources macro for api mode pull request #35
|
8
16
|
- remove pg dependency from jets and add as part of project Gemfile pull request #36
|
data/Gemfile.lock
CHANGED
@@ -11,7 +11,7 @@ GIT
|
|
11
11
|
PATH
|
12
12
|
remote: .
|
13
13
|
specs:
|
14
|
-
jets (0.8.
|
14
|
+
jets (0.8.17)
|
15
15
|
actionpack (>= 5.2.1)
|
16
16
|
actionview (>= 5.2.1)
|
17
17
|
activerecord (>= 5.2.1)
|
@@ -118,7 +118,7 @@ GEM
|
|
118
118
|
mini_portile2 (~> 2.3.0)
|
119
119
|
pg (0.21.0)
|
120
120
|
rack (2.0.5)
|
121
|
-
rack-proxy (0.6.
|
121
|
+
rack-proxy (0.6.5)
|
122
122
|
rack
|
123
123
|
rack-test (1.1.0)
|
124
124
|
rack (>= 1.0, < 3)
|
data/README.md
CHANGED
@@ -139,3 +139,8 @@ For more documentation, check out the official docs: [Ruby on Jets](http://rubyo
|
|
139
139
|
* [AWS Lambda Ruby Support at Native Speed with Jets](https://blog.boltops.com/2018/09/02/aws-lambda-ruby-support-at-native-speed-with-jets)
|
140
140
|
* [Jets Tutorial An Introductory CRUD App Part 1](https://blog.boltops.com/2018/09/07/jets-tutorial-crud-app-introduction-part-1)
|
141
141
|
* [Jets Tutorial Deploy to AWS Lambda Part 2](https://blog.boltops.com/2018/09/08/jets-tutorial-deploy-to-aws-lambda-part-2)
|
142
|
+
* [Jets Tutorial Debugging Logs Part 3](https://blog.boltops.com/2018/09/09/jets-tutorial-debugging-logs-part-3)
|
143
|
+
* [Jets Tutorial Background Jobs Part 4](https://blog.boltops.com/2018/09/10/jets-tutorial-background-jobs-part-4)
|
144
|
+
* [Jets Tutorial IAM Policies Part 5](https://blog.boltops.com/2018/09/11/jets-tutorial-iam-policies-part-5)
|
145
|
+
* [Jets Tutorial Function Properties Part 6](https://blog.boltops.com/2018/09/12/jets-tutorial-function-properties-part-6)
|
146
|
+
* [Jets Tutorial Extra Environments Part 7](https://blog.boltops.com/2018/09/13/jets-tutorial-extra-environments-part-7)
|
data/lib/jets.rb
CHANGED
data/lib/jets/cfn/ship.rb
CHANGED
@@ -50,7 +50,6 @@ class Jets::Cfn
|
|
50
50
|
|
51
51
|
def create_stack
|
52
52
|
# parent stack template is on filesystem and child stacks templates is on s3
|
53
|
-
template_body = IO.read(@template_path)
|
54
53
|
cfn.create_stack(stack_options)
|
55
54
|
end
|
56
55
|
time :create_stack
|
@@ -60,7 +59,7 @@ class Jets::Cfn
|
|
60
59
|
cfn.update_stack(stack_options)
|
61
60
|
rescue Aws::CloudFormation::Errors::ValidationError => e
|
62
61
|
puts "ERROR: #{e.message}".red
|
63
|
-
|
62
|
+
true # error
|
64
63
|
end
|
65
64
|
end
|
66
65
|
time :update_stack
|
@@ -125,7 +124,7 @@ class Jets::Cfn
|
|
125
124
|
puts " #{command_with_iam(capabilities)}"
|
126
125
|
|
127
126
|
puts "Please confirm (y/n)"
|
128
|
-
|
127
|
+
$stdin.gets # confirm
|
129
128
|
end
|
130
129
|
|
131
130
|
def command_with_iam(capabilities)
|
data/lib/jets/commands/deploy.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
module Jets::Commands
|
2
2
|
class Deploy
|
3
|
+
extend Memoist
|
3
4
|
include StackInfo
|
4
5
|
include Jets::Timing
|
5
6
|
|
@@ -16,7 +17,15 @@ module Jets::Commands
|
|
16
17
|
build_code
|
17
18
|
validate_routes!
|
18
19
|
|
19
|
-
#
|
20
|
+
# Delete existing rollback stack from previous bad minimal deploy
|
21
|
+
if minimal_rollback_complete?
|
22
|
+
puts "Existing stack is in ROLLBACK_COMPLETE state from a previous failed minimal deploy. Deleting stack and continuing."
|
23
|
+
cfn.delete_stack(stack_name: stack_name)
|
24
|
+
status.wait
|
25
|
+
status.reset
|
26
|
+
end
|
27
|
+
|
28
|
+
# Stack could be in a weird rollback state or in progress state
|
20
29
|
exit_unless_updateable!
|
21
30
|
|
22
31
|
ship(stack_type: :minimal) if first_run?
|
@@ -56,6 +65,44 @@ module Jets::Commands
|
|
56
65
|
end
|
57
66
|
time :ship
|
58
67
|
|
68
|
+
def status
|
69
|
+
Jets::Cfn::Status.new(stack_name)
|
70
|
+
end
|
71
|
+
memoize :status
|
72
|
+
|
73
|
+
def stack_name
|
74
|
+
Jets::Naming.parent_stack_name
|
75
|
+
end
|
76
|
+
|
77
|
+
# Checks for a few things before deciding to delete the parent stack
|
78
|
+
#
|
79
|
+
# * Parent stack status status is ROLLBACK_COMPLETE
|
80
|
+
# * Parent resources are in the DELETE_COMPLETE state
|
81
|
+
#
|
82
|
+
def minimal_rollback_complete?
|
83
|
+
stack = find_stack(stack_name)
|
84
|
+
return false unless stack
|
85
|
+
|
86
|
+
return false unless stack.stack_status == 'ROLLBACK_COMPLETE'
|
87
|
+
|
88
|
+
# Finally check if all the minimal resources in the parent template have been deleted
|
89
|
+
resp = cfn.describe_stack_resources(stack_name: stack_name)
|
90
|
+
resource_statuses = resp.stack_resources.map(&:resource_status).uniq
|
91
|
+
resource_statuses == ['DELETE_COMPLETE']
|
92
|
+
end
|
93
|
+
|
94
|
+
def find_stack(stack_name)
|
95
|
+
resp = cfn.describe_stacks(stack_name: stack_name)
|
96
|
+
resp.stacks.first
|
97
|
+
rescue Aws::CloudFormation::Errors::ValidationError => e
|
98
|
+
# example: Stack with id demo-dev does not exist
|
99
|
+
if e.message =~ /Stack with/ && e.message =~ /does not exist/
|
100
|
+
nil
|
101
|
+
else
|
102
|
+
raise
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
59
106
|
# All CloudFormation states listed here: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-describing-stacks.html
|
60
107
|
def exit_unless_updateable!
|
61
108
|
stack_name = Jets::Naming.parent_stack_name
|
@@ -66,9 +113,12 @@ module Jets::Commands
|
|
66
113
|
status = stack["stack_status"]
|
67
114
|
if status =~ /^ROLLBACK_/ ||
|
68
115
|
status =~ /_IN_PROGRESS$/
|
69
|
-
|
70
|
-
|
71
|
-
|
116
|
+
region = `aws configure get region`.strip rescue "us-east-1"
|
117
|
+
url = "https://console.aws.amazon.com/cloudformation/home?region=#{region}#/stacks"
|
118
|
+
puts "The parent stack of the #{Jets.config.project_name.colorize(:green)} project is not in an updateable state."
|
119
|
+
puts "Stack name #{stack_name.colorize(:yellow)} status #{stack["stack_status"].colorize(:yellow)}"
|
120
|
+
puts "Here's the CloudFormation url to check for more details #{url}"
|
121
|
+
exit 1
|
72
122
|
end
|
73
123
|
end
|
74
124
|
end
|
data/lib/jets/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jets
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.8.
|
4
|
+
version: 0.8.17
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tung Nguyen
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-09-
|
11
|
+
date: 2018-09-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: actionpack
|