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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
|
module LeapCli
module Commands
desc 'Apply recipes to a node or set of nodes'
long_desc 'The node-filter can be the name of a node, service, or tag.'
arg_name 'node-filter'
command :deploy do |c|
c.action do |global_options,options,args|
init_submodules
nodes = manager.filter!(args)
if nodes.size > 1
say "Deploying to these nodes: #{nodes.keys.join(', ')}"
unless agree "Continue? "
quit! "OK. Bye."
end
end
compile_hiera_files(nodes)
ssh_connect(nodes) do |ssh|
ssh.leap.log :checking, 'node' do
ssh.leap.assert_initialized
end
# sync hiera conf
ssh.leap.log :syching, "hiera.yaml" do
ssh.leap.rsync_update do |server|
node = manager.node(server.host)
ssh.leap.log Path.relative_path([:hiera, node.name]) + ' -> ' + node.name + ':/etc/leap/hiera.yaml'
{:source => Path.named_path([:hiera, node.name]), :dest => "/etc/leap/hiera.yaml"}
end
end
# sync puppet manifests and apply them
ssh.set :puppet_source, [Path.platform, 'puppet'].join('/')
ssh.set :puppet_destination, '/srv/leap'
ssh.set :puppet_command, '/usr/bin/puppet apply --color=false'
ssh.set :puppet_lib, "puppet/modules"
ssh.set :puppet_parameters, '--confdir puppet puppet/manifests/site.pp'
ssh.set :puppet_stream_output, true
ssh.apply_puppet
end
end
end
private
def init_submodules
Dir.chdir Path.platform do
statuses = assert_run! "git submodule status"
statuses.strip.split("\n").each do |status_line|
if status_line =~ /^-/
submodule = status_line.split(' ')[1]
log "Updating submodule #{submodule}"
assert_run! "git submodule update --init #{submodule}"
end
end
end
end
end
end
|