summaryrefslogtreecommitdiffstats
path: root/lib/puppet/server/resource.rb
diff options
context:
space:
mode:
authorluke <luke@980ebf18-57e1-0310-9a29-db15c13687c0>2007-02-08 01:39:39 +0000
committerluke <luke@980ebf18-57e1-0310-9a29-db15c13687c0>2007-02-08 01:39:39 +0000
commit7e07e3dc843798bdbc7a03428ca054adaff2fb72 (patch)
tree34d0f9f8c2ee11bdc281e6e4d18cad444253fe36 /lib/puppet/server/resource.rb
parent6d8068eddd0d29ec53f62557eb53f6ebb8e40591 (diff)
Moving all of the client and server code into a single network/ directory. In other words, more code structure cleanup.
git-svn-id: https://reductivelabs.com/svn/puppet/trunk@2179 980ebf18-57e1-0310-9a29-db15c13687c0
Diffstat (limited to 'lib/puppet/server/resource.rb')
-rwxr-xr-xlib/puppet/server/resource.rb191
1 files changed, 0 insertions, 191 deletions
diff --git a/lib/puppet/server/resource.rb b/lib/puppet/server/resource.rb
deleted file mode 100755
index d2bad52f3..000000000
--- a/lib/puppet/server/resource.rb
+++ /dev/null
@@ -1,191 +0,0 @@
-require 'puppet'
-require 'puppet/server'
-
-module Puppet
-
-# Serve Puppet elements. Useful for querying, copying, and, um, other stuff.
-class Server::Resource < Server::Handler
- attr_accessor :local
-
- @interface = XMLRPC::Service::Interface.new("resource") { |iface|
- iface.add_method("string apply(string, string)")
- iface.add_method("string describe(string, string, array, array)")
- iface.add_method("string list(string, array, string)")
- }
-
- # Apply a TransBucket as a transaction.
- def apply(bucket, format = "yaml", client = nil, clientip = nil)
- unless @local
- begin
- case format
- when "yaml":
- bucket = YAML::load(Base64.decode64(bucket))
- else
- raise Puppet::Error, "Unsupported format '%s'" % format
- end
- rescue => detail
- raise Puppet::Error, "Could not load YAML TransBucket: %s" % detail
- end
- end
-
- component = bucket.to_type
-
- # Create a client, but specify the remote machine as the server
- # because the class requires it, even though it's unused
- client = Puppet::Client::MasterClient.new(:Server => client||"localhost")
-
- # Set the objects
- client.objects = component
-
- # And then apply the configuration. This way we're reusing all
- # the code in there. It should probably just be separated out, though.
- transaction = client.apply
-
- # And then clean up
- component.remove
-
- # It'd be nice to return some kind of report, but... at this point
- # we have no such facility.
- return "success"
- end
-
- # Describe a given object. This returns the 'is' values for every property
- # available on the object type.
- def describe(type, name, retrieve = nil, ignore = [], format = "yaml", client = nil, clientip = nil)
- Puppet.info "Describing %s[%s]" % [type.to_s.capitalize, name]
- @local = true unless client
- typeklass = nil
- unless typeklass = Puppet.type(type)
- raise Puppet::Error, "Puppet type %s is unsupported" % type
- end
-
- obj = nil
-
- retrieve ||= :all
- ignore ||= []
-
- if obj = typeklass[name]
- obj[:check] = retrieve
- else
- begin
- obj = typeklass.create(:name => name, :check => retrieve)
- rescue Puppet::Error => detail
- raise Puppet::Error, "%s[%s] could not be created: %s" %
- [type, name, detail]
- end
- end
-
- unless obj
- raise XMLRPC::FaultException.new(
- 1, "Could not create %s[%s]" % [type, name]
- )
- end
-
- trans = obj.to_trans
-
- # Now get rid of any attributes they specifically don't want
- ignore.each do |st|
- if trans.include? st
- trans.delete(st)
- end
- end
-
- # And get rid of any attributes that are nil
- trans.each do |attr, value|
- if value.nil?
- trans.delete(attr)
- end
- end
-
- unless @local
- case format
- when "yaml":
- trans = Base64.encode64(YAML::dump(trans))
- else
- raise XMLRPC::FaultException.new(
- 1, "Unavailable config format %s" % format
- )
- end
- end
-
- return trans
- end
-
- # Create a new fileserving module.
- def initialize(hash = {})
- if hash[:Local]
- @local = hash[:Local]
- else
- @local = false
- end
- end
-
- # List all of the elements of a given type.
- def list(type, ignore = [], base = nil, format = "yaml", client = nil, clientip = nil)
- @local = true unless client
- typeklass = nil
- unless typeklass = Puppet.type(type)
- raise Puppet::Error, "Puppet type %s is unsupported" % type
- end
-
- # They can pass in false
- ignore ||= []
- ignore = [ignore] unless ignore.is_a? Array
- bucket = TransBucket.new
- bucket.type = typeklass.name
-
- typeklass.list.each do |obj|
- next if ignore.include? obj.name
-
- object = TransObject.new(obj.name, typeklass.name)
- bucket << object
- end
-
- unless @local
- case format
- when "yaml":
- begin
- bucket = Base64.encode64(YAML::dump(bucket))
- rescue => detail
- Puppet.err detail
- raise XMLRPC::FaultException.new(
- 1, detail.to_s
- )
- end
- else
- raise XMLRPC::FaultException.new(
- 1, "Unavailable config format %s" % format
- )
- end
- end
-
- return bucket
- end
-
- private
-
- def authcheck(file, mount, client, clientip)
- unless mount.allowed?(client, clientip)
- mount.warning "%s cannot access %s" %
- [client, file]
- raise Puppet::Server::AuthorizationError, "Cannot access %s" % mount
- end
- end
-
- # Deal with ignore parameters.
- def handleignore(children, path, ignore)
- ignore.each { |ignore|
- Dir.glob(File.join(path,ignore), File::FNM_DOTMATCH) { |match|
- children.delete(File.basename(match))
- }
- }
- return children
- end
-
- def to_s
- "resource"
- end
-end
-end
-
-# $Id$