diff options
Diffstat (limited to 'lib/puppet')
-rw-r--r-- | lib/puppet/pgraph.rb | 9 | ||||
-rw-r--r-- | lib/puppet/transaction.rb | 12 | ||||
-rw-r--r-- | lib/puppet/type.rb | 2 |
3 files changed, 19 insertions, 4 deletions
diff --git a/lib/puppet/pgraph.rb b/lib/puppet/pgraph.rb index a8ff952ed..e7247418c 100644 --- a/lib/puppet/pgraph.rb +++ b/lib/puppet/pgraph.rb @@ -20,10 +20,15 @@ class Puppet::PGraph < GRATR::Digraph @edge_number.clear end end + + # Which resources a given resource depends upon. + def dependents(resource) + tree_from_vertex(resource, :dfs).keys + end - # The dependencies for a given resource. + # The which resources depend upon the given resource. def dependencies(resource) - tree_from_vertex(resource, :dfs).keys + reversal.tree_from_vertex(resource, :dfs).keys end # Override this method to use our class instead. diff --git a/lib/puppet/transaction.rb b/lib/puppet/transaction.rb index 99b03b435..67d016c15 100644 --- a/lib/puppet/transaction.rb +++ b/lib/puppet/transaction.rb @@ -44,6 +44,16 @@ class Transaction # And then return return [] end + + # If a resource is going to be deleted but it still has dependencies, then + # don't delete it unless it's implicit. + if ! resource.implicit? and deps = @relgraph.dependents(resource) and ! deps.empty? and changes.detect { |change| + change.state.name == :ensure and change.should == :absent + } + resource.warning "%s still depend%s on me -- not deleting" % + [deps.collect { |r| r.ref }.join(","), if deps.length > 1; ""; else "s"; end] + return [] + end unless changes.is_a? Array changes = [changes] @@ -237,7 +247,7 @@ class Transaction # enough to check the immediate dependencies, which is why we use # a tree from the reversed graph. skip = false - @relgraph.reversal.tree_from_vertex(resource, :dfs).keys.each do |dep| + @relgraph.dependencies(resource).each do |dep| if fails = failed?(dep) resource.notice "Dependency %s[%s] has %s failures" % [dep.class.name, dep.name, @failures[dep]] diff --git a/lib/puppet/type.rb b/lib/puppet/type.rb index 2c99e3343..e55f9f5ae 100644 --- a/lib/puppet/type.rb +++ b/lib/puppet/type.rb @@ -334,7 +334,7 @@ class Type < Puppet::Element # Return the "type[name]" style reference. def ref - "%s[%s]" % [self.class.name, self.title] + "%s[%s]" % [self.class.name.to_s.capitalize, self.title] end # Retrieve the title of an object. If no title was set separately, |