6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
|
# File 'lib/simple_deploy/cli/deploy.rb', line 6
def deploy
opts = Trollop::options do
version SimpleDeploy::VERSION
banner <<-EOS
Execute deployment on given stack(s).
simple_deploy deploy -n STACK_NAME -n STACK_NAME -e ENVIRONMENT
Using SSH:
Simple deploy defaults your user and key for SSH to your username and your id_rsa key.
If you need to override these because you want to use a different username or you have a different key file,
you can set simple deploy specific environment variables to do the override.
Example 1: Overriding when the command is run.
SIMPLE_DEPLOY_SSH_USER=fred SIMPLE_DEPLOY_SSH_KEY=$HOME/.ssh/id_dsa simple_deploy deploy -n STACK_NAME -n STACK_NAME -e ENVIRONMENT
Example 2: Overriding them in your shell environment (bash shell used in the example).
export SIMPLE_DEPLOY_SSH_USER=fred
export SIMPLE_DEPLOY_SSH_KEY=$HOME/.ssh/id_dsa
simple_deploy deploy -n STACK_NAME -n STACK_NAME -e ENVIRONMENT
Using Internal IP for SSH:
Simple deploy defaults to using the public IP when ssh'ng to stacks. This option instructs it
to use the private IP, which is needed when ssh'ng from one stack to another.
simple_deploy deploy -n STACK_NAME -n STACK_NAME -e ENVIRONMENT -i
EOS
opt :help, "Display Help"
opt :attributes, "= seperated attribute and it's value", :type => :string,
:multi => true
opt :environment, "Set the target environment", :type => :string
opt :force, "Force a deployment to proceed"
opt :log_level, "Log level: debug, info, warn, error", :type => :string,
:default => 'info'
opt :name, "Stack name(s) of stack to deploy", :type => :string,
:multi => true
opt :quiet, "Quiet, do not send notifications"
opt :internal, "Use internal IP for ssh commands"
end
CLI::Shared.valid_options? :provided => opts,
:required => [:environment, :name]
logger = SimpleDeployLogger.new :log_level => opts[:log_level]
new_attributes = CLI::Shared.parse_attributes :attributes => opts[:attributes],
:logger => logger
opts[:name].each do |name|
notifier = Notifier.new :stack_name => name,
:environment => opts[:environment],
:logger => logger
stack = Stack.new :environment => opts[:environment],
:name => name,
:logger => logger,
:internal => opts[:internal]
proceed = true
proceed = stack.update :force => opts[:force], :attributes => new_attributes if new_attributes.any?
if proceed
notifier.send_deployment_start_message unless opts[:quiet]
if stack.deploy opts[:force]
notifier.send_deployment_complete_message unless opts[:quiet]
else
logger.error "Deployment to #{name} did not complete succesfully."
exit 1
end
end
end
end
|