aws-codedeploy-agent 0.0.4 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (55) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +5 -1
  3. data/.travis.yml +10 -0
  4. data/CHANGES.md +5 -0
  5. data/Gemfile +6 -3
  6. data/README.md +35 -0
  7. data/Rakefile +52 -0
  8. data/aws-codedeploy-agent.gemspec +5 -10
  9. data/conf/codedeployagent.yml +1 -0
  10. data/features/AwsCredentials.yml +4 -0
  11. data/features/agent.feature +11 -0
  12. data/features/aws_credentials.rb +35 -0
  13. data/features/step_definitions.rb +233 -0
  14. data/init.d/codedeploy-agent +11 -6
  15. data/lib/instance_agent.rb +1 -1
  16. data/lib/instance_agent/config.rb +3 -1
  17. data/lib/instance_agent/log.rb +18 -0
  18. data/lib/instance_agent/platform/linux_util.rb +27 -5
  19. data/lib/instance_agent/plugins/codedeploy/application_specification/application_specification.rb +2 -1
  20. data/lib/instance_agent/plugins/codedeploy/application_specification/file_info.rb +2 -2
  21. data/lib/instance_agent/plugins/codedeploy/application_specification/script_info.rb +3 -2
  22. data/lib/instance_agent/plugins/codedeploy/codedeploy_control.rb +15 -14
  23. data/lib/instance_agent/plugins/codedeploy/command_executor.rb +34 -6
  24. data/lib/instance_agent/plugins/codedeploy/command_poller.rb +12 -1
  25. data/lib/instance_agent/plugins/codedeploy/deployment_specification.rb +2 -12
  26. data/lib/instance_agent/plugins/codedeploy/hook_executor.rb +8 -4
  27. data/lib/instance_agent/plugins/codedeploy/install_instruction.rb +3 -1
  28. data/lib/instance_metadata.rb +1 -1
  29. data/test/instance_agent/config_test.rb +3 -1
  30. data/test/instance_agent/platform/linux_util_test.rb +35 -0
  31. data/test/instance_agent/plugins/codedeploy/application_specification_test.rb +7 -6
  32. data/test/instance_agent/plugins/codedeploy/command_executor_test.rb +13 -10
  33. data/test/instance_agent/plugins/codedeploy/command_poller_test.rb +28 -6
  34. data/test/instance_agent/plugins/codedeploy/deployment_specification_test.rb +9 -9
  35. data/test/instance_agent/plugins/codedeploy/hook_executor_test.rb +12 -4
  36. data/test/test_helper.rb +6 -1
  37. data/vendor/gems/codedeploy-commands/apis/CodeDeployCommand.api.json +1 -0
  38. data/vendor/gems/codedeploy-commands/lib/aws/codedeploy_commands.rb +2 -0
  39. data/vendor/gems/codedeploy-commands/lib/aws/plugins/deploy_agent_version.rb +31 -0
  40. data/vendor/gems/codedeploy-commands/lib/aws/plugins/deploy_control_endpoint.rb +1 -12
  41. data/vendor/gems/process_manager/lib/process_manager/master.rb +3 -3
  42. data/vendor/specifications/codedeploy-commands-1.0.0.gemspec +5 -5
  43. metadata +52 -149
  44. data/vendor/gems/codedeploy-commands/codedeploy-commands-1.0.0.gemspec +0 -28
  45. data/vendor/gems/process_manager/process_manager-0.0.13.gemspec +0 -42
  46. data/vendor/specifications/aws-sdk-core-2.0.42.gemspec +0 -37
  47. data/vendor/specifications/builder-3.2.2.gemspec +0 -29
  48. data/vendor/specifications/gli-2.5.6.gemspec +0 -51
  49. data/vendor/specifications/jmespath-1.0.1.gemspec +0 -29
  50. data/vendor/specifications/little-plugger-1.1.3.gemspec +0 -32
  51. data/vendor/specifications/logging-1.8.1.gemspec +0 -44
  52. data/vendor/specifications/multi_json-1.7.7.gemspec +0 -30
  53. data/vendor/specifications/multi_json-1.8.4.gemspec +0 -30
  54. data/vendor/specifications/multi_xml-0.5.5.gemspec +0 -30
  55. data/vendor/specifications/simple_pid-0.2.1.gemspec +0 -28
@@ -27,7 +27,9 @@ class InstanceAgentConfigTest < InstanceAgentTestCase
27
27
  :wait_between_runs => 30,
28
28
  :wait_after_error => 30,
