summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lib/puppet/indirector/catalog/compiler.rb2
-rw-r--r--lib/puppet/parser/resource.rb1
-rw-r--r--lib/puppet/resource.rb8
-rw-r--r--lib/puppet/resource/catalog.rb7
-rw-r--r--lib/puppet/transaction.rb4
-rw-r--r--lib/puppet/type.rb11
-rwxr-xr-xspec/integration/indirector/catalog/compiler.rb2
-rwxr-xr-xspec/unit/indirector/catalog/compiler.rb4
-rwxr-xr-xspec/unit/parser/resource.rb5
-rwxr-xr-xspec/unit/resource/catalog.rb11
-rwxr-xr-xspec/unit/transaction.rb4
-rwxr-xr-xspec/unit/type.rb6
12 files changed, 46 insertions, 19 deletions
diff --git a/lib/puppet/indirector/catalog/compiler.rb b/lib/puppet/indirector/catalog/compiler.rb
index 12da4de32..4f6b0602a 100644
--- a/lib/puppet/indirector/catalog/compiler.rb
+++ b/lib/puppet/indirector/catalog/compiler.rb
@@ -43,7 +43,7 @@ class Puppet::Resource::Catalog::Compiler < Puppet::Indirector::Code
# filter-out a catalog to remove exported resources
def filter(catalog)
- return catalog.filter { |r| r.exported? } if catalog.respond_to?(:filter)
+ return catalog.filter { |r| r.virtual? } if catalog.respond_to?(:filter)
catalog
end
diff --git a/lib/puppet/parser/resource.rb b/lib/puppet/parser/resource.rb
index 6632d2bba..7218ac0c0 100644
--- a/lib/puppet/parser/resource.rb
+++ b/lib/puppet/parser/resource.rb
@@ -268,6 +268,7 @@ class Puppet::Parser::Resource
result.file = self.file
result.line = self.line
result.exported = self.exported
+ result.virtual = self.virtual
result.tag(*self.tags)
return result
diff --git a/lib/puppet/resource.rb b/lib/puppet/resource.rb
index 0de089cd7..134076580 100644
--- a/lib/puppet/resource.rb
+++ b/lib/puppet/resource.rb
@@ -9,7 +9,7 @@ class Puppet::Resource
include Puppet::Util::Tagging
extend Puppet::Util::Json
include Enumerable
- attr_accessor :file, :line, :catalog, :exported
+ attr_accessor :file, :line, :catalog, :exported, :virtual
attr_writer :type, :title
ATTRIBUTES = [:file, :line, :exported]
@@ -106,8 +106,10 @@ class Puppet::Resource
@parameters.each { |p,v| yield p, v }
end
- def exported?
- exported
+ %w{exported virtual}.each do |m|
+ define_method(m+"?") do
+ self.send(m)
+ end
end
# Create our resource.
diff --git a/lib/puppet/resource/catalog.rb b/lib/puppet/resource/catalog.rb
index bb82906f3..6ccfe73ad 100644
--- a/lib/puppet/resource/catalog.rb
+++ b/lib/puppet/resource/catalog.rb
@@ -576,8 +576,11 @@ class Puppet::Resource::Catalog < Puppet::SimpleGraph
message = convert.to_s.gsub "_", " "
edges.each do |edge|
# Skip edges between virtual resources.
- next if edge.source.respond_to?(:virtual?) and edge.source.virtual?
- next if edge.target.respond_to?(:virtual?) and edge.target.virtual?
+ next if virtual_not_exported?(edge.source)
+ next if block_given? and yield edge.source
+
+ next if virtual_not_exported?(edge.target)
+ next if block_given? and yield edge.target
unless source = map[edge.source.ref]
raise Puppet::DevError, "Could not find resource %s when converting %s resources" % [edge.source.ref, message]
diff --git a/lib/puppet/transaction.rb b/lib/puppet/transaction.rb
index f57eda6c9..d04856d39 100644
--- a/lib/puppet/transaction.rb
+++ b/lib/puppet/transaction.rb
@@ -590,8 +590,8 @@ class Transaction
resource.debug "Not scheduled"
elsif failed_dependencies?(resource)
resource.warning "Skipping because of failed dependencies"
- elsif resource.exported?
- resource.debug "Skipping because exported"
+ elsif resource.virtual?
+ resource.debug "Skipping because virtual"
else
return false
end
diff --git a/lib/puppet/type.rb b/lib/puppet/type.rb
index 33b4e92da..ee87c2680 100644
--- a/lib/puppet/type.rb
+++ b/lib/puppet/type.rb
@@ -1855,6 +1855,9 @@ class Type
# is the resource exported
attr_accessor :exported
+ # is the resource virtual (it should not :-))
+ attr_accessor :virtual
+
# create a log at specified level
def log(msg)
Puppet::Util::Log.create(
@@ -1888,7 +1891,7 @@ class Type
self.title = resource.ref
end
- [:file, :line, :catalog, :exported].each do |getter|
+ [:file, :line, :catalog, :exported, :virtual].each do |getter|
setter = getter.to_s + "="
if val = resource.send(getter)
self.send(setter, val)
@@ -2069,8 +2072,10 @@ class Type
return trans
end
- def exported?
- exported
+ %w{exported virtual}.each do |m|
+ define_method(m+"?") do
+ self.send(m)
+ end
end
end # Puppet::Type
diff --git a/spec/integration/indirector/catalog/compiler.rb b/spec/integration/indirector/catalog/compiler.rb
index f3ace8d1b..211b7c237 100755
--- a/spec/integration/indirector/catalog/compiler.rb
+++ b/spec/integration/indirector/catalog/compiler.rb
@@ -11,7 +11,7 @@ describe Puppet::Resource::Catalog::Compiler do
@catalog = Puppet::Resource::Catalog.new
@one = Puppet::Resource.new(:file, "/one")
- @one.exported = true
+ @one.virtual = true
@two = Puppet::Resource.new(:file, "/two")
@catalog.add_resource(@one, @two)
diff --git a/spec/unit/indirector/catalog/compiler.rb b/spec/unit/indirector/catalog/compiler.rb
index 78a8028a8..7f0942221 100755
--- a/spec/unit/indirector/catalog/compiler.rb
+++ b/spec/unit/indirector/catalog/compiler.rb
@@ -236,8 +236,8 @@ describe Puppet::Resource::Catalog::Compiler do
@compiler.filter(@catalog)
end
- it "should filter out exported resources" do
- resource = mock 'resource', :exported? => true
+ it "should filter out virtual resources" do
+ resource = mock 'resource', :virtual? => true
@catalog.stubs(:filter).yields(resource)
@compiler.filter(@catalog)
diff --git a/spec/unit/parser/resource.rb b/spec/unit/parser/resource.rb
index 8005e204c..9eb8b13d9 100755
--- a/spec/unit/parser/resource.rb
+++ b/spec/unit/parser/resource.rb
@@ -419,6 +419,11 @@ describe Puppet::Parser::Resource do
@parser_resource.to_resource.exported.should be_true
end
+ it "should copy over the 'virtual' value" do
+ @parser_resource.virtual = true
+ @parser_resource.to_resource.virtual.should be_true
+ end
+
it "should convert any parser resource references to Puppet::Resource::Reference instances" do
ref = Puppet::Parser::Resource::Reference.new(:title => "/my/file", :type => "file")
@parser_resource = mkresource :source => @source, :params => {:foo => "bar", :fee => ref}
diff --git a/spec/unit/resource/catalog.rb b/spec/unit/resource/catalog.rb
index 97b6ad7cc..af399aa0f 100755
--- a/spec/unit/resource/catalog.rb
+++ b/spec/unit/resource/catalog.rb
@@ -323,9 +323,9 @@ describe Puppet::Resource::Catalog, "when compiling" do
end
it "should scan each catalog resource in turn and apply filtering block" do
- @resources.each { |r| r.expects(:exported?) }
+ @resources.each { |r| r.expects(:test?) }
@original.filter do |r|
- r.exported?
+ r.test?
end
end
@@ -334,6 +334,13 @@ describe Puppet::Resource::Catalog, "when compiling" do
r == @r1
end.resource("File[/a]").should be_nil
end
+
+ it "should not consider edges against resources that were filtered out" do
+ @original.add_edge(@r1,@r2)
+ @original.filter do |r|
+ r == @r1
+ end.edge(@r1,@r2).should be_empty
+ end
end
describe "when functioning as a resource container" do
diff --git a/spec/unit/transaction.rb b/spec/unit/transaction.rb
index 0e3674775..7966c7a65 100755
--- a/spec/unit/transaction.rb
+++ b/spec/unit/transaction.rb
@@ -75,8 +75,8 @@ describe Puppet::Transaction do
@transaction.skip?(@resource).should be_true
end
- it "should skip exported resource" do
- @resource.stubs(:exported?).returns true
+ it "should skip virtual resource" do
+ @resource.stubs(:virtual?).returns true
@transaction.skip?(@resource).should be_true
end
end
diff --git a/spec/unit/type.rb b/spec/unit/type.rb
index b179677f9..fe2788ec6 100755
--- a/spec/unit/type.rb
+++ b/spec/unit/type.rb
@@ -72,6 +72,10 @@ describe Puppet::Type do
Puppet::Type.type(:mount).new(:name => "foo").should respond_to(:exported?)
end
+ it "should have a method to know if the resource is virtual" do
+ Puppet::Type.type(:mount).new(:name => "foo").should respond_to(:virtual?)
+ end
+
it "should consider its version to be its catalog version" do
resource = Puppet::Type.type(:mount).new(:name => "foo")
catalog = Puppet::Resource::Catalog.new
@@ -121,7 +125,7 @@ describe Puppet::Type do
Puppet::Type.type(:mount).new(resource).title.should == "User[foo]"
end
- [:line, :file, :catalog, :exported].each do |param|
+ [:line, :file, :catalog, :exported, :virtual].each do |param|
it "should copy '#{param}' from the resource if present" do
resource = Puppet::Resource.new(:mount, "/foo")
resource.send(param.to_s + "=", "foo")