dev/provisioning/modules/puppi/files/mcollective/mc-puppi
changeset 28 b0b56e0f8c7f
equal deleted inserted replaced
27:a2342f26c9de 28:b0b56e0f8c7f
       
     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