summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lib/puppet/type/zone.rb17
-rwxr-xr-xspec/unit/type/zone_spec.rb20
2 files changed, 37 insertions, 0 deletions
diff --git a/lib/puppet/type/zone.rb b/lib/puppet/type/zone.rb
index fc524a541..c7c2aa143 100644
--- a/lib/puppet/type/zone.rb
+++ b/lib/puppet/type/zone.rb
@@ -413,6 +413,23 @@ Puppet::Type.newtype(:zone) do
end
end
+ # If Puppet is also managing the zfs filesystem which is the zone dataset
+ # then list it as a prerequisite. Zpool's get autorequired by the zfs
+ # type. We just need to autorequire the dataset zfs itself as the zfs type
+ # will autorequire all of the zfs parents and zpool.
+ autorequire(:zfs) do
+
+ # Check if we have datasets in our zone configuration
+ if @parameters.include? :dataset
+ reqs = []
+ # Autorequire each dataset
+ self[:dataset].each { |value|
+ reqs << value
+ }
+ reqs
+ end
+ end
+
def validate_ip(ip, name)
IPAddr.new(ip) if ip
rescue ArgumentError
diff --git a/spec/unit/type/zone_spec.rb b/spec/unit/type/zone_spec.rb
index 726ccc28d..a3e748bde 100755
--- a/spec/unit/type/zone_spec.rb
+++ b/spec/unit/type/zone_spec.rb
@@ -57,4 +57,24 @@ describe zone do
zone.new(:name => "dummy", :path => "/dummy", :ip => "if", :iptype => :exclusive)
end
+ it "should auto-require :dataset entries" do
+ fs = 'random-pool/some-zfs'
+
+ # ick
+ provider = stub 'zfs::provider'
+ provider.stubs(:name).returns(:solaris)
+ Puppet::Type.type(:zfs).stubs(:defaultprovider).returns(provider)
+
+ catalog = Puppet::Resource::Catalog.new
+ zfs_instance = Puppet::Type.type(:zfs).new(:name => fs)
+ catalog.add_resource zfs_instance
+
+ zone_instance = zone.new(:name => "dummy",
+ :path => "/foo",
+ :ip => 'en1:1.0.0.0',
+ :dataset => fs)
+ catalog.add_resource zone_instance
+
+ catalog.relationship_graph.dependencies(zone_instance).should == [zfs_instance]
+ end
end