eb_deployer 0.2.4 → 0.2.5

Sign up to get free protection for your applications and to get access to all the features.
@@ -23,15 +23,15 @@ require 'fileutils'
23
23
 
24
24
  module EbDeployer
25
25
 
26
- ##
26
+ #
27
27
  # Query ouput value of the cloud formation stack
28
- # arguments:
29
- # key: CloudFormation ouput key
30
- # options: a hash
31
- # :application application name
32
- # :environment environment name (e.g. staging, production)
33
28
  #
34
-
29
+ # @param [String] key CloudFormation output key
30
+ # @param [Hash] opts
31
+ # @option opts [Symbol] :application application name
32
+ # @option opts [Symbol] :environment environment name (e.g. staging, production)
33
+ # @option opts [Symbol] :region AWS Region (e.g. "us-west-2", "us-east-1")
34
+ #
35
35
  def self.query_resource_output(key, opts)
36
36
  # AWS.config(:logger => Logger.new($stdout))
37
37
  if region = opts[:region]
@@ -45,104 +45,108 @@ module EbDeployer
45
45
  end
46
46
 
47
47
 
48
- # #
48
+ #
49
49
  # Deploy a package to specfied environments on elastic beanstalk
50
50
  #
51
- # Options available:
52
- #
53
- # :application (required)
54
- # Application name, this used for isolate packages and contribute
55
- # to your elastic beanstalk cname for environments
51
+ # @param [Hash] opts
56
52
  #
57
- # :environment (required)
58
- # Environment for same application, e.g. testing, staging,
59
- # production. This will map to 2 elastic beanstalk environments
60
- # (env-a-xxx, env-b-xxx) if blue-green deployment strategy specified
53
+ # @option opts [Symbol] :application *required* Application name, this
54
+ # used for isolate packages and contribute to your elastic beanstalk cname
55
+ # for environments
61
56
  #
62
- # :package (required) package for the application which should be
63
- # suitable for elastic beanstalk deploying. For example, a war file
64
- # should be provided for java solution stacks and a tar gz file
65
- # should be provided for rails stack.
57
+ # @option opts [Symbol] :environment *required* Environment for same
58
+ # application, e.g. testing, staging, production. This will map to 2 elastic
59
+ # beanstalk environments (env-a-xxx, env-b-xxx) if blue-green deployment
60
+ # strategy specified
66
61
  #
67
- # :version_label (required)
68
- # Version label give the package uploaded a unique identifier.
69
- # Should use something related to pipeline counter if you have build
70
- # pipeline setup to build the installer. For the convient of dev we
71
- # recommend use md5 digest of the installer so that everytime you
72
- # upload new installer it forms a new version. e.g.
62
+ # @option opts [Symbol] :package *required* package for the application
63
+ # which should be suitable for elastic beanstalk deploying. For example, a
64
+ # war file should be provided for java solution stacks and a ZIP file
65
+ # should be provided for Rails or Sinatra stack.
73
66
  #
74
- # :version_label => ENV['MY_PIPELINE_COUNTER']
75
- # || "dev-" + Digest::MD5.file(my_package).hexdigest
67
+ # @option opts [Symbol] :option_settings (optional) Elastic Beanstalk
68
+ # settings that will apply to the environments you deploying. Value should be
69
+ # array of hash with format such as:
76
70
  #
77
- # :solution_stack_name (optional default "64bit Amazon Linux running Tomcat 7")
78
- # The elastic beanstalk solution stack you want to deploy on top of.
79
- # Current possible values include:
80
- #
81
- # :option_settings (or :settings) (optional)
82
- # Elastic Beanstalk settings that will apply to the environments you
83
- # deploying. Value should be array of hash with format such as:
84
71
  # [{
85
72
  # :namespace => 'aws:autoscaling:launchconfiguration',
86
73
  # :option_name => 'InstanceType',
87
74
  # :value => 'm1.small' }]
