alpha_omega 1.2.1 → 1.3.1
Sign up to get free protection for your applications and to get access to all the features.
- data/VERSION +1 -1
- data/bin/{alpha_omega → ao} +1 -1
- data/lib/alpha_omega/config/deploy.rb +4 -0
- data/lib/alpha_omega/config/deploy_challenge.rb +19 -0
- data/lib/alpha_omega/config/deploy_localhost.rb +29 -0
- data/lib/alpha_omega/config/deploy_notify.rb +85 -0
- data/lib/alpha_omega/config/deploy_ssh.rb +11 -0
- data/lib/alpha_omega/deploy.rb +14 -40
- data/lib/alpha_omega/utils.rb +22 -18
- data/libexec/_ao +194 -0
- data/{sbin → libexec}/_bump +0 -0
- data/{sbin → libexec}/_jason +19 -27
- data/{sbin → libexec}/_log4sh +0 -0
- data/{sbin → libexec}/_meat +19 -27
- data/{sbin → libexec}/_prime +1 -1
- data/{sbin → libexec}/_shflags +0 -0
- data/{sbin → libexec}/_shunit +0 -0
- data/{sbin → libexec}/_sub +18 -3
- data/{sbin → libexec}/_treadstone +1 -1
- data/{sbin → libexec}/_versions +0 -0
- data/{sbin/ao → libexec/aoh} +3 -3
- data/libexec/aoh-activate +22 -0
- data/libexec/aoh-check +23 -0
- data/libexec/aoh-compare +23 -0
- data/libexec/aoh-debug +23 -0
- data/libexec/aoh-deploy +22 -0
- data/libexec/aoh-dist +23 -0
- data/libexec/{ao-dna → aoh-dna} +10 -12
- data/libexec/aoh-hosts +24 -0
- data/libexec/{ao-lock → aoh-lock} +11 -11
- data/libexec/aoh-migrate +23 -0
- data/libexec/aoh-proxy +74 -0
- data/libexec/aoh-release +23 -0
- data/libexec/aoh-remote +37 -0
- data/libexec/aoh-restart +23 -0
- data/libexec/aoh-rollback +23 -0
- data/libexec/aoh-shell +23 -0
- data/libexec/aoh-stage +22 -0
- data/libexec/aoh-task +24 -0
- data/libexec/{ao-unlock → aoh-unlock} +11 -11
- data/libexec/build +1 -1
- data/libexec/build-gem +1 -1
- data/libexec/bump +1 -1
- data/libexec/edit-gem +1 -1
- data/libexec/local-helper +24 -0
- data/libexec/publish +1 -1
- data/libexec/publish-gem +1 -1
- data/libexec/stub-prepare +3 -7
- data/{libexec/ao-shell → sbin/activate} +4 -7
- data/{libexec/ao → sbin/aoh} +3 -3
- data/{libexec/ao-deploy → sbin/aoh-stub} +4 -7
- data/sbin/bump +15 -0
- data/sbin/check +20 -0
- data/sbin/compare +20 -0
- data/sbin/debug +20 -0
- data/sbin/deploy +20 -0
- data/sbin/dist +20 -0
- data/sbin/dna +20 -0
- data/sbin/hosts +20 -0
- data/sbin/local-helper +15 -0
- data/sbin/lock +20 -0
- data/sbin/migrate +20 -0
- data/sbin/proxy +20 -0
- data/sbin/release +20 -0
- data/sbin/remote +20 -0
- data/sbin/remote-helper +81 -0
- data/sbin/restart +20 -0
- data/sbin/rollback +20 -0
- data/sbin/shell +20 -0
- data/sbin/stage +20 -0
- data/sbin/stub +3 -3
- data/sbin/task +20 -0
- data/sbin/unlock +20 -0
- metadata +157 -120
- data/libexec/ao-activate +0 -23
- data/libexec/ao-build +0 -23
- data/libexec/ao-check +0 -23
- data/libexec/ao-compare +0 -23
- data/libexec/ao-cook +0 -23
- data/libexec/ao-debug +0 -28
- data/libexec/ao-dist +0 -23
- data/libexec/ao-hosts +0 -28
- data/libexec/ao-migrate +0 -23
- data/libexec/ao-plan +0 -23
- data/libexec/ao-release +0 -23
- data/libexec/ao-restart +0 -23
- data/libexec/ao-rollback +0 -23
- data/libexec/ao-stage +0 -23
- data/libexec/ao-task +0 -24
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.
|
1
|
+
1.3.1
|
data/bin/{alpha_omega → ao}
RENAMED
@@ -0,0 +1,19 @@
|
|
1
|
+
Capistrano::Configuration.instance(:must_exist).load do |config|
|
2
|
+
set :reviewed, nil
|
3
|
+
|
4
|
+
namespace :deploy do
|
5
|
+
task :challenge do
|
6
|
+
if dna["app_env"] == "production"
|
7
|
+
who = Capistrano::CLI.ui.ask(" -- Who has reviewed this deploy to #{dna["app_env"]}? ")
|
8
|
+
if who.empty?
|
9
|
+
abort
|
10
|
+
else
|
11
|
+
set :reviewed, who
|
12
|
+
sleep 3
|
13
|
+
end
|
14
|
+
end if reviewed.nil?
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
before "deploy:began", "deploy:challenge"
|
19
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
Capistrano::Configuration.instance(:must_exist).load do |config|
|
2
|
+
namespace :deploy do
|
3
|
+
task :localdomain do
|
4
|
+
if dna["env_pod"] == "localdomain"
|
5
|
+
set :releases, []
|
6
|
+
set :deploy_to, %x(pwd).chomp
|
7
|
+
set :use_sudo, false
|
8
|
+
set :user, %x(id -u -n).chomp
|
9
|
+
set :group, %x(id -g -n).chomp
|
10
|
+
set :root_user, %x(id -u -n).chomp
|
11
|
+
set :root_group, %x(id -g -n).chomp
|
12
|
+
set :dir_perms, "0755"
|
13
|
+
set :bundler_options, "--path vendor/bundle"
|
14
|
+
set :skip_scm, true
|
15
|
+
|
16
|
+
def run cmd
|
17
|
+
logger.debug "executing locally #{cmd}"
|
18
|
+
run_locally cmd
|
19
|
+
if $?.to_i != 0
|
20
|
+
logger.debug "failed with error code #{$?.to_i >> 8}"
|
21
|
+
exit 1
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
before "deploy:began", "deploy:localdomain"
|
29
|
+
end
|
@@ -0,0 +1,85 @@
|
|
1
|
+
Capistrano::Configuration.instance(:must_exist).load do |config|
|
2
|
+
namespace :deploy do
|
3
|
+
namespace :notify do
|
4
|
+
task :default do
|
5
|
+
if $deploy["notify"]
|
6
|
+
unless dna["app_env"] == "development" || dna["env_pod"] == "dev"
|
7
|
+
airbrake if $deploy["notify"].member? "airbrake"
|
8
|
+
newrelic if $deploy["notify"].member? "newrelic"
|
9
|
+
email if $deploy["notify"].member? "email"
|
10
|
+
campfire if $deploy["notify"].member? "campfire"
|
11
|
+
flowdock if $deploy["notify"].member? "flowdock"
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
task :email do
|
17
|
+
run_locally "echo '#{notify_message}' | mail -s '#{notify_message}' #{$deploy["notify"]["email"]["recipients"].join(" ")}"
|
18
|
+
end
|
19
|
+
|
20
|
+
task :campfire do
|
21
|
+
require 'capistrano/campfire'
|
22
|
+
|
23
|
+
set :campfire_options,
|
24
|
+
:ssl => true,
|
25
|
+
:account => $deploy["notify"]["campfire"]["account"],
|
26
|
+
:room => $deploy["notify"]["campfire"]["room"],
|
27
|
+
:email => $deploy["notify"]["campfire"]["email"],
|
28
|
+
:token => $deploy["notify"]["campfire"]["token"]
|
29
|
+
|
30
|
+
begin
|
31
|
+
campfire_room.speak notify_message
|
32
|
+
rescue
|
33
|
+
$stderr.puts "Campfire announcement failed"
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
task :airbrake do
|
38
|
+
require 'airbrake'
|
39
|
+
require 'airbrake_tasks'
|
40
|
+
|
41
|
+
Airbrake.configure do |config|
|
42
|
+
config.api_key = $deploy["notify"]["airbrake"]["api_key"]
|
43
|
+
end
|
44
|
+
|
45
|
+
begin
|
46
|
+
AirbrakeTasks.deploy({
|
47
|
+
:rails_env => dna['app_env'],
|
48
|
+
:scm_revision => current_revision,
|
49
|
+
:scm_repository => repository,
|
50
|
+
:local_username => ENV['_AO_USER']
|
51
|
+
})
|
52
|
+
rescue EOFError
|
53
|
+
$stderr.puts "An error occurred during the Airtoad deploy notification."
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
task :flowdock do
|
58
|
+
require 'flowdock'
|
59
|
+
|
60
|
+
flow = Flowdock::Flow.new(:api_token => $deploy["notify"]["flowdock"]["api_token"])
|
61
|
+
|
62
|
+
flow.push_to_team_inbox(
|
63
|
+
:subject => "Application #{$deploy["application"]} deployed #deploy",
|
64
|
+
:content => "Application deployed successfully!",
|
65
|
+
:tags => $deploy["notify"]["flowdock"]["tags"],
|
66
|
+
:source => "alpha_omega deployment",
|
67
|
+
:from => {
|
68
|
+
:address => $deploy["notify"]["flowdock"]["from"]["address"],
|
69
|
+
:name => $deploy["notify"]["flowdock"]["from"]["name"]
|
70
|
+
},
|
71
|
+
:project => $deploy["notify"]["flowdock"]["project"])
|
72
|
+
end
|
73
|
+
|
74
|
+
task :newrelic do
|
75
|
+
require 'new_relic/recipes'
|
76
|
+
end
|
77
|
+
|
78
|
+
def notify_message
|
79
|
+
"#{ENV['_AO_USER']} deployed #{application} (#{current_revision}@#{repository}) to #{dna['app_env']}"
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
after "deploy:restart", "deploy:notify"
|
85
|
+
end
|
data/lib/alpha_omega/deploy.rb
CHANGED
@@ -9,7 +9,7 @@ require 'alpha_omega/utils'
|
|
9
9
|
require 'capistrano_colors'
|
10
10
|
require 'capistrano/log_with_awesome'
|
11
11
|
|
12
|
-
ENV[
|
12
|
+
ENV['_AO_DEPLOYER'] ||= ENV['_AO_USER']
|
13
13
|
|
14
14
|
Capistrano::Configuration.instance(:must_exist).load do |config|
|
15
15
|
|
@@ -281,6 +281,10 @@ Capistrano::Configuration.instance(:must_exist).load do |config|
|
|
281
281
|
end
|
282
282
|
end
|
283
283
|
|
284
|
+
task :began do
|
285
|
+
bootstrap_code
|
286
|
+
end
|
287
|
+
|
284
288
|
task :bootstrap_code do
|
285
289
|
if releases.length < 2 # without services and run as root
|
286
290
|
run "[[ -d #{deploy_to} ]] || #{try_sudo} install -d -m #{dir_perms} #{try_sudo.empty? ? '' : "-o #{root_user} -g #{root_group}"} #{deploy_to}"
|
@@ -303,7 +307,6 @@ Capistrano::Configuration.instance(:must_exist).load do |config|
|
|
303
307
|
task :update_code do
|
304
308
|
strategy.deploy! unless skip_scm
|
305
309
|
bundle
|
306
|
-
cook
|
307
310
|
unless deploy_path_name == migrate_path_name
|
308
311
|
build
|
309
312
|
dist
|
@@ -408,12 +411,6 @@ Capistrano::Configuration.instance(:must_exist).load do |config|
|
|
408
411
|
task :bundle do
|
409
412
|
end
|
410
413
|
|
411
|
-
desc <<-DESC
|
412
|
-
Apply microwave tvdinners to a release directory.
|
413
|
-
DESC
|
414
|
-
task :cook do
|
415
|
-
end
|
416
|
-
|
417
414
|
desc <<-DESC
|
418
415
|
Compares your application.
|
419
416
|
DESC
|
@@ -558,8 +555,6 @@ Capistrano::Configuration.instance(:must_exist).load do |config|
|
|
558
555
|
end
|
559
556
|
|
560
557
|
task :lock do
|
561
|
-
bootstrap_code
|
562
|
-
|
563
558
|
epoch = Time.now.to_i
|
564
559
|
locker = ''
|
565
560
|
|
@@ -579,7 +574,7 @@ Capistrano::Configuration.instance(:must_exist).load do |config|
|
|
579
574
|
|
580
575
|
system "#{figlet} failed to lock"
|
581
576
|
puts "deploy locked by #{lock_user} #{epoch-lock_epoch} seconds ago"
|
582
|
-
puts "use
|
577
|
+
puts "use 'ao unlock' to remove this lock"
|
583
578
|
abort
|
584
579
|
end
|
585
580
|
|
@@ -587,7 +582,7 @@ Capistrano::Configuration.instance(:must_exist).load do |config|
|
|
587
582
|
at_exit { self.unlock; }
|
588
583
|
end
|
589
584
|
|
590
|
-
run "echo #{epoch} #{ENV['
|
585
|
+
run "echo #{epoch} #{ENV['_AO_DEPLOYER']} > #{lock_path}"
|
591
586
|
end
|
592
587
|
|
593
588
|
task :lock_compare do
|
@@ -620,39 +615,18 @@ Capistrano::Configuration.instance(:must_exist).load do |config|
|
|
620
615
|
end
|
621
616
|
end
|
622
617
|
|
623
|
-
|
624
|
-
|
625
|
-
namespace :ruby do
|
626
|
-
task :bundle do
|
627
|
-
run "cd #{deploy_release} && bin/build ruby #{ruby_loader} -- #{bundler_options}"
|
628
|
-
end
|
629
|
-
end
|
630
|
-
|
631
|
-
after "deploy:bundle", "ruby:bundle"
|
632
|
-
|
633
|
-
namespace :node do
|
634
|
-
task :bundle do
|
635
|
-
run "cd #{deploy_release} && bin/build node"
|
618
|
+
task :finished do
|
636
619
|
end
|
637
|
-
end
|
638
|
-
|
639
|
-
after "deploy:bundle", "node:bundle"
|
640
620
|
|
641
|
-
|
642
|
-
task :build do
|
643
|
-
unless deploy_path_name == migrate_path_name
|
644
|
-
run "cd #{deploy_release} && RAILS_ENV=#{dna["app_env"]} bin/build assets"
|
645
|
-
end
|
646
|
-
end
|
647
|
-
end
|
648
|
-
|
649
|
-
after "deploy:build", "assets:build"
|
621
|
+
end # :deploy
|
650
622
|
|
651
623
|
on :exit do
|
652
624
|
unless ENV['LOCAL_ONLY'] && !ENV['LOCAL_ONLY'].empty?
|
653
|
-
logger.important "uploading deploy logs: #{log_path}/#{application}-#{ENV["
|
654
|
-
put full_log, "#{log_path}/#{application}-#{ENV["
|
625
|
+
logger.important "uploading deploy logs: #{log_path}/#{application}-#{ENV["_AO_DEPLOYER"]}.log-#{Time.now.strftime('%Y%m%d-%H%M')}"
|
626
|
+
put full_log, "#{log_path}/#{application}-#{ENV["_AO_DEPLOYER"]}.log-#{Time.now.strftime('%Y%m%d-%H%M')}"
|
655
627
|
end
|
656
628
|
end
|
657
629
|
|
658
|
-
end # Capistrano::
|
630
|
+
end # Capistrano::Configuration
|
631
|
+
|
632
|
+
require 'alpha_omega/config/deploy'
|
data/lib/alpha_omega/utils.rb
CHANGED
@@ -1,12 +1,14 @@
|
|
1
1
|
require 'capistrano'
|
2
2
|
require 'yaml'
|
3
3
|
require 'deep_merge'
|
4
|
+
require 'etc'
|
4
5
|
|
5
6
|
$this_pod = nil
|
6
7
|
$this_host = nil
|
7
8
|
$opsdb = nil
|
8
9
|
$pods_config = nil
|
9
10
|
$magic_prefix = "eea914aaa8dde6fdae29242b1084a2b0415eefaf"
|
11
|
+
$node_filter = nil
|
10
12
|
|
11
13
|
module AlphaOmega
|
12
14
|
def self.node_defaults(node, env_pod, node_name)
|
@@ -60,7 +62,7 @@ module AlphaOmega
|
|
60
62
|
end
|
61
63
|
|
62
64
|
def self.default_pods_tasks
|
63
|
-
Proc.new do |config, pod_name, pod, this_node
|
65
|
+
Proc.new do |config, pod_name, pod, this_node|
|
64
66
|
%w(app echo yaml).each do |tsuffix|
|
65
67
|
# each pod task sets the pod context for host/group tasks
|
66
68
|
config.task "#{pod_name}.#{tsuffix}" do # task pod1
|
@@ -75,7 +77,7 @@ module AlphaOmega
|
|
75
77
|
node_dna[remote_name] = {}
|
76
78
|
node_dna[remote_name].deep_merge!(n)
|
77
79
|
|
78
|
-
cap_roles = node_filter.call(this_node, n)
|
80
|
+
cap_roles = $node_filter.call(this_node, n)
|
79
81
|
next nil unless cap_roles
|
80
82
|
|
81
83
|
config.task "#{task_name}.#{pod_name}.app" do # task host.pod1.app
|
@@ -98,7 +100,8 @@ module AlphaOmega
|
|
98
100
|
end
|
99
101
|
|
100
102
|
%w(app echo yaml).each do |tsuffix|
|
101
|
-
config.task "#{task_name}.#{tsuffix}" do # task host
|
103
|
+
config.task "#{task_name}.#{tsuffix}" do # task host.app
|
104
|
+
# host.app -> host.current_pod.app
|
102
105
|
config.after "#{task_name}.#{tsuffix}", "#{task_name}.#{current_pod}.#{tsuffix}"
|
103
106
|
end
|
104
107
|
end
|
@@ -108,14 +111,16 @@ module AlphaOmega
|
|
108
111
|
|
109
112
|
self.what_groups hosts do |task_name, nodes|
|
110
113
|
%w(app echo yaml).each do |tsuffix|
|
111
|
-
config.task "#{task_name}.#{pod_name}.#{tsuffix}" do
|
114
|
+
config.task "#{task_name}.#{pod_name}.#{tsuffix}" do # task group.pod1.app
|
112
115
|
end
|
113
116
|
|
114
117
|
nodes.keys.sort.each do |remote_name|
|
118
|
+
# group.pod1.app => hosts
|
115
119
|
config.after "#{task_name}.#{pod_name}.#{tsuffix}", "#{remote_name}.#{tsuffix}"
|
116
120
|
end
|
117
121
|
|
118
|
-
config.task "#{task_name}.#{tsuffix}" do
|
122
|
+
config.task "#{task_name}.#{tsuffix}" do # task group.app
|
123
|
+
# group.app -> group.current_pod.app
|
119
124
|
config.after "#{task_name}.#{tsuffix}", "#{task_name}.#{current_pod}.#{tsuffix}"
|
120
125
|
end
|
121
126
|
end
|
@@ -123,9 +128,9 @@ module AlphaOmega
|
|
123
128
|
end
|
124
129
|
end
|
125
130
|
|
126
|
-
def self.setup_pods (config, node_home
|
131
|
+
def self.setup_pods (config, node_home)
|
127
132
|
self.what_pods(config, node_home) do |config, pod_name, pod, this_node|
|
128
|
-
self.default_pods_tasks.call(config, pod_name, pod, this_node
|
133
|
+
self.default_pods_tasks.call(config, pod_name, pod, this_node)
|
129
134
|
end
|
130
135
|
end
|
131
136
|
|
@@ -210,27 +215,26 @@ module AlphaOmega
|
|
210
215
|
cap_groups
|
211
216
|
end
|
212
217
|
|
213
|
-
def self.interesting (config
|
214
|
-
config.set :repository, deploy["repository"]
|
215
|
-
config.set :application, deploy["application"]
|
218
|
+
def self.interesting (config)
|
219
|
+
config.set :repository, $deploy["repository"]
|
220
|
+
config.set :application, $deploy["application"]
|
216
221
|
|
217
|
-
config.set :user, deploy["user"]
|
218
|
-
config.set :group, deploy["group"]
|
222
|
+
config.set :user, (ENV['_AO_USER'] || $deploy["user"] || Etc.getpwuid.name)
|
223
|
+
config.set :group, (ENV['_AO_GROUP'] || $deploy["group"] || Etc.getgrgid(Etc.getpwuid.gid).name)
|
219
224
|
|
220
|
-
config.set :ruby_loader, "#{deploy["ruby_loader"]} #{deploy["app_ruby"]}"
|
225
|
+
config.set :ruby_loader, "#{ENV['_AO_RUBY_LOADER'] || $deploy["ruby_loader"]} #{$deploy["app_ruby"]}"
|
221
226
|
|
222
227
|
# branches
|
223
|
-
config.set :branch, self.what_branch(deploy["branches"] + [%r(#{deploy["branch_regex"]})])
|
228
|
+
config.set :branch, self.what_branch($deploy["branches"] + [%r(#{$deploy["branch_regex"]})])
|
224
229
|
|
225
230
|
# pods, hosts, groups
|
226
|
-
self.setup_pods config, (ENV['
|
227
|
-
node_filter.call(admin, node)
|
228
|
-
end
|
231
|
+
self.setup_pods config, (ENV['_AO_CHEF'] || $deploy["chef_path"])
|
229
232
|
end
|
230
233
|
end
|
231
234
|
|
232
235
|
def Deploy(config, __file__, &node_filter)
|
236
|
+
$node_filter = node_filter
|
233
237
|
deploy_yaml = File.join(File.expand_path('..', __file__), "config", "deploy.yml")
|
234
238
|
$deploy = YAML.load_file(deploy_yaml)
|
235
|
-
AlphaOmega.interesting(config
|
239
|
+
AlphaOmega.interesting(config)
|
236
240
|
end
|
data/libexec/_ao
ADDED
@@ -0,0 +1,194 @@
|
|
1
|
+
#!/bin/bash
|
2
|
+
|
3
|
+
# first time, this will be empty, to trigger enforce_rvm
|
4
|
+
: ${_AO_RVM:=}
|
5
|
+
|
6
|
+
export _AO_OPT="$@"
|
7
|
+
|
8
|
+
function deploy_basename {
|
9
|
+
local cmd="$(basename "$1")"; shift
|
10
|
+
echo "${cmd#aoh-}"
|
11
|
+
}
|
12
|
+
|
13
|
+
# ensure script runs under rvm
|
14
|
+
function enforce_rvm {
|
15
|
+
if [[ -n "$_AO_RVM" ]]; then
|
16
|
+
return
|
17
|
+
fi
|
18
|
+
|
19
|
+
export _AO_RVM=1
|
20
|
+
|
21
|
+
local pth_ruby_loader="${_AO_RUBY_LOADER:-}"
|
22
|
+
: ${pth_ruby_loader:=$(ryaml $shome/config/deploy.yml ruby_loader)}
|
23
|
+
local ruby_deploy="$(ryaml $shome/config/deploy.yml app_ruby)"
|
24
|
+
|
25
|
+
if [[ -z $pth_ruby_loader || -z $ruby_deploy ]]; then
|
26
|
+
return
|
27
|
+
fi
|
28
|
+
|
29
|
+
if [[ ! -x $pth_ruby_loader ]]; then
|
30
|
+
return
|
31
|
+
fi
|
32
|
+
|
33
|
+
exec $pth_ruby_loader $ruby_deploy "$0" "$@"
|
34
|
+
}
|
35
|
+
|
36
|
+
enforce_rvm "$@"
|
37
|
+
|
38
|
+
# define command line options:
|
39
|
+
# var name, default, description, short option
|
40
|
+
DEFINE_string "gateway" "" "deploy gateway host" "G"
|
41
|
+
DEFINE_boolean "autoconf" "$FLAGS_TRUE" "use config/ssh to configure remote access" "z"
|
42
|
+
DEFINE_boolean "proxy" "$FLAGS_FALSE" "use a gateway to proxy deploys" "p"
|
43
|
+
DEFINE_boolean "direct" "$FLAGS_FALSE" "override proxy" "d"
|
44
|
+
DEFINE_string "chef" "" "location to chef repo with opsdb" "c"
|
45
|
+
DEFINE_string "tag" "HEAD" "tag to deploy in production" "t"
|
46
|
+
DEFINE_string "user" "" "app user override" "u"
|
47
|
+
DEFINE_string "group" "" "app group override" "g"
|
48
|
+
DEFINE_string "ssh_login" "" "ssh login override" "l"
|
49
|
+
|
50
|
+
# entry point
|
51
|
+
function main {
|
52
|
+
export _AO_ARGS="$@"
|
53
|
+
|
54
|
+
if [[ "$#" = 0 ]]; then
|
55
|
+
logger_fatal "must specify a pod name or integration environment when deploying"
|
56
|
+
exit 1
|
57
|
+
fi
|
58
|
+
|
59
|
+
local nm_component="$1" # will shift later since this could be an integration environment
|
60
|
+
if [[ "$#" = 1 ]]; then
|
61
|
+
local deploy_base="$(ryaml $shome/config/deploy.yml deploy_base)"
|
62
|
+
if [[ -n "$deploy_base" ]]; then
|
63
|
+
local pod_shortcut="$(ryaml $HOME/.getting-started/config/pods.yml pods ${deploy_base}${nm_component} pod)"
|
64
|
+
if [[ -n "$pod_shortcut" ]]; then
|
65
|
+
nm_component="${deploy_base}${nm_component}"
|
66
|
+
set -- "$nm_component"
|
67
|
+
fi
|
68
|
+
unset pod_shortcut
|
69
|
+
fi
|
70
|
+
fi
|
71
|
+
|
72
|
+
if [[ -r "$HOME/.getting-started/config/pods.yml" ]]; then
|
73
|
+
local pod_shortcut="$(ryaml $HOME/.getting-started/config/pods.yml pods $nm_component pod)"
|
74
|
+
if [[ -n "$pod_shortcut" ]]; then
|
75
|
+
nm_component="$pod_shortcut"
|
76
|
+
else
|
77
|
+
shift # treat as a pod name
|
78
|
+
fi
|
79
|
+
|
80
|
+
local pod_alias="$(ryaml $HOME/.getting-started/config/pods.yml pods $nm_component alias)"
|
81
|
+
if [[ -n "$pod_alias" ]]; then
|
82
|
+
nm_component="$pod_alias"
|
83
|
+
fi
|
84
|
+
|
85
|
+
local is_local="$(ryaml $HOME/.getting-started/config/pods.yml pods $nm_component local)"
|
86
|
+
local hst_gateway="$(ryaml $HOME/.getting-started/config/pods.yml pods $nm_component gateway)"
|
87
|
+
if [[ -z "$is_local" ]]; then
|
88
|
+
if [[ -z "$hst_gateway" ]]; then
|
89
|
+
logger_fatal "$nm_component is not a pod name"
|
90
|
+
exit 1
|
91
|
+
fi
|
92
|
+
FLAGS_proxy="$FLAGS_TRUE"
|
93
|
+
else
|
94
|
+
if [[ -z "$FLAGS_chef" ]]; then
|
95
|
+
FLAGS_chef="$HOME/.getting-started"
|
96
|
+
fi
|
97
|
+
export _AO_ENV="$(ryaml $HOME/.getting-started/config/pods.yml pods $nm_component ao_env)"
|
98
|
+
export RAILS_ENV="$_AO_ENV"
|
99
|
+
if [[ -z "$_AO_ENV" ]]; then
|
100
|
+
_AO_ENV="$(ryaml $HOME/.getting-started/config/pods.yml pods $nm_component env)"
|
101
|
+
fi
|
102
|
+
export _AO_SSH="$HOME/.getting-started/ssh/config"
|
103
|
+
fi
|
104
|
+
|
105
|
+
if [[ -z "$FLAGS_gateway" ]]; then
|
106
|
+
FLAGS_gateway="$hst_gateway"
|
107
|
+
fi
|
108
|
+
fi
|
109
|
+
|
110
|
+
if [[ "$FLAGS_autoconf" = "$FLAGS_TRUE" ]]; then
|
111
|
+
PATH="$shome/.deploy/ssh/bin:$PATH"
|
112
|
+
fi
|
113
|
+
|
114
|
+
if [[ -n "$FLAGS_user" ]]; then
|
115
|
+
export _AO_USER="$FLAGS_user"
|
116
|
+
else
|
117
|
+
export _AO_USER="$LOGNAME"
|
118
|
+
fi
|
119
|
+
|
120
|
+
: ${_AO_DEPLOYER:=$_AO_USER}
|
121
|
+
export _AO_DEPLOYER
|
122
|
+
|
123
|
+
if [[ -n "$FLAGS_group" ]]; then
|
124
|
+
export _AO_GROUP="$FLAGS_group"
|
125
|
+
fi
|
126
|
+
|
127
|
+
if [[ -n "$FLAGS_ssh_login" ]]; then
|
128
|
+
export _AO_SSH_LOGIN="$FLAGS_ssh_login"
|
129
|
+
fi
|
130
|
+
|
131
|
+
if [[ -n "$FLAGS_chef" ]]; then
|
132
|
+
export _AO_CHEF="$FLAGS_chef"
|
133
|
+
fi
|
134
|
+
|
135
|
+
if [[ -n "$FLAGS_gateway" ]]; then
|
136
|
+
export GATEWAY="$FLAGS_gateway"
|
137
|
+
fi
|
138
|
+
|
139
|
+
case "$nm_component" in
|
140
|
+
*)
|
141
|
+
|
142
|
+
if [[ "$FLAGS_proxy" = "$FLAGS_FALSE" || "$FLAGS_direct" = "$FLAGS_TRUE" || -z "$FLAGS_gateway" ]]; then
|
143
|
+
export _AO_DEPLOY=1
|
144
|
+
|
145
|
+
local _AO_THIS_HOST="$(ryaml $HOME/.getting-started/config/pods.yml pods $nm_component this_host)"
|
146
|
+
if [[ -n "$_AO_THIS_HOST" ]]; then
|
147
|
+
export _AO_THIS_HOST
|
148
|
+
fi
|
149
|
+
|
150
|
+
local _AO_THIS_POD="$(ryaml $HOME/.getting-started/config/pods.yml pods $nm_component this_pod)"
|
151
|
+
if [[ -n "$_AO_THIS_POD" ]]; then
|
152
|
+
export _AO_THIS_POD
|
153
|
+
fi
|
154
|
+
|
155
|
+
bundle check 2>&1 >/dev/null || { bundle install --quiet --local --path vendor/bundle || bundle check > /dev/null; }
|
156
|
+
aomain "$nm_component" "$@"
|
157
|
+
else
|
158
|
+
if [[ "$#" > 0 ]]; then
|
159
|
+
case "$1" in
|
160
|
+
all|world)
|
161
|
+
logger_fatal "cannot use all or world, these are dangerous"
|
162
|
+
exit 1
|
163
|
+
;;
|
164
|
+
production)
|
165
|
+
if [[ -z "$FLAGS_tag" || "$FLAGS_tag" = "HEAD" ]]; then
|
166
|
+
case "$(deploy_basename $0)" in
|
167
|
+
hosts|debug)
|
168
|
+
true
|
169
|
+
;;
|
170
|
+
*)
|
171
|
+
logger_fatal "must specify a version using --tag"
|
172
|
+
exit 1
|
173
|
+
;;
|
174
|
+
esac
|
175
|
+
fi
|
176
|
+
;;
|
177
|
+
esac
|
178
|
+
fi
|
179
|
+
|
180
|
+
local gateway="$FLAGS_gateway"
|
181
|
+
if [[ -n "$FLAGS_ssh_login" ]]; then
|
182
|
+
gateway="${FLAGS_ssh_login}@${gateway}"
|
183
|
+
fi
|
184
|
+
|
185
|
+
local remote_chef=""
|
186
|
+
if [[ -n "$FLAGS_chef" ]]; then
|
187
|
+
remote_chef="-c $FLAGS_chef "
|
188
|
+
fi
|
189
|
+
|
190
|
+
$shome/sbin/proxy "$gateway" "$FLAGS_tag" $(deploy_basename $0) ${remote_chef}"$nm_component" "$@"
|
191
|
+
fi
|
192
|
+
;;
|
193
|
+
esac
|
194
|
+
}
|