]> git.donarmstrong.com Git - dsa-puppet.git/blobdiff - 3rdparty/modules/keystone/lib/puppet/provider/keystone.rb
Update to Kilo
[dsa-puppet.git] / 3rdparty / modules / keystone / lib / puppet / provider / keystone.rb
index 4e7815abf75f3c595201620fb3affc219740541c..849868bcb4c00772379813147044a0c977d0853a 100644 (file)
@@ -2,6 +2,7 @@ require 'puppet/util/inifile'
 require 'puppet/provider/openstack'
 require 'puppet/provider/openstack/auth'
 require 'puppet/provider/openstack/credentials'
+require 'puppet/provider/keystone/util'
 
 class Puppet::Provider::Keystone < Puppet::Provider::Openstack
 
@@ -30,6 +31,31 @@ class Puppet::Provider::Keystone < Puppet::Provider::Openstack
     @admin_endpoint ||= get_admin_endpoint
   end
 
+  # use the domain in this order:
+  # 1 - the domain name specified in the resource definition - resource[:domain]
+  # 2 - the domain name part of the resource name/title e.g. user_name::user_domain
+  #     if passed in by name_and_domain above
+  # 3 - use the specified default_domain_name
+  # 4 - lookup the default domain
+  # 5 - use 'Default' - the "default" default domain if no other one is configured
+  # Usage: name_and_domain(resource[:name], resource[:domain], default_domain_name)
+  def self.name_and_domain(namedomstr, domain_from_resource=nil, default_domain_name=nil)
+    name, domain = Util.split_domain(namedomstr)
+    ret = [name]
+    if domain_from_resource
+      ret << domain_from_resource
+    elsif domain
+      ret << domain
+    elsif default_domain_name
+      ret << default_domain_name
+    elsif default_domain
+      ret << default_domain
+    else
+      ret << 'Default'
+    end
+    ret
+  end
+
   def self.admin_token
     @admin_token ||= get_admin_token
   end
@@ -80,8 +106,8 @@ class Puppet::Provider::Keystone < Puppet::Provider::Openstack
 
   def self.request(service, action, properties=nil)
     super
-    rescue Puppet::Error::OpenstackAuthInputError => error
-      request_by_service_token(service, action, error, properties)
+  rescue Puppet::Error::OpenstackAuthInputError => error
+    request_by_service_token(service, action, error, properties)
   end
 
   def self.request_by_service_token(service, action, error, properties=nil)
@@ -96,6 +122,31 @@ class Puppet::Provider::Keystone < Puppet::Provider::Openstack
     INI_FILENAME
   end
 
+  def self.default_domain
+    domain_hash[default_domain_id]
+  end
+
+  def self.domain_hash
+    return @domain_hash if @domain_hash
+    list = request('domain', 'list')
+    @domain_hash = Hash[list.collect{|domain| [domain[:id], domain[:name]]}]
+    @domain_hash
+  end
+
+  def self.domain_name_from_id(id)
+    domain_hash[id]
+  end
+
+  def self.default_domain_id
+    return @default_domain_id if @default_domain_id
+    if keystone_file and keystone_file['identity'] and keystone_file['identity']['default_domain_id']
+      @default_domain_id = "#{keystone_file['identity']['default_domain_id'].strip}"
+    else
+      @default_domain_id = 'default'
+    end
+    @default_domain_id
+  end
+
   def self.keystone_file
     return @keystone_file if @keystone_file
     if File.exists?(ini_filename)