88
- # When there are many, Using an external yaml file to hold those
89
- # configuration is recommended. Such as:
75
+ #
76
+ # When there are many, Using an external yaml file to hold those
77
+ # configuration is recommended. Such as:
78
+ #
90
79
  # YAML.load(File.read("my_settings_file.yml"))
91
- # For all available options take a look at
92
- # http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/command-options.html
93
- #
94
- # :resources (optional)
95
- # If :resources specified, EBDeployer will use the CloudFormation
96
- # template you provide to create a default CloudFormation stack with
97
- # name <application_name>-<env-name> for the environment current
98
- # deploying. Value of resources need to be hash with following
99
- # keys:
100
- # :template => CloudFormation template file with JSON format
101
- # :parameters (or :inputs) => A Hash, input values for the CloudFormation
102
- # template
103
- # :transforms => A Hash with key map to your CloudFormation
104
- # template outputs and value as lambda that return a single or array of
105
- # elastic beanstalk settings.
106
- # :capabilities => An array. You need set it to ['CAPABILITY_IAM']
107
- # if you want to provision IAM Instance Profile.
108
- #
109
- # :strategy (optional default :blue-green)
110
- # There are two options: blue-green or inplace-update. Blue green
111
- # keep two elastic beanstalk environments and always deploy to
112
- # inactive one, to achive zero downtime. inplace-update strategy
113
- # will only keep one environment, and update the version inplace on
114
- # deploy. this will save resources but will have downtime.
115
- #
116
- # :phoenix_mode (optional default false)
117
- # If phoenix mode is turn on, it will terminate the old elastic
118
- # beanstalk environment and recreate on deploy. For blue-green
119
- # deployment it terminate the inactive environment first then
120
- # recreate it. This is useful to avoiding configuration drift and
121
- # accumulating state on the ec2 instances. Also it has the benifit of
122
- # keeping your ec2 instance system package upto date, because everytime ec2
123
- # instance boot up from AMI it does a system update.
124
- #
125
- # :smoke_test (optional)
126
- # Value should be a proc or a lambda which accept single argument that will
127
- # passed in as environment DNS name. Smoke test proc or lambda will be
128
- # called at the end of the deployment for inplace-update deployment
129
- # strategy. For blue-green deployment it will run after inactive
130
- # environment update finish and before switching.
131
- # Defining a smoke test is high recommended for serious usage. The
132
- # simplest one could just be checking the server is up using curl, e.g.
133
- #
134
- # :smoke_test => lambda { |host|
135
- # curl_http_code = "curl -k -s -o /dev/null -w \"%{http_code}\" https://#{host}"
136
- # Timeout.timeout(600) do
137
- # while `#{curl_http_code}`.strip != '200'
138
- # sleep 5
139
- # end
140
- # end
141
- # }
142
80
  #
81
+ # For all available options take a look at
82
+ # http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/command-options.html
143
83
  #
