automan 2.3.5 → 2.3.6
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/Rakefile +0 -5
- data/automan.gemspec +3 -3
- data/lib/automan.rb +0 -1
- data/lib/automan/base.rb +3 -7
- data/lib/automan/beanstalk/deployer.rb +1 -1
- data/lib/automan/beanstalk/package.rb +1 -1
- data/lib/automan/beanstalk/router.rb +1 -1
- data/lib/automan/cli/snapper.rb +23 -3
- data/lib/automan/cli/stacker.rb +0 -19
- data/lib/automan/cloudformation/launcher.rb +3 -6
- data/lib/automan/cloudformation/replacer.rb +1 -1
- data/lib/automan/cloudformation/terminator.rb +1 -1
- data/lib/automan/ec2/image.rb +3 -3
- data/lib/automan/mixins/aws_caller.rb +7 -21
- data/lib/automan/rds/snapshot.rb +25 -35
- data/lib/automan/s3/downloader.rb +1 -10
- data/lib/automan/version.rb +1 -1
- data/spec/beanstalk/application_spec.rb +17 -17
- data/spec/beanstalk/configuration_spec.rb +24 -24
- data/spec/beanstalk/deployer_spec.rb +65 -65
- data/spec/beanstalk/router_spec.rb +19 -18
- data/spec/beanstalk/terminator_spec.rb +16 -16
- data/spec/beanstalk/uploader_spec.rb +13 -13
- data/spec/beanstalk/version_spec.rb +10 -8
- data/spec/cloudformation/launcher_spec.rb +65 -63
- data/spec/cloudformation/replacer_spec.rb +10 -10
- data/spec/cloudformation/terminator_spec.rb +23 -23
- data/spec/cloudformation/uploader_spec.rb +13 -13
- data/spec/ec2/image_spec.rb +55 -55
- data/spec/ec2/instance_spec.rb +17 -17
- data/spec/mixins/aws_caller_spec.rb +9 -9
- data/spec/mixins/utils_spec.rb +28 -27
- data/spec/rds/snapshot_spec.rb +46 -44
- metadata +9 -22
- data/.ruby-gemset +0 -1
- data/.ruby-version +0 -1
- data/.travis.yml +0 -5
- data/lib/automan/elasticache/router.rb +0 -79
- data/spec/elasticache/router_spec.rb +0 -29
- data/templates/stacker/.env.example +0 -14
- data/templates/stacker/.gitignore +0 -2
- data/templates/stacker/.ruby-gemset.tt +0 -1
- data/templates/stacker/.ruby-version +0 -1
- data/templates/stacker/Gemfile +0 -4
- data/templates/stacker/bin/%app_name%.tt +0 -62
- data/templates/stacker/bin/launch_%app_name%.sh.tt +0 -12
@@ -23,10 +23,10 @@ describe Automan::Beanstalk::Configuration do
|
|
23
23
|
describe '#config_template_exists?' do
|
24
24
|
|
25
25
|
it 'returns false if raises InvalidParameterValue with missing config template message' do
|
26
|
+
c.eb = double(:eb)
|
26
27
|
error = AWS::ElasticBeanstalk::Errors::InvalidParameterValue.new('No Configuration Template named')
|
27
|
-
|
28
|
-
|
29
|
-
expect(subject.config_template_exists?).to be_falsey
|
28
|
+
c.eb.stub(:describe_configuration_settings).and_raise(error)
|
29
|
+
c.config_template_exists?.should be_false
|
30
30
|
end
|
31
31
|
end
|
32
32
|
|
@@ -48,51 +48,51 @@ describe Automan::Beanstalk::Configuration do
|
|
48
48
|
}
|
49
49
|
]
|
50
50
|
|
51
|
-
|
51
|
+
c.fix_config_keys(config_before).should eq(config_after)
|
52
52
|
end
|
53
53
|
end
|
54
54
|
|
55
55
|
describe '#create' do
|
56
56
|
it 'does not create if configuration exists' do
|
57
|
-
|
58
|
-
|
59
|
-
|
57
|
+
c.stub(:config_template_exists?).and_return(true)
|
58
|
+
c.should_not_receive(:create_config_template)
|
59
|
+
c.create
|
60
60
|
end
|
61
61
|
|
62
62
|
it 'does create if configuration does not exist' do
|
63
|
-
|
64
|
-
|
65
|
-
|
63
|
+
c.stub(:config_template_exists?).and_return(false)
|
64
|
+
c.should_receive(:create_config_template)
|
65
|
+
c.create
|
66
66
|
end
|
67
67
|
end
|
68
68
|
|
69
69
|
describe '#delete' do
|
70
70
|
it 'does delete if configuration exists' do
|
71
|
-
|
72
|
-
|
73
|
-
|
71
|
+
c.stub(:config_template_exists?).and_return(true)
|
72
|
+
c.should_receive(:delete_config_template)
|
73
|
+
c.delete
|
74
74
|
end
|
75
75
|
|
76
76
|
it 'does not delete if configuration does not exist' do
|
77
|
-
|
78
|
-
|
79
|
-
|
77
|
+
c.stub(:config_template_exists?).and_return(false)
|
78
|
+
c.should_not_receive(:delete_config_template)
|
79
|
+
c.delete
|
80
80
|
end
|
81
81
|
end
|
82
82
|
|
83
83
|
describe '#update' do
|
84
84
|
it 'deletes configuration and recreates it if it exists' do
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
85
|
+
c.stub(:config_template_exists?).and_return(true)
|
86
|
+
c.should_receive(:delete_config_template)
|
87
|
+
c.should_receive(:create_config_template)
|
88
|
+
c.update
|
89
89
|
end
|
90
90
|
|
91
91
|
it 'does not try to delete configuration if it does not exist' do
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
92
|
+
c.stub(:config_template_exists?).and_return(false)
|
93
|
+
c.should_not_receive(:delete_config_template)
|
94
|
+
c.should_receive(:create_config_template)
|
95
|
+
c.update
|
96
96
|
end
|
97
97
|
end
|
98
98
|
end
|
@@ -2,59 +2,59 @@ require "automan"
|
|
2
2
|
|
3
3
|
describe Automan::Beanstalk::Deployer do
|
4
4
|
|
5
|
-
it {
|
6
|
-
it {
|
7
|
-
it {
|
8
|
-
it {
|
9
|
-
it {
|
10
|
-
it {
|
11
|
-
it {
|
12
|
-
it {
|
13
|
-
it {
|
14
|
-
it {
|
15
|
-
it {
|
16
|
-
it {
|
17
|
-
it {
|
5
|
+
it { should respond_to :name }
|
6
|
+
it { should respond_to :version_label }
|
7
|
+
it { should respond_to :package }
|
8
|
+
it { should respond_to :environment }
|
9
|
+
it { should respond_to :manifest }
|
10
|
+
it { should respond_to :read_manifest }
|
11
|
+
it { should respond_to :manifest_exists? }
|
12
|
+
it { should respond_to :package_exists? }
|
13
|
+
it { should respond_to :environment_status }
|
14
|
+
it { should respond_to :configuration_template }
|
15
|
+
it { should respond_to :deploy }
|
16
|
+
it { should respond_to :update_environment }
|
17
|
+
it { should respond_to :create_environment }
|
18
18
|
|
19
19
|
# Constraint: Must be from 4 to 23 characters in length.
|
20
20
|
# The name can contain only letters, numbers, and hyphens.
|
21
21
|
# It cannot start or end with a hyphen.
|
22
22
|
describe '#eb_environment_name' do
|
23
|
-
subject() { Automan::Beanstalk::Deployer.new }
|
23
|
+
subject(:bd) { Automan::Beanstalk::Deployer.new }
|
24
24
|
|
25
25
|
it "is at least 4 characters" do
|
26
|
-
|
27
|
-
|
28
|
-
|
26
|
+
bd.name = "a"
|
27
|
+
bd.environment = "a"
|
28
|
+
bd.eb_environment_name.length.should be >= 4
|
29
29
|
end
|
30
30
|
|
31
31
|
it "is no more than 23 characters" do
|
32
|
-
|
33
|
-
|
34
|
-
|
32
|
+
bd.name = "a" * 23
|
33
|
+
bd.environment = "dev"
|
34
|
+
bd.eb_environment_name.length.should be <= 23
|
35
35
|
end
|
36
36
|
|
37
37
|
it "contains only letters, numbers, and hyphens" do
|
38
|
-
|
39
|
-
|
40
|
-
|
38
|
+
bd.name = '@#$%^foo_bar!$%&&E.'
|
39
|
+
bd.environment = 'prod.baz'
|
40
|
+
bd.eb_environment_name.should match(/[a-z0-9-]+/)
|
41
41
|
end
|
42
42
|
|
43
43
|
it "cannot start or end with a hyphen" do
|
44
|
-
|
45
|
-
|
46
|
-
|
44
|
+
bd.name = '--foo'
|
45
|
+
bd.environment = 'bar--'
|
46
|
+
bd.eb_environment_name.should match(/^[^-].*[^-]$/)
|
47
47
|
end
|
48
48
|
|
49
49
|
it "is still at least 4 characters even after removing restricted strings" do
|
50
|
-
|
51
|
-
|
52
|
-
|
50
|
+
bd.name = '--f'
|
51
|
+
bd.environment = '-'
|
52
|
+
bd.eb_environment_name.length.should be >= 4
|
53
53
|
end
|
54
54
|
end
|
55
55
|
|
56
56
|
describe '#read_manifest' do
|
57
|
-
subject() do
|
57
|
+
subject(:d) do
|
58
58
|
AWS.stub!
|
59
59
|
d = Automan::Beanstalk::Deployer.new
|
60
60
|
d.logger = Logger.new('/dev/null')
|
@@ -62,23 +62,23 @@ describe Automan::Beanstalk::Deployer do
|
|
62
62
|
end
|
63
63
|
|
64
64
|
it 'raises MissingManifestError if the manifest is missing' do
|
65
|
-
|
65
|
+
d.stub(:manifest_exists?).and_return(false)
|
66
66
|
expect {
|
67
|
-
|
67
|
+
d.read_manifest
|
68
68
|
}.to raise_error(Automan::Beanstalk::MissingManifestError)
|
69
69
|
end
|
70
70
|
|
71
71
|
it 'sets version_label and package properly' do
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
72
|
+
d.stub(:manifest_exists?).and_return(true)
|
73
|
+
d.stub(:s3_read).and_return('{"version_label": "foo", "package": "bar"}')
|
74
|
+
d.read_manifest
|
75
|
+
d.version_label.should eq('foo')
|
76
|
+
d.package.should eq('bar')
|
77
77
|
end
|
78
78
|
end
|
79
79
|
|
80
80
|
describe '#deploy' do
|
81
|
-
subject() do
|
81
|
+
subject(:d) do
|
82
82
|
AWS.stub!
|
83
83
|
d = Automan::Beanstalk::Deployer.new
|
84
84
|
d.logger = Logger.new('/dev/null')
|
@@ -86,22 +86,22 @@ describe Automan::Beanstalk::Deployer do
|
|
86
86
|
end
|
87
87
|
|
88
88
|
it 'raises MissingPackageError if the package does not exist' do
|
89
|
-
|
89
|
+
d.stub(:package_exists?).and_return(false)
|
90
90
|
expect {
|
91
|
-
|
91
|
+
d.deploy
|
92
92
|
}.to raise_error(Automan::Beanstalk::MissingPackageFileError)
|
93
93
|
end
|
94
94
|
|
95
95
|
it 'makes sure the application version and environment exists' do
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
96
|
+
d.stub(:package_exists?).and_return(true)
|
97
|
+
d.should_receive(:ensure_version_exists)
|
98
|
+
d.should_receive(:create_or_update_environment)
|
99
|
+
d.deploy
|
100
100
|
end
|
101
101
|
end
|
102
102
|
|
103
103
|
describe '#ensure_version_exists' do
|
104
|
-
subject() do
|
104
|
+
subject(:d) do
|
105
105
|
AWS.stub!
|
106
106
|
d = Automan::Beanstalk::Deployer.new
|
107
107
|
d.logger = Logger.new('/dev/null')
|
@@ -109,51 +109,51 @@ describe Automan::Beanstalk::Deployer do
|
|
109
109
|
end
|
110
110
|
|
111
111
|
it 'creates version if it does not exist' do
|
112
|
-
version = double()
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
112
|
+
version = double(:version)
|
113
|
+
version.stub(:exists?).and_return(false)
|
114
|
+
version.should_receive(:create)
|
115
|
+
d.stub(:get_version).and_return(version)
|
116
|
+
d.ensure_version_exists
|
117
117
|
end
|
118
118
|
|
119
119
|
it 'does not create version if it exists' do
|
120
|
-
version = double()
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
120
|
+
version = double(:version)
|
121
|
+
version.stub(:exists?).and_return(true)
|
122
|
+
version.should_not_receive(:create)
|
123
|
+
d.stub(:get_version).and_return(version)
|
124
|
+
d.ensure_version_exists
|
125
125
|
end
|
126
126
|
end
|
127
127
|
|
128
128
|
describe '#create_or_update_environment' do
|
129
|
-
subject() do
|
129
|
+
subject(:d) do
|
130
130
|
AWS.stub!
|
131
131
|
d = Automan::Beanstalk::Deployer.new
|
132
132
|
d.logger = Logger.new('/dev/null')
|
133
|
-
|
133
|
+
d.stub(:ensure_version_exists)
|
134
134
|
d
|
135
135
|
end
|
136
136
|
|
137
137
|
[nil, 'Terminated'].each do |state|
|
138
138
|
it "creates environment if state is #{state.nil? ? 'nil' : state}" do
|
139
|
-
|
140
|
-
|
141
|
-
|
139
|
+
d.stub(:environment_status).and_return(state)
|
140
|
+
d.should_receive(:create_environment)
|
141
|
+
d.create_or_update_environment
|
142
142
|
end
|
143
143
|
end
|
144
144
|
|
145
145
|
['Ready'].each do |state|
|
146
146
|
it "updates environment if state is #{state.nil? ? 'nil' : state}" do
|
147
|
-
|
148
|
-
|
149
|
-
|
147
|
+
d.stub(:environment_status).and_return(state)
|
148
|
+
d.should_receive(:update_environment)
|
149
|
+
d.create_or_update_environment
|
150
150
|
end
|
151
151
|
end
|
152
152
|
|
153
153
|
it 'raises error if environment state is anything else' do
|
154
|
-
|
154
|
+
d.stub(:environment_status).and_return('foo')
|
155
155
|
expect {
|
156
|
-
|
156
|
+
d.create_or_update_environment
|
157
157
|
}.to raise_error(Automan::Beanstalk::InvalidEnvironmentStatusError)
|
158
158
|
end
|
159
159
|
end
|
@@ -2,14 +2,14 @@ require 'automan'
|
|
2
2
|
require 'wait'
|
3
3
|
|
4
4
|
describe Automan::Beanstalk::Router do
|
5
|
-
it {
|
6
|
-
it {
|
7
|
-
it {
|
8
|
-
it {
|
5
|
+
it { should respond_to :run }
|
6
|
+
it { should respond_to :environment_name }
|
7
|
+
it { should respond_to :hosted_zone_name }
|
8
|
+
it { should respond_to :hostname }
|
9
9
|
|
10
10
|
describe '#run' do
|
11
11
|
context 'waiting' do
|
12
|
-
subject() do
|
12
|
+
subject(:r) do
|
13
13
|
AWS.stub!
|
14
14
|
r = Automan::Beanstalk::Router.new
|
15
15
|
r.eb = AWS::ElasticBeanstalk::Client.new
|
@@ -17,47 +17,48 @@ describe Automan::Beanstalk::Router do
|
|
17
17
|
r.environment_name = 'foo'
|
18
18
|
r.hosted_zone_name = 'foo.com'
|
19
19
|
r.hostname = 'www.foo.com'
|
20
|
+
r.log_aws_calls = false
|
20
21
|
r.logger = Logger.new('/dev/null')
|
21
22
|
r.wait = Wait.new(delay: 0.01, rescuer: WaitRescuer.new(AWS::Route53::Errors::InvalidChangeBatch))
|
22
23
|
r
|
23
24
|
end
|
24
25
|
|
25
26
|
it "raises error if it never finds a name" do
|
26
|
-
|
27
|
+
r.stub(:elb_cname_from_beanstalk_environment).and_return(nil)
|
27
28
|
expect {
|
28
|
-
|
29
|
+
r.run
|
29
30
|
}.to raise_error Wait::ResultInvalid
|
30
31
|
end
|
31
32
|
|
32
33
|
it "calls #update_dns_alias if it finds a name" do
|
33
|
-
|
34
|
-
|
35
|
-
|
34
|
+
r.stub(:elb_cname_from_beanstalk_environment).and_return('foo')
|
35
|
+
r.should_receive(:update_dns_alias)
|
36
|
+
r.run
|
36
37
|
end
|
37
38
|
|
38
39
|
it "ignores InvalidChangeBatch until last attempt" do
|
39
|
-
|
40
|
-
|
40
|
+
r.stub(:elb_cname_from_beanstalk_environment).and_return('foo')
|
41
|
+
r.stub(:update_dns_alias).and_raise AWS::Route53::Errors::InvalidChangeBatch
|
41
42
|
expect {
|
42
|
-
|
43
|
+
r.run
|
43
44
|
}.to raise_error AWS::Route53::Errors::InvalidChangeBatch
|
44
|
-
|
45
|
+
r.attempts_made.should eq 5
|
45
46
|
end
|
46
47
|
|
47
48
|
it "ignores InvalidChangeBatch until it succeeds" do
|
48
|
-
|
49
|
+
r.stub(:elb_cname_from_beanstalk_environment).and_return('foo')
|
49
50
|
|
50
51
|
@attempts = 0
|
51
|
-
|
52
|
+
r.stub(:update_dns_alias) do
|
52
53
|
@attempts += 1
|
53
54
|
raise AWS::Route53::Errors::InvalidChangeBatch if @attempts < 3
|
54
55
|
end
|
55
56
|
|
56
57
|
expect {
|
57
|
-
|
58
|
+
r.run
|
58
59
|
}.not_to raise_error
|
59
60
|
|
60
|
-
|
61
|
+
r.attempts_made.should eq 3
|
61
62
|
end
|
62
63
|
end
|
63
64
|
end
|
@@ -14,33 +14,33 @@ describe Automan::Beanstalk::Terminator do
|
|
14
14
|
end
|
15
15
|
|
16
16
|
it "returns false if environment does not exist" do
|
17
|
-
resp =
|
17
|
+
resp = t.eb.stub_for :describe_environments
|
18
18
|
resp.data[:environments] = [{}]
|
19
|
-
|
19
|
+
t.environment_exists?('foo').should be_false
|
20
20
|
end
|
21
21
|
|
22
22
|
it "returns false if environment is in Terminated state" do
|
23
|
-
resp =
|
23
|
+
resp = t.eb.stub_for :describe_environments
|
24
24
|
resp.data[:environments] = [{environment_name: 'foo', status: 'Terminated'}]
|
25
|
-
|
25
|
+
t.environment_exists?('foo').should be_false
|
26
26
|
end
|
27
27
|
|
28
28
|
it "returns false if environment is in Terminating state" do
|
29
|
-
resp =
|
29
|
+
resp = t.eb.stub_for :describe_environments
|
30
30
|
resp.data[:environments] = [{environment_name: 'foo', status: 'Terminating'}]
|
31
|
-
|
31
|
+
t.environment_exists?('foo').should be_false
|
32
32
|
end
|
33
33
|
|
34
34
|
it "returns true if environment does exist" do
|
35
|
-
resp =
|
35
|
+
resp = t.eb.stub_for :describe_environments
|
36
36
|
resp.data[:environments] = [{environment_name: 'foo'}]
|
37
|
-
|
37
|
+
t.environment_exists?('foo').should be_true
|
38
38
|
end
|
39
39
|
|
40
40
|
it "returns true if environment is in Ready state" do
|
41
|
-
resp =
|
41
|
+
resp = t.eb.stub_for :describe_environments
|
42
42
|
resp.data[:environments] = [{environment_name: 'foo', status: 'Ready'}]
|
43
|
-
|
43
|
+
t.environment_exists?('foo').should be_true
|
44
44
|
end
|
45
45
|
end
|
46
46
|
|
@@ -53,15 +53,15 @@ describe Automan::Beanstalk::Terminator do
|
|
53
53
|
end
|
54
54
|
|
55
55
|
it 'should call #terminate_environment if the environment exists' do
|
56
|
-
|
57
|
-
|
58
|
-
|
56
|
+
t.stub(:environment_exists?).and_return(true)
|
57
|
+
t.should_receive :terminate_environment
|
58
|
+
t.terminate
|
59
59
|
end
|
60
60
|
|
61
61
|
it 'should not call #terminate_environment if the environment does not exist' do
|
62
|
-
|
63
|
-
|
64
|
-
|
62
|
+
t.stub(:environment_exists?).and_return(false)
|
63
|
+
t.should_not_receive :terminate_environment
|
64
|
+
t.terminate
|
65
65
|
end
|
66
66
|
end
|
67
67
|
end
|