]> git.donarmstrong.com Git - dsa-puppet.git/blobdiff - modules/rabbitmq/lib/puppet/provider/rabbitmq_policy/rabbitmqctl.rb
add rabbitmq module
[dsa-puppet.git] / modules / rabbitmq / lib / puppet / provider / rabbitmq_policy / rabbitmqctl.rb
diff --git a/modules/rabbitmq/lib/puppet/provider/rabbitmq_policy/rabbitmqctl.rb b/modules/rabbitmq/lib/puppet/provider/rabbitmq_policy/rabbitmqctl.rb
new file mode 100644 (file)
index 0000000..8e12510
--- /dev/null
@@ -0,0 +1,39 @@
+require 'puppet'
+Puppet::Type.type(:rabbitmq_policy).provide(:rabbitmqctl) do
+
+  commands :rabbitmqctl => 'rabbitmqctl'
+  defaultfor :feature => :posix
+
+  def should_vhost
+    if @should_vhost
+      @should_vhost
+    else
+      @should_vhost = resource[:vhost]
+    end
+  end
+
+  def self.instances
+    rabbitmqctl('list_policies', '-p', should_vhost).split(/\n/)[1..-2].detect do |line|
+      if line =~ /^(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+.*$/
+       new(:name => $2, :vhost => $1, :match => $3, :policy => $4)
+      else
+        raise Puppet::Error, "Cannot parse invalid user line: #{line}"
+      end
+    end
+  end
+
+  def create
+    rabbitmqctl('set_policy', '-p', should_vhost, resource[:name], resource[:match], resource[:policy])
+  end
+
+  def destroy
+    rabbitmqctl('clear_policy', '-p', should_vhost, resource[:name])
+  end
+
+  def exists?
+    out = rabbitmqctl('list_policies', '-p', should_vhost).split(/\n/)[1..-2].detect do |line|
+      line.match(/^\S+\s+#{resource[:name]}\s+\S+.*$/)
+    end
+  end
+
+end