]> git.donarmstrong.com Git - dsa-puppet.git/blobdiff - 3rdparty/modules/keystone/lib/puppet/provider/keystone_tenant/openstack.rb
add stackforge/keystone to 3rdparty
[dsa-puppet.git] / 3rdparty / modules / keystone / lib / puppet / provider / keystone_tenant / openstack.rb
diff --git a/3rdparty/modules/keystone/lib/puppet/provider/keystone_tenant/openstack.rb b/3rdparty/modules/keystone/lib/puppet/provider/keystone_tenant/openstack.rb
new file mode 100644 (file)
index 0000000..7d19fce
--- /dev/null
@@ -0,0 +1,100 @@
+require 'puppet/provider/keystone'
+
+Puppet::Type.type(:keystone_tenant).provide(
+  :openstack,
+  :parent => Puppet::Provider::Keystone
+) do
+
+  desc "Provider to manage keystone tenants/projects."
+
+  def initialize(value={})
+    super(value)
+    @property_flush = {}
+  end
+
+  def create
+    properties = []
+    if resource[:enabled] == :true
+      properties << '--enable'
+    elsif resource[:enabled] == :false
+      properties << '--disable'
+    end
+    if resource[:description]
+      properties << '--description'
+      properties << resource[:description]
+    end
+    @instance = request('project', 'create', resource[:name], resource[:auth], properties)
+  end
+
+  def exists?
+    ! instance(resource[:name]).empty?
+  end
+
+  def destroy
+    request('project', 'delete', resource[:name], resource[:auth])
+  end
+
+
+  def enabled=(value)
+    @property_flush[:enabled] = value
+  end
+
+  def enabled
+    bool_to_sym(instance(resource[:name])[:enabled])
+  end
+
+
+  def description=(value)
+    @property_flush[:description] = value
+  end
+
+  def description
+    instance(resource[:name])[:description]
+  end
+
+
+  def id
+    instance(resource[:name])[:id]
+  end
+
+  def self.instances
+    list = request('project', 'list', nil, nil, '--long')
+    list.collect do |project|
+      new(
+        :name        => project[:name],
+        :ensure      => :present,
+        :enabled     => project[:enabled].downcase.chomp == 'true' ? true : false,
+        :description => project[:description],
+        :id          => project[:id]
+      )
+    end
+  end
+
+  def instances
+    instances = request('project', 'list', nil, resource[:auth], '--long')
+    instances.collect do |project|
+      {
+        :name        => project[:name],
+        :enabled     => project[:enabled].downcase.chomp == 'true' ? true : false,
+        :description => project[:description],
+        :id          => project[:id]
+      }
+    end
+  end
+
+  def instance(name)
+    @instance ||= instances.select { |instance| instance[:name] == name }.first || {}
+  end
+
+  def flush
+    options = []
+    if @property_flush
+      (options << '--enable') if @property_flush[:enabled] == :true
+      (options << '--disable') if @property_flush[:enabled] == :false
+      # There is a --description flag for the set command, but it does not work if the value is empty
+      (options << '--property' << "description=#{resource[:description]}") if @property_flush[:description]
+      request('project', 'set', resource[:name], resource[:auth], options) unless options.empty?
+    end
+  end
+
+end