]> git.donarmstrong.com Git - dsa-puppet.git/blobdiff - 3rdparty/modules/keystone/lib/puppet/provider/keystone.rb
try again, with puppetforge modules, correctly included now
[dsa-puppet.git] / 3rdparty / modules / keystone / lib / puppet / provider / keystone.rb
diff --git a/3rdparty/modules/keystone/lib/puppet/provider/keystone.rb b/3rdparty/modules/keystone/lib/puppet/provider/keystone.rb
new file mode 100644 (file)
index 0000000..b398a8e
--- /dev/null
@@ -0,0 +1,117 @@
+require 'puppet/util/inifile'
+require 'puppet/provider/openstack'
+class Puppet::Provider::Keystone < Puppet::Provider::Openstack
+
+  def request(service, action, object, credentials, *properties)
+    begin
+      super
+    rescue Puppet::Error::OpenstackAuthInputError => error
+      keystone_request(service, action, object, credentials, error, *properties)
+    end
+  end
+
+  def self.request(service, action, object, credentials, *properties)
+    begin
+      super
+    rescue Puppet::Error::OpenstackAuthInputError => error
+      keystone_request(service, action, object, credentials, error, *properties)
+    end
+  end
+
+  def keystone_request(service, action, object, credentials, error, *properties)
+    self.class.keystone_request(service, action, object, credentials, error, *properties)
+  end
+
+  def self.keystone_request(service, action, object, credentials, error, *properties)
+    credentials = {
+      'token'    => get_admin_token,
+      'auth_url' => get_admin_endpoint,
+    }
+    raise error unless (credentials['token'] && credentials['auth_url'])
+    auth_args = token_auth_args(credentials)
+    args = [object, properties, auth_args].flatten.compact
+    authenticate_request(service, action, args)
+  end
+
+  def self.admin_token
+    @admin_token ||= get_admin_token
+  end
+
+  def self.get_admin_token
+    if keystone_file and keystone_file['DEFAULT'] and keystone_file['DEFAULT']['admin_token']
+      return "#{keystone_file['DEFAULT']['admin_token'].strip}"
+    else
+      return nil
+    end
+  end
+
+  def self.admin_endpoint
+    @admin_endpoint ||= get_admin_endpoint
+  end
+
+  def get_admin_token
+    self.class.get_admin_token
+  end
+
+
+  def self.get_admin_endpoint
+    if keystone_file
+      if keystone_file['DEFAULT']
+        if keystone_file['DEFAULT']['admin_endpoint']
+          auth_url = keystone_file['DEFAULT']['admin_endpoint'].strip.chomp('/')
+          return "#{auth_url}/v2.0/"
+        end
+
+        if keystone_file['DEFAULT']['admin_port']
+          admin_port = keystone_file['DEFAULT']['admin_port'].strip
+        else
+          admin_port = '35357'
+        end
+
+        if keystone_file['DEFAULT']['admin_bind_host']
+          host = keystone_file['DEFAULT']['admin_bind_host'].strip
+          if host == "0.0.0.0"
+            host = "127.0.0.1"
+          elsif host == '::0'
+            host = '[::1]'
+          end
+        else
+          host = "127.0.0.1"
+        end
+      end
+
+      if keystone_file['ssl'] && keystone_file['ssl']['enable'] && keystone_file['ssl']['enable'].strip.downcase == 'true'
+        protocol = 'https'
+      else
+        protocol = 'http'
+      end
+    end
+
+    "#{protocol}://#{host}:#{admin_port}/v2.0/"
+  end
+
+  def get_admin_endpoint
+    self.class.get_admin_endpoint
+  end
+
+  def self.keystone_file
+    return @keystone_file if @keystone_file
+    @keystone_file = Puppet::Util::IniConfig::File.new
+    @keystone_file.read('/etc/keystone/keystone.conf')
+    @keystone_file
+  end
+
+  def keystone_file
+    self.class.keystone_file
+  end
+
+  # Helper functions to use on the pre-validated enabled field
+  def bool_to_sym(bool)
+    bool == true ? :true : :false
+  end
+
+  def sym_to_bool(sym)
+    sym == :true ? true : false
+  end
+
+end