dev/provisioning/modules/puppi/files/mcollective/puppi.rb
author ymh <ymh.work@gmail.com>
Thu, 03 Nov 2016 09:44:11 +0100
changeset 390 f4fed295115b
parent 28 b0b56e0f8c7f
permissions -rwxr-xr-x
put virtualenv activation during build in comment. That means that for the moment the build machine must be provisionned beforehand, or ansible must be available globally

module MCollective
    module Agent
        class Puppi<RPC::Agent
            metadata    :name        => "SimpleRPC Agent For PUPPI Commands",
                        :description => "Agent to execute PUPPI actions via MCollective",
                        :author      => "Al @ Lab42",
                        :license     => "Apache License 2.0",
                        :version     => "0.3",
                        :url         => "http://www.example42.com/",
                        :timeout     => 600

            def check_action
#                   validate :project, :shellsafe
                    project = request[:project] if request[:project]
                    reply.data = %x[puppi check #{project}].chomp
                    if ($?.exitstatus > 0)
                      reply.fail "FAILED: #{reply.data}"
                    end
            end

            def info_action
#                   validate :project, :shellsafe
                    project = request[:project] if request[:project]
                    reply.data = %x[puppi info #{project}].chomp
                    if ($?.exitstatus > 0)
                      reply.fail "FAILED: #{reply.data}"
                    end
            end

            def log_action
#                   validate :project, :shellsafe
                    project = request[:project] if request[:project]
                    reply.data = %x[puppi log #{project} -c 10].chomp
                    if ($?.exitstatus > 0)
                      reply.fail "FAILED: #{reply.data}"
                    end
            end

            def deploy_action
                    validate :project, :shellsafe
                    project = request[:project] if request[:project]
                    if (!File.directory? "/etc/puppi/projects/#{project}")
                      reply.fail "No such project #{project}"
                      return
                    end
                    puppioptions = request[:puppioptions]
                    reply.data = %x[puppi deploy #{project} -o "#{puppioptions}"].chomp
                    if ($?.exitstatus > 0)
                      reply.fail "FAILED: #{reply.data}"
                    end
            end

            def rollback_action
                    validate :project, :shellsafe
                    project = request[:project] if request[:project]
                    reply.data = %x[puppi rollback #{project} latest].chomp
                    if ($?.exitstatus > 0)
                      reply.fail "FAILED: #{reply.data}"
                    end
            end

            def init_action
                    validate :project, :shellsafe
                    project = request[:project] if request[:project]
                    reply.data = %x[puppi init #{project}].chomp
                    if ($?.exitstatus > 0)
                      reply.fail "FAILED: #{reply.data}"
                    end
            end
            
            def configure_action
                  validate :project, :shellsafe
                  project = request[:project] if request[:project]
                  reply.data = %x[puppi configure #{project}].chomp
                  if ($?.exitstatus > 0)
                    reply.fail "FAILED: #{reply.data}"
                  end
            end

        end
    end
end
# vi:tabstop=4:expandtab:ai