]> git.donarmstrong.com Git - dsa-puppet.git/blobdiff - 3rdparty/modules/aviator/lib/puppet/feature/aviator/openstack/identity/requests/v3/public/create_token.rb
try again, with puppetforge modules, correctly included now
[dsa-puppet.git] / 3rdparty / modules / aviator / lib / puppet / feature / aviator / openstack / identity / requests / v3 / public / create_token.rb
diff --git a/3rdparty/modules/aviator/lib/puppet/feature/aviator/openstack/identity/requests/v3/public/create_token.rb b/3rdparty/modules/aviator/lib/puppet/feature/aviator/openstack/identity/requests/v3/public/create_token.rb
new file mode 100644 (file)
index 0000000..17d8bb0
--- /dev/null
@@ -0,0 +1,125 @@
+module Aviator
+  # Original work by Stephen Paul Suarez
+  # https://github.com/musashi-dev/aviator/blob/develop/lib/aviator/openstack/identity/v3/public/create_token.rb
+
+  define_request :create_token, :inherit => [:openstack, :common, :v3, :public, :base] do
+
+    meta :anonymous,   true
+    meta :service,     :identity
+    meta :api_version, :v3
+
+    link 'documentation',
+         'http://api.openstack.org/api-ref-identity-v3.html#Token_Calls'
+
+    param :domainId,   :required => false, :alias => :domain_id
+    param :domainName, :required => false, :alias => :domain_name
+    param :password,   :required => false
+    param :tenantId,   :required => false, :alias => :tenant_id
+    param :tenantName, :required => false, :alias => :tenant_name
+    param :tokenId,    :required => false, :alias => :token_id
+    param :userId,     :required => false, :alias => :user_id
+    param :username,   :required => false
+
+
+    def body
+      params[:token_id] ? token_auth_body : password_auth_body
+    end
+
+
+    def http_method
+      :post
+    end
+
+
+    def url
+      url  = session_data[:auth_service][:host_uri]
+      url += '/v3' if (URI(url).path =~ /^\/?\w+/).nil?
+      url += "/auth/tokens"
+    end
+
+
+    private
+
+    # Removes nil elements from hash
+    # Adapted from http://stackoverflow.com/a/14773555/402145
+    def compact_hash(hash, opts = {})
+      opts[:recurse] ||= true
+      hash.inject({}) do |new_hash, (k,v)|
+        if !v.nil?
+          new_hash[k] = opts[:recurse] && v.kind_of?(Hash) ? compact_hash(v, opts) : v
+        end
+        new_hash
+      end
+    end
+
+
+    def domain_hash
+      compact_hash({
+        :id   => params[:domain_id],
+        :name => params[:domain_name]
+      })
+    end
+
+
+    def password_auth_body
+      p = {
+        :auth => {
+          :identity => {
+            :methods  => ['password'],
+            :password => {
+              :user => compact_hash({
+                         :id       => params[:user_id],
+                         :name     => params[:username],
+                         :password => params[:password]
+                       })
+            }
+          }
+        }
+      }
+
+      if params[:domain_name] || params[:domain_id]
+        p[:auth][:identity][:password][:user][:domain] = domain_hash
+      end
+
+      if params[:tenant_name] || params[:tenant_id] || params[:domain_name] || params[:domain_id]
+        p[:auth][:scope] = scope_hash
+      end
+      p
+    end
+
+
+    def scope_hash
+      p = {}
+
+      if params[:tenant_name] || params[:tenant_id]
+        p[:project] = compact_hash({
+                        :id   => params[:tenant_id],
+                        :name => params[:tenant_name]
+                      })
+        p[:project][:domain] = domain_hash if params[:domain_name] || params[:domain_id]
+
+      elsif params[:domain_name] || params[:domain_id]
+        p[:domain] = domain_hash
+      end
+
+      p
+    end
+
+
+    def token_auth_body
+      p = {
+        :auth => {
+          :identity => {
+            :methods => ['token'],
+            :token   => { :id => params[:token_id] }
+          }
+        }
+      }
+      p[:auth][:scope] = scope_hash if params[:tenant_name] || params[:tenant_id]
+      p
+    end
+
+
+  end
+
+end