29
29
  :codedeploy_test_profile => 'prod',
30
- :on_premises_config_file => '/etc/codedeploy-agent/conf/codedeploy.onpremises.yml'
30
+ :on_premises_config_file => '/etc/codedeploy-agent/conf/codedeploy.onpremises.yml',
31
+ :proxy_uri => nil,
32
+ :enable_deployments_log => true
31
33
  }, InstanceAgent::Config.config)
32
34
  end
33
35
 
@@ -0,0 +1,35 @@
1
+ require 'test_helper'
2
+
3
+ class LinuxUtilTest < InstanceAgentTestCase
4
+ context 'Testing building command with sudo' do
5
+ setup do
6
+ @script_mock = Struct.new :sudo, :runas
7
+ end
8
+
9
+ should 'return command with sudo with runas user deploy' do
10
+ mock = @script_mock.new true, "deploy"
11
+ assert_equal 'sudo su deploy -c my_script.sh',
12
+ InstanceAgent::LinuxUtil.prepare_script_command(mock, "my_script.sh")
13
+ end
14
+
15
+ should 'return command without sudo with runas user deploy' do
16
+ mock = @script_mock.new nil, "deploy"
17
+ assert_equal 'su deploy -c my_script.sh',
18
+ InstanceAgent::LinuxUtil.prepare_script_command(mock, "my_script.sh")
19
+ end
20
+
21
+ should 'return command without sudo or runas user' do
22
+ mock = @script_mock.new nil, nil
23
+ assert_equal 'my_script.sh',
24
+ InstanceAgent::LinuxUtil.prepare_script_command(mock, "my_script.sh")
25
+ end
26
+
27
+ should 'return command with sudo' do
28
+ mock = @script_mock.new true, nil
29
+ assert_equal 'sudo my_script.sh',
30
+ InstanceAgent::LinuxUtil.prepare_script_command(mock, "my_script.sh")
31
+ end
32
+
33
+ end
34
+ end
35
+
@@ -6,7 +6,12 @@ module InstanceAgent
6
6
  module Plugins
7
7
  module CodeDeployPlugin
8
8
  module ApplicationSpecification
9
+
9
10
  class ApplicationSpecificationTest < InstanceAgentTestCase
11
+ def make_app_spec
12
+ ApplicationSpecification.new(YAML.load(@app_spec_string), {:revision_id => @test_revision_id})
13
+ end
14
+
10
15
  context 'The Application Specification' do
11
16
  setup do
12
17
  @test_revision_id = 'bar'
@@ -14,10 +19,6 @@ module InstanceAgent
14
19
 
15
20
  private
16
21
 
17
- def make_app_spec
18
- ApplicationSpecification.new(YAML.load(@app_spec_string), {:revision_id => @test_revision_id})
19
- end
20
-
21
22
  context "With missing version" do
22
23
  setup do
23
24
  @app_spec_string = <<-END
@@ -271,7 +272,7 @@ module InstanceAgent
271
272
  end
272
273
 
273
274
  should "raise and AppSpecValidationException" do
274
- assert_raised_with_message('File needs to have a destination',AppSpecValidationException) do
275
+ assert_raised_with_message('File test_source needs to have a destination',AppSpecValidationException) do
275
276
  make_app_spec()
276
277
  end
277
278
  end
@@ -1710,4 +1711,4 @@ module InstanceAgent
1710
1711
  end
1711
1712
  end
1712
1713
  end
1713
- end
1714
+ end
@@ -1,11 +1,18 @@
1
1
  require 'test_helper'
2
+ require 'certificate_helper'
2
3
  require 'stringio'
3
- require 'com/amazon/codedeploy/command/v20141006/host_command_instance'
4
4
  require 'aws-sdk-core/s3'
5
5
 
6
6
  class CodeDeployPluginCommandExecutorTest < InstanceAgentTestCase
7
7
 
8
8
  include InstanceAgent::Plugins::CodeDeployPlugin
9
+ def generate_signed_message_for(map)
10
+ message = @cert_helper.sign_message(map.to_json)
11
+ spec = OpenStruct.new({ :payload => message })
12
+ spec.format = "PKCS7/JSON"
13
+
14
+ return spec
15
+ end
9
16
 
10
17
  context 'The CodeDeploy Plugin Command Executor' do
11
18
  setup do
@@ -33,13 +40,6 @@ class CodeDeployPluginCommandExecutorTest < InstanceAgentTestCase
33
40
  end
34
41
 
35
42
  context "when executing a command" do
