simple_deploy 0.3.7 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG CHANGED
@@ -1,3 +1,10 @@
1
+ ## v0.4.0:
2
+
3
+ * Added support for passing updates with deploy command
4
+ * Added support for deploying updates to multiple stacks
5
+ * Updated log outputs
6
+ * Abstracted CLI into individual classes
7
+
1
8
  ## v0.3.7:
2
9
 
3
10
  * Updated stackster
data/README.md CHANGED
@@ -12,21 +12,15 @@ gem install simple_deploy
12
12
  Create a file **~/.simple_deploy.yml** and include within it:
13
13
 
14
14
  ```
15
- deploy:
16
- script: /opt/intu/admin/bin/configure.sh
17
- artifacts:
18
- - name: live_community_chef_repo
19
- bucket_prefix: intu-lc
20
- variable: CHEF_REPO_URL
21
- cloud_formation_url: ChefRepoURL
22
- - name: live_community
23
- bucket_prefix: intu-lc
24
- variable: APP_URL
25
- cloud_formation_url: AppArtifactURL
26
- - name: cookbooks
27
- bucket_prefix: intu-artifacts
28
- variable: COOKBOOKS_URL
29
- cloud_formation_url: CookbooksURL
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
30
24
 
31
25
  environments:
32
26
  preprod_shared_us_west_1:
@@ -53,6 +47,7 @@ simple_deploy list -e ENVIRONMENT
53
47
  simple_deploy create -n STACK_NAME -e ENVIRONMENT -a ATTRIBUTES -t TEMPLATE_PATH
54
48
  simple_deploy update -n STACK_NAME -e ENVIRONMENT -a ATTRIBUTES
55
49
  simple_deploy deploy -n STACK_NAME -e ENVIRONMENT
50
+ simple_deploy ssh -n STACK_NAME -e ENVIRONMENT
56
51
  simple_deploy destroy -n STACK_NAME -e ENVIRONMENT
57
52
  simple_deploy instances -n STACK_NAME -e ENVIRONMENT
58
53
  simple_deploy status -n STACK_NAME -e ENVIRONMENT
@@ -0,0 +1,38 @@
1
+ require 'trollop'
2
+
3
+ module SimpleDeploy
4
+ module CLI
5
+ class Attributes
6
+ def show
7
+ opts = Trollop::options do
8
+ version SimpleDeploy::VERSION
9
+ banner <<-EOS
10
+
11
+ Show attributes for stack.
12
+
13
+ simple_deploy attributes -n STACK_NAME -e ENVIRONMENT
14
+
15
+ EOS
16
+ opt :help, "Display Help"
17
+ opt :environment, "Set the target environment", :type => :string
18
+ opt :log_level, "Log level: debug, info, warn, error", :type => :string,
19
+ :default => 'info'
20
+ opt :name, "Stack name to manage", :type => :string
21
+ end
22
+
23
+ CLI::Shared.valid_options? :provided => opts,
24
+ :required => [:environment, :name]
25
+
26
+ config = Config.new.environment opts[:environment]
27
+
28
+ logger = SimpleDeployLogger.new :log_level => opts[:log_level]
29
+
30
+ stack = Stack.new :environment => opts[:environment],
31
+ :name => opts[:name],
32
+ :config => config,
33
+ :logger => logger
34
+ Hash[stack.attributes.sort].each_pair { |k, v| puts "#{k}=#{v}" }
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,46 @@
1
+ require 'trollop'
2
+
3
+ module SimpleDeploy
4
+ module CLI
5
+ class Create
6
+ def create
7
+ opts = Trollop::options do
8
+ version SimpleDeploy::VERSION
9
+ banner <<-EOS
10
+
11
+ Create a new stack.
12
+
13
+ simple_deploy create -n STACK_NAME -t PATH_TO_TEMPLATE -e ENVIRONMENT -a KEY1=VAL1 -a KEY2=VAL2
14
+
15
+ EOS
16
+ opt :help, "Display Help"
17
+ opt :attributes, "= seperated attribute and it's value", :type => :string,
18
+ :multi => true
19
+ opt :environment, "Set the target environment", :type => :string
20
+ opt :log_level, "Log level: debug, info, warn, error", :type => :string,
21
+ :default => 'info'
22
+ opt :name, "Stack name(s) of stack to deploy", :type => :string
23
+ opt :template, "Path to the template file", :type => :string
24
+ end
25
+
26
+ CLI::Shared.valid_options? :provided => opts,
27
+ :required => [:environment, :name, :template]
28
+
29
+ config = Config.new.environment opts[:environment]
30
+
31
+ logger = SimpleDeployLogger.new :log_level => opts[:log_level]
32
+
33
+ attributes = CLI::Shared.parse_attributes :attributes => opts[:attributes],
34
+ :logger => logger
35
+
36
+ stack = Stack.new :environment => opts[:environment],
37
+ :name => opts[:name],
38
+ :config => config,
39
+ :logger => logger
40
+
41
+ stack.create :attributes => attributes,
42
+ :template => opts[:template]
43
+ end
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,46 @@
1
+ require 'trollop'
2
+
3
+ module SimpleDeploy
4
+ module CLI
5
+ class Deploy
6
+ def deploy
7
+ opts = Trollop::options do
8
+ version SimpleDeploy::VERSION
9
+ banner <<-EOS
10
+
11
+ Execute deployment on given stack(s).
12
+
13
+ simple_deploy deploy -n STACK_NAME -n STACK_NAME -e ENVIRONMENT
14
+
15
+ EOS
16
+ opt :help, "Display Help"
17
+ opt :attributes, "= seperated attribute and it's value", :type => :string,
18
+ :multi => true
19
+ opt :environment, "Set the target environment", :type => :string
20
+ opt :force, "Force a deployment to proceed"
21
+ opt :log_level, "Log level: debug, info, warn, error", :type => :string,
22
+ :default => 'info'
23
+ opt :name, "Stack name(s) of stack to deploy", :type => :string,
24
+ :multi => true
25
+ end
26
+
27
+ CLI::Shared.valid_options? :provided => opts,
28
+ :required => [:environment, :name]
29
+
30
+ config = Config.new.environment opts[:environment]
31
+ logger = SimpleDeployLogger.new :log_level => opts[:log_level]
32
+
33
+ attributes = CLI::Shared.parse_attributes :attributes => opts[:attributes],
34
+ :logger => logger
35
+ opts[:name].each do |name|
36
+ stack = Stack.new :environment => opts[:environment],
37
+ :name => name,
38
+ :config => config,
39
+ :logger => logger
40
+ stack.update(:attributes => attributes) if attributes.any?
41
+ stack.deploy opts[:force]
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,39 @@
1
+ require 'trollop'
2
+
3
+ module SimpleDeploy
4
+ module CLI
5
+ class Destroy
6
+ def destroy
7
+ opts = Trollop::options do
8
+ version SimpleDeploy::VERSION
9
+ banner <<-EOS
10
+
11
+ Destroy a stack.
12
+
13
+ simple_deploy destroy -n STACK_NAME -e ENVIRONMENT
14
+
15
+ EOS
16
+ opt :help, "Display Help"
17
+ opt :environment, "Set the target environment", :type => :string
18
+ opt :log_level, "Log level: debug, info, warn, error", :type => :string,
19
+ :default => 'info'
20
+ opt :name, "Stack name(s) of stack to deploy", :type => :string
21
+ end
22
+
23
+ CLI::Shared.valid_options? :provided => opts,
24
+ :required => [:environment, :name]
25
+
26
+ config = Config.new.environment opts[:environment]
27
+
28
+ logger = SimpleDeployLogger.new :log_level => opts[:log_level]
29
+
30
+ stack = Stack.new :environment => opts[:environment],
31
+ :name => opts[:name],
32
+ :config => config,
33
+ :logger => logger
34
+
35
+ stack.destroy
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,38 @@
1
+ require 'trollop'
2
+
3
+ module SimpleDeploy
4
+ module CLI
5
+ class Events
6
+ def show
7
+ opts = Trollop::options do
8
+ version SimpleDeploy::VERSION
9
+ banner <<-EOS
10
+
11
+ Show attributes for stack.
12
+
13
+ simple_deploy attributes -n STACK_NAME -e ENVIRONMENT
14
+
15
+ EOS
16
+ opt :help, "Display Help"
17
+ opt :count, "Count of events returned.", :type => :integer,
18
+ :default => 3
19
+ opt :environment, "Set the target environment", :type => :string
20
+ opt :name, "Stack name to manage", :type => :string
21
+ end
22
+ CLI::Shared.valid_options? :provided => opts,
23
+ :required => [:environment, :name]
24
+
25
+ config = Config.new.environment opts[:environment]
26
+
27
+ logger = SimpleDeployLogger.new :log_level => opts[:log_level]
28
+
29
+ stack = Stack.new :environment => opts[:environment],
30
+ :name => opts[:name],
31
+ :config => config,
32
+ :logger => logger
33
+
34
+ jj stack.events opts[:count]
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,37 @@
1
+ require 'trollop'
2
+
3
+ module SimpleDeploy
4
+ module CLI
5
+ class Instances
6
+ def list
7
+ opts = Trollop::options do
8
+ version SimpleDeploy::VERSION
9
+ banner <<-EOS
10
+
11
+ List instances for stack.
12
+
13
+ simple_deploy instances -n STACK_NAME -e ENVIRONMENT
14
+
15
+ EOS
16
+ opt :help, "Display Help"
17
+ opt :environment, "Set the target environment", :type => :string
18
+ opt :name, "Stack name to manage", :type => :string
19
+ end
20
+
21
+ CLI::Shared.valid_options? :provided => opts,
22
+ :required => [:environment, :name]
23
+
24
+ config = Config.new.environment opts[:environment]
25
+
26
+ logger = SimpleDeployLogger.new :log_level => opts[:log_level]
27
+
28
+ stack = Stack.new :environment => opts[:environment],
29
+ :name => opts[:name],
30
+ :config => config,
31
+ :logger => logger
32
+
33
+ jj stack.instances
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,53 @@
1
+ require 'trollop'
2
+
3
+ module SimpleDeploy
4
+ module CLI
5
+ class List
6
+ def stacks
7
+ opts = Trollop::options do
8
+ version SimpleDeploy::VERSION
9
+ banner <<-EOS
10
+
11
+ List stacks in an environment
12
+
13
+ simple_deploy list -e ENVIRONMENT
14
+
15
+ EOS
16
+ opt :environment, "Set the target environment", :type => :string
17
+ opt :log_level, "Log level: debug, info, warn, error", :type => :string,
18
+ :default => 'info'
19
+ opt :help, "Display Help"
20
+ end
21
+
22
+ CLI::Shared.valid_options? :provided => opts,
23
+ :required => [:environment]
24
+
25
+ config = Config.new.environment opts[:environment]
26
+ stacks = Stackster::StackLister.new(:config => config).all.sort
27
+
28
+ logger = SimpleDeployLogger.new :log_level => opts[:log_level]
29
+
30
+ stack = Stack.new :environment => opts[:environment],
31
+ :name => opts[:name],
32
+ :config => config,
33
+ :logger => logger
34
+ puts stacks
35
+ end
36
+
37
+ def environments
38
+ opts = Trollop::options do
39
+ version SimpleDeploy::VERSION
40
+ banner <<-EOS
41
+
42
+ List environments
43
+
44
+ simple_deploy environments
45
+
46
+ EOS
47
+ opt :help, "Display Help"
48
+ end
49
+ Config.new.environments.keys.each { |e| puts e }
50
+ end
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,39 @@
1
+ require 'trollop'
2
+
3
+ module SimpleDeploy
4
+ module CLI
5
+ class Outputs
6
+ def show
7
+ opts = Trollop::options do
8
+ version SimpleDeploy::VERSION
9
+ banner <<-EOS
10
+
11
+ Show outputs of a stack.
12
+
13
+ simple_deploy outputs -n STACK_NAME -e ENVIRONMENT
14
+
15
+ EOS
16
+ opt :help, "Display Help"
17
+ opt :environment, "Set the target environment", :type => :string
18
+ opt :log_level, "Log level: debug, info, warn, error", :type => :string,
19
+ :default => 'warn'
20
+ opt :name, "Stack name to manage", :type => :string
21
+ end
22
+
23
+ CLI::Shared.valid_options? :provided => opts,
24
+ :required => [:environment, :name]
25
+
26
+ config = Config.new.environment opts[:environment]
27
+
28
+ logger = SimpleDeployLogger.new :log_level => opts[:log_level]
29
+
30
+ stack = Stack.new :environment => opts[:environment],
31
+ :name => opts[:name],
32
+ :config => config,
33
+ :logger => logger
34
+
35
+ puts stack.outputs
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,39 @@
1
+ require 'trollop'
2
+
3
+ module SimpleDeploy
4
+ module CLI
5
+ class Parameters
6
+ def show
7
+ opts = Trollop::options do
8
+ version SimpleDeploy::VERSION
9
+ banner <<-EOS
10
+
11
+ Show parameters of a stack.
12
+
13
+ simple_deploy parameters -n STACK_NAME -e ENVIRONMENT
14
+
15
+ EOS
16
+ opt :help, "Display Help"
17
+ opt :environment, "Set the target environment", :type => :string
18
+ opt :log_level, "Log level: debug, info, warn, error", :type => :string,
19
+ :default => 'warn'
20
+ opt :name, "Stack name to manage", :type => :string
21
+ end
22
+
23
+ CLI::Shared.valid_options? :provided => opts,
24
+ :required => [:environment, :name]
25
+
26
+ config = Config.new.environment opts[:environment]
27
+
28
+ logger = SimpleDeployLogger.new :log_level => opts[:log_level]
29
+
30
+ stack = Stack.new :environment => opts[:environment],
31
+ :name => opts[:name],
32
+ :config => config,
33
+ :logger => logger
34
+
35
+ jj stack.parameters
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,39 @@
1
+ require 'trollop'
2
+
3
+ module SimpleDeploy
4
+ module CLI
5
+ class Resources
6
+ def show
7
+ opts = Trollop::options do
8
+ version SimpleDeploy::VERSION
9
+ banner <<-EOS
10
+
11
+ Show resources of a stack.
12
+
13
+ simple_deploy resources -n STACK_NAME -e ENVIRONMENT
14
+
15
+ EOS
16
+ opt :help, "Display Help"
17
+ opt :environment, "Set the target environment", :type => :string
18
+ opt :log_level, "Log level: debug, info, warn, error", :type => :string,
19
+ :default => 'warn'
20
+ opt :name, "Stack name to manage", :type => :string
21
+ end
22
+
23
+ CLI::Shared.valid_options? :provided => opts,
24
+ :required => [:environment, :name]
25
+
26
+ config = Config.new.environment opts[:environment]
27
+
28
+ logger = SimpleDeployLogger.new :log_level => opts[:log_level]
29
+
30
+ stack = Stack.new :environment => opts[:environment],
31
+ :name => opts[:name],
32
+ :config => config,
33
+ :logger => logger
34
+
35
+ jj stack.resources
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,41 @@
1
+ module SimpleDeploy
2
+ module CLI
3
+ module Shared
4
+
5
+ def self.parse_attributes(args)
6
+ attributes = args[:attributes]
7
+ logger = args[:logger]
8
+
9
+ attrs = []
10
+ attributes.each do |attribs|
11
+ key = attribs.split('=').first.gsub(/\s+/, "")
12
+ value = attribs.gsub(/^.+?=/, '')
13
+ logger.info "Read #{key}=#{value}"
14
+ attrs << { key => value }
15
+ end
16
+ attrs
17
+ end
18
+
19
+ def self.valid_options?(args)
20
+ provided = args[:provided]
21
+ required = args[:required]
22
+
23
+ required.each do |opt|
24
+ unless provided[opt]
25
+ puts "Option '#{opt} (-#{opt[0]})' required but not specified."
26
+ exit 1
27
+ end
28
+ end
29
+
30
+ if required.include? :environment
31
+ unless Config.new.environments.keys.include? provided[:environment]
32
+ puts "Environment '#{provided[:environment]}' does not exist."
33
+ exit 1
34
+ end
35
+ end
36
+
37
+ end
38
+
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,39 @@
1
+ require 'trollop'
2
+
3
+ module SimpleDeploy
4
+ module CLI
5
+ class SSH
6
+ def show
7
+ opts = Trollop::options do
8
+ version SimpleDeploy::VERSION
9
+ banner <<-EOS
10
+
11
+ Show ssh connection string.
12
+
13
+ simple_deploy ssh -n STACK_NAME -e ENVIRONMENT
14
+
15
+ EOS
16
+ opt :help, "Display Help"
17
+ opt :environment, "Set the target environment", :type => :string
18
+ opt :log_level, "Log level: debug, info, warn, error", :type => :string,
19
+ :default => 'warn'
20
+ opt :name, "Stack name to manage", :type => :string
21
+ end
22
+
23
+ CLI::Shared.valid_options? :provided => opts,
24
+ :required => [:environment, :name]
25
+
26
+ config = Config.new.environment opts[:environment]
27
+
28
+ logger = SimpleDeployLogger.new :log_level => opts[:log_level]
29
+
30
+ stack = Stack.new :environment => opts[:environment],
31
+ :name => opts[:name],
32
+ :config => config,
33
+ :logger => logger
34
+
35
+ puts stack.ssh
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,37 @@
1
+ require 'trollop'
2
+
3
+ module SimpleDeploy
4
+ module CLI
5
+ class Status
6
+ def show
7
+ opts = Trollop::options do
8
+ version SimpleDeploy::VERSION
9
+ banner <<-EOS
10
+
11
+ Show status of a stack.
12
+
13
+ simple_deploy status -n STACK_NAME -e ENVIRONMENT
14
+
15
+ EOS
16
+ opt :help, "Display Help"
17
+ opt :environment, "Set the target environment", :type => :string
18
+ opt :name, "Stack name to manage", :type => :string
19
+ end
20
+
21
+ CLI::Shared.valid_options? :provided => opts,
22
+ :required => [:environment, :name]
23
+
24
+ config = Config.new.environment opts[:environment]
25
+
26
+ logger = SimpleDeployLogger.new :log_level => opts[:log_level]
27
+
28
+ stack = Stack.new :environment => opts[:environment],
29
+ :name => opts[:name],
30
+ :config => config,
31
+ :logger => logger
32
+
33
+ puts stack.status
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,37 @@
1
+ require 'trollop'
2
+
3
+ module SimpleDeploy
4
+ module CLI
5
+ class Template
6
+ def show
7
+ opts = Trollop::options do
8
+ version SimpleDeploy::VERSION
9
+ banner <<-EOS
10
+
11
+ Show current template for stack.
12
+
13
+ simple_deploy template -n STACK_NAME -e ENVIRONMENT
14
+
15
+ EOS
16
+ opt :help, "Display Help"
17
+ opt :environment, "Set the target environment", :type => :string
18
+ opt :name, "Stack name to manage", :type => :string
19
+ end
20
+
21
+ CLI::Shared.valid_options? :provided => opts,
22
+ :required => [:environment, :name]
23
+
24
+ config = Config.new.environment opts[:environment]
25
+
26
+ logger = SimpleDeployLogger.new :log_level => opts[:log_level]
27
+
28
+ stack = Stack.new :environment => opts[:environment],
29
+ :name => opts[:name],
30
+ :config => config,
31
+ :logger => logger
32
+
33
+ jj stack.template
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,46 @@
1
+ require 'trollop'
2
+
3
+ module SimpleDeploy
4
+ module CLI
5
+ class Update
6
+ def update
7
+ opts = Trollop::options do
8
+ version SimpleDeploy::VERSION
9
+ banner <<-EOS
10
+
11
+ Update the attributes for one more stacks.
12
+
13
+ simple_deploy update -n STACK_NAME1 -n STACK_NAME2 -e ENVIRONMENT -a KEY1=VAL1 -a KEY2=VAL2
14
+
15
+ EOS
16
+ opt :help, "Display Help"
17
+ opt :attributes, "= seperated attribute and it's value", :type => :string,
18
+ :multi => true
19
+ opt :environment, "Set the target environment", :type => :string
20
+ opt :log_level, "Log level: debug, info, warn, error", :type => :string,
21
+ :default => 'info'
22
+ opt :name, "Stack name(s) of stack to deploy", :type => :string,
23
+ :multi => true
24
+ end
25
+
26
+ CLI::Shared.valid_options? :provided => opts,
27
+ :required => [:environment, :name]
28
+
29
+ config = Config.new.environment opts[:environment]
30
+
31
+ logger = SimpleDeployLogger.new :log_level => opts[:log_level]
32
+
33
+ attributes = CLI::Shared.parse_attributes :attributes => opts[:attributes],
34
+ :logger => logger
35
+
36
+ opts[:name].each do |name|
37
+ stack = Stack.new :environment => opts[:environment],
38
+ :name => name,
39
+ :config => config,
40
+ :logger => logger
41
+ stack.update :attributes => attributes
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end
@@ -1,166 +1,70 @@
1
1
  require 'trollop'
2
- require 'simple_deploy/cli/variables'
2
+
3
+ require 'simple_deploy/cli/shared'
4
+
5
+ require 'simple_deploy/cli/attributes'
6
+ require 'simple_deploy/cli/create'
7
+ require 'simple_deploy/cli/deploy'
8
+ require 'simple_deploy/cli/destroy'
9
+ require 'simple_deploy/cli/events'
10
+ require 'simple_deploy/cli/instances'
11
+ require 'simple_deploy/cli/list'
12
+ require 'simple_deploy/cli/outputs'
13
+ require 'simple_deploy/cli/parameters'
14
+ require 'simple_deploy/cli/resources'
15
+ require 'simple_deploy/cli/ssh'
16
+ require 'simple_deploy/cli/status'
17
+ require 'simple_deploy/cli/template'
18
+ require 'simple_deploy/cli/update'
3
19
 
4
20
  module SimpleDeploy
5
21
  module CLI
6
22
  def self.start
7
- @opts = Trollop::options do
8
- version SimpleDeploy::VERSION
9
- banner <<-EOS
10
-
11
- Deploy and manage resources in AWS
12
-
13
- simple_deploy environments
14
- simple_deploy list -e ENVIRONMENT
15
- simple_deploy create -n STACK_NAME -e ENVIRONMENT -a ATTRIBUTES -t TEMPLATE_PATH
16
- simple_deploy update -n STACK_NAME -e ENVIRONMENT -a ATTRIBUTES
17
- simple_deploy deploy -n STACK_NAME -e ENVIRONMENT
18
- simple_deploy ssh -n STACK_NAME -e ENVIRONMENT
19
- simple_deploy destroy -n STACK_NAME -e ENVIRONMENT
20
- simple_deploy instances -n STACK_NAME -e ENVIRONMENT
21
- simple_deploy status -n STACK_NAME -e ENVIRONMENT
22
- simple_deploy attributes -n STACK_NAME -e ENVIRONMENT
23
- simple_deploy events -n STACK_NAME -e ENVIRONMENT
24
- simple_deploy resources -n STACK_NAME -e ENVIRONMENT
25
- simple_deploy outputs -n STACK_NAME -e ENVIRONMENT
26
- simple_deploy template -n STACK_NAME -e ENVIRONMENT
27
- simple_deploy parameters -n STACK_NAME -e ENVIRONMENT
28
-
29
- Attributes are specified as '=' seperated key value pairs. Multiple can be specified. For example:
30
-
31
- simple_deploy create -t ~/my-template.json -e my-env -n test-stack -a arg1=val1 -a arg2=vol2
32
-
33
- You must setup a simple_deploy.yaml file in your home directory. Format as follows:
34
-
35
- artifacts:
36
- chef_repo:
37
- domain: app_specific_domain
38
- bucket_prefix: chef-bucket-prefix
39
- app:
40
- domain: app_specific_app
41
- bucket_prefix: app-bucket-prefix
42
- cookbooks:
43
- domain: app_specific_cookbooks
44
- bucket_prefix: cookbooks-bucket-prefix
45
-
46
- environments:
47
- preprod_shared_us_west_1:
48
- access_key: XXXXXXXXXXXXXXXXXXX
49
- secret_key: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
50
- region: us-west-1
51
- infrastructure_us_west_1:
52
- access_key: XXXXXXXXXXXXXXXXXXX
53
- secret_key: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
54
- region: us-west-1
55
- infrastructure_us_west_2:
56
- access_key: XXXXXXXXXXXXXXXXXXX
57
- secret_key: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
58
- region: us-west-2
59
-
60
- Bucket prefixes will append -us-west-1 (or appropriate region) when deploying based on the environment.
23
+ cmd = ARGV.shift
61
24
 
62
- For example app-bucket-prefix will be tranlated to app-bucket-prefix-us-west-1.
63
-
64
- The domain is the specific domain that is set when the artifact is created by heirloom.
65
-
66
- EOS
67
- opt :help, "Display Help"
68
- opt :attributes, "= seperated attribute and it's value", :type => :string,
69
- :multi => true
70
- opt :environment, "Set the target environment", :type => :string
71
- opt :force, "Force a deployment to proceed"
72
- opt :count, "Count of events returned.", :type => :integer,
73
- :default => 3
74
- opt :log_level, "Log level to output. Valid levels: debug, info, warn, error", :type => :string,
75
- :default => 'info'
76
- opt :name, "Stack name to manage", :type => :string
77
- opt :template, "Path to the template file", :type => :string
78
- end
79
-
80
- @cmd = ARGV.shift
81
-
82
- unless @cmd
25
+ unless cmd
83
26
  puts "\nPlease specify a command.\n"
84
27
  exit 1
85
28
  end
86
29
 
87
- read_attributes
88
-
89
- unless @cmd == 'environments'
90
-
91
- environments = Config.new.environments
92
- unless environment_provided?
93
- puts "\nPlease specify an environment.\n\n"
94
- environments.keys.each { |e| puts e }
95
- exit 1
96
- end
97
-
98
- unless environments.include? @opts[:environment]
99
- puts "\nEnvironment #{@opts[:environment]} not found.\n"
100
- exit 1
101
- end
102
-
103
- @config = Config.new.environment @opts[:environment]
104
- end
105
-
106
- @stacks = Stackster::StackLister.new(:config => @config).all.sort
107
-
108
-
109
- case @cmd
110
- when 'ssh'
111
- @log_level = 'warn'
112
- else
113
- @log_level = 'info'
114
- end
115
-
116
- @log_level = @opts[:log_level] if @opts[:log_level]
117
-
118
- @logger = SimpleDeployLogger.new :log_level => @log_level
119
-
120
- case @cmd
121
- when 'create', 'delete', 'deploy', 'destroy', 'instances',
122
- 'status', 'attributes', 'events', 'resources',
123
- 'outputs', 'template', 'update', 'parameters',
124
- 'ssh'
125
-
126
- @stack = Stack.new :environment => @opts[:environment],
127
- :name => @opts[:name],
128
- :config => @config,
129
- :logger => @logger
130
- end
131
-
132
- case @cmd
30
+ case cmd
133
31
  when 'attributes'
134
- @stack.attributes.each_pair { |k, v| puts "#{k}=#{v}" }
32
+ CLI::Attributes.new.show
135
33
  when 'create'
136
- @stack.create :attributes => attributes,
137
- :template => @opts[:template]
138
- @logger.info "#{@opts[:name]} created."
139
- when 'delete', 'destroy'
140
- @stack.destroy
141
- @logger.info "#{@opts[:name]} destroyed."
34
+ CLI::Create.new.create
35
+ when 'destroy', 'delete'
36
+ CLI::Destroy.new.destroy
142
37
  when 'deploy'
143
- @stack.update :attributes => attributes
144
- @stack.deploy @opts[:force]
38
+ CLI::Deploy.new.deploy
145
39
  when 'environments'
146
- Config.new.environments.keys.each { |e| puts e }
147
- when 'update'
148
- @stack.update :attributes => attributes
149
- @logger.info "#{@opts[:name]} updated."
40
+ CLI::List.new.environments
41
+ when 'events'
42
+ CLI::Events.new.show
150
43
  when 'instances'
151
- @stack.instances.each { |s| puts s }
44
+ CLI::Instances.new.list
152
45
  when 'list'
153
- puts @stacks
46
+ CLI::List.new.stacks
47
+ when 'outputs'
48
+ CLI::Outputs.new.show
49
+ when 'parameters'
50
+ CLI::Parameters.new.show
51
+ when 'resources'
52
+ CLI::Resources.new.show
53
+ when 'status'
54
+ CLI::Status.new.show
154
55
  when 'template'
155
- jj @stack.template
156
- when 'outputs', 'resources', 'status', 'parameters'
157
- puts (@stack.send @cmd.to_sym).to_yaml
56
+ CLI::Template.new.show
158
57
  when 'ssh'
159
- puts @stack.send @cmd.to_sym
160
- when 'events'
161
- puts (@stack.events @opts[:count]).to_yaml
58
+ CLI::SSH.new.show
59
+ when 'update'
60
+ CLI::Update.new.update
61
+ when '-h'
62
+ puts "simple_deploy [attributes|create|destroy|environments|events|instances|list|template|outputs|parameters|resources|ssh|status|update]"
63
+ puts "Append -h for help on specific subcommand."
162
64
  else
163
- puts "Unknown command. Use -h for help."
65
+ puts "Unknown command: '#{cmd}'."
66
+ puts "simple_deploy [attributes|create|destroy|environments|events|instances|list|template|outputs|parameters|resources|ssh|status|update]"
67
+ puts "Append -h for help on specific subcommand."
164
68
  end
165
69
  end
166
70
 
@@ -40,6 +40,7 @@ module SimpleDeploy
40
40
  get_artifact_endpoints.each_pair do |k,v|
41
41
  cmd += "#{k}=#{v} "
42
42
  end
43
+ cmd += "PRIMARY=#{primary_instance} "
43
44
  cmd += @deploy_script
44
45
 
45
46
  @logger.info "Executing '#{cmd}.'"
@@ -48,6 +49,10 @@ module SimpleDeploy
48
49
  end"
49
50
  end
50
51
 
52
+ def primary_instance
53
+ @instances.first
54
+ end
55
+
51
56
  def get_artifact_endpoints
52
57
  h = {}
53
58
  @config.artifacts.each do |artifact|
@@ -65,7 +70,7 @@ module SimpleDeploy
65
70
  end
66
71
 
67
72
  def ssh_options
68
- @logger.info "Setting key to #{@ssh_key}."
73
+ @logger.debug "Setting key to #{@ssh_key}."
69
74
  {
70
75
  :keys => @ssh_key,
71
76
  :paranoid => false
@@ -75,7 +80,7 @@ module SimpleDeploy
75
80
  def create_deployment
76
81
  @deployment = Capistrano::Configuration.new
77
82
  if @ssh_user
78
- @logger.info "Setting user to #{@ssh_user}."
83
+ @logger.debug "Setting user to #{@ssh_user}."
79
84
  @deployment.set :user, @ssh_user
80
85
  end
81
86
 
@@ -89,7 +94,7 @@ module SimpleDeploy
89
94
  @deployment.variables[:ssh_options] = ssh_options
90
95
 
91
96
  @instances.each do |i|
92
- @logger.info "Adding instance #{i}."
97
+ @logger.debug "Deploying to instance #{i}."
93
98
  @deployment.server i, :instances
94
99
  end
95
100
  end
@@ -20,17 +20,21 @@ module SimpleDeploy
20
20
  end
21
21
 
22
22
  def update(args)
23
+ @logger.info "Updating #{@name}."
23
24
  stack.update :attributes => stack_attribute_formater.updated_attributes(args[:attributes])
25
+ @logger.info "Update complete for #{@name}."
24
26
  end
25
27
 
26
28
  # To Do: Abstract deployment into it's own class
27
29
  # Pass in required stack objects for attribut mgmt
28
30
  def deploy(force = false)
29
- @logger.info "Checking deployment status."
31
+ @logger.info "Deploying to #{@name}."
32
+ @logger.debug "Checking deployment status for #{@name}."
30
33
  if deployment_in_progress?
31
- @logger.info "Deployment in progress."
34
+ @logger.info "Deployment in progress for #{@name}."
32
35
  @logger.info "Started by #{attributes['deployment_user']}@#{attributes['deployment_datetime']}."
33
36
  if force
37
+ @logger.info "Forcing. Clearing deployment status."
34
38
  clear_deployment_status
35
39
  else
36
40
  @logger.error "Exiting due to existing deployment."
@@ -38,11 +42,12 @@ module SimpleDeploy
38
42
  exit 1
39
43
  end
40
44
  else
41
- @logger.info "No other deployments in progress."
45
+ @logger.debug "No other deployments in progress for #{@name}."
42
46
  end
43
47
  set_deployment_in_progress
44
48
  deployment.execute
45
49
  clear_deployment_status
50
+ @logger.info "Deploy completed succesfully for #{@name}."
46
51
  end
47
52
 
48
53
  def ssh
@@ -54,19 +59,20 @@ module SimpleDeploy
54
59
  end
55
60
 
56
61
  def set_deployment_in_progress
57
- @logger.info "Setting deployment in progress by #{ssh_user}."
62
+ @logger.debug "Setting deployment in progress by #{ssh_user} for #{@name}."
58
63
  stack.update :attributes => [ { 'deployment_in_progress' => 'true',
59
64
  'deployment_user' => ssh_user,
60
65
  'deployment_datetime' => Time.now.to_s } ]
61
66
  end
62
67
 
63
68
  def clear_deployment_status
64
- @logger.info "Clearing deployment status."
69
+ @logger.debug "Clearing deployment status for #{@name}."
65
70
  stack.update :attributes => [ { 'deployment_in_progress' => '' } ]
66
71
  end
67
72
 
68
73
  def destroy
69
74
  stack.destroy
75
+ @logger.info "#{@name} destroyed."
70
76
  end
71
77
 
72
78
  def events(limit)
@@ -1,3 +1,3 @@
1
1
  module SimpleDeploy
2
- VERSION = "0.3.7"
2
+ VERSION = "0.4.0"
3
3
  end
@@ -21,6 +21,6 @@ Gem::Specification.new do |s|
21
21
  s.add_development_dependency "rspec"
22
22
 
23
23
  s.add_runtime_dependency "capistrano"
24
- s.add_runtime_dependency "stackster", '= 0.2.6'
24
+ s.add_runtime_dependency "stackster", '= 0.2.7'
25
25
  s.add_runtime_dependency "trollop"
26
26
  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.3.7
4
+ version: 0.4.0
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-07-12 00:00:00.000000000 Z
12
+ date: 2012-07-19 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rspec
16
- requirement: &70195905609800 !ruby/object:Gem::Requirement
16
+ requirement: &70136111742480 !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: *70195905609800
24
+ version_requirements: *70136111742480
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: capistrano
27
- requirement: &70195905608900 !ruby/object:Gem::Requirement
27
+ requirement: &70136111740700 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,21 +32,21 @@ dependencies:
32
32
  version: '0'
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *70195905608900
35
+ version_requirements: *70136111740700
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: stackster
38
- requirement: &70195905607560 !ruby/object:Gem::Requirement
38
+ requirement: &70136111738160 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - =
42
42
  - !ruby/object:Gem::Version
43
- version: 0.2.6
43
+ version: 0.2.7
44
44
  type: :runtime
45
45
  prerelease: false
46
- version_requirements: *70195905607560
46
+ version_requirements: *70136111738160
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: trollop
49
- requirement: &70195905606500 !ruby/object:Gem::Requirement
49
+ requirement: &70136111737680 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ! '>='
@@ -54,7 +54,7 @@ dependencies:
54
54
  version: '0'
55
55
  type: :runtime
56
56
  prerelease: false
57
- version_requirements: *70195905606500
57
+ version_requirements: *70136111737680
58
58
  description: I am designed to deploy artifacts uploaded by Heirloom
59
59
  email:
60
60
  - brett@weav.net
@@ -74,7 +74,21 @@ files:
74
74
  - lib/simple_deploy.rb
75
75
  - lib/simple_deploy/artifact.rb
76
76
  - lib/simple_deploy/cli.rb
77
- - lib/simple_deploy/cli/variables.rb
77
+ - lib/simple_deploy/cli/attributes.rb
78
+ - lib/simple_deploy/cli/create.rb
79
+ - lib/simple_deploy/cli/deploy.rb
80
+ - lib/simple_deploy/cli/destroy.rb
81
+ - lib/simple_deploy/cli/events.rb
82
+ - lib/simple_deploy/cli/instances.rb
83
+ - lib/simple_deploy/cli/list.rb
84
+ - lib/simple_deploy/cli/outputs.rb
85
+ - lib/simple_deploy/cli/parameters.rb
86
+ - lib/simple_deploy/cli/resources.rb
87
+ - lib/simple_deploy/cli/shared.rb
88
+ - lib/simple_deploy/cli/ssh.rb
89
+ - lib/simple_deploy/cli/status.rb
90
+ - lib/simple_deploy/cli/template.rb
91
+ - lib/simple_deploy/cli/update.rb
78
92
  - lib/simple_deploy/config.rb
79
93
  - lib/simple_deploy/logger.rb
80
94
  - lib/simple_deploy/stack.rb
@@ -101,7 +115,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
101
115
  version: '0'
102
116
  segments:
103
117
  - 0
104
- hash: 224391392022516916
118
+ hash: 2716701710085273471
105
119
  required_rubygems_version: !ruby/object:Gem::Requirement
106
120
  none: false
107
121
  requirements:
@@ -110,7 +124,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
110
124
  version: '0'
111
125
  segments:
112
126
  - 0
113
- hash: 224391392022516916
127
+ hash: 2716701710085273471
114
128
  requirements: []
115
129
  rubyforge_project: simple_deploy
116
130
  rubygems_version: 1.8.16
@@ -1,23 +0,0 @@
1
- module SimpleDeploy
2
- module CLI
3
- def self.attributes
4
- attrs = []
5
- read_attributes.each do |attribs|
6
- key = attribs.split('=').first.gsub(/\s+/, "")
7
- value = attribs.gsub(/^.+?=/, '')
8
- @logger.info "Read #{key}=#{value}"
9
- attrs << { key => value }
10
- end
11
- attrs
12
- end
13
-
14
- def self.read_attributes
15
- @opts[:attributes].nil? ? [] : @opts[:attributes]
16
- end
17
-
18
- def self.environment_provided?
19
- @opts[:environment].nil? != true
20
- end
21
-
22
- end
23
- end