eb_deployer 0.0.8 → 0.0.9
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.
- data/lib/eb_deployer.rb +5 -7
- data/lib/eb_deployer/application.rb +28 -0
- data/lib/eb_deployer/cloud_formation_provisioner.rb +7 -9
- data/lib/eb_deployer/version.rb +1 -1
- data/test/aws_driver_stubs.rb +15 -1
- data/test/deploy_test.rb +22 -3
- metadata +3 -2
data/lib/eb_deployer.rb
CHANGED
@@ -2,6 +2,7 @@ require "eb_deployer/version"
|
|
2
2
|
require "eb_deployer/deployment_strategy"
|
3
3
|
require "eb_deployer/beanstalk"
|
4
4
|
require "eb_deployer/cloud_formation_provisioner"
|
5
|
+
require 'eb_deployer/application'
|
5
6
|
require "eb_deployer/environment"
|
6
7
|
require "eb_deployer/event_poller"
|
7
8
|
require "eb_deployer/package"
|
@@ -46,8 +47,10 @@ module EbDeployer
|
|
46
47
|
cname_prefix = opts[:cname_prefix] || [app, env_name].join('-')
|
47
48
|
smoke_test = opts[:smoke_test] || Proc.new {}
|
48
49
|
|
49
|
-
|
50
|
+
application = Application.new(app, bs, s3)
|
51
|
+
|
50
52
|
cf = CloudFormationProvisioner.new("#{app}-#{env_name}", cf)
|
53
|
+
|
51
54
|
strategy = DeploymentStrategy.create(strategy_name, app, env_name, bs,
|
52
55
|
:solution_stack => stack_name,
|
53
56
|
:cname_prefix => cname_prefix,
|
@@ -57,12 +60,7 @@ module EbDeployer
|
|
57
60
|
env_settings += cf.provision(resources)
|
58
61
|
end
|
59
62
|
|
60
|
-
package
|
61
|
-
|
62
|
-
unless bs.application_version_labels.include?(version_label)
|
63
|
-
bs.create_application_version(app, version_label, package.source_bundle)
|
64
|
-
end
|
65
|
-
|
63
|
+
application.create_version(version_label, opts[:package])
|
66
64
|
strategy.deploy(version_label, env_settings)
|
67
65
|
end
|
68
66
|
|
@@ -0,0 +1,28 @@
|
|
1
|
+
module EbDeployer
|
2
|
+
class Application
|
3
|
+
def initialize(name, eb_driver, s3_driver)
|
4
|
+
@name = name
|
5
|
+
@eb_driver = eb_driver
|
6
|
+
@s3_driver = s3_driver
|
7
|
+
end
|
8
|
+
|
9
|
+
def create_version(version_label, package)
|
10
|
+
create_application_if_not_exists
|
11
|
+
|
12
|
+
package = Package.new(package, @name + "-packages", @s3_driver)
|
13
|
+
package.upload
|
14
|
+
|
15
|
+
unless @eb_driver.application_version_labels.include?(version_label)
|
16
|
+
@eb_driver.create_application_version(@name, version_label, package.source_bundle)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
private
|
21
|
+
|
22
|
+
def create_application_if_not_exists
|
23
|
+
unless @eb_driver.application_exists?(@name)
|
24
|
+
@eb_driver.create_application(@name)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -12,11 +12,12 @@ module EbDeployer
|
|
12
12
|
end
|
13
13
|
|
14
14
|
def provision(resources)
|
15
|
-
params = extract_params
|
16
15
|
template = File.read(resources[:template])
|
17
16
|
transforms = resources[:transforms]
|
17
|
+
capabilities = resources[:capabilities]
|
18
|
+
params = resources[:parameters]
|
18
19
|
|
19
|
-
stack_exists? ? update_stack(template, params) : create_stack(template, params)
|
20
|
+
stack_exists? ? update_stack(template, params, capabilities) : create_stack(template, params, capabilities)
|
20
21
|
wait_for_stack_op_terminate
|
21
22
|
transform_output_to_settings(transforms)
|
22
23
|
end
|
@@ -29,8 +30,9 @@ module EbDeployer
|
|
29
30
|
|
30
31
|
private
|
31
32
|
|
32
|
-
def update_stack(template, params)
|
33
|
+
def update_stack(template, params, capabilities)
|
33
34
|
@cf_driver.update_stack(@stack_name, template,
|
35
|
+
:capabilities => capabilities,
|
34
36
|
:parameters => params)
|
35
37
|
end
|
36
38
|
|
@@ -38,9 +40,10 @@ module EbDeployer
|
|
38
40
|
@cf_driver.stack_exists?(@stack_name)
|
39
41
|
end
|
40
42
|
|
41
|
-
def create_stack(template, params)
|
43
|
+
def create_stack(template, params, capabilities)
|
42
44
|
@cf_driver.create_stack(@stack_name, template,
|
43
45
|
:disable_rollback => true,
|
46
|
+
:capabilities => capabilities,
|
44
47
|
:parameters => params)
|
45
48
|
end
|
46
49
|
|
@@ -66,11 +69,6 @@ module EbDeployer
|
|
66
69
|
end
|
67
70
|
end
|
68
71
|
|
69
|
-
|
70
|
-
def extract_params
|
71
|
-
Hash[ENV.map {|k, v| k =~ /^AWSRESOURCES_(.*)/ ? [$1, v] : nil }.compact]
|
72
|
-
end
|
73
|
-
|
74
72
|
def log(msg)
|
75
73
|
puts "[#{Time.now.utc}][resources-stack] #{msg}"
|
76
74
|
end
|
data/lib/eb_deployer/version.rb
CHANGED
data/test/aws_driver_stubs.rb
CHANGED
@@ -1,9 +1,19 @@
|
|
1
1
|
class EBStub
|
2
2
|
def initialize
|
3
|
+
@apps = []
|
3
4
|
@envs = {}
|
4
5
|
@versions = {}
|
5
6
|
end
|
6
7
|
|
8
|
+
def create_application(app)
|
9
|
+
raise 'already exists' if application_exists?(app)
|
10
|
+
@apps << app
|
11
|
+
end
|
12
|
+
|
13
|
+
def application_exists?(app)
|
14
|
+
@apps.include?(app)
|
15
|
+
end
|
16
|
+
|
7
17
|
def create_environment(app, env, solution_stack, cname_prefix, version, settings)
|
8
18
|
raise 'cname prefix is not avaible' if @envs.values.detect { |env| env[:cname_prefix] == cname_prefix }
|
9
19
|
raise "env name #{env} is longer than 23 chars" if env.size > 23
|
@@ -107,7 +117,7 @@ class CFStub
|
|
107
117
|
end
|
108
118
|
|
109
119
|
def update_stack(name, template, opts)
|
110
|
-
@stacks[name] = @stacks[name].merge(:template => template, opts => opts)
|
120
|
+
@stacks[name] = @stacks[name].merge(:template => template, :opts => opts)
|
111
121
|
end
|
112
122
|
|
113
123
|
def stack_status(name)
|
@@ -122,4 +132,8 @@ class CFStub
|
|
122
132
|
raise AWS::CloudFormation::Errors::ValidationError.new unless stack_exists?(name)
|
123
133
|
"value of #{key}"
|
124
134
|
end
|
135
|
+
|
136
|
+
def stack_config(name)
|
137
|
+
@stacks[name][:opts]
|
138
|
+
end
|
125
139
|
end
|
data/test/deploy_test.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
$:.unshift(File.expand_path("../../lib", __FILE__))
|
1
2
|
require 'tempfile'
|
2
3
|
require 'eb_deployer'
|
3
4
|
require 'aws_driver_stubs'
|
@@ -12,6 +13,12 @@ class DeployTest < Minitest::Test
|
|
12
13
|
File.open(@sample_package, 'w') { |f| f << 's' * 100 }
|
13
14
|
end
|
14
15
|
|
16
|
+
def test_first_deplyment_create_eb_application
|
17
|
+
assert !@eb_driver.application_exists?('simple')
|
18
|
+
deploy(:application => 'simple', :environment => "production")
|
19
|
+
assert @eb_driver.application_exists?('simple')
|
20
|
+
end
|
21
|
+
|
15
22
|
def test_first_deployment_create_environment
|
16
23
|
assert !@eb_driver.environment_exists?('simple', eb_envname('simple', 'production'))
|
17
24
|
deploy(:application => 'simple', :environment => "production")
|
@@ -155,15 +162,27 @@ class DeployTest < Minitest::Test
|
|
155
162
|
assert @cf_driver.stack_exists?('simple-production')
|
156
163
|
end
|
157
164
|
|
158
|
-
def
|
165
|
+
def test_provision_resources_with_capacities
|
159
166
|
cf_template = temp_file(JSON.dump({'Resources' => {'R1' => {}}}))
|
160
167
|
deploy(:application => 'simple', :environment => "production",
|
161
168
|
:resources => {
|
162
|
-
:template => cf_template
|
169
|
+
:template => cf_template,
|
170
|
+
:capabilities => ['CAPABILITY_IAM']
|
163
171
|
})
|
164
|
-
|
172
|
+
assert_equal ['CAPABILITY_IAM'], @cf_driver.stack_config('simple-production')[:capabilities]
|
165
173
|
end
|
166
174
|
|
175
|
+
def test_provision_resources_with_parameters
|
176
|
+
cf_template = temp_file(JSON.dump({'Resources' => {'R1' => {}}}))
|
177
|
+
deploy(:application => 'simple', :environment => "production",
|
178
|
+
:resources => {
|
179
|
+
:template => cf_template,
|
180
|
+
:parameters => {'a' => 1}
|
181
|
+
})
|
182
|
+
assert_equal({'a' => 1 }, @cf_driver.stack_config('simple-production')[:parameters])
|
183
|
+
end
|
184
|
+
|
185
|
+
|
167
186
|
def test_transforms_resource_provsion_output_to_elastic_beanstalk_settings
|
168
187
|
cf_template = temp_file(JSON.dump({
|
169
188
|
'Resources' => {'R1' => {}},
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: eb_deployer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.9
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2013-
|
13
|
+
date: 2013-07-08 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: aws-sdk
|
@@ -59,6 +59,7 @@ files:
|
|
59
59
|
- Rakefile
|
60
60
|
- eb_deployer.gemspec
|
61
61
|
- lib/eb_deployer.rb
|
62
|
+
- lib/eb_deployer/application.rb
|
62
63
|
- lib/eb_deployer/beanstalk.rb
|
63
64
|
- lib/eb_deployer/cloud_formation_driver.rb
|
64
65
|
- lib/eb_deployer/cloud_formation_provisioner.rb
|