84
+ # @option opts [Symbol] :phoenix_mode (false) If phoenix mode is turn on, it
85
+ # will terminate the old elastic beanstalk environment and recreate on
86
+ # deploy. For blue-green deployment it terminate the inactive environment
87
+ # first then recreate it. This is useful to avoiding configuration drift and
88
+ # accumulating state on the EC2 instances. Also it has the benifit of keeping
89
+ # your EC2 instance system package upto date, because everytime EC2 instance
90
+ # boot up from AMI it does a system update.
91
+ #
92
+ #
93
+ # @option opts [Symbol] :region set the region for application deployment
94
+ # (e.g. "us-west-2", "us-east-1"). See available zones at
95
+ # http://aws.amazon.com/elasticbeanstalk/faqs/#regions
96
+ #
97
+ # @option opts [Symbol] :resources If :resources specified, EBDeployer will
98
+ # use the CloudFormation template you provide to create a default
99
+ # CloudFormation stack with name <application_name>-<env-name> for the
100
+ # environment current deploying. Value of resources need to be hash with
101
+ # following keys:
102
+ #
103
+ # :template => CloudFormation template file with JSON format
104
+ # :parameters (or :inputs) => A Hash, input values for the CloudFormation template
105
+ # :transforms => A Hash with key map to your CloudFormation
106
+ # template outputs and value as lambda that return a single or array of
107
+ # elastic beanstalk settings.
108
+ #
109
+ # :capabilities => An array. You need set it to ['CAPABILITY_IAM']
110
+ #
111
+ # if you want to provision IAM Instance Profile.
112
+ #
113
+ # @option opts [Symbol] :settings See `option_settings`
114
+ #
115
+ # @option opts [Symbol] :smoke_test Value should be a proc or a lambda which
116
+ # accept single argument that will passed in as environment DNS name. Smoke
117
+ # test proc or lambda will be called at the end of the deployment for
118
+ # inplace-update deployment strategy. For blue-green deployment it will run
119
+ # after inactive environment update finish and before switching. Defining a
120
+ # smoke test is high recommended for serious usage. The simplest one could
121
+ # just be checking the server is up using curl, e.g.
122
+ #
123
+ # :smoke_test => lambda { |host|
124
+ # curl_http_code = "curl -k -s -o /dev/null -w \"%{http_code}\" https://#{host}"
125
+ # Timeout.timeout(600) do
126
+ # while `#{curl_http_code}`.strip != '200'
127
+ # sleep 5
128
+ # end
129
+ # end
130
+ # }
131
+ #
132
+ # @option opts [Symbol] :strategy (:blue-green) There are two options:
133
+ # blue-green or inplace-update. Blue green keep two elastic beanstalk
134
+ # environments and always deploy to inactive one, to achive zero downtime.
135
+ # inplace-update strategy will only keep one environment, and update the
136
+ # version inplace on deploy. this will save resources but will have downtime.
137
+ #
138
+ # @option opts [Symbol] :solution_stack_name ("64bit Amazon Linux running Tomcat 7")
139
+ # The elastic beanstalk solution stack you want to deploy on top of.
140
+ #
141
+ # @option opts [Symbol] :version_label *required*. Version label give the
142
+ # package uploaded a unique identifier. Should use something related to
143
+ # pipeline counter if you have build pipeline setup to build the installer.
144
+ # For the convient of dev we recommend use md5 digest of the installer so
145
+ # that everytime you upload new installer it forms a new version. e.g.
146
+ #
147
+ # :version_label => ENV['MY_PIPELINE_COUNTER']
148
+ # || "dev-" + Digest::MD5.file(my_package).hexdigest
144
149
  #
145
-
146
150
  def self.deploy(opts)
147
151
  # AWS.config(:logger => Logger.new($stdout))
148
152
  if region = opts[:region]
@@ -58,13 +58,13 @@ module EbDeployer
58
58
  end
59
59
 
60
60
  def self.create(strategy_name, app, env_name, eb_driver, env_creation_opts={})
61
- case strategy_name.to_sym
62
- when :inplace_update
61
+ case strategy_name.to_s
62
+ when 'inplace_update', 'inplace-update'
63
63
  InplaceUpdate.new(app, env_name, eb_driver, env_creation_opts)
64
- when :blue_green
64
+ when 'blue_green', 'blue-green'
65
65
  BlueGreen.new(app, env_name, eb_driver, env_creation_opts)
66
66
  else
67
- raise 'strategy_name:' + strategy_name + ' not supported'
67
+ raise 'strategy_name: ' + strategy_name.to_s + ' not supported'
68
68
  end
69
69
 
70
70
  end
@@ -1,3 +1,3 @@
1
1
  module EbDeployer
2
- VERSION = "0.2.4"
2
+ VERSION = "0.2.5"
3
3
  end
@@ -97,7 +97,7 @@ class DeployTest < Minitest::Test
97
97
  def test_blue_green_deployment_strategy_should_create_blue_env_on_first_deployment
98
98
  deploy(:application => 'simple',
99
99
  :environment => "production",
100
- :strategy => 'blue_green',
100
+ :strategy => 'blue-green',
101
101
  :version_label => 42)
102
102
 