36
- def generate_signed_message_for(map)
37
- message = @cert_helper.sign_message(map.to_json)
38
- spec = OpenStruct.new({ :payload => message })
39
- spec.format = "PKCS7/JSON"
40
-
41
- return spec
42
- end
43
43
 
44
44
  setup do
45
45
  @cert_helper = CertificateHelper.new
@@ -62,7 +62,7 @@ class CodeDeployPluginCommandExecutorTest < InstanceAgentTestCase
62
62
  "S3Revision" => @s3Revision
63
63
  }
64
64
  })
65
- @command = Com::Amazon::Codedeploy::Command::V20141006::HostCommandInstance.new(
65
+ @command = OpenStruct.new(
66
66
  :host_command_identifier => "command-1",
67
67
  :deployment_execution_id => "test-execution")
68
68
  @root_dir = '/tmp/codedeploy/'
@@ -184,6 +184,7 @@ class CodeDeployPluginCommandExecutorTest < InstanceAgentTestCase
184
184
  @mock_file = mock
185
185
  Net::HTTP.stubs(:start).yields(@http)
186
186
  File.stubs(:open).returns @mock_file
187
+ Dir.stubs(:entries).returns []
187
188
  @mock_file.stubs(:close)
188
189
  @http.stubs(:request_get)
189
190
  @s3 = mock
@@ -364,7 +365,8 @@ class CodeDeployPluginCommandExecutorTest < InstanceAgentTestCase
364
365
  :application_name => @application_name,
365
366
  :deployment_id => @deployment_id,
366
367
  :deployment_group_name => @deployment_group_name,
367
- :deployment_root_dir => @deployment_root_dir,
368
+ :deployment_group_id => @deployment_group_id,
369
+ :deployment_root_dir => @deployment_root_dir,
368
370
  :last_successful_deployment_dir => nil,
369
371
  :app_spec_path => 'appspec.yml'}
370
372
  @mock_hook_executor = mock
@@ -502,6 +504,7 @@ class CodeDeployPluginCommandExecutorTest < InstanceAgentTestCase
502
504
  :application_name => @application_name,
503
505
  :deployment_id => @deployment_id,
504
506
  :deployment_group_name => @deployment_group_name,
507
+ :deployment_group_id => @deployment_group_id,
505
508
  :last_successful_deployment_dir => nil,
506
509
  :app_spec_path => 'appspec.yml'}
507
510
  @hook_executor_constructor_hash_1 = hook_executor_constructor_hash.merge({:lifecycle_event => "lifecycle_event_1"})
@@ -255,34 +255,56 @@ class CommandPollerTest < InstanceAgentTestCase
255
255
  @poller.perform
256
256
  end
257
257
 
258
- should 'return when Succeeded command status is given by PollHostCommandAcknowledgement' do
258
+ should 'call PutHostCommandComplete when Succeeded status is given by PollHostCommandAcknowledgement' do
259
259
  @deploy_control_client.expects(:put_host_command_acknowledgement).
260
260
  with(:diagnostics => nil,
261
261
  :host_command_identifier => @command.host_command_identifier).
262
262
  returns(stub(:command_status => "Succeeded"))
263
263
 
264
+ @deploy_control_client.expects(:put_host_command_complete).
265
+ with(
266
+ :command_status => 'Succeeded',
267
+ :diagnostics => {
268
+ :format => "JSON",
269
+ :payload => {
270
+ 'error_code' => InstanceAgent::Plugins::CodeDeployPlugin::ScriptError::SUCCEEDED_CODE,
271
+ 'script_name' => "",
272
+ 'message' => 'Succeeded',
273
+ 'log' => ""}.to_json
274
+ },
275
+ :host_command_identifier => @command.host_command_identifier)
276
+
264
277
  @get_deployment_specification_state.become('never')
265
278
  @deploy_control_client.expects(:get_deployment_specification).never.
266
279
  when(@get_deployment_specification_state.is('never'))
267
280
  @put_host_command_complete_state.become('never')
268
- @deploy_control_client.expects(:put_host_command_complete).never.
269
- when(@put_host_command_complete_state.is('never'))
270
281
 
271
282
  @poller.perform
272
283
  end
273
284
 
274
- should 'return when Failed command status is given by PollHostCommandAcknowledgement' do
285
+ should 'call PutHostCommandComplete when Failed status is given by PollHostCommandAcknowledgement' do
275
286
  @deploy_control_client.expects(:put_host_command_acknowledgement).
