elastic-beanstalk 1.1.11 → 1.1.12
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +23 -0
- data/lib/elastic/beanstalk/config.rb +56 -32
- data/lib/elastic/beanstalk/tasks/eb.rake +2 -1
- data/lib/elastic/beanstalk/version.rb +1 -1
- data/spec/lib/elastic/beanstalk/eb_config_spec.rb +28 -19
- data/spec/lib/elastic/beanstalk/eb_spec.yml +27 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a2f7ad000128a315ac2e977837675b9748b2a3c8
|
4
|
+
data.tar.gz: b9635f456392b73eb7fc0c7e006b84762e36a042
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1193ddd38c373267a2d57c0fe1818311abe45a186acad424a70206d67151f98e0ea5d6280f526ca0706053540bfa5b15b7e71533d994daad26d9df90427c061d
|
7
|
+
data.tar.gz: e3ac2c58fb5d4b77eda3fa319736b3f181f39509439bea46a8d594299e76d6d056d6ed3938826aae4af85125f63a9c8bc2e20013ddd315fc91d7b4314719c425
|
data/README.md
CHANGED
@@ -213,6 +213,15 @@ options:
|
|
213
213
|
|
214
214
|
aws:elasticbeanstalk:application:
|
215
215
|
Application Healthcheck URL: '/health'
|
216
|
+
|
217
|
+
#---
|
218
|
+
# Set "inactive_settings" for saving cost on blue green deployment
|
219
|
+
# https://github.com/ThoughtWorksStudios/eb_deployer/wiki/Elastic-Beanstalk-Tips-and-Tricks#set-inactive_settings-for-saving-cost-on-blue-green-deployment
|
220
|
+
inactive:
|
221
|
+
aws:autoscaling:asg:
|
222
|
+
MinSize: 0
|
223
|
+
Cooldown: 900
|
224
|
+
|
216
225
|
#---
|
217
226
|
development:
|
218
227
|
options:
|
@@ -228,6 +237,19 @@ production:
|
|
228
237
|
InstanceType: t1.small
|
229
238
|
```
|
230
239
|
|
240
|
+
## ENV interpolation
|
241
|
+
|
242
|
+
ENV variable interpolation is provided by [dry-config](https://github.com/alienfast/dry-config/blob/master/README.md#env-interpolationsubstitutionexpansion). Any of the values in the `eb.yml` may contain interpolated values.
|
243
|
+
|
244
|
+
The following formats are acceptable:
|
245
|
+
|
246
|
+
```yaml
|
247
|
+
- ~/foo
|
248
|
+
- $HOME/foo
|
249
|
+
- ${HOME}/foo
|
250
|
+
- #{HOME}/foo
|
251
|
+
```
|
252
|
+
|
231
253
|
## Additional options
|
232
254
|
Most of the configurations are defaulted. The following are less obvious but may be useful:
|
233
255
|
|
@@ -242,6 +264,7 @@ package:
|
|
242
264
|
The following are passed if not nil, otherwise eb_deployer assigns an appropriate default.
|
243
265
|
|
244
266
|
```ruby
|
267
|
+
inactive_settings: (nil if unspecified)
|
245
268
|
package_bucket:
|
246
269
|
keep_latest: (if unspecified, it will keep all past versions in the S3 bucket)
|
247
270
|
version_prefix:
|
@@ -22,7 +22,7 @@ module Elastic
|
|
22
22
|
# seed the sensible defaults here
|
23
23
|
options = {
|
24
24
|
symbolize: true,
|
25
|
-
interpolation:
|
25
|
+
interpolation: false,
|
26
26
|
default_configuration: {
|
27
27
|
environment: nil,
|
28
28
|
secrets_dir: '~/.aws',
|
@@ -35,7 +35,8 @@ module Elastic
|
|
35
35
|
exclude_files: [],
|
36
36
|
exclude_dirs: %w(pkg tmp log test-reports)
|
37
37
|
},
|
38
|
-
options: {}
|
38
|
+
options: {},
|
39
|
+
inactive: {}
|
39
40
|
}
|
40
41
|
}.merge(options)
|
41
42
|
super(options)
|
@@ -57,39 +58,58 @@ module Elastic
|
|
57
58
|
end
|
58
59
|
end
|
59
60
|
|
60
|
-
# def options
|
61
|
-
# @configuration[:options]
|
62
|
-
# end
|
63
|
-
|
64
61
|
# custom methods for the specifics of eb.yml settings
|
65
62
|
def option_settings
|
66
|
-
|
67
|
-
|
68
|
-
options[namespace].each do |option_name, value|
|
69
|
-
result << to_option_setting(namespace, option_name, value)
|
70
|
-
end
|
71
|
-
end
|
63
|
+
generate_settings(options)
|
64
|
+
end
|
72
65
|
|
73
|
-
|
74
|
-
|
66
|
+
def inactive_settings
|
67
|
+
generate_settings(inactive)
|
75
68
|
end
|
76
69
|
|
77
70
|
def set_option(namespace, option_name, value)
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
options[namespace] = {option_name.to_sym => value}
|
82
|
-
else
|
83
|
-
options[namespace][option_name.to_sym] = value
|
84
|
-
end
|
71
|
+
current_options = to_option_setting(namespace, option_name, value)
|
72
|
+
namespace = current_options[:namespace].to_sym
|
73
|
+
option_name = current_options[:option_name].to_sym
|
85
74
|
|
86
|
-
|
75
|
+
options[namespace] = {} if options[namespace].nil?
|
76
|
+
options[namespace][option_name] = value
|
87
77
|
end
|
88
78
|
|
89
79
|
def find_option_setting(name)
|
80
|
+
find_setting(name, options)
|
81
|
+
end
|
82
|
+
|
83
|
+
def find_option_setting_value(name)
|
84
|
+
find_setting_value(name, options)
|
85
|
+
end
|
86
|
+
|
87
|
+
def find_inactive_setting(name)
|
88
|
+
find_setting(name, inactive)
|
89
|
+
end
|
90
|
+
|
91
|
+
def find_inactive_setting_value(name)
|
92
|
+
find_setting_value(name, inactive)
|
93
|
+
end
|
94
|
+
|
95
|
+
def to_option_setting(namespace, option_name, value)
|
96
|
+
erb_value = "#{value}".scan(/<%=.*%>/).first
|
97
|
+
unless erb_value.nil?
|
98
|
+
value = ERB.new(erb_value).result
|
99
|
+
end
|
100
|
+
{
|
101
|
+
:'namespace' => "#{namespace}",
|
102
|
+
:'option_name' => "#{option_name}",
|
103
|
+
:'value' => "#{value}"
|
104
|
+
}
|
105
|
+
end
|
106
|
+
|
107
|
+
private
|
108
|
+
|
109
|
+
def find_setting(name, settings_root)
|
90
110
|
name = name.to_sym
|
91
|
-
|
92
|
-
|
111
|
+
settings_root.each_key do |namespace|
|
112
|
+
settings_root[namespace].each do |option_name, value|
|
93
113
|
if option_name.eql? name
|
94
114
|
return to_option_setting(namespace, option_name, value)
|
95
115
|
end
|
@@ -98,17 +118,21 @@ module Elastic
|
|
98
118
|
return nil
|
99
119
|
end
|
100
120
|
|
101
|
-
def
|
102
|
-
o =
|
121
|
+
def find_setting_value(name, settings_root)
|
122
|
+
o = find_setting(name, settings_root)
|
103
123
|
o[:value] unless o.nil?
|
104
124
|
end
|
105
125
|
|
106
|
-
def
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
126
|
+
def generate_settings(settings_root)
|
127
|
+
result = []
|
128
|
+
settings_root.each_key do |namespace|
|
129
|
+
settings_root[namespace].each do |option_name, value|
|
130
|
+
result << to_option_setting(namespace, option_name, value)
|
131
|
+
end
|
132
|
+
end
|
133
|
+
|
134
|
+
#{"option_settings" => result}
|
135
|
+
result
|
112
136
|
end
|
113
137
|
end
|
114
138
|
end
|
@@ -316,7 +316,8 @@ namespace :eb do
|
|
316
316
|
environment: EbConfig.environment,
|
317
317
|
version_label: find_option_app_version,
|
318
318
|
solution_stack_name: EbConfig.solution_stack_name,
|
319
|
-
|
319
|
+
option_settings: EbConfig.option_settings,
|
320
|
+
inactive_settings: EbConfig.inactive_settings,
|
320
321
|
strategy: EbConfig.strategy.to_sym,
|
321
322
|
package: package
|
322
323
|
}
|
@@ -7,33 +7,49 @@ describe EbConfig do
|
|
7
7
|
# puts 'clear'
|
8
8
|
#end
|
9
9
|
|
10
|
+
before(:each) do
|
11
|
+
EbConfig.clear
|
12
|
+
end
|
13
|
+
|
10
14
|
it '#set_option' do
|
11
|
-
EbConfig.clear
|
12
15
|
EbConfig.set_option('aws:elasticbeanstalk:application:environment', 'RACK_ENV', 'staging')
|
13
16
|
expect(EbConfig.options[:'aws:elasticbeanstalk:application:environment'][:'RACK_ENV']).to eq 'staging'
|
14
17
|
end
|
15
18
|
|
16
19
|
it '#find_option_setting_value' do
|
17
|
-
EbConfig.clear
|
18
20
|
EbConfig.set_option(:'aws:elasticbeanstalk:application:environment', 'RACK_ENV', 'staging')
|
19
21
|
expect(EbConfig.find_option_setting_value('RACK_ENV')).to eql 'staging'
|
20
22
|
end
|
21
23
|
it '#find_option_setting' do
|
22
|
-
EbConfig.clear
|
23
24
|
EbConfig.set_option(:'aws:elasticbeanstalk:application:environment', 'RACK_ENV', 'staging')
|
24
25
|
expect(EbConfig.find_option_setting('RACK_ENV')).to eql ({:namespace => 'aws:elasticbeanstalk:application:environment', :option_name => 'RACK_ENV', :value => 'staging'})
|
25
26
|
end
|
26
27
|
|
27
28
|
it '#set_option should allow options to be overridden' do
|
28
|
-
EbConfig.clear
|
29
29
|
EbConfig.set_option(:'aws:elasticbeanstalk:application:environment', 'RACK_ENV', 'staging')
|
30
30
|
assert_option 'RACK_ENV', 'staging'
|
31
31
|
EbConfig.set_option(:'aws:elasticbeanstalk:application:environment', 'RACK_ENV', 'foo')
|
32
32
|
assert_option 'RACK_ENV', 'foo'
|
33
33
|
end
|
34
34
|
|
35
|
+
it '#set_option should work with strings or deep symbols' do
|
36
|
+
option_input = [ :'aws:elasticbeanstalk:application:environment', :'RACK_ENV', :TEST_VALUE ]
|
37
|
+
method_order = [:to_sym, :to_s, :to_sym]
|
38
|
+
method_order.each do |current_method|
|
39
|
+
option_input.map!(¤t_method)
|
40
|
+
EbConfig.clear
|
41
|
+
EbConfig.set_option(*option_input)
|
42
|
+
assert_option option_input[1].to_s, option_input[2].to_s
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
it '#set_option should work with environment variable interpolation' do
|
47
|
+
ENV['test_value'] = 'foo'
|
48
|
+
EbConfig.set_option(:'aws:elasticbeanstalk:application:environment', 'TEST_VAR', '<%= ENV["test_value"] %>')
|
49
|
+
assert_option 'TEST_VAR', 'foo'
|
50
|
+
end
|
51
|
+
|
35
52
|
it 'should read file with nil environment' do
|
36
|
-
EbConfig.clear
|
37
53
|
sleep 1
|
38
54
|
#expect(EbConfig.strategy).to be_nil
|
39
55
|
|
@@ -44,20 +60,7 @@ describe EbConfig do
|
|
44
60
|
expect(EbConfig.environment).to be_nil
|
45
61
|
end
|
46
62
|
|
47
|
-
it '#should read file with environment variable interpolation' do
|
48
|
-
EbConfig.clear
|
49
|
-
sleep 1
|
50
|
-
EbConfig.load!(nil, config_file_path)
|
51
|
-
assert_option 'TEST_VAR', ''
|
52
|
-
|
53
|
-
ENV['TEST_VAR'] = 'TEST_VALUE'
|
54
|
-
EbConfig.clear
|
55
|
-
EbConfig.load!(nil, config_file_path)
|
56
|
-
assert_option 'TEST_VAR', 'TEST_VALUE'
|
57
|
-
end
|
58
|
-
|
59
63
|
it 'should read file and override with development environment' do
|
60
|
-
EbConfig.clear
|
61
64
|
EbConfig.load!(:development, config_file_path)
|
62
65
|
assert_option 'InstanceType', 't1.micro'
|
63
66
|
expect(EbConfig.strategy).to eql 'inplace-update'
|
@@ -65,7 +68,6 @@ describe EbConfig do
|
|
65
68
|
end
|
66
69
|
|
67
70
|
it 'should read file and override with production environment' do
|
68
|
-
EbConfig.clear
|
69
71
|
EbConfig.load!(:production, config_file_path)
|
70
72
|
assert_option 'InstanceType', 't1.small'
|
71
73
|
expect(EbConfig.environment).to eql :production
|
@@ -76,6 +78,10 @@ describe EbConfig do
|
|
76
78
|
expect(EbConfig.find_option_setting_value(name)).to eql value
|
77
79
|
end
|
78
80
|
|
81
|
+
def assert_inactive(name, value)
|
82
|
+
expect(EbConfig.find_inactive_setting_value(name)).to eql value
|
83
|
+
end
|
84
|
+
|
79
85
|
def assert_common_top_level_settings
|
80
86
|
expect(EbConfig.app).to eql 'acme'
|
81
87
|
expect(EbConfig.region).to eql 'us-east-1'
|
@@ -108,6 +114,9 @@ describe EbConfig do
|
|
108
114
|
assert_option 'Stickiness Policy', 'true'
|
109
115
|
assert_option 'Notification Endpoint', 'alerts@acme.com'
|
110
116
|
assert_option 'Application Healthcheck URL', '/healthcheck'
|
117
|
+
|
118
|
+
assert_inactive 'MinSize', '0'
|
119
|
+
assert_inactive 'Cooldown', '900'
|
111
120
|
end
|
112
121
|
|
113
122
|
def config_file_path
|
@@ -15,11 +15,31 @@ ebextensions:
|
|
15
15
|
01seed:
|
16
16
|
command: rake db:seed
|
17
17
|
leader_only: true
|
18
|
+
|
19
|
+
05-start-faye-server.config:
|
20
|
+
files:
|
21
|
+
"/opt/elasticbeanstalk/hooks/appdeploy/post/05_start_faye_server.sh":
|
22
|
+
mode: "000755"
|
23
|
+
owner: root
|
24
|
+
group: root
|
25
|
+
content: |
|
26
|
+
#!/usr/bin/env bash
|
27
|
+
# Loading environment data
|
28
|
+
EB_APP_USER=$(/opt/elasticbeanstalk/bin/get-config container -k app_user)
|
29
|
+
EB_APP_DEPLOY_DIR=$(/opt/elasticbeanstalk/bin/get-config container -k app_deploy_dir)
|
30
|
+
EB_SCRIPT_DIR=$(/opt/elasticbeanstalk/bin/get-config container -k script_dir)
|
31
|
+
EB_SUPPORT_DIR=$(/opt/elasticbeanstalk/bin/get-config container -k support_dir)
|
32
|
+
# Setting up correct environment and ruby version so that bundle can load all gems
|
33
|
+
. $EB_SUPPORT_DIR/envvars
|
34
|
+
. $EB_SCRIPT_DIR/use-app-ruby.sh
|
35
|
+
# Now we can do the actual restart of the worker. Make sure to have double quotes when using env vars in the command.
|
36
|
+
cd $EB_APP_DEPLOY_DIR
|
37
|
+
su -s /bin/bash -c "RAILS_ENV=production bundle exec thin -C config/private_pub_thin.yml --timeout 60 start -d" $EB_APP_USER
|
38
|
+
|
18
39
|
#---
|
19
40
|
options:
|
20
41
|
aws:elasticbeanstalk:application:environment:
|
21
42
|
RAILS_ENV: foobar
|
22
|
-
TEST_VAR: #{TEST_VAR}
|
23
43
|
|
24
44
|
aws:autoscaling:launchconfiguration:
|
25
45
|
InstanceType: foo
|
@@ -42,6 +62,12 @@ options:
|
|
42
62
|
|
43
63
|
aws:elasticbeanstalk:application:
|
44
64
|
Application Healthcheck URL: '/healthcheck'
|
65
|
+
|
66
|
+
inactive:
|
67
|
+
aws:autoscaling:asg:
|
68
|
+
MinSize: 0
|
69
|
+
Cooldown: 900
|
70
|
+
|
45
71
|
#---
|
46
72
|
development:
|
47
73
|
strategy: inplace-update
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: elastic-beanstalk
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.1.
|
4
|
+
version: 1.1.12
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Kevin Ross
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-01-
|
11
|
+
date: 2016-01-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|