103
103
  assert @eb_driver.environment_exists?('simple', eb_envname('simple', 'production-a'))
@@ -108,12 +108,12 @@ class DeployTest < Minitest::Test
108
108
  def test_blue_green_deployment_should_create_green_env_if_blue_exists
109
109
  deploy(:application => 'simple',
110
110
  :environment => "production",
111
- :strategy => 'blue_green',
111
+ :strategy => 'blue-green',
112
112
  :version_label => 42)
113
113
 
114
114
  deploy(:application => 'simple',
115
115
  :environment => "production",
116
- :strategy => 'blue_green',
116
+ :strategy => 'blue-green',
117
117
  :version_label => 43)
118
118
 
119
119
  assert @eb_driver.environment_exists?('simple', eb_envname('simple', 'production-a'))
@@ -124,12 +124,12 @@ class DeployTest < Minitest::Test
124
124
  def test_blue_green_deployment_should_swap_cname_to_make_active_most_recent_updated_env
125
125
  deploy(:application => 'simple',
126
126
  :environment => "production",
127
- :strategy => 'blue_green',
127
+ :strategy => 'blue-green',
128
128
  :version_label => 42)
129
129
 
130
130
  deploy(:application => 'simple',
131
131
  :environment => "production",
132
- :strategy => 'blue_green',
132
+ :strategy => 'blue-green',
133
133
  :version_label => 43)
134
134
 
135
135
  assert_match(/simple-production-inactive/, @eb_driver.environment_cname_prefix('simple', eb_envname('simple', 'production-a')))
@@ -139,7 +139,7 @@ class DeployTest < Minitest::Test
139
139
 
140
140
  deploy(:application => 'simple',
141
141
  :environment => "production",
142
- :strategy => 'blue_green',
142
+ :strategy => 'blue-green',
143
143
  :version_label => 44)
144
144
 
145
145
  assert_match(/simple-production-inactive/, @eb_driver.environment_cname_prefix('simple', eb_envname('simple', 'production-b')))
@@ -154,7 +154,7 @@ class DeployTest < Minitest::Test
154
154
  [42, 43, 44].each do |version_label|
155
155
  deploy(:application => 'simple',
156
156
  :environment => "production",
157
- :strategy => 'blue_green',
157
+ :strategy => 'blue-green',
158
158
  :smoke_test => smoke_test,
159
159
  :version_label => version_label)
160
160
  end
@@ -248,13 +248,13 @@ class DeployTest < Minitest::Test
248
248
  def test_blue_green_deployment_should_delete_and_recreate_inactive_env_if_phoenix_mode_is_enabled
249
249
  deploy(:application => 'simple',
250
250
  :environment => "production",
251
- :strategy => 'blue_green',
251
+ :strategy => 'blue-green',
252
252
  :version_label => 42,
253
253
  :phoenix_mode => true)
254
254
 
255
255
  deploy(:application => 'simple',
256
256
  :environment => "production",
257
- :strategy => 'blue_green',
257
+ :strategy => 'blue-green',
258
258
  :version_label => 43,
259
259
  :phoenix_mode => true)
260
260
 
@@ -266,7 +266,7 @@ class DeployTest < Minitest::Test
266
266
 
267
267
  deploy(:application => 'simple',
268
268
  :environment => "production",
269
- :strategy => 'blue_green',
269
+ :strategy => 'blue-green',
270
270
  :version_label => 44,
271
271
  :phoenix_mode => true)
272
272
 
@@ -295,7 +295,7 @@ class DeployTest < Minitest::Test
295
295
 
296
296
  def deploy(opts)
297
297
  EbDeployer.deploy({:package => @sample_package,
298
- :strategy => :inplace_update,
298
+ :strategy => :'inplace-update',
299
299
  :version_label => 1}.merge(opts).merge(stubs))
300
300
  end
301
301
 
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.2.4
4
+ version: 0.2.5
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-09-29 00:00:00.000000000 Z
13
+ date: 2013-10-01 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: aws-sdk