summaryrefslogtreecommitdiffstats
path: root/lib/puppet/application/resource.rb
diff options
context:
space:
mode:
authorJesse Wolfe <jes5199@gmail.com>2010-03-17 12:46:42 -0700
committertest branch <puppet-dev@googlegroups.com>2010-02-17 06:50:53 -0800
commiteda649b6395b38dcb1a5719483222bfbfa60302c (patch)
treeb248bde2ee92194a6cebe917967aedbc399fbcbe /lib/puppet/application/resource.rb
parent09b14120fe81a2955a1e4572ec0b8040ef540ade (diff)
downloadpuppet-eda649b6395b38dcb1a5719483222bfbfa60302c.tar.gz
puppet-eda649b6395b38dcb1a5719483222bfbfa60302c.tar.xz
puppet-eda649b6395b38dcb1a5719483222bfbfa60302c.zip
Feature #3383 RAL over REST
ralsh --host works now, and is using REST. A node running puppetd --listen will allow ralsh to find, search, and modify live resources, via REST. Signed-off-by: Jesse Wolfe <jes5199@gmail.com>
Diffstat (limited to 'lib/puppet/application/resource.rb')
-rw-r--r--lib/puppet/application/resource.rb56
1 files changed, 14 insertions, 42 deletions
diff --git a/lib/puppet/application/resource.rb b/lib/puppet/application/resource.rb
index f914a1b53..0046fc1d8 100644
--- a/lib/puppet/application/resource.rb
+++ b/lib/puppet/application/resource.rb
@@ -71,52 +71,24 @@ Puppet::Application.new(:resource) do
trans.to_manifest
}
- text = if @host
- client = Puppet::Network::Client.resource.new(:Server => @host, :Port => Puppet[:puppetport])
- unless client.read_cert
- raise "client.read_cert failed"
- end
- begin
- # They asked for a single resource.
- if name
- transbucket = [client.describe(type, name)]
- else
- # Else, list the whole thing out.
- transbucket = client.instances(type)
- end
- rescue Puppet::Network::XMLRPCClientError => exc
- raise "client.list(#{type}) failed: #{exc.message}"
- end
- transbucket.sort { |a,b| a.name <=> b.name }.collect(&format)
+ if @host
+ Puppet::Resource.indirection.terminus_class = :rest
+ port = Puppet[:puppetport]
+ key = ["https://#{host}:#{port}", "production", "resources", type, name].join('/')
else
- if name
- obj = typeobj.instances.find { |o| o.name == name } || typeobj.new(:name => name, :check => properties)
- vals = obj.retrieve
-
- unless params.empty?
- params.each do |param, value|
- obj[param] = value
- end
- catalog = Puppet::Resource::Catalog.new
- catalog.add_resource obj
- begin
- catalog.apply
- rescue => detail
- if Puppet[:trace]
- puts detail.backtrace
- end
- end
+ key = [type, name].join('/')
+ end
- end
- [format.call(obj.to_trans(true))]
+ text = if name
+ if params.empty?
+ [ Puppet::Resource.find( key ) ]
else
- typeobj.instances.collect do |obj|
- next if ARGV.length > 0 and ! ARGV.include? obj.name
- trans = obj.to_trans(true)
- format.call(trans)
- end
+ request = Puppet::Indirector::Request.new(:resource, :save, key) # Yuck.
+ [ Puppet::Resource.new( type, name, params ).save( request ) ]
end
- end.compact.join("\n")
+ else
+ Puppet::Resource.search( key, {} )
+ end.map(&format).join("\n")
if options[:edit]
file = "/tmp/x2puppet-#{Process.pid}.pp"