276
287
  with(:diagnostics => nil,
277
288
  :host_command_identifier => @command.host_command_identifier).
278
289
  returns(stub(:command_status => "Failed"))
279
290
 
291
+ @deploy_control_client.expects(:put_host_command_complete).
292
+ with(
293
+ :command_status => 'Failed',
294
+ :diagnostics => {
295
+ :format => "JSON",
296
+ :payload => {
297
+ 'error_code' => InstanceAgent::Plugins::CodeDeployPlugin::ScriptError::UNKNOWN_ERROR_CODE,
298
+ 'script_name' => "",
299
+ 'message' => 'Failed',
300
+ 'log' => ""}.to_json
301
+ },
302
+ :host_command_identifier => @command.host_command_identifier)
303
+
280
304
  @get_deployment_specification_state.become('never')
281
305
  @deploy_control_client.expects(:get_deployment_specification).never.
282
306
  when(@get_deployment_specification_state.is('never'))
283
307
  @put_host_command_complete_state.become('never')
284
- @deploy_control_client.expects(:put_host_command_complete).never.
285
- when(@put_host_command_complete_state.is('never'))
286
308
 
287
309
  @poller.perform
288
310
  end
@@ -3,15 +3,15 @@ require 'ostruct'
3
3
  require 'certificate_helper'
4
4
 
5
5
  class DeploymentSpecificationTest < InstanceAgentTestCase
6
- context 'The Deployment Specification' do
7
- def generate_signed_message_for(map)
8
- message = @cert_helper.sign_message(map.to_json)
9
- spec = OpenStruct.new({ :payload => message })
10
- spec.format = "PKCS7/JSON"
11
6
 
12
- return spec
13
- end
7
+ def generate_signed_message_for(map)
8
+ message = @cert_helper.sign_message(map.to_json)
9
+ spec = OpenStruct.new({ :payload => message })
10
+ spec.format = "PKCS7/JSON"
11
+ return spec
12
+ end
14
13
 
14
+ context 'The Deployment Specification' do
15
15
  setup do
16
16
  @cert_helper = CertificateHelper.new
17
17
  @deployment_id = SecureRandom.uuid.to_s
@@ -37,8 +37,8 @@ class DeploymentSpecificationTest < InstanceAgentTestCase
37
37
 
38
38
  @packed_message = generate_signed_message_for(@deployment_spec)
39
39
  InstanceAgent::Config.init
40
- end
41
-
40
+ end
41
+
42
42
  context "with JSON format" do
43
43
  should "populate the deployment id" do
44
44
  parsed_deployment_spec = InstanceAgent::Plugins::CodeDeployPlugin::DeploymentSpecification.parse(@packed_message)
@@ -1,7 +1,6 @@
1
1
  require 'test_helper'
2
2
  require 'stringio'
3
3
  require 'fileutils'
4
- require 'com/amazon/codedeploy/command/v20141006/host_command_instance'
5
4
 
6
5
  class HookExecutorTest < InstanceAgentTestCase
7
6
 
@@ -12,6 +11,7 @@ class HookExecutorTest < InstanceAgentTestCase
12
11
  :application_name => @application_name,
13
12
  :deployment_id => @deployment_id,
14
13
  :deployment_group_name => @deployment_group_name,
14
+ :deployment_group_id => @deployment_group_id,
15
15
  :deployment_root_dir => @deployment_root_dir,
16
16
  :last_successful_deployment_dir => @last_successful_deployment_dir,
17
17
  :app_spec_path => @app_spec_path})
@@ -22,11 +22,16 @@ class HookExecutorTest < InstanceAgentTestCase
22
22
  @deployment_id='12345'
23
23
  @application_name='TestApplication'
24
24
  @deployment_group_name='TestDeploymentGroup'
25
+ @deployment_group_id='foo'
25
26
  @deployment_root_dir = "deployment/root/dir"
26
27
  @last_successful_deployment_dir = "last/deployment/root/dir"
27
28
  @app_spec_path = "app_spec"
28
29
  @app_spec = { "version" => 0.0, "os" => "linux" }
29
30
  YAML.stubs(:load).returns(@app_spec)
31
+ @root_dir = '/tmp/codedeploy'
32
+ logger = mock
33
+ logger.stubs(:log)
34
+ InstanceAgent::DeploymentLog.stubs(:instance).returns(logger)
30
35
  end
31
36
 
32
37
  context "when creating a hook command" do
@@ -41,6 +46,7 @@ class HookExecutorTest < InstanceAgentTestCase
41
46
  :application_name => @application_name,
