-
Notifications
You must be signed in to change notification settings - Fork 19
/
Copy pathdeploy
executable file
·39 lines (28 loc) · 1.02 KB
/
deploy
1
2
3
4
5
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
#!/usr/bin/env ruby
require "json"
STAGE_DIR = '.stage/'
build_package = <<SCRIPT
rm -rf cookbooks-*.tar.gz
berks package
#create the stage dir
mkdir -p #{STAGE_DIR} && rm -rf #{STAGE_DIR}/*
mv cookbooks-*.tar.gz #{STAGE_DIR}/
cp environments/production.json #{STAGE_DIR}/
SCRIPT
was_ok = system (build_package)
abort "Error building the package." unless was_ok
def deploy(hostname, ip)
puts "deploying to #{hostname}"
cmd = <<SCRIPT
rsync --delete -r #{STAGE_DIR}/ #{hostname}:/tmp/cxn ;
ssh #{hostname} "cd /tmp/cxn ; sudo chef-solo -j production.json -r cookbooks-*.tar.gz -N #{hostname}" ;
test $(curl -s -o /dev/null -I -w "%{http_code}" http://#{ip}/health) = 200
SCRIPT
system (cmd)
end
configuration = JSON.parse( IO.read("#{File.dirname(__FILE__)}/environments/production.json" ) )
configuration['cxn']['nodes'].each do |hostname, ip|
next if ARGV[0] && ARGV[0] != hostname
was_good = deploy(hostname, ip)
abort "The deploy to #{hostname} failed." unless was_good
end