simple_deploy 0.3.7 → 0.4.0

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.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