jets 0.8.18 → 0.9.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 +4 -4
- data/.gitmodules +0 -3
- data/CHANGELOG.md +20 -1
- data/Gemfile.lock +6 -2
- data/README/prerelease.md +6 -0
- data/README/testing.md +41 -0
- data/Rakefile +9 -1
- data/jets.gemspec +1 -0
- data/lib/jets.rb +17 -18
- data/lib/jets/application.rb +26 -3
- data/lib/jets/aws_services.rb +26 -59
- data/lib/jets/aws_services/stack_status.rb +52 -0
- data/lib/jets/builders.rb +3 -2
- data/lib/jets/builders/handler_generator.rb +38 -2
- data/lib/jets/builders/shared_deducer.rb +32 -0
- data/lib/jets/cfn/builders.rb +3 -1
- data/lib/jets/cfn/builders/api_deployment_builder.rb +1 -1
- data/lib/jets/cfn/builders/api_gateway_builder.rb +1 -1
- data/lib/jets/cfn/builders/base_child_builder.rb +37 -7
- data/lib/jets/cfn/builders/controller_builder.rb +6 -1
- data/lib/jets/cfn/builders/function_builder.rb +5 -0
- data/lib/jets/cfn/builders/interface.rb +5 -6
- data/lib/jets/cfn/builders/job_builder.rb +5 -0
- data/lib/jets/cfn/builders/parent_builder.rb +17 -16
- data/lib/jets/cfn/builders/rule_builder.rb +6 -1
- data/lib/jets/cfn/builders/shared_builder.rb +14 -0
- data/lib/jets/commands.rb +9 -8
- data/lib/jets/commands/build.rb +36 -14
- data/lib/jets/commands/console.rb +1 -0
- data/lib/jets/commands/help/runner.md +17 -0
- data/lib/jets/commands/main.rb +7 -0
- data/lib/jets/commands/new.rb +39 -19
- data/lib/jets/commands/runner.rb +18 -0
- data/lib/jets/commands/sequence.rb +27 -1
- data/lib/jets/commands/templates/skeleton/.rspec +3 -0
- data/lib/jets/commands/templates/skeleton/Gemfile.tt +0 -1
- data/lib/jets/commands/templates/skeleton/app/jobs/application_job.rb +2 -0
- data/lib/jets/commands/templates/skeleton/config/application.rb.tt +2 -1
- data/lib/jets/commands/templates/skeleton/config/routes.rb +5 -1
- data/lib/jets/commands/templates/skeleton/spec/spec_helper.rb.tt +5 -4
- data/lib/jets/core.rb +8 -6
- data/lib/jets/default/application.rb +1 -0
- data/lib/jets/generator.rb +1 -1
- data/lib/jets/inflections.rb +23 -0
- data/lib/jets/job/dsl.rb +69 -47
- data/lib/jets/klass.rb +6 -1
- data/lib/jets/lambda/dsl.rb +102 -34
- data/lib/jets/lambda/function_constructor.rb +2 -2
- data/lib/jets/lambda/task.rb +10 -5
- data/lib/jets/naming.rb +13 -2
- data/lib/jets/processors/deducer.rb +13 -2
- data/lib/jets/processors/main_processor.rb +1 -1
- data/lib/jets/rails_overrides.rb +1 -1
- data/lib/jets/resource.rb +20 -5
- data/lib/jets/resource/api_gateway/deployment.rb +0 -1
- data/lib/jets/resource/associated.rb +26 -0
- data/lib/jets/resource/base.rb +12 -0
- data/lib/jets/resource/child_stack.rb +2 -0
- data/lib/jets/resource/child_stack/api_deployment.rb +9 -15
- data/lib/jets/resource/child_stack/api_gateway.rb +8 -8
- data/lib/jets/resource/child_stack/app_class.rb +41 -16
- data/lib/jets/resource/child_stack/base.rb +24 -0
- data/lib/jets/resource/child_stack/shared.rb +90 -0
- data/lib/jets/resource/config.rb +4 -0
- data/lib/jets/resource/config/config_rule.rb +66 -0
- data/lib/jets/resource/config/managed_rule.rb +15 -0
- data/lib/jets/resource/events.rb +3 -0
- data/lib/jets/resource/events/rule.rb +31 -0
- data/lib/jets/resource/iam/application_role.rb +2 -2
- data/lib/jets/resource/iam/base_role_definition.rb +4 -2
- data/lib/jets/resource/iam/class_role.rb +50 -2
- data/lib/jets/resource/iam/function_role.rb +28 -0
- data/lib/jets/resource/iam/policy_document.rb +0 -4
- data/lib/jets/resource/permission.rb +12 -6
- data/lib/jets/resource/replacer.rb +4 -0
- data/lib/jets/resource/sns.rb +3 -0
- data/lib/jets/resource/standardizer.rb +42 -0
- data/lib/jets/router.rb +9 -1
- data/lib/jets/rule/dsl.rb +51 -78
- data/lib/jets/stack.rb +105 -0
- data/lib/jets/stack/builder.rb +38 -0
- data/lib/jets/stack/definition.rb +50 -0
- data/lib/jets/stack/function.rb +60 -0
- data/lib/jets/stack/main.rb +5 -0
- data/lib/jets/stack/main/dsl.rb +33 -0
- data/lib/jets/stack/main/extensions/base.rb +45 -0
- data/lib/jets/stack/main/extensions/cloudwatch.rb +19 -0
- data/lib/jets/stack/main/extensions/lambda.rb +69 -0
- data/lib/jets/stack/main/extensions/sns.rb +12 -0
- data/lib/jets/stack/main/extensions/sqs.rb +8 -0
- data/lib/jets/stack/output.rb +38 -0
- data/lib/jets/stack/output/dsl.rb +19 -0
- data/lib/jets/stack/output/lookup.rb +36 -0
- data/lib/jets/stack/parameter.rb +38 -0
- data/lib/jets/stack/parameter/dsl.rb +42 -0
- data/lib/jets/stack/resource.rb +30 -0
- data/lib/jets/stack/resource/dsl.rb +19 -0
- data/lib/jets/version.rb +1 -1
- metadata +53 -4
- data/support/clean +0 -3
- data/support/console +0 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a34b4cffc9a96f0d4ce4821f38be3fef03a84a5dfa779a0ce4574b7c41fd8212
|
4
|
+
data.tar.gz: 77e840eb549a58d91c9899b79b0104f9d33e903fa4c1d53b171a168b0416fc64
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0bbf43c980eef26615b9eb8c4167c578da79c3cdf5af17d866e1fd7276618c593997f51e7a31316c96d1f561a27fb3d829ad1ea4e2b5a5f77fd2f6b7cbf906f5
|
7
|
+
data.tar.gz: 9cca888aaca0c205722c93858aad544ace8d8fe71255806a373d18461744070e5105ef055e63e1d27a4d3683a2d509063ac78403cb33ef54b869e44d0c5ec112
|
data/.gitmodules
CHANGED
data/CHANGELOG.md
CHANGED
@@ -3,8 +3,27 @@
|
|
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.9.0]
|
7
|
+
- Remove class name from the namespace. So namespace only has method name now. NOTE: This means upgrading from 0.8.x to 0.9.x requires a blue-green update.
|
8
|
+
- Add upgrading docs.
|
9
|
+
- Stack DSL: To support the concept of Custom Shared Resources. Supports extensions and simple functions also.
|
10
|
+
- Stack DSL: Allow for control of DependsOn attribute.
|
11
|
+
- Stack DSL: `MyStack.lookup` method
|
12
|
+
- Associated resource extensions support
|
13
|
+
- Associated resources multiple form support: long, medium, short
|
14
|
+
- Add `jets new --mode`: 3 modes: html, api, job. Remove the `--api`
|
15
|
+
- IAM policies inherit from higher precedence and superclasses.
|
16
|
+
- Add `jets runner` command
|
17
|
+
- Fix AWS Config Rules support
|
18
|
+
- Rename event_rule to events_rule
|
19
|
+
- Remove submodule project demo fixture in favor of spec/fixtures/apps/franky
|
20
|
+
- Add spec/bin/integration.sh - Simpler than the CI one and more immediately useful
|
21
|
+
- Improve AWS Config Rules docs
|
22
|
+
- Add config rules namespace setting
|
23
|
+
- Custom inflections support
|
24
|
+
|
6
25
|
## [0.8.18]
|
7
|
-
- improve performance of Jets.aws.region
|
26
|
+
- improve performance of Jets.aws.region, pull request #40 from tongueroo/dir-glob
|
8
27
|
|
9
28
|
## [0.8.17]
|
10
29
|
- fix Jets.eager_load
|
data/Gemfile.lock
CHANGED
@@ -11,7 +11,7 @@ GIT
|
|
11
11
|
PATH
|
12
12
|
remote: .
|
13
13
|
specs:
|
14
|
-
jets (0.
|
14
|
+
jets (0.9.0)
|
15
15
|
actionpack (>= 5.2.1)
|
16
16
|
actionview (>= 5.2.1)
|
17
17
|
activerecord (>= 5.2.1)
|
@@ -21,6 +21,7 @@ PATH
|
|
21
21
|
aws-sdk-dynamodb
|
22
22
|
aws-sdk-lambda
|
23
23
|
aws-sdk-s3
|
24
|
+
aws-sdk-sns
|
24
25
|
colorize
|
25
26
|
dotenv
|
26
27
|
gems
|
@@ -89,6 +90,9 @@ GEM
|
|
89
90
|
aws-sdk-core (~> 3, >= 3.26.0)
|
90
91
|
aws-sdk-kms (~> 1)
|
91
92
|
aws-sigv4 (~> 1.0)
|
93
|
+
aws-sdk-sns (1.5.0)
|
94
|
+
aws-sdk-core (~> 3, >= 3.26.0)
|
95
|
+
aws-sigv4 (~> 1.0)
|
92
96
|
aws-sigv4 (1.0.3)
|
93
97
|
builder (3.2.3)
|
94
98
|
byebug (10.0.2)
|
@@ -170,4 +174,4 @@ DEPENDENCIES
|
|
170
174
|
webpacker!
|
171
175
|
|
172
176
|
BUNDLED WITH
|
173
|
-
1.16.
|
177
|
+
1.16.3
|
data/README/testing.md
ADDED
@@ -0,0 +1,41 @@
|
|
1
|
+
# Testing
|
2
|
+
|
3
|
+
## Unit
|
4
|
+
|
5
|
+
To run unit tests:
|
6
|
+
|
7
|
+
bundle exec rspec
|
8
|
+
|
9
|
+
## Integration
|
10
|
+
|
11
|
+
### Locally
|
12
|
+
|
13
|
+
To run the integration tests locally, you need to create a new Jets CRUD project and start the server:
|
14
|
+
|
15
|
+
jets new demo
|
16
|
+
cd demo
|
17
|
+
jets generate scaffold Post title:string
|
18
|
+
jets server
|
19
|
+
|
20
|
+
Then you can run the postman tests:
|
21
|
+
|
22
|
+
spec/integration/local.sh
|
23
|
+
|
24
|
+
The integration_local.sh script ensures that the necessary data exists for the postman integration test to pass. It ultimately calls:
|
25
|
+
|
26
|
+
newman run spec/integration/fixtures/postman/collection.json -e spec/integration/fixtures/postman/environment.json
|
27
|
+
|
28
|
+
The integration test results should look something like this:
|
29
|
+
|
30
|
+
* [Jets Integration Test Results](https://gist.github.com/tongueroo/fcea2b2f48342d1448d3f258fcd6536c)
|
31
|
+
|
32
|
+
### Remotely
|
33
|
+
|
34
|
+
Then you can deploy the jets app and test it on real AWS Lambda.
|
35
|
+
|
36
|
+
cp ~/environment/.env.development.remote . # assumes you have a .env.development.remote
|
37
|
+
jets deploy
|
38
|
+
|
39
|
+
Run the remote integration script:
|
40
|
+
|
41
|
+
spec/integration/remote.sh
|
data/Rakefile
CHANGED
@@ -5,6 +5,13 @@ task :default => :spec
|
|
5
5
|
|
6
6
|
RSpec::Core::RakeTask.new
|
7
7
|
|
8
|
+
namespace :spec do
|
9
|
+
desc "Run integration test"
|
10
|
+
task :integration do
|
11
|
+
system("spec/bin/integration.sh")
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
8
15
|
require_relative "lib/jets"
|
9
16
|
desc "Generates cli reference docs as markdown"
|
10
17
|
task :docs do
|
@@ -17,4 +24,5 @@ require 'jets/rdoc'
|
|
17
24
|
|
18
25
|
RDoc::Task.new do |rdoc|
|
19
26
|
rdoc.options += Jets::Rdoc.options
|
20
|
-
end
|
27
|
+
end
|
28
|
+
|
data/jets.gemspec
CHANGED
@@ -36,6 +36,7 @@ Gem::Specification.new do |spec|
|
|
36
36
|
spec.add_dependency "aws-sdk-dynamodb"
|
37
37
|
spec.add_dependency "aws-sdk-lambda"
|
38
38
|
spec.add_dependency "aws-sdk-s3"
|
39
|
+
spec.add_dependency "aws-sdk-sns"
|
39
40
|
spec.add_dependency "colorize"
|
40
41
|
spec.add_dependency "dotenv"
|
41
42
|
spec.add_dependency "hashie"
|
data/lib/jets.rb
CHANGED
@@ -11,43 +11,42 @@ module Jets
|
|
11
11
|
# When we update Jets::RUBY_VERSION, need to update lambdagem/base.rb: def jets_ruby_version also
|
12
12
|
RUBY_VERSION = "2.5.0"
|
13
13
|
|
14
|
-
autoload :
|
15
|
-
autoload :Commands, "jets/commands"
|
16
|
-
|
14
|
+
autoload :Application, "jets/application"
|
17
15
|
autoload :AwsInfo, "jets/aws_info"
|
18
16
|
autoload :AwsServices, "jets/aws_services"
|
17
|
+
autoload :Booter, 'jets/booter'
|
19
18
|
autoload :Builders, 'jets/builders'
|
20
19
|
autoload :Call, "jets/call"
|
21
20
|
autoload :Cfn, 'jets/cfn'
|
21
|
+
autoload :CLI, "jets/cli"
|
22
|
+
autoload :Commands, "jets/commands"
|
22
23
|
autoload :Controller, 'jets/controller'
|
24
|
+
autoload :Core, "jets/core"
|
25
|
+
autoload :Dotenv, 'jets/dotenv'
|
23
26
|
autoload :Erb, "jets/erb"
|
24
27
|
autoload :Generator, "jets/generator"
|
28
|
+
autoload :IO, "jets/io"
|
25
29
|
autoload :Job, 'jets/job'
|
30
|
+
autoload :Klass, 'jets/klass'
|
26
31
|
autoload :Lambda, 'jets/lambda'
|
32
|
+
autoload :Logger, "jets/logger"
|
27
33
|
autoload :Naming, 'jets/naming'
|
28
34
|
autoload :PolyFun, 'jets/poly_fun'
|
35
|
+
autoload :Preheat, "jets/preheat"
|
29
36
|
autoload :Processors, 'jets/processors'
|
37
|
+
autoload :Rdoc, "jets/rdoc"
|
38
|
+
autoload :Resource, "jets/resource"
|
30
39
|
autoload :Route, "jets/route"
|
31
40
|
autoload :Router, "jets/router"
|
41
|
+
autoload :RubyServer, "jets/ruby_server"
|
32
42
|
autoload :Rule, 'jets/rule'
|
33
43
|
autoload :Server, "jets/server"
|
34
|
-
|
35
|
-
autoload :Application, "jets/application"
|
36
|
-
autoload :Booter, 'jets/booter'
|
37
|
-
autoload :Core, "jets/core"
|
38
|
-
autoload :Dotenv, 'jets/dotenv'
|
39
|
-
autoload :Klass, 'jets/klass'
|
40
|
-
autoload :Util, "jets/util"
|
44
|
+
autoload :Stack, "jets/stack"
|
41
45
|
autoload :Timing, "jets/timing"
|
42
|
-
autoload :
|
43
|
-
|
44
|
-
|
45
|
-
autoload :RubyServer, "jets/ruby_server"
|
46
|
-
autoload :IO, "jets/io"
|
47
|
-
autoload :Logger, "jets/logger"
|
46
|
+
autoload :Util, "jets/util"
|
47
|
+
autoload :Inflections, "jets/inflections"
|
48
48
|
|
49
|
-
|
50
|
-
autoload :Rdoc, "jets/rdoc"
|
49
|
+
extend Core # root, logger, etc
|
51
50
|
end
|
52
51
|
|
53
52
|
require "jets/core_ext/kernel"
|
data/lib/jets/application.rb
CHANGED
@@ -11,11 +11,16 @@ class Jets::Application
|
|
11
11
|
end
|
12
12
|
|
13
13
|
def setup!
|
14
|
+
load_inflections
|
14
15
|
load_configs # load config object so following methods can use it
|
15
16
|
setup_auto_load_paths
|
16
17
|
load_routes
|
17
18
|
end
|
18
19
|
|
20
|
+
def load_inflections
|
21
|
+
Jets::Inflections.load!
|
22
|
+
end
|
23
|
+
|
19
24
|
def config
|
20
25
|
config = ActiveSupport::OrderedOptions.new
|
21
26
|
|
@@ -30,6 +35,9 @@ class Jets::Application
|
|
30
35
|
'https://gems.lambdagems.com'
|
31
36
|
]
|
32
37
|
|
38
|
+
config.inflections = ActiveSupport::OrderedOptions.new
|
39
|
+
config.inflections.irregular = {}
|
40
|
+
|
33
41
|
config
|
34
42
|
end
|
35
43
|
memoize :config
|
@@ -91,12 +99,27 @@ class Jets::Application
|
|
91
99
|
|
92
100
|
# Must set default iam_policy here instead of `def config` because we need access to
|
93
101
|
# the project_namespace and if we call it from `def config` we get an infinit loop
|
94
|
-
config.iam_policy ||=
|
95
|
-
|
102
|
+
config.iam_policy ||= default_iam_policy(project_namespace)
|
103
|
+
config.managed_policy_definitions ||= [] # default empty
|
104
|
+
end
|
105
|
+
|
106
|
+
def default_iam_policy(project_namespace)
|
107
|
+
logs = {
|
96
108
|
action: ["logs:*"],
|
97
109
|
effect: "Allow",
|
98
110
|
resource: "arn:aws:logs:#{Jets.aws.region}:#{Jets.aws.account}:log-group:/aws/lambda/#{project_namespace}-*",
|
99
|
-
}
|
111
|
+
}
|
112
|
+
policies = [logs]
|
113
|
+
|
114
|
+
if Jets::Stack.has_resources?
|
115
|
+
cloudformation = {
|
116
|
+
action: ["cloudformation:DescribeStacks"],
|
117
|
+
effect: "Allow",
|
118
|
+
resource: "arn:aws:cloudformation:#{Jets.aws.region}:#{Jets.aws.account}:stack/#{project_namespace}*",
|
119
|
+
}
|
120
|
+
policies << cloudformation
|
121
|
+
end
|
122
|
+
policies
|
100
123
|
end
|
101
124
|
|
102
125
|
# It is pretty easy to attempt to set environment variables without
|
data/lib/jets/aws_services.rb
CHANGED
@@ -1,81 +1,48 @@
|
|
1
|
-
require "aws-sdk-s3"
|
2
1
|
require "aws-sdk-cloudformation"
|
3
2
|
require "aws-sdk-cloudwatchlogs"
|
4
3
|
require "aws-sdk-lambda"
|
4
|
+
require "aws-sdk-s3"
|
5
5
|
require "aws-sdk-sts"
|
6
|
+
# Not used in Jets internally but convenient for shared resources
|
7
|
+
require "aws-sdk-sns"
|
6
8
|
|
7
9
|
module Jets::AwsServices
|
8
|
-
|
9
|
-
|
10
|
-
|
10
|
+
autoload :StackStatus, 'jets/aws_services/stack_status'
|
11
|
+
include StackStatus
|
12
|
+
extend Memoist
|
11
13
|
|
12
|
-
def
|
13
|
-
|
14
|
+
def cfn
|
15
|
+
Aws::CloudFormation::Client.new
|
14
16
|
end
|
17
|
+
memoize :cfn
|
15
18
|
|
16
|
-
def
|
17
|
-
|
19
|
+
def logs
|
20
|
+
Aws::CloudWatchLogs::Client.new
|
18
21
|
end
|
22
|
+
memoize :logs
|
19
23
|
|
20
24
|
def lambda
|
21
|
-
|
25
|
+
Aws::Lambda::Client.new
|
22
26
|
end
|
27
|
+
memoize :lambda
|
23
28
|
|
24
|
-
def
|
25
|
-
|
29
|
+
def s3
|
30
|
+
Aws::S3::Client.new
|
26
31
|
end
|
32
|
+
memoize :s3
|
27
33
|
|
28
|
-
def
|
29
|
-
|
34
|
+
def s3_resource
|
35
|
+
Aws::S3::Resource.new
|
30
36
|
end
|
37
|
+
memoize :s3_resource
|
31
38
|
|
32
|
-
def
|
33
|
-
|
34
|
-
|
35
|
-
exist = nil
|
36
|
-
begin
|
37
|
-
# When the stack does not exist an exception is raised. Example:
|
38
|
-
# Aws::CloudFormation::Errors::ValidationError: Stack with id blah does not exist
|
39
|
-
resp = cfn.describe_stacks(stack_name: stack_name)
|
40
|
-
exist = true
|
41
|
-
rescue Aws::CloudFormation::Errors::ValidationError => e
|
42
|
-
if e.message =~ /does not exist/
|
43
|
-
exist = false
|
44
|
-
elsif e.message.include?("'stackName' failed to satisfy constraint")
|
45
|
-
# Example of e.message when describe_stack with invalid stack name
|
46
|
-
# "1 validation error detected: Value 'instance_and_route53' at 'stackName' failed to satisfy constraint: Member must satisfy regular expression pattern: [a-zA-Z][-a-zA-Z0-9]*|arn:[-a-zA-Z0-9:/._+]*"
|
47
|
-
puts "Invalid stack name: #{stack_name}"
|
48
|
-
puts "Full error message: #{e.message}"
|
49
|
-
exit 1
|
50
|
-
else
|
51
|
-
raise # re-raise exception because unsure what other errors can happen
|
52
|
-
end
|
53
|
-
end
|
54
|
-
exist
|
39
|
+
def sts
|
40
|
+
Aws::STS::Client.new
|
55
41
|
end
|
42
|
+
memoize :sts
|
56
43
|
|
57
|
-
|
58
|
-
|
59
|
-
# Returns resp so we can use it to grab data about the stack without calling api again.
|
60
|
-
def stack_in_progress?(stack_name)
|
61
|
-
return true if !stack_exists?(stack_name)
|
62
|
-
|
63
|
-
# Assumes stack exists
|
64
|
-
resp = cfn.describe_stacks(stack_name: stack_name)
|
65
|
-
status = resp.stacks[0].stack_status
|
66
|
-
if status =~ /_IN_PROGRESS$/
|
67
|
-
puts "The '#{stack_name}' stack status is #{status}. " \
|
68
|
-
"Please wait until the stack is ready and try again.".colorize(:red)
|
69
|
-
exit 0
|
70
|
-
elsif resp.stacks[0].outputs.empty? && status != 'ROLLBACK_COMPLETE'
|
71
|
-
# This Happens when the miminal stack fails at the very beginning.
|
72
|
-
# There is no s3 bucket at all. User should delete the stack.
|
73
|
-
puts "The minimal stack failed to create. Please delete the stack first and try again. " \
|
74
|
-
"You can delete the CloudFormation stack or use the `jets delete` command"
|
75
|
-
exit 0
|
76
|
-
else
|
77
|
-
true
|
78
|
-
end
|
44
|
+
def sns
|
45
|
+
Aws::SNS::Client.new
|
79
46
|
end
|
80
|
-
|
47
|
+
memoize :sns
|
81
48
|
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
module Jets::AwsServices
|
2
|
+
module StackStatus
|
3
|
+
def stack_exists?(stack_name)
|
4
|
+
return false if ENV['TEST']
|
5
|
+
|
6
|
+
exist = nil
|
7
|
+
begin
|
8
|
+
# When the stack does not exist an exception is raised. Example:
|
9
|
+
# Aws::CloudFormation::Errors::ValidationError: Stack with id blah does not exist
|
10
|
+
resp = cfn.describe_stacks(stack_name: stack_name)
|
11
|
+
exist = true
|
12
|
+
rescue Aws::CloudFormation::Errors::ValidationError => e
|
13
|
+
if e.message =~ /does not exist/
|
14
|
+
exist = false
|
15
|
+
elsif e.message.include?("'stackName' failed to satisfy constraint")
|
16
|
+
# Example of e.message when describe_stack with invalid stack name
|
17
|
+
# "1 validation error detected: Value 'instance_and_route53' at 'stackName' failed to satisfy constraint: Member must satisfy regular expression pattern: [a-zA-Z][-a-zA-Z0-9]*|arn:[-a-zA-Z0-9:/._+]*"
|
18
|
+
puts "Invalid stack name: #{stack_name}"
|
19
|
+
puts "Full error message: #{e.message}"
|
20
|
+
exit 1
|
21
|
+
else
|
22
|
+
raise # re-raise exception because unsure what other errors can happen
|
23
|
+
end
|
24
|
+
end
|
25
|
+
exist
|
26
|
+
end
|
27
|
+
|
28
|
+
# All CloudFormation states listed here: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-describing-stacks.html
|
29
|
+
#
|
30
|
+
# Returns resp so we can use it to grab data about the stack without calling api again.
|
31
|
+
def stack_in_progress?(stack_name)
|
32
|
+
return true if !stack_exists?(stack_name)
|
33
|
+
|
34
|
+
# Assumes stack exists
|
35
|
+
resp = cfn.describe_stacks(stack_name: stack_name)
|
36
|
+
status = resp.stacks[0].stack_status
|
37
|
+
if status =~ /_IN_PROGRESS$/
|
38
|
+
puts "The '#{stack_name}' stack status is #{status}. " \
|
39
|
+
"Please wait until the stack is ready and try again.".colorize(:red)
|
40
|
+
exit 0
|
41
|
+
elsif resp.stacks[0].outputs.empty? && status != 'ROLLBACK_COMPLETE'
|
42
|
+
# This Happens when the miminal stack fails at the very beginning.
|
43
|
+
# There is no s3 bucket at all. User should delete the stack.
|
44
|
+
puts "The minimal stack failed to create. Please delete the stack first and try again. " \
|
45
|
+
"You can delete the CloudFormation stack or use the `jets delete` command"
|
46
|
+
exit 0
|
47
|
+
else
|
48
|
+
true
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
data/lib/jets/builders.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
class Jets::Builders
|
2
|
-
autoload :Deducer, "jets/builders/deducer"
|
3
|
-
autoload :HandlerGenerator, "jets/builders/handler_generator"
|
4
2
|
autoload :CodeBuilder, "jets/builders/code_builder"
|
3
|
+
autoload :Deducer, "jets/builders/deducer"
|
5
4
|
autoload :GemReplacer, "jets/builders/gem_replacer"
|
5
|
+
autoload :HandlerGenerator, "jets/builders/handler_generator"
|
6
|
+
autoload :SharedDeducer, "jets/builders/shared_deducer"
|
6
7
|
end
|