initial commit
This commit just adds support for the ability to query classes, nodes, and groups out of the dashboard.
This commit is contained in:
5
lib/puppet/application/dashboard.rb
Normal file
5
lib/puppet/application/dashboard.rb
Normal file
@@ -0,0 +1,5 @@
|
||||
require 'puppet/face'
|
||||
require 'puppet/application/face_base'
|
||||
|
||||
class Puppet::Application::Dashboard < Puppet::Application::FaceBase
|
||||
end
|
||||
36
lib/puppet/dashboard/classifier.rb
Normal file
36
lib/puppet/dashboard/classifier.rb
Normal file
@@ -0,0 +1,36 @@
|
||||
require 'puppet'
|
||||
require 'puppet/network/http_pool'
|
||||
module Puppet::Dashboard
|
||||
class Classifier
|
||||
|
||||
def self.connection(options)
|
||||
@connection ||= Puppet::Dashboard::Classifier.new(options, false)
|
||||
end
|
||||
|
||||
def initialize(options, use_ssl=false)
|
||||
@http_connection = Puppet::Network::HttpPool.http_instance(options[:enc_server], options[:enc_port])
|
||||
# Workaround for the fact that Dashboard is typically insecure.
|
||||
@http_connection.use_ssl = use_ssl
|
||||
@headers = { 'Content-Type' => 'application/json' }
|
||||
end
|
||||
|
||||
# list expects a return of 200
|
||||
def list(type, action)
|
||||
response = @http_connection.get("/#{type}.json", @headers )
|
||||
nodes = handle_json_response(response, action)
|
||||
end
|
||||
|
||||
def handle_json_response(response, action, expected_code='200')
|
||||
if response.code == expected_code
|
||||
Puppet.notice "#{action} ... Done"
|
||||
PSON.parse response.body
|
||||
else
|
||||
# I should probably raise an exception!
|
||||
Puppet.warning "#{action} ... Failed"
|
||||
Puppet.info("Body: #{response.body}")
|
||||
Puppet.warning "Server responded with a #{response.code} status"
|
||||
raise Puppet::Error, "Could not: #{action}, got #{response.code} expected #{expected_code}"
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
37
lib/puppet/face/dashboard.rb
Normal file
37
lib/puppet/face/dashboard.rb
Normal file
@@ -0,0 +1,37 @@
|
||||
require 'puppet/face'
|
||||
require 'puppet/dashboard/classifier'
|
||||
Puppet::Face.define(:dashboard, '0.0.1') do
|
||||
option '--enc-server=' do
|
||||
summary 'The External Node Classifier URL.'
|
||||
description <<-EOT
|
||||
The URL of the External Node Classifier.
|
||||
This currently only supports the Dashboard
|
||||
as an external node classifier.
|
||||
EOT
|
||||
default_to do
|
||||
Puppet[:server]
|
||||
end
|
||||
end
|
||||
|
||||
option '--enc-port=' do
|
||||
summary 'The External Node Classifier Port'
|
||||
description <<-EOT
|
||||
The port of the External Node Classifier.
|
||||
This currently only supports the Dashboard
|
||||
as an external node classifier.
|
||||
EOT
|
||||
default_to do
|
||||
3000
|
||||
end
|
||||
end
|
||||
|
||||
action 'list' do
|
||||
summary 'list all of a certain type from the dashboard, this currently supports the ability to list: classes, nodes, and groups'
|
||||
when_invoked do |type, options|
|
||||
type_map = {'classes' => 'node_classes', 'nodes' => 'nodes', 'groups' => 'node_groups'}
|
||||
connection = Puppet::Dashboard::Classifier.connection(options)
|
||||
connection.list(type_map[type], "Listing #{type}")
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user