42
47
  :deployment_id => @deployment_id,
43
48
  :deployment_group_name => @deployment_group_name,
49
+ :deployment_group_id => @deployment_group_id,
44
50
  :deployment_root_dir => @deployment_root_dir,
45
51
  :app_spec_path => @app_spec_path})
46
52
  end
@@ -56,7 +62,8 @@ class HookExecutorTest < InstanceAgentTestCase
56
62
  assert_raise do
57
63
  @hook_executor = HookExecutor.new ({:lifecycle_event => @lifecycle_event,
58
64
  :application_name => @application_name,
59
- :deployment_group_name => @deployment_gtroup_name,
65
+ :deployment_group_name => @deployment_group_name,
66
+ :deployment_group_id => @deployment_group_id,
60
67
  :deployment_id => @deployment_id,
61
68
  :deployment_root_dir => @deployment_root_dir})
62
69
  end
@@ -94,7 +101,8 @@ class HookExecutorTest < InstanceAgentTestCase
94
101
  @child_env={'LIFECYCLE_EVENT' => @lifecycle_event.to_s,
95
102
  'DEPLOYMENT_ID' => @deployment_id.to_s,
96
103
  'APPLICATION_NAME' => @application_name.to_s,
97
- 'DEPLOYMENT_GROUP_NAME' => @deployment_group_name.to_s}
104
+ 'DEPLOYMENT_GROUP_NAME' => @deployment_group_name.to_s,
105
+ 'DEPLOYMENT_GROUP_ID' => @deployment_group_id.to_s}
98
106
  end
99
107
 
100
108
  context "no scripts to run for a given hook" do
@@ -123,7 +131,7 @@ class HookExecutorTest < InstanceAgentTestCase
123
131
  end
124
132
 
125
133
  should "raise and exception" do
126
- assert_raised_with_message('Script does not exist at specified location: test', ScriptError)do
134
+ assert_raised_with_message("Script does not exist at specified location: #{File.expand_path(@deployment_root_dir)}/deployment-archive/test", ScriptError)do
127
135
  @hook_executor.execute
128
136
  end
129
137
  end
@@ -1,4 +1,9 @@
1
1
  # encoding: UTF-8
2
+ $:.unshift "lib"
3
+ Gem.use_paths(nil, Gem.path << "vendor")
4
+
5
+ require 'coveralls'
6
+ Coveralls.wear!
2
7
  require 'thread'
3
8
  require 'rubygems'
4
9
  require "bundler"
@@ -13,4 +18,4 @@ require 'base64'
13
18
 
14
19
  # require local test helpers. If you need a helper write,
15
20
  # keep this pattern or you'll be punished hard
