summaryrefslogtreecommitdiffstats
path: root/lib/puppet/provider/zfs/solaris.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/puppet/provider/zfs/solaris.rb')
-rw-r--r--lib/puppet/provider/zfs/solaris.rb56
1 files changed, 56 insertions, 0 deletions
diff --git a/lib/puppet/provider/zfs/solaris.rb b/lib/puppet/provider/zfs/solaris.rb
new file mode 100644
index 000000000..4d382cfad
--- /dev/null
+++ b/lib/puppet/provider/zfs/solaris.rb
@@ -0,0 +1,56 @@
+Puppet::Type.type(:zfs).provide(:solaris) do
+ desc "Provider for Solaris zfs."
+
+ commands :zfs => "/usr/sbin/zfs"
+ defaultfor :operatingsystem => :solaris
+
+ def add_properties
+ properties = []
+ Puppet::Type.type(:zfs).validproperties.each do |property|
+ next if property == :ensure
+ if value = @resource[property] and value != ""
+ properties << "-o" << "#{property}=#{value}"
+ end
+ end
+ properties
+ end
+
+ def arrayify_second_line_on_whitespace(text)
+ if second_line = text.split("\n")[1]
+ second_line.split("\s")
+ else
+ []
+ end
+ end
+
+ def create
+ zfs *([:create] + add_properties + [@resource[:name]])
+ end
+
+ def delete
+ zfs(:destroy, @resource[:name])
+ end
+
+ def exists?
+ if zfs(:list).split("\n").detect { |line| line.split("\s")[0] == @resource[:name] }
+ true
+ else
+ false
+ end
+ end
+
+ [:mountpoint, :compression, :copies, :quota, :reservation, :sharenfs, :snapdir].each do |field|
+ define_method(field) do
+ #special knowledge of format
+ #the command returns values in this format with the header
+ #NAME PROPERTY VALUE SOURCE
+ arrayify_second_line_on_whitespace(zfs(:get, field, @resource[:name]))[2]
+ end
+
+ define_method(field.to_s + "=") do |should|
+ zfs(:set, "#{field}=#{should}", @resource[:name])
+ end
+ end
+
+end
+