diff options
author | Jesse Wolfe <jes5199@gmail.com> | 2010-01-21 17:16:38 -0800 |
---|---|---|
committer | test branch <puppet-dev@googlegroups.com> | 2010-02-17 06:50:53 -0800 |
commit | 9acd0b2b6d83881dc529c117637aff63a6c44f8d (patch) | |
tree | 99d1d7939f2cb032d555717d8a90d32719f96691 /lib/puppet | |
parent | b581c2348e784ce5d857a4c1c0686399b87cc13f (diff) | |
download | puppet-9acd0b2b6d83881dc529c117637aff63a6c44f8d.tar.gz puppet-9acd0b2b6d83881dc529c117637aff63a6c44f8d.tar.xz puppet-9acd0b2b6d83881dc529c117637aff63a6c44f8d.zip |
Feature #3115 REST-ified status()
This patch re-implements the status() remote procedure as a REST interface.
A running server returns key-value pairs, currently the only implemented
key is "is_alive" which will always be set to true.
Some future tool will consume this by:
Puppet::Status.indirection.terminus_class = :rest
Puppet::Status.find('https://puppet:8140/production/status/default')
Now with unit tests.
plus fixes a typo.
plus integration test and default security setting.
plus tests suggested by Brice.
Signed-off-by: Jesse Wolfe <jes5199@gmail.com>
Diffstat (limited to 'lib/puppet')
-rw-r--r-- | lib/puppet/indirector/status.rb | 3 | ||||
-rw-r--r-- | lib/puppet/indirector/status/local.rb | 7 | ||||
-rw-r--r-- | lib/puppet/indirector/status/rest.rb | 5 | ||||
-rw-r--r-- | lib/puppet/network/http/api/v1.rb | 10 | ||||
-rw-r--r-- | lib/puppet/network/rest_authconfig.rb | 1 | ||||
-rw-r--r-- | lib/puppet/status.rb | 20 |
6 files changed, 45 insertions, 1 deletions
diff --git a/lib/puppet/indirector/status.rb b/lib/puppet/indirector/status.rb new file mode 100644 index 000000000..f40bbc4d8 --- /dev/null +++ b/lib/puppet/indirector/status.rb @@ -0,0 +1,3 @@ +# A stub class, so our constants work. +class Puppet::Indirector::Status +end diff --git a/lib/puppet/indirector/status/local.rb b/lib/puppet/indirector/status/local.rb new file mode 100644 index 000000000..377be89df --- /dev/null +++ b/lib/puppet/indirector/status/local.rb @@ -0,0 +1,7 @@ +require 'puppet/indirector/status' + +class Puppet::Indirector::Status::Local < Puppet::Indirector::Code + def find( *anything ) + return model.new + end +end diff --git a/lib/puppet/indirector/status/rest.rb b/lib/puppet/indirector/status/rest.rb new file mode 100644 index 000000000..22e70429b --- /dev/null +++ b/lib/puppet/indirector/status/rest.rb @@ -0,0 +1,5 @@ +require 'puppet/indirector/status' +require 'puppet/indirector/rest' + +class Puppet::Indirector::Status::Rest < Puppet::Indirector::REST +end diff --git a/lib/puppet/network/http/api/v1.rb b/lib/puppet/network/http/api/v1.rb index 13df7c3d0..6a5ff156a 100644 --- a/lib/puppet/network/http/api/v1.rb +++ b/lib/puppet/network/http/api/v1.rb @@ -34,7 +34,7 @@ module Puppet::Network::HTTP::API::V1 end def indirection2uri(request) - indirection = request.method == :search ? request.indirection_name.to_s + "s" : request.indirection_name.to_s + indirection = request.method == :search ? pluralize(request.indirection_name.to_s) : request.indirection_name.to_s "/#{request.environment.to_s}/#{indirection}/#{request.escaped_key}#{request.query_string}" end @@ -50,12 +50,20 @@ module Puppet::Network::HTTP::API::V1 return method end + def pluralize(indirection) + return "statuses" if indirection == "status" + return indirection + "s" + end + def plurality(indirection) # NOTE This specific hook for facts is ridiculous, but it's a *many*-line # fix to not need this, and our goal is to move away from the complication # that leads to the fix being too long. return :singular if indirection == "facts" + # "status" really is singular + return :singular if indirection == "status" + result = (indirection =~ /s$/) ? :plural : :singular indirection.sub!(/s$/, '') if result diff --git a/lib/puppet/network/rest_authconfig.rb b/lib/puppet/network/rest_authconfig.rb index 635ed1b8d..01ed412cd 100644 --- a/lib/puppet/network/rest_authconfig.rb +++ b/lib/puppet/network/rest_authconfig.rb @@ -15,6 +15,7 @@ module Puppet { :acl => "/certificate/ca", :method => :find, :authenticated => false }, { :acl => "/certificate/", :method => :find, :authenticated => false }, { :acl => "/certificate_request", :method => [:find, :save], :authenticated => false }, + { :acl => "/status", :method => [:find], :authenticated => true }, ] def self.main diff --git a/lib/puppet/status.rb b/lib/puppet/status.rb new file mode 100644 index 000000000..f587a5a2a --- /dev/null +++ b/lib/puppet/status.rb @@ -0,0 +1,20 @@ +require 'puppet/indirector' + +class Puppet::Status + extend Puppet::Indirector + indirects :status, :terminus_class => :local + + attr :status, true + + def initialize( status = nil ) + @status = status || {"is_alive" => true} + end + + def to_pson + @status.to_pson + end + + def self.from_pson( pson ) + self.new( pson ) + end +end |