simple_deploy 0.5.0 → 0.5.1

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/CHANGELOG CHANGED
@@ -1,3 +1,10 @@
1
+ ## v0.5.1:
2
+
3
+ * Corrected the use of the domain attribute in URLs during deployments
4
+ * Corrected the use of the force option during deployments
5
+ * Added help text on SSH usage to the deploy command
6
+ * Corrected the acceptable options for the protect command
7
+
1
8
  ## v0.5.0:
2
9
 
3
10
  * Updated the update command so it accepts a force option
data/README.md CHANGED
@@ -12,16 +12,6 @@ gem install simple_deploy
12
12
  Create a file **~/.simple_deploy.yml** and include within it:
13
13
 
14
14
  ```
15
- artifacts:
16
- chef_repo:
17
- bucket_prefix: bucket1
18
- domain: app1-chef_repo
19
- app:
20
- bucket_prefix: bucket2
21
- domain: app1
22
- cookbooks:
23
- bucket_prefix: bucket2
24
-
25
15
  environments:
26
16
  preprod_shared_us_west_1:
27
17
  access_key: XXX
@@ -41,7 +31,7 @@ Currently Simple Deploy only supports Campfire for notifications. To enable the
41
31
  Advaned Configurations
42
32
  ----------------------
43
33
 
44
- The configuration file supports additional optional deployment parameters. Artifacts can have an **endpoint** specified to be passed in (by default they pass in the s3 url).
34
+ The configuration file supports additional optional deployment parameters.
45
35
 
46
36
  Deploy can have a ssh **user** and **key** set. These will be used to connect to both the gateway and tunnel through to instances.
47
37
 
@@ -57,13 +57,13 @@ module SimpleDeploy
57
57
  when 'update'
58
58
  CLI::Update.new.update
59
59
  when '-h'
60
- puts "simple_deploy [attributes|create|destroy|environments|events|instances|list|template|outputs|parameters|resources|ssh|status|update] [options]"
60
+ puts "simple_deploy [attributes|create|destroy|environments|events|instances|list|template|outputs|parameters|protect|resources|ssh|status|update] [options]"
61
61
  puts "Append -h for help on specific subcommand."
62
62
  when '-v'
63
63
  puts SimpleDeploy::VERSION
64
64
  else
65
65
  puts "Unknown command: '#{cmd}'."
66
- puts "simple_deploy [attributes|create|destroy|environments|events|instances|list|template|outputs|parameters|resources|ssh|status|update] [options]"
66
+ puts "simple_deploy [attributes|create|destroy|environments|events|instances|list|template|outputs|parameters|protect|resources|ssh|status|update] [options]"
67
67
  puts "Append -h for help on specific subcommand."
68
68
  exit 1
69
69
  end
@@ -12,6 +12,21 @@ Execute deployment on given stack(s).
12
12
 
13
13
  simple_deploy deploy -n STACK_NAME -n STACK_NAME -e ENVIRONMENT
14
14
 
15
+ Using SSH:
16
+
17
+ Simple deploy defaults your user and key for SSH to your username and your id_rsa key.
18
+
19
+ If you need to override these because you want to use a different username or you have a different key file,
20
+ you can set simple deploy specific environment variables to do the override.
21
+
22
+ Example 1: Overriding when the command is run.
23
+ SIMPLE_DEPLOY_SSH_USER=fred SIMPLE_DEPLOY_SSH_KEY=$HOME/.ssh/id_dsa simple_deploy deploy -n STACK_NAME -n STACK_NAME -e ENVIRONMENT
24
+
25
+ Example 2: Overriding them in your shell environment (bash shell used in the example).
26
+ export SIMPLE_DEPLOY_SSH_USER=fred
27
+ export SIMPLE_DEPLOY_SSH_KEY=$HOME/.ssh/id_dsa
28
+ simple_deploy deploy -n STACK_NAME -n STACK_NAME -e ENVIRONMENT
29
+
15
30
  EOS
16
31
  opt :help, "Display Help"
17
32
  opt :attributes, "= seperated attribute and it's value", :type => :string,
@@ -11,11 +11,12 @@ module SimpleDeploy
11
11
 
12
12
  Protect a stack.
13
13
 
14
- simple_deploy protect -n STACK_NAME -e ENVIRONMENT -a PROTECTION=ON_OFF
14
+ simple_deploy protect -n STACK_NAME -e ENVIRONMENT -p on_off
15
15
 
16
16
  EOS
17
17
  opt :help, "Display Help"
18
18
  opt :environment, "Set the target environment", :type => :string
19
+ opt :protection, "Enable/Disable protection using on/off", :type => :string
19
20
  opt :log_level, "Log level: debug, info, warn, error", :type => :string,
20
21
  :default => 'info'
21
22
  opt :name, "Stack name of stack to protect", :type => :string
@@ -28,14 +29,11 @@ EOS
28
29
 
29
30
  logger = SimpleDeployLogger.new :log_level => opts[:log_level]
30
31
 
31
- attributes = CLI::Shared.parse_attributes :attributes => opts[:attributes],
32
- :logger => logger
33
-
34
32
  stack = Stack.new :environment => opts[:environment],
35
33
  :name => opts[:name],
36
34
  :config => config,
37
35
  :logger => logger
38
- stack.update :attributes => attributes
36
+ stack.update :attributes => [{ 'protection' => opts[:protection] }]
39
37
  end
40
38
  end
41
39
  end
@@ -35,7 +35,11 @@ module SimpleDeploy
35
35
  set_deploy_command
36
36
  end
37
37
 
38
- def execute(force=false)
38
+ def execute(force = false)
39
+ if !clear_for_deployment? && force
40
+ clear_deployment_lock true
41
+ end
42
+
39
43
  if clear_for_deployment?
40
44
  status.set_deployment_in_progress
41
45
  @logger.info 'Starting deployment.'
@@ -53,8 +57,8 @@ module SimpleDeploy
53
57
  status.clear_for_deployment?
54
58
  end
55
59
 
56
- def clear_deployment_lock(force=false)
57
- status.clear_deployment_lock(force)
60
+ def clear_deployment_lock(force = false)
61
+ status.clear_deployment_lock force
58
62
  end
59
63
 
60
64
  def ssh
@@ -27,20 +27,20 @@ module SimpleDeploy
27
27
  @config.artifacts
28
28
  end
29
29
 
30
- def cloud_formation_url attribute
30
+ def cloud_formation_url(attribute)
31
31
  name = attribute.keys.first
32
32
  id = attribute[name]
33
- a = @config.artifacts.select { |a| a['name'] == name }.first
34
33
 
35
34
  bucket_prefix = @main_attributes["#{name}_bucket_prefix"]
36
- url_parameter = @config.artifact_cloud_formation_url name
37
-
35
+ domain = @main_attributes["#{name}_domain"]
38
36
  artifact = Artifact.new :name => name,
39
37
  :id => id,
40
38
  :region => @region,
41
39
  :config => @config,
40
+ :domain => domain,
42
41
  :bucket_prefix => bucket_prefix
43
42
 
43
+ url_parameter = @config.artifact_cloud_formation_url name
44
44
  { url_parameter => artifact.endpoints['s3'] }
45
45
  end
46
46
 
@@ -1,3 +1,3 @@
1
1
  module SimpleDeploy
2
- VERSION = "0.5.0"
2
+ VERSION = "0.5.1"
3
3
  end
@@ -20,7 +20,7 @@ describe SimpleDeploy::CLI::Protect do
20
20
  options = { :environment => 'my_env',
21
21
  :log_level => 'debug',
22
22
  :name => 'my_stack',
23
- :attributes => ['protection=on'] }
23
+ :protection => 'on' }
24
24
 
25
25
  SimpleDeploy::CLI::Shared.should_receive(:valid_options?).
26
26
  with(:provided => options,
@@ -44,7 +44,7 @@ describe SimpleDeploy::CLI::Protect do
44
44
  options = { :environment => 'my_env',
45
45
  :log_level => 'debug',
46
46
  :name => 'my_stack',
47
- :attributes => ['protection=off'] }
47
+ :protection => 'off' }
48
48
 
49
49
  SimpleDeploy::CLI::Shared.should_receive(:valid_options?).
50
50
  with(:provided => options,
@@ -91,10 +91,11 @@ describe SimpleDeploy do
91
91
  status_mock = mock 'status mock'
92
92
  SimpleDeploy::Stack::Deployment::Status.should_receive(:new).
93
93
  and_return status_mock
94
- status_mock.should_receive(:clear_for_deployment?).and_return true
94
+ status_mock.stub(:clear_for_deployment?).and_return true
95
95
  status_mock.should_receive(:set_deployment_in_progress)
96
96
  @deployment_mock.should_receive(:simpledeploy)
97
97
  status_mock.should_receive(:unset_deployment_in_progress)
98
+
98
99
  @stack.execute.should == true
99
100
  end
100
101
 
@@ -102,10 +103,12 @@ describe SimpleDeploy do
102
103
  status_mock = mock 'status mock'
103
104
  SimpleDeploy::Stack::Deployment::Status.should_receive(:new).
104
105
  and_return status_mock
105
- status_mock.should_receive(:clear_for_deployment?).and_return true
106
+ status_mock.should_receive(:clear_for_deployment?).and_return false, true
107
+ status_mock.should_receive(:clear_deployment_lock).with(true)
106
108
  status_mock.should_receive(:set_deployment_in_progress)
107
109
  @deployment_mock.should_receive(:simpledeploy)
108
110
  status_mock.should_receive(:unset_deployment_in_progress)
111
+
109
112
  @stack.execute(true).should == true
110
113
  end
111
114
 
@@ -113,8 +116,9 @@ describe SimpleDeploy do
113
116
  status_mock = mock 'status mock'
114
117
  SimpleDeploy::Stack::Deployment::Status.should_receive(:new).
115
118
  and_return status_mock
116
- status_mock.should_receive(:clear_for_deployment?).and_return false
119
+ status_mock.stub(:clear_for_deployment?).and_return false
117
120
  @logger_stub.should_receive(:error)
121
+
118
122
  @stack.execute.should == false
119
123
  end
120
124
  end
@@ -2,37 +2,22 @@ require 'spec_helper'
2
2
 
3
3
  describe SimpleDeploy do
4
4
  before do
5
- @config_mock = mock 'config mock'
6
- @logger_mock = mock 'logger mock'
7
- @config_mock.should_receive(:region).with('preprod').
8
- and_return 'us-west-1'
9
- @config_mock.should_receive(:logger).and_return @logger_mock
5
+ @logger_mock = mock 'logger mock', :info => 'true'
6
+ @config_mock = mock 'config mock', :logger => @logger_mock, :region => 'us-west-1'
7
+ @config_mock.stub(:artifact_cloud_formation_url).and_return('CookBooksURL')
8
+ @config_mock.stub(:artifacts).and_return(['chef_repo', 'cookbooks', 'app'])
10
9
 
11
10
  options = { :config => @config_mock,
12
11
  :environment => 'preprod',
13
- :main_attributes => { 'chef_repo_bucket_prefix' => 'test-prefix' } }
12
+ :main_attributes => {
13
+ 'chef_repo_bucket_prefix' => 'test-prefix',
14
+ 'chef_repo_domain' => 'test-domain' }
15
+ }
14
16
  @formater = SimpleDeploy::StackAttributeFormater.new options
15
17
  end
16
18
 
17
- it "should return updated attributes including cloud formation url" do
18
- artifact_mock = mock 'artifact'
19
- SimpleDeploy::Artifact.should_receive(:new).exactly(2).times.
20
- with(:name => 'chef_repo',
21
- :id => 'test123',
22
- :region => 'us-west-1',
23
- :config => @config_mock,
24
- :bucket_prefix => 'test-prefix').
25
- and_return artifact_mock
26
- @config_mock.should_receive(:artifact_cloud_formation_url).with('chef_repo').
27
- exactly(2).times.
28
- and_return('CookBooksURL')
29
- @config_mock.should_receive(:artifacts).exactly(3).times.
30
- and_return ['chef_repo', 'cookbooks', 'app']
31
- @logger_mock.should_receive(:info)
32
- artifact_mock.should_receive(:endpoints).exactly(2).times.
33
- and_return 's3' => 's3_url'
34
- @formater.updated_attributes([ { 'chef_repo' => 'test123' } ]).
35
- should == [ { "chef_repo" => "test123" },
36
- { "CookBooksURL" =>"s3_url" } ]
19
+ it 'should return updated attributes including the cloud formation url' do
20
+ updates = @formater.updated_attributes([ { 'chef_repo' => 'test123' } ])
21
+ updates.should == [{ 'chef_repo' => 'test123' }, { 'CookBooksURL' => 's3://test-prefix-us-west-1/test-domain/test123.tar.gz' }]
37
22
  end
38
23
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: simple_deploy
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.0
4
+ version: 0.5.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-09-24 00:00:00.000000000 Z
12
+ date: 2012-09-27 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rspec
16
- requirement: &2152015560 !ruby/object:Gem::Requirement
16
+ requirement: &2155888560 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0'
22
22
  type: :development
23
23
  prerelease: false
24
- version_requirements: *2152015560
24
+ version_requirements: *2155888560
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: capistrano
27
- requirement: &2152014980 !ruby/object:Gem::Requirement
27
+ requirement: &2155887980 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '0'
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *2152014980
35
+ version_requirements: *2155887980
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: stackster
38
- requirement: &2152014180 !ruby/object:Gem::Requirement
38
+ requirement: &2155887300 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - =
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: 0.2.9
44
44
  type: :runtime
45
45
  prerelease: false
46
- version_requirements: *2152014180
46
+ version_requirements: *2155887300
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: tinder
49
- requirement: &2152176220 !ruby/object:Gem::Requirement
49
+ requirement: &2155886560 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ! '>='
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: '0'
55
55
  type: :runtime
56
56
  prerelease: false
57
- version_requirements: *2152176220
57
+ version_requirements: *2155886560
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: trollop
60
- requirement: &2152175540 !ruby/object:Gem::Requirement
60
+ requirement: &2156048720 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ! '>='
@@ -65,7 +65,7 @@ dependencies:
65
65
  version: '0'
66
66
  type: :runtime
67
67
  prerelease: false
68
- version_requirements: *2152175540
68
+ version_requirements: *2156048720
69
69
  description: I am designed to deploy artifacts uploaded by Heirloom
70
70
  email:
71
71
  - brett@weav.net