cf_deployer 1.6.0 → 2.0.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 +5 -5
- data/.github/workflows/ci.yml +29 -0
- data/.github/workflows/publish.yml +40 -0
- data/.rspec +4 -0
- data/ChangeLog.md +7 -0
- data/QUICKSTART.md +1 -1
- data/Rakefile +1 -1
- data/cf_deployer.gemspec +16 -10
- data/fixtures/vcr_cassettes/aws_call_count/driver/auto_scaling_group/healthy_instance_count.yml +2 -2
- data/lib/cf_deployer/cli.rb +1 -1
- data/lib/cf_deployer/config_loader.rb +2 -2
- data/lib/cf_deployer/config_validation.rb +1 -1
- data/lib/cf_deployer/driver/auto_scaling_group.rb +22 -26
- data/lib/cf_deployer/driver/cloud_formation_driver.rb +28 -18
- data/lib/cf_deployer/driver/elb_driver.rb +11 -4
- data/lib/cf_deployer/driver/instance.rb +4 -3
- data/lib/cf_deployer/driver/route53_driver.rb +17 -9
- data/lib/cf_deployer/logger.rb +10 -11
- data/lib/cf_deployer/stack.rb +18 -30
- data/lib/cf_deployer/status_presenter.rb +1 -1
- data/lib/cf_deployer/version.rb +1 -1
- data/lib/cf_deployer.rb +10 -7
- data/spec/aws_call_count_spec_helper.rb +14 -2
- data/spec/fakes/instance.rb +5 -4
- data/spec/fakes/route53_client.rb +4 -7
- data/spec/spec_helper.rb +11 -2
- data/spec/unit/application_spec.rb +9 -9
- data/spec/unit/component_spec.rb +3 -3
- data/spec/unit/config_loader_spec.rb +70 -69
- data/spec/unit/deployment_strategy/auto_scaling_group_swap_spec.rb +10 -10
- data/spec/unit/deployment_strategy/base_spec.rb +17 -18
- data/spec/unit/deployment_strategy/cname_swap_spec.rb +9 -9
- data/spec/unit/deployment_strategy/create_or_update_spec.rb +8 -8
- data/spec/unit/driver/auto_scaling_group_spec.rb +75 -65
- data/spec/unit/driver/aws_sdk_v3_spec.rb +163 -0
- data/spec/unit/driver/cloud_formation_spec.rb +19 -17
- data/spec/unit/driver/dry_run_spec.rb +8 -8
- data/spec/unit/driver/elb_spec.rb +10 -4
- data/spec/unit/driver/instance_spec.rb +1 -7
- data/spec/unit/driver/route53_spec.rb +34 -25
- data/spec/unit/hook_spec.rb +3 -3
- data/spec/unit/stack_spec.rb +22 -21
- metadata +134 -56
- data/.travis.yml +0 -20
|
@@ -6,50 +6,59 @@ describe CfDeployer::Driver::Route53 do
|
|
|
6
6
|
describe ".find_alias_target" do
|
|
7
7
|
it "should raise an error when the target zone cannot be found" do
|
|
8
8
|
route53 = double('route53')
|
|
9
|
-
allow(
|
|
9
|
+
allow(Aws::Route53::Client).to receive(:new) { route53 }
|
|
10
10
|
|
|
11
|
-
allow(route53).to
|
|
11
|
+
allow(route53).to receive_message_chain(:list_hosted_zones_by_name, :hosted_zones) { [] }
|
|
12
12
|
|
|
13
13
|
expect { subject.find_alias_target('abc.com', 'foo') }.to raise_error('Target zone not found!')
|
|
14
14
|
end
|
|
15
15
|
|
|
16
16
|
it "should get empty alias target when the target host cannot be found" do
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
allow(zone).to receive(:resource_record_sets) { [] }
|
|
17
|
+
resource_record_sets = double('resource_record_sets', :resource_record_sets => [])
|
|
18
|
+
zone = double('zone', :id => '/hostedzone/hostedzoneid', :name => 'target.com.')
|
|
20
19
|
|
|
21
20
|
route53 = double('route53')
|
|
22
|
-
allow(
|
|
23
|
-
allow(route53).to
|
|
21
|
+
allow(Aws::Route53::Client).to receive(:new) { route53 }
|
|
22
|
+
allow(route53).to receive_message_chain(:list_hosted_zones_by_name, :hosted_zones) { [zone] }
|
|
23
|
+
allow(route53).to receive(:list_resource_record_sets).with(hash_including(hosted_zone_id: '/hostedzone/hostedzoneid')) { resource_record_sets }
|
|
24
24
|
|
|
25
|
-
subject.find_alias_target('target.com', 'foo').
|
|
25
|
+
expect(subject.find_alias_target('target.com', 'foo')).to be_nil
|
|
26
26
|
end
|
|
27
27
|
|
|
28
28
|
it "should get alias target" do
|
|
29
29
|
host = double('host', :name => 'foo.target.com.', :alias_target => { :dns_name => 'abc.com.'})
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
30
|
+
resource_record_sets = double('resource_record_sets', :resource_record_sets => [host])
|
|
31
|
+
zone = double('zone', :id => '/hostedzone/hostedzoneid', :name => 'target.com.')
|
|
32
|
+
route53 = double('route53')
|
|
33
|
+
allow(route53).to receive_message_chain(:list_hosted_zones_by_name, :hosted_zones) { [zone] }
|
|
34
|
+
allow(route53).to receive(:list_resource_record_sets).with(hash_including(hosted_zone_id: '/hostedzone/hostedzoneid')) { resource_record_sets }
|
|
35
|
+
allow(Aws::Route53::Client).to receive(:new) { route53 }
|
|
33
36
|
|
|
34
|
-
subject.find_alias_target('Target.com', 'Foo.target.com').
|
|
37
|
+
expect(subject.find_alias_target('Target.com', 'Foo.target.com')).to eq('abc.com')
|
|
35
38
|
end
|
|
36
39
|
|
|
37
40
|
it "should get a nil alias target when the record exists but has no alias target" do
|
|
38
41
|
host = double('host', :name => 'foo.target.com.', :alias_target => nil)
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
+
resource_record_sets = double('resource_record_sets', :resource_record_sets => [host])
|
|
43
|
+
zone = double('zone', :id => '/hostedzone/hostedzoneid', :name => 'target.com.')
|
|
44
|
+
route53 = double('route53')
|
|
45
|
+
allow(route53).to receive_message_chain(:list_hosted_zones_by_name, :hosted_zones) { [zone] }
|
|
46
|
+
allow(route53).to receive(:list_resource_record_sets).with(hash_including(hosted_zone_id: '/hostedzone/hostedzoneid')) { resource_record_sets }
|
|
47
|
+
allow(Aws::Route53::Client).to receive(:new) { route53 }
|
|
42
48
|
|
|
43
|
-
subject.find_alias_target('target.com', 'foo.target.com').
|
|
49
|
+
expect(subject.find_alias_target('target.com', 'foo.target.com')).to be_nil
|
|
44
50
|
end
|
|
45
51
|
|
|
46
52
|
it "should get alias target when zone and host name having trailing dot" do
|
|
47
53
|
host = double('host', :name => 'foo.target.com.', :alias_target => { :dns_name => 'abc.com.'})
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
54
|
+
resource_record_sets = double('resource_record_sets', :resource_record_sets => [host])
|
|
55
|
+
zone = double('zone', :id => '/hostedzone/hostedzoneid', :name => 'target.com.')
|
|
56
|
+
route53 = double('route53')
|
|
57
|
+
allow(route53).to receive_message_chain(:list_hosted_zones_by_name, :hosted_zones) { [zone] }
|
|
58
|
+
allow(route53).to receive(:list_resource_record_sets).with(hash_including(hosted_zone_id: '/hostedzone/hostedzoneid')) { resource_record_sets }
|
|
59
|
+
allow(Aws::Route53::Client).to receive(:new) { route53 }
|
|
51
60
|
|
|
52
|
-
subject.find_alias_target('target.com.', 'foo.target.com.').
|
|
61
|
+
expect(subject.find_alias_target('target.com.', 'foo.target.com.')).to eq('abc.com')
|
|
53
62
|
end
|
|
54
63
|
|
|
55
64
|
end
|
|
@@ -57,25 +66,25 @@ describe CfDeployer::Driver::Route53 do
|
|
|
57
66
|
describe ".set_alias_target" do
|
|
58
67
|
it "should raise an error when the target-zone cannot be found" do
|
|
59
68
|
route53 = double('route53')
|
|
60
|
-
allow(
|
|
69
|
+
allow(Aws::Route53::Client).to receive(:new) { route53 }
|
|
61
70
|
|
|
62
|
-
allow(route53).to
|
|
71
|
+
allow(route53).to receive_message_chain(:list_hosted_zones_by_name, :hosted_zones) { [] }
|
|
63
72
|
|
|
64
73
|
expect { subject.set_alias_target('abc.com', 'foo', 'abc', 'def') }.to raise_error('Target zone not found!')
|
|
65
74
|
end
|
|
66
75
|
|
|
67
76
|
it "should attempt multiple times" do
|
|
68
|
-
failing_route53 = Fakes::AWSRoute53.new(times_to_fail: 5, hosted_zones: [double(name: 'abc.com.', path: '')])
|
|
77
|
+
failing_route53 = Fakes::AWSRoute53.new(times_to_fail: 5, hosted_zones: [double(id: '/hostedzone/hostedzoneid', name: 'abc.com.', path: '')])
|
|
69
78
|
route53_driver = CfDeployer::Driver::Route53.new(failing_route53)
|
|
70
79
|
|
|
71
80
|
allow(route53_driver).to receive(:sleep)
|
|
72
81
|
route53_driver.set_alias_target('abc.com', 'foo', 'abc', 'def')
|
|
73
82
|
|
|
74
|
-
expect(failing_route53.
|
|
83
|
+
expect(failing_route53.fail_counter).to eq(6)
|
|
75
84
|
end
|
|
76
85
|
|
|
77
86
|
it "should raise an exception when failing more than 20 times" do
|
|
78
|
-
failing_route53 = Fakes::AWSRoute53.new(times_to_fail: 21, hosted_zones: [double(name: 'abc.com.', path: '')])
|
|
87
|
+
failing_route53 = Fakes::AWSRoute53.new(times_to_fail: 21, hosted_zones: [double(id: '/hostedzone/hostedzoneid', name: 'abc.com.', path: '')])
|
|
79
88
|
route53_driver = CfDeployer::Driver::Route53.new(failing_route53)
|
|
80
89
|
|
|
81
90
|
allow(route53_driver).to receive(:sleep)
|
data/spec/unit/hook_spec.rb
CHANGED
|
@@ -3,7 +3,7 @@ require 'spec_helper'
|
|
|
3
3
|
|
|
4
4
|
describe CfDeployer::Hook do
|
|
5
5
|
before :all do
|
|
6
|
-
Dir.mkdir 'tmp' unless Dir.
|
|
6
|
+
Dir.mkdir 'tmp' unless Dir.exist?('tmp')
|
|
7
7
|
@file = File.expand_path("../../../tmp/test_code.rb", __FILE__)
|
|
8
8
|
end
|
|
9
9
|
it 'should eval string as hook' do
|
|
@@ -67,8 +67,8 @@ describe CfDeployer::Hook do
|
|
|
67
67
|
it 'should catch SyntaxError during eval and show nicer output' do
|
|
68
68
|
context = { app: 'myApp' }
|
|
69
69
|
the_hook = CfDeployer::Hook.new('MyHook', "puts 'hello")
|
|
70
|
-
the_hook.
|
|
71
|
-
expect { the_hook.run(context) }.to raise_error
|
|
70
|
+
expect(the_hook).to receive(:error_document)
|
|
71
|
+
expect { the_hook.run(context) }.to raise_error(SyntaxError)
|
|
72
72
|
end
|
|
73
73
|
|
|
74
74
|
it 'should catch NoMethodError during eval and show nicer output' do
|
data/spec/unit/stack_spec.rb
CHANGED
|
@@ -26,10 +26,10 @@ describe CfDeployer::Stack do
|
|
|
26
26
|
expected_opt = {
|
|
27
27
|
:disable_rollback => true,
|
|
28
28
|
:capabilities => [],
|
|
29
|
-
:
|
|
30
|
-
:tags => [{
|
|
31
|
-
{
|
|
32
|
-
:parameters => {:foo => 'bar'}
|
|
29
|
+
:notification_arns => ['topic1_arn', 'topic2_arn'],
|
|
30
|
+
:tags => [{:key => 'app', :value => 'app1'},
|
|
31
|
+
{:key => 'env', :value => 'dev'}],
|
|
32
|
+
:parameters => [{:parameter_key => 'foo', :parameter_value => 'bar'}]
|
|
33
33
|
}
|
|
34
34
|
expect(@cf_driver).to receive(:create_stack).with(template, expected_opt)
|
|
35
35
|
stack = CfDeployer::Stack.new('test','web', @config)
|
|
@@ -47,10 +47,10 @@ describe CfDeployer::Stack do
|
|
|
47
47
|
expected_opt = {
|
|
48
48
|
:disable_rollback => true,
|
|
49
49
|
:capabilities => [],
|
|
50
|
-
:
|
|
51
|
-
:tags => [{
|
|
52
|
-
{
|
|
53
|
-
:parameters => {:foo => 'bar'},
|
|
50
|
+
:notification_arns => ['topic1_arn', 'topic2_arn'],
|
|
51
|
+
:tags => [{:key => 'app', :value => 'app1'},
|
|
52
|
+
{:key => 'env', :value => 'dev'}],
|
|
53
|
+
:parameters => [{:parameter_key => 'foo', :parameter_value => 'bar'}],
|
|
54
54
|
:stack_policy_body => create_policy
|
|
55
55
|
}
|
|
56
56
|
expect(@cf_driver).to receive(:create_stack).with(template, expected_opt)
|
|
@@ -65,7 +65,7 @@ describe CfDeployer::Stack do
|
|
|
65
65
|
allow(@cf_driver).to receive(:stack_status) { :create_complete }
|
|
66
66
|
expected_opt = {
|
|
67
67
|
:capabilities => [],
|
|
68
|
-
:parameters => {:foo => 'bar'}
|
|
68
|
+
:parameters => [{:parameter_key => 'foo', :parameter_value => 'bar'}]
|
|
69
69
|
}
|
|
70
70
|
expect(@cf_driver).to receive(:update_stack).with(template, expected_opt)
|
|
71
71
|
stack = CfDeployer::Stack.new('test','web', @config)
|
|
@@ -79,7 +79,7 @@ describe CfDeployer::Stack do
|
|
|
79
79
|
allow(@cf_driver).to receive(:stack_status) { :create_complete }
|
|
80
80
|
expected_opt = {
|
|
81
81
|
:capabilities => [],
|
|
82
|
-
:parameters => {:foo => 'bar'}
|
|
82
|
+
:parameters => [{:parameter_key => 'foo', :parameter_value => 'bar'}]
|
|
83
83
|
}
|
|
84
84
|
expect(@cf_driver).to receive(:update_stack).with(template, expected_opt).and_return(true)
|
|
85
85
|
stack = CfDeployer::Stack.new('test','web', @config)
|
|
@@ -94,7 +94,7 @@ describe CfDeployer::Stack do
|
|
|
94
94
|
allow(@cf_driver).to receive(:stack_status) { :create_complete }
|
|
95
95
|
expected_opt = {
|
|
96
96
|
:capabilities => [],
|
|
97
|
-
:parameters => {:foo => 'bar'}
|
|
97
|
+
:parameters => [{:parameter_key => 'foo', :parameter_value => 'bar'}]
|
|
98
98
|
}
|
|
99
99
|
expect(@cf_driver).to receive(:update_stack).with(template, expected_opt).and_return(false)
|
|
100
100
|
stack = CfDeployer::Stack.new('test','web', @config)
|
|
@@ -109,7 +109,7 @@ describe CfDeployer::Stack do
|
|
|
109
109
|
allow(@cf_driver).to receive(:stack_status) { :update_rollback_complete }
|
|
110
110
|
expected_opt = {
|
|
111
111
|
:capabilities => [],
|
|
112
|
-
:parameters => {:foo => 'bar'}
|
|
112
|
+
:parameters => [{:parameter_key => 'foo', :parameter_value => 'bar'}]
|
|
113
113
|
}
|
|
114
114
|
expect(@cf_driver).to receive(:update_stack).with(template, expected_opt).and_return(false)
|
|
115
115
|
stack = CfDeployer::Stack.new('test','web', @config)
|
|
@@ -126,7 +126,7 @@ describe CfDeployer::Stack do
|
|
|
126
126
|
allow(@cf_driver).to receive(:stack_status) { :create_complete }
|
|
127
127
|
expected_opt = {
|
|
128
128
|
:capabilities => [],
|
|
129
|
-
:parameters => {:foo => 'bar'},
|
|
129
|
+
:parameters => [{:parameter_key => 'foo', :parameter_value => 'bar'}],
|
|
130
130
|
:stack_policy_during_update_body => override_policy
|
|
131
131
|
}
|
|
132
132
|
expect(@cf_driver).to receive(:update_stack).with(template, expected_opt)
|
|
@@ -168,7 +168,7 @@ describe CfDeployer::Stack do
|
|
|
168
168
|
context '#output' do
|
|
169
169
|
it 'should get output value' do
|
|
170
170
|
expect(@cf_driver).to receive(:query_output).with('mykey'){ 'myvalue'}
|
|
171
|
-
@stack.output('mykey').
|
|
171
|
+
expect(@stack.output('mykey')).to eq('myvalue')
|
|
172
172
|
end
|
|
173
173
|
|
|
174
174
|
it 'should get error if output is empty' do
|
|
@@ -180,12 +180,12 @@ describe CfDeployer::Stack do
|
|
|
180
180
|
context '#find_output' do
|
|
181
181
|
it 'should get output value' do
|
|
182
182
|
expect(@cf_driver).to receive(:query_output).with('mykey'){ 'myvalue'}
|
|
183
|
-
@stack.find_output('mykey').
|
|
183
|
+
expect(@stack.find_output('mykey')).to eq('myvalue')
|
|
184
184
|
end
|
|
185
185
|
|
|
186
186
|
it 'should return nil for non-existent value' do
|
|
187
187
|
expect(@cf_driver).to receive(:query_output).with('mykey'){ nil }
|
|
188
|
-
@stack.find_output('mykey').
|
|
188
|
+
expect(@stack.find_output('mykey')).to be(nil)
|
|
189
189
|
end
|
|
190
190
|
end
|
|
191
191
|
|
|
@@ -216,18 +216,19 @@ describe CfDeployer::Stack do
|
|
|
216
216
|
@stack.delete
|
|
217
217
|
end
|
|
218
218
|
|
|
219
|
-
it 'should be fine
|
|
220
|
-
allow(@stack).to receive(:exists?).and_return(true, true)
|
|
221
|
-
allow(@stack).to receive(:
|
|
219
|
+
it 'should be fine when the stack disappears while waiting for deletion' do
|
|
220
|
+
allow(@stack).to receive(:exists?).and_return(true, true, false)
|
|
221
|
+
allow(@stack).to receive(:sleep)
|
|
222
|
+
allow(@cf_driver).to receive(:stack_status) { nil }
|
|
222
223
|
expect(@cf_driver).to receive(:delete_stack)
|
|
223
224
|
expect {@stack.delete}.not_to raise_error
|
|
224
225
|
end
|
|
225
226
|
|
|
226
227
|
it 'should raise an error if a validation error is thrown not about stack does not exist' do
|
|
227
228
|
allow(@stack).to receive(:exists?).and_return(true, true)
|
|
228
|
-
allow(@stack).to receive(:stack_status).and_raise(
|
|
229
|
+
allow(@stack).to receive(:stack_status).and_raise(Aws::CloudFormation::Errors::InvalidOperationException.new(nil, 'I am an error'))
|
|
229
230
|
expect(@cf_driver).to receive(:delete_stack)
|
|
230
|
-
expect {@stack.delete}.to raise_error
|
|
231
|
+
expect {@stack.delete}.to raise_error(Aws::CloudFormation::Errors::InvalidOperationException)
|
|
231
232
|
end
|
|
232
233
|
end
|
|
233
234
|
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: cf_deployer
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version:
|
|
4
|
+
version: 2.0.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Jame Brechtel
|
|
@@ -11,162 +11,238 @@ authors:
|
|
|
11
11
|
autorequire:
|
|
12
12
|
bindir: bin
|
|
13
13
|
cert_chain: []
|
|
14
|
-
date:
|
|
14
|
+
date: 2026-11-03 00:00:00.000000000 Z
|
|
15
15
|
dependencies:
|
|
16
16
|
- !ruby/object:Gem::Dependency
|
|
17
|
-
name: aws-sdk
|
|
17
|
+
name: aws-sdk-autoscaling
|
|
18
18
|
requirement: !ruby/object:Gem::Requirement
|
|
19
19
|
requirements:
|
|
20
|
-
- -
|
|
20
|
+
- - "~>"
|
|
21
21
|
- !ruby/object:Gem::Version
|
|
22
|
-
version: 1.
|
|
22
|
+
version: '1.86'
|
|
23
23
|
type: :runtime
|
|
24
24
|
prerelease: false
|
|
25
25
|
version_requirements: !ruby/object:Gem::Requirement
|
|
26
26
|
requirements:
|
|
27
|
-
- -
|
|
27
|
+
- - "~>"
|
|
28
28
|
- !ruby/object:Gem::Version
|
|
29
|
-
version: 1.
|
|
29
|
+
version: '1.86'
|
|
30
30
|
- !ruby/object:Gem::Dependency
|
|
31
|
-
name:
|
|
31
|
+
name: aws-sdk-cloudformation
|
|
32
32
|
requirement: !ruby/object:Gem::Requirement
|
|
33
33
|
requirements:
|
|
34
|
-
- -
|
|
34
|
+
- - "~>"
|
|
35
35
|
- !ruby/object:Gem::Version
|
|
36
|
-
version: '
|
|
36
|
+
version: '1.76'
|
|
37
37
|
type: :runtime
|
|
38
38
|
prerelease: false
|
|
39
39
|
version_requirements: !ruby/object:Gem::Requirement
|
|
40
40
|
requirements:
|
|
41
|
-
- -
|
|
41
|
+
- - "~>"
|
|
42
42
|
- !ruby/object:Gem::Version
|
|
43
|
-
version: '
|
|
43
|
+
version: '1.76'
|
|
44
44
|
- !ruby/object:Gem::Dependency
|
|
45
|
-
name:
|
|
45
|
+
name: aws-sdk-core
|
|
46
|
+
requirement: !ruby/object:Gem::Requirement
|
|
47
|
+
requirements:
|
|
48
|
+
- - "~>"
|
|
49
|
+
- !ruby/object:Gem::Version
|
|
50
|
+
version: '3.170'
|
|
51
|
+
type: :runtime
|
|
52
|
+
prerelease: false
|
|
53
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
54
|
+
requirements:
|
|
55
|
+
- - "~>"
|
|
56
|
+
- !ruby/object:Gem::Version
|
|
57
|
+
version: '3.170'
|
|
58
|
+
- !ruby/object:Gem::Dependency
|
|
59
|
+
name: aws-sdk-ec2
|
|
60
|
+
requirement: !ruby/object:Gem::Requirement
|
|
61
|
+
requirements:
|
|
62
|
+
- - "~>"
|
|
63
|
+
- !ruby/object:Gem::Version
|
|
64
|
+
version: '1.365'
|
|
65
|
+
type: :runtime
|
|
66
|
+
prerelease: false
|
|
67
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
68
|
+
requirements:
|
|
69
|
+
- - "~>"
|
|
70
|
+
- !ruby/object:Gem::Version
|
|
71
|
+
version: '1.365'
|
|
72
|
+
- !ruby/object:Gem::Dependency
|
|
73
|
+
name: aws-sdk-elasticloadbalancing
|
|
74
|
+
requirement: !ruby/object:Gem::Requirement
|
|
75
|
+
requirements:
|
|
76
|
+
- - "~>"
|
|
77
|
+
- !ruby/object:Gem::Version
|
|
78
|
+
version: '1.42'
|
|
79
|
+
type: :runtime
|
|
80
|
+
prerelease: false
|
|
81
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
82
|
+
requirements:
|
|
83
|
+
- - "~>"
|
|
84
|
+
- !ruby/object:Gem::Version
|
|
85
|
+
version: '1.42'
|
|
86
|
+
- !ruby/object:Gem::Dependency
|
|
87
|
+
name: aws-sdk-route53
|
|
88
|
+
requirement: !ruby/object:Gem::Requirement
|
|
89
|
+
requirements:
|
|
90
|
+
- - "~>"
|
|
91
|
+
- !ruby/object:Gem::Version
|
|
92
|
+
version: '1.71'
|
|
93
|
+
type: :runtime
|
|
94
|
+
prerelease: false
|
|
95
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
96
|
+
requirements:
|
|
97
|
+
- - "~>"
|
|
98
|
+
- !ruby/object:Gem::Version
|
|
99
|
+
version: '1.71'
|
|
100
|
+
- !ruby/object:Gem::Dependency
|
|
101
|
+
name: diffy
|
|
46
102
|
requirement: !ruby/object:Gem::Requirement
|
|
47
103
|
requirements:
|
|
48
|
-
- -
|
|
104
|
+
- - ">="
|
|
49
105
|
- !ruby/object:Gem::Version
|
|
50
106
|
version: '0'
|
|
51
107
|
type: :runtime
|
|
52
108
|
prerelease: false
|
|
53
109
|
version_requirements: !ruby/object:Gem::Requirement
|
|
54
110
|
requirements:
|
|
55
|
-
- -
|
|
111
|
+
- - ">="
|
|
56
112
|
- !ruby/object:Gem::Version
|
|
57
113
|
version: '0'
|
|
114
|
+
- !ruby/object:Gem::Dependency
|
|
115
|
+
name: logger
|
|
116
|
+
requirement: !ruby/object:Gem::Requirement
|
|
117
|
+
requirements:
|
|
118
|
+
- - "~>"
|
|
119
|
+
- !ruby/object:Gem::Version
|
|
120
|
+
version: '1.6'
|
|
121
|
+
type: :runtime
|
|
122
|
+
prerelease: false
|
|
123
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
124
|
+
requirements:
|
|
125
|
+
- - "~>"
|
|
126
|
+
- !ruby/object:Gem::Version
|
|
127
|
+
version: '1.6'
|
|
58
128
|
- !ruby/object:Gem::Dependency
|
|
59
129
|
name: rainbow
|
|
60
130
|
requirement: !ruby/object:Gem::Requirement
|
|
61
131
|
requirements:
|
|
62
|
-
- -
|
|
132
|
+
- - ">="
|
|
63
133
|
- !ruby/object:Gem::Version
|
|
64
134
|
version: '0'
|
|
65
135
|
type: :runtime
|
|
66
136
|
prerelease: false
|
|
67
137
|
version_requirements: !ruby/object:Gem::Requirement
|
|
68
138
|
requirements:
|
|
69
|
-
- -
|
|
139
|
+
- - ">="
|
|
70
140
|
- !ruby/object:Gem::Version
|
|
71
141
|
version: '0'
|
|
72
142
|
- !ruby/object:Gem::Dependency
|
|
73
|
-
name:
|
|
143
|
+
name: thor
|
|
74
144
|
requirement: !ruby/object:Gem::Requirement
|
|
75
145
|
requirements:
|
|
76
|
-
- -
|
|
146
|
+
- - ">="
|
|
77
147
|
- !ruby/object:Gem::Version
|
|
78
148
|
version: '0'
|
|
79
149
|
type: :runtime
|
|
80
150
|
prerelease: false
|
|
81
151
|
version_requirements: !ruby/object:Gem::Requirement
|
|
82
152
|
requirements:
|
|
83
|
-
- -
|
|
153
|
+
- - ">="
|
|
84
154
|
- !ruby/object:Gem::Version
|
|
85
155
|
version: '0'
|
|
86
156
|
- !ruby/object:Gem::Dependency
|
|
87
|
-
name:
|
|
157
|
+
name: pry
|
|
88
158
|
requirement: !ruby/object:Gem::Requirement
|
|
89
159
|
requirements:
|
|
90
|
-
- - ~>
|
|
160
|
+
- - "~>"
|
|
91
161
|
- !ruby/object:Gem::Version
|
|
92
|
-
version: 0.
|
|
162
|
+
version: '0.13'
|
|
93
163
|
type: :development
|
|
94
164
|
prerelease: false
|
|
95
165
|
version_requirements: !ruby/object:Gem::Requirement
|
|
96
166
|
requirements:
|
|
97
|
-
- - ~>
|
|
167
|
+
- - "~>"
|
|
98
168
|
- !ruby/object:Gem::Version
|
|
99
|
-
version: 0.
|
|
169
|
+
version: '0.13'
|
|
100
170
|
- !ruby/object:Gem::Dependency
|
|
101
|
-
name:
|
|
171
|
+
name: rake
|
|
102
172
|
requirement: !ruby/object:Gem::Requirement
|
|
103
173
|
requirements:
|
|
104
|
-
- - ~>
|
|
174
|
+
- - "~>"
|
|
105
175
|
- !ruby/object:Gem::Version
|
|
106
|
-
version: 0
|
|
176
|
+
version: '13.0'
|
|
107
177
|
type: :development
|
|
108
178
|
prerelease: false
|
|
109
179
|
version_requirements: !ruby/object:Gem::Requirement
|
|
110
180
|
requirements:
|
|
111
|
-
- - ~>
|
|
181
|
+
- - "~>"
|
|
112
182
|
- !ruby/object:Gem::Version
|
|
113
|
-
version: 0
|
|
183
|
+
version: '13.0'
|
|
114
184
|
- !ruby/object:Gem::Dependency
|
|
115
185
|
name: rspec
|
|
116
186
|
requirement: !ruby/object:Gem::Requirement
|
|
117
187
|
requirements:
|
|
118
|
-
- -
|
|
188
|
+
- - "~>"
|
|
119
189
|
- !ruby/object:Gem::Version
|
|
120
|
-
version:
|
|
190
|
+
version: '3.13'
|
|
121
191
|
type: :development
|
|
122
192
|
prerelease: false
|
|
123
193
|
version_requirements: !ruby/object:Gem::Requirement
|
|
124
194
|
requirements:
|
|
125
|
-
- -
|
|
195
|
+
- - "~>"
|
|
126
196
|
- !ruby/object:Gem::Version
|
|
127
|
-
version:
|
|
197
|
+
version: '3.13'
|
|
128
198
|
- !ruby/object:Gem::Dependency
|
|
129
|
-
name:
|
|
199
|
+
name: vcr
|
|
130
200
|
requirement: !ruby/object:Gem::Requirement
|
|
131
201
|
requirements:
|
|
132
|
-
- - ~>
|
|
202
|
+
- - "~>"
|
|
133
203
|
- !ruby/object:Gem::Version
|
|
134
|
-
version:
|
|
204
|
+
version: '6.0'
|
|
135
205
|
type: :development
|
|
136
206
|
prerelease: false
|
|
137
207
|
version_requirements: !ruby/object:Gem::Requirement
|
|
138
208
|
requirements:
|
|
139
|
-
- - ~>
|
|
209
|
+
- - "~>"
|
|
140
210
|
- !ruby/object:Gem::Version
|
|
141
|
-
version:
|
|
211
|
+
version: '6.0'
|
|
142
212
|
- !ruby/object:Gem::Dependency
|
|
143
213
|
name: webmock
|
|
144
214
|
requirement: !ruby/object:Gem::Requirement
|
|
145
215
|
requirements:
|
|
146
|
-
- - ~>
|
|
216
|
+
- - "~>"
|
|
147
217
|
- !ruby/object:Gem::Version
|
|
148
|
-
version:
|
|
218
|
+
version: '3.11'
|
|
149
219
|
type: :development
|
|
150
220
|
prerelease: false
|
|
151
221
|
version_requirements: !ruby/object:Gem::Requirement
|
|
152
222
|
requirements:
|
|
153
|
-
- - ~>
|
|
223
|
+
- - "~>"
|
|
154
224
|
- !ruby/object:Gem::Version
|
|
155
|
-
version:
|
|
225
|
+
version: '3.11'
|
|
156
226
|
- !ruby/object:Gem::Dependency
|
|
157
|
-
name:
|
|
227
|
+
name: yard
|
|
158
228
|
requirement: !ruby/object:Gem::Requirement
|
|
159
229
|
requirements:
|
|
160
|
-
- - ~>
|
|
230
|
+
- - "~>"
|
|
161
231
|
- !ruby/object:Gem::Version
|
|
162
|
-
version:
|
|
232
|
+
version: '0.9'
|
|
233
|
+
- - ">="
|
|
234
|
+
- !ruby/object:Gem::Version
|
|
235
|
+
version: 0.9.44
|
|
163
236
|
type: :development
|
|
164
237
|
prerelease: false
|
|
165
238
|
version_requirements: !ruby/object:Gem::Requirement
|
|
166
239
|
requirements:
|
|
167
|
-
- - ~>
|
|
240
|
+
- - "~>"
|
|
241
|
+
- !ruby/object:Gem::Version
|
|
242
|
+
version: '0.9'
|
|
243
|
+
- - ">="
|
|
168
244
|
- !ruby/object:Gem::Version
|
|
169
|
-
version:
|
|
245
|
+
version: 0.9.44
|
|
170
246
|
description: For automatic blue green deployment flow on CloudFormation.
|
|
171
247
|
email:
|
|
172
248
|
- jbrechtel@gmail.com
|
|
@@ -178,8 +254,10 @@ executables:
|
|
|
178
254
|
extensions: []
|
|
179
255
|
extra_rdoc_files: []
|
|
180
256
|
files:
|
|
181
|
-
- .
|
|
182
|
-
- .
|
|
257
|
+
- ".github/workflows/ci.yml"
|
|
258
|
+
- ".github/workflows/publish.yml"
|
|
259
|
+
- ".gitignore"
|
|
260
|
+
- ".rspec"
|
|
183
261
|
- ChangeLog.md
|
|
184
262
|
- DETAILS.md
|
|
185
263
|
- FAQ.md
|
|
@@ -236,6 +314,7 @@ files:
|
|
|
236
314
|
- spec/unit/deployment_strategy/create_or_update_spec.rb
|
|
237
315
|
- spec/unit/deployment_strategy/deployment_strategy_spec.rb
|
|
238
316
|
- spec/unit/driver/auto_scaling_group_spec.rb
|
|
317
|
+
- spec/unit/driver/aws_sdk_v3_spec.rb
|
|
239
318
|
- spec/unit/driver/cloud_formation_spec.rb
|
|
240
319
|
- spec/unit/driver/dry_run_spec.rb
|
|
241
320
|
- spec/unit/driver/elb_spec.rb
|
|
@@ -255,17 +334,16 @@ require_paths:
|
|
|
255
334
|
- lib
|
|
256
335
|
required_ruby_version: !ruby/object:Gem::Requirement
|
|
257
336
|
requirements:
|
|
258
|
-
- -
|
|
337
|
+
- - ">="
|
|
259
338
|
- !ruby/object:Gem::Version
|
|
260
|
-
version: '
|
|
339
|
+
version: '3.3'
|
|
261
340
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
262
341
|
requirements:
|
|
263
|
-
- -
|
|
342
|
+
- - ">="
|
|
264
343
|
- !ruby/object:Gem::Version
|
|
265
344
|
version: '0'
|
|
266
345
|
requirements: []
|
|
267
|
-
|
|
268
|
-
rubygems_version: 2.0.14
|
|
346
|
+
rubygems_version: 3.5.22
|
|
269
347
|
signing_key:
|
|
270
348
|
specification_version: 4
|
|
271
349
|
summary: Support multiple components deployment using CloudFormation templates with
|
|
@@ -290,6 +368,7 @@ test_files:
|
|
|
290
368
|
- spec/unit/deployment_strategy/create_or_update_spec.rb
|
|
291
369
|
- spec/unit/deployment_strategy/deployment_strategy_spec.rb
|
|
292
370
|
- spec/unit/driver/auto_scaling_group_spec.rb
|
|
371
|
+
- spec/unit/driver/aws_sdk_v3_spec.rb
|
|
293
372
|
- spec/unit/driver/cloud_formation_spec.rb
|
|
294
373
|
- spec/unit/driver/dry_run_spec.rb
|
|
295
374
|
- spec/unit/driver/elb_spec.rb
|
|
@@ -299,4 +378,3 @@ test_files:
|
|
|
299
378
|
- spec/unit/hook_spec.rb
|
|
300
379
|
- spec/unit/stack_spec.rb
|
|
301
380
|
- spec/unit/status_presenter_spec.rb
|
|
302
|
-
has_rdoc:
|
data/.travis.yml
DELETED
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
language: ruby
|
|
2
|
-
rvm:
|
|
3
|
-
- 1.9.3
|
|
4
|
-
- 2.0.0
|
|
5
|
-
- 2.1.7
|
|
6
|
-
- 2.2.3
|
|
7
|
-
- ruby-head
|
|
8
|
-
- jruby-19mode
|
|
9
|
-
- jruby-9.0.1.0
|
|
10
|
-
- rbx-2
|
|
11
|
-
before_install:
|
|
12
|
-
- gem install bundler
|
|
13
|
-
matrix:
|
|
14
|
-
allow_failures:
|
|
15
|
-
- rvm: ruby-head
|
|
16
|
-
- rvm: rbx-2
|
|
17
|
-
- rvm: jruby-9.0.1.0
|
|
18
|
-
fast_finish: true
|
|
19
|
-
script:
|
|
20
|
-
- bundle exec rake
|