summaryrefslogtreecommitdiffstats
path: root/lib/puppet
diff options
context:
space:
mode:
Diffstat (limited to 'lib/puppet')
-rw-r--r--lib/puppet/pgraph.rb4
-rw-r--r--lib/puppet/type/resources.rb68
2 files changed, 70 insertions, 2 deletions
diff --git a/lib/puppet/pgraph.rb b/lib/puppet/pgraph.rb
index d988ff36a..a8ff952ed 100644
--- a/lib/puppet/pgraph.rb
+++ b/lib/puppet/pgraph.rb
@@ -111,9 +111,9 @@ class Puppet::PGraph < GRATR::Digraph
# For some reason, unconnected vertices do not show up in
# this graph.
- def to_jpg(name)
+ def to_jpg(path, name)
gv = vertices()
- Dir.chdir("/Users/luke/Desktop/pics") do
+ Dir.chdir(path) do
induced_subgraph(gv).write_to_graphic_file('jpg', name)
end
end
diff --git a/lib/puppet/type/resources.rb b/lib/puppet/type/resources.rb
new file mode 100644
index 000000000..7e81a08b3
--- /dev/null
+++ b/lib/puppet/type/resources.rb
@@ -0,0 +1,68 @@
+# Created by Luke Kanies on 2006-12-12.
+# Copyright (c) 2006. All rights reserved.
+
+require 'puppet'
+
+Puppet::Type.newtype(:resources) do
+ @doc = "This is a metatype that can manage other resource types. Any
+ metaparams specified here will be passed on to any generated resources,
+ so you can purge umanaged resources but set ``noop`` to true so the
+ purging is only logged and does not actually happen."
+
+
+ newparam(:name) do
+ desc "The name of the type to be managed."
+
+ validate do |name|
+ unless Puppet::Type.type(name)
+ raise ArgumentError, "Could not find resource type '%s'" % name
+ end
+ end
+ end
+
+ newparam(:purge, :boolean => true) do
+ desc "Purge unmanaged resources. This will delete any resource
+ that is not specified in your configuration
+ and is not required by any specified resources."
+
+ newvalues(:true, :false)
+
+ validate do |value|
+ if [:true, true, "true"].include?(value)
+ unless @parent.resource_type.respond_to?(:list)
+ raise ArgumentError, "Purging resources of type %s is not supported" % @parent[:name]
+ end
+ unless @parent.resource_type.validstate?(:ensure)
+ raise ArgumentError, "Purging is only supported on types that accept 'ensure'"
+ end
+ end
+ end
+ end
+
+ # Generate any new resources we need to manage.
+ def generate
+ resource_type.list.find_all do |resource|
+ ! resource.managed?
+ end.each do |resource|
+ begin
+ resource[:ensure] = :absent
+ rescue ArgumentError, Parse::Error => detail
+ err "The 'ensure' attribute on %s resources does not accept 'absent' as a value" %
+ [self[:name]]
+ return []
+ end
+ end
+ end
+
+ def resource_type
+ unless defined? @resource_type
+ unless type = Puppet::Type.type(self[:name])
+ raise Puppet::DevError, "Could not find resource type"
+ end
+ @resource_type = type
+ end
+ @resource_type
+ end
+end
+
+# $Id$ \ No newline at end of file