28
|
1 |
#!/usr/bin/env ruby
|
|
2 |
|
|
3 |
# Client program for the mcollective puppi agent
|
|
4 |
#
|
|
5 |
# Released under Apache License 2.0
|
|
6 |
|
|
7 |
require 'mcollective'
|
|
8 |
|
|
9 |
include MCollective::RPC
|
|
10 |
|
|
11 |
options = rpcoptions do |parser, options|
|
|
12 |
options[:timeout] = 180
|
|
13 |
|
|
14 |
parser.define_head "Execute Puppi commands"
|
|
15 |
parser.banner = "Usage: mc-puppi [filters] command [project] [puppioptions]"
|
|
16 |
parser.separator ""
|
|
17 |
parser.separator "Available commands:"
|
|
18 |
parser.separator " check [project] - Run puppi check"
|
|
19 |
parser.separator " info [topic] - Run puppi info. For all or specified topic"
|
|
20 |
parser.separator " log [topic] - Run puppi log. For all or specified topic"
|
|
21 |
parser.separator " todo - Run puppi todo"
|
|
22 |
parser.separator " deploy <project> - Run puppi deploy on the defined project"
|
|
23 |
parser.separator " configure <project> - Run puppi configure on the defined project"
|
|
24 |
parser.separator " rollback <project> - Run puppi rollback latest on the defined project"
|
|
25 |
parser.separator " init <project> - Run puppi init on the defined project"
|
|
26 |
end
|
|
27 |
|
|
28 |
if MCollective::Util.empty_filter?(options[:filter])
|
|
29 |
print("Do you really want to operate on services unfiltered? (y/n): ")
|
|
30 |
STDOUT.flush
|
|
31 |
|
|
32 |
exit unless STDIN.gets.chomp =~ /^y$/
|
|
33 |
end
|
|
34 |
|
|
35 |
if ARGV.length >= 1
|
|
36 |
command = ARGV.shift
|
|
37 |
project = ARGV.shift
|
|
38 |
puppioptions = ARGV.shift
|
|
39 |
|
|
40 |
unless command =~ /^(check|deploy|rollback|init|configure|info|log|todo)$/
|
|
41 |
puts("Command has to be check|info|log|deploy|rollback|init|configure|todo")
|
|
42 |
exit 1
|
|
43 |
end
|
|
44 |
else
|
|
45 |
puts("Please specify at least a command")
|
|
46 |
exit 1
|
|
47 |
end
|
|
48 |
|
|
49 |
mc = rpcclient("puppi", :options => options)
|
|
50 |
mc.progress = true
|
|
51 |
# mc.send(command, {:project => project}) do |resp|
|
|
52 |
args = {};
|
|
53 |
args[:project] = project if project
|
|
54 |
args[:puppioptions] = puppioptions if puppioptions
|
|
55 |
mc.send(command, args) do |resp|
|
|
56 |
begin
|
|
57 |
# puts resp[:serverid]
|
|
58 |
puts resp[:body][:data]
|
|
59 |
# puts resp[:body][:exitcode]
|
|
60 |
|
|
61 |
rescue RPCError => er
|
|
62 |
puts "RPC Agent error: #{er}"
|
|
63 |
end
|
|
64 |
end
|
|
65 |
|