16
- require 'helpers/instance_agent_helper'
21
+ require 'instance_agent_helper'
@@ -1,4 +1,5 @@
1
1
  {
2
+ "version": "2.0",
2
3
  "metadata": {
3
4
  "apiVersion": "2014-10-06",
4
5
  "endpointPrefix": "codedeploy-commands",
@@ -3,6 +3,7 @@ gem_root = File.dirname(File.dirname(File.dirname(__FILE__)))
3
3
  require 'aws-sdk-core'
4
4
  require "#{gem_root}/lib/aws/plugins/certificate_authority"
5
5
  require "#{gem_root}/lib/aws/plugins/deploy_control_endpoint"
6
+ require "#{gem_root}/lib/aws/plugins/deploy_agent_version"
6
7
 
7
8
  version = '1.0.0'
8
9
 
@@ -15,4 +16,5 @@ bundled_apis.each do |svc_class_name, api_versions|
15
16
  svc_class.const_set(:VERSION, version)
16
17
  Aws::CodeDeployCommand::Client.add_plugin(Aws::Plugins::CertificateAuthority)
17
18
  Aws::CodeDeployCommand::Client.add_plugin(Aws::Plugins::DeployControlEndpoint)
19
+ Aws::CodeDeployCommand::Client.add_plugin(Aws::Plugins::DeployAgentVersion)
18
20
  end
@@ -0,0 +1,31 @@
1
+ module Aws
2
+ module Plugins
3
+ class DeployAgentVersion < Seahorse::Client::Plugin
4
+ class Handler < Seahorse::Client::Handler
5
+ def initialize(handler = nil)
6
+ @handler = handler
7
+ file_path = File.expand_path(File.join(InstanceAgent::Platform.util.codedeploy_version_file, '.version'))
8
+ if File.exist?(file_path)
9
+ @agent_version ||= File.read(file_path).split(': ').last.strip
10
+ else
11
+ @agent_version ||= "UNKNOWN_VERSION"
12
+ log(:warn, "Version tracking file either does not exist or cannot be read in #{file_path}.")
13
+ end
14
+ end
15
+
16
+ def call(context)
17
+ context.http_request.headers['x-amz-codedeploy-agent-version'] = @agent_version
18
+ @handler.call(context)
19
+ end
20
+
21
+ private
22
+ def log(severity, message)
23
+ raise ArgumentError, "Unknown severity #{severity.inspect}" unless InstanceAgent::Log::SEVERITIES.include?(severity.to_s)
24
+ InstanceAgent::Log.send(severity.to_sym, "#{message}")
25
+ end
26
+ end
27
+
28
+ handler(Handler)
29
+ end
30
+ end
31
+ end
@@ -6,18 +6,7 @@ module Aws
6
6
  option(:endpoint) do |cfg|
7
7
  url = ENV['AWS_DEPLOY_CONTROL_ENDPOINT']
8
8
  if url.nil?
9
- case cfg.region
10
- when "us-east-1"
11
- url = "https://codedeploy-commands.us-east-1.amazonaws.com"
12
- when "us-west-2"
13
- url = "https://codedeploy-commands.us-west-2.amazonaws.com"
14
- when "eu-west-1"
15
- url = "https://codedeploy-commands.eu-west-1.amazonaws.com"
16
- when "ap-southeast-2"
17
- url = "https://codedeploy-commands.ap-southeast-2.amazonaws.com"
18
- else
19
- raise "Not able to find an endpoint. Unknown region."
20
- end
9
+ url = "https://codedeploy-commands.#{cfg.region}.amazonaws.com"
21
10
  end
22
11
  url
23
12
  end
@@ -163,10 +163,10 @@ module ProcessManager
163
163
 
164
164
  def handle_pid_file
165
165
  @file_lock ||= File.open(pid_lock_file, File::RDWR|File::CREAT, 0644)
166
- lock_aquired = @file_lock.flock(File::LOCK_EX | File::LOCK_NB)
166
+ lock_acquired = @file_lock.flock(File::LOCK_EX | File::LOCK_NB)
167
167
 
168
- if lock_aquired == false
169
- ProcessManager::Log.info("Could not aquire lock on #{pid_lock_file} - aborting start!")
168
+ if lock_acquired == false
169
+ ProcessManager::Log.info("Could not acquire lock on #{pid_lock_file} - aborting start!")
170
170
  self.class.abort
171
171
 
172
172
  elsif File.exists?(pid_file)
@@ -8,8 +8,8 @@ Gem::Specification.new do |s|
8
8
  s.authors = ["Amazon Web Services"]
9
9
  s.date = "2015-06-30"
10
10
  s.description = "Provides client libraries for CodeDeploy Command."
11
- s.files = ["lib/aws/plugins/deploy_control_endpoint.rb", "lib/aws/plugins/certificate_authority.rb", "lib/aws/codedeploy_commands.rb", "apis/CodeDeployCommand.api.json"]
12
- s.homepage = "https://github.com/aws/aws-codedeploy-agent"
11
+ s.files = ["lib/aws/codedeploy_commands.rb", "lib/aws/plugins/certificate_authority.rb", "lib/aws/plugins/deploy_control_endpoint.rb", "apis/CodeDeployCommand.api.json"]
12
+ s.homepage = "https://devcentral.amazon.com/ac/brazil/directory/package/overview/Ruby-codedeploy-commands"
13
13
  s.licenses = ["Apache 2.0"]
14
14
  s.require_paths = ["lib"]
15
15
  s.rubygems_version = "1.8.23.2"
@@ -19,11 +19,11 @@ Gem::Specification.new do |s|
19
19
  s.specification_version = 3
20
20
 
21
21
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
22
- s.add_runtime_dependency(%q<aws-sdk-core>, ["= 2.0.42"])
22
+ s.add_runtime_dependency(%q<aws-sdk-core>, ["~> 2.2.0"])
23
23
  else
24
- s.add_dependency(%q<aws-sdk-core>, ["= 2.0.42"])
24
+ s.add_dependency(%q<aws-sdk-core>, ["~> 2.2.0"])
25
25
  end
26
26
  else
27
- s.add_dependency(%q<aws-sdk-core>, ["= 2.0.42"])
27
+ s.add_dependency(%q<aws-sdk-core>, ["~> 2.2.0"])
28
28
  end
29
29
  end