]> git.donarmstrong.com Git - dsa-puppet.git/blobdiff - modules/rabbitmq/lib/puppet/provider/rabbitmq_user/rabbitmqctl.rb
add rabbitmq module
[dsa-puppet.git] / modules / rabbitmq / lib / puppet / provider / rabbitmq_user / rabbitmqctl.rb
diff --git a/modules/rabbitmq/lib/puppet/provider/rabbitmq_user/rabbitmqctl.rb b/modules/rabbitmq/lib/puppet/provider/rabbitmq_user/rabbitmqctl.rb
new file mode 100644 (file)
index 0000000..fde194c
--- /dev/null
@@ -0,0 +1,59 @@
+require 'puppet'
+Puppet::Type.type(:rabbitmq_user).provide(:rabbitmqctl) do
+
+  commands :rabbitmqctl => 'rabbitmqctl'
+  defaultfor :feature => :posix
+
+  def self.instances
+    rabbitmqctl('list_users').split(/\n/)[1..-2].collect do |line|
+      if line =~ /^(\S+)(\s+\S+|)$/
+        new(:name => $1)
+      else
+        raise Puppet::Error, "Cannot parse invalid user line: #{line}"
+      end
+    end
+  end
+
+  def create
+    rabbitmqctl('add_user', resource[:name], resource[:password])
+    if resource[:admin] == :true
+      make_user_admin()
+    end
+  end
+
+  def destroy
+    rabbitmqctl('delete_user', resource[:name])
+  end
+
+  def exists?
+    out = rabbitmqctl('list_users').split(/\n/)[1..-2].detect do |line|
+      line.match(/^#{resource[:name]}(\s+\S+|)$/)
+    end
+  end
+
+  # def password
+  # def password=()
+  def admin
+    match = rabbitmqctl('list_users').split(/\n/)[1..-2].collect do |line|
+      line.match(/^#{resource[:name]}\s+\[(administrator)?\]/)
+    end.compact.first
+    if match
+      (:true if match[1].to_s == 'administrator') || :false
+    else
+      raise Puppet::Error, "Could not match line '#{resource[:name]} (true|false)' from list_users (perhaps you are running on an older version of rabbitmq that does not support admin users?)"
+    end
+  end
+
+  def admin=(state)
+    if state == :true
+      make_user_admin()
+    else
+      rabbitmqctl('set_user_tags', resource[:name])
+    end
+  end
+
+  def make_user_admin
+    rabbitmqctl('set_user_tags', resource[:name], 'administrator')
+  end
+
+end