class Yao::Resources::Role

Public Class Methods

find_by_name(name, query={}) click to toggle source

override Yao::Resources::RestfullyAccessible#find_by_name This is workaround of keystone versioning v2.0/v3. @return [Array<Yao::Resources::Role>]

Calls superclass method
# File lib/yao/resources/role.rb, line 15
def find_by_name(name, query={})
  if api_version_v2?
    list.select{|r| r.name == name}
  else
    super
  end
end
grant(role_name, to:, on:) click to toggle source

@param role_name [String] @param to [String] @param on [String] @return [Faraday::Response]

# File lib/yao/resources/role.rb, line 53
def grant(role_name, to:, on:)
  role   = Yao::Role.get(role_name)
  user   = Yao::User.get(to)
  tenant = if api_version_v2?
             Yao::Tenant.get(on)
           else
             Yao::Project.get(on)
           end

  # response is "204 Not Content"
  PUT(path_for_role_resource(tenant, user, role))
end
list_for_user(user_name, on:) click to toggle source

@param user_name [String] @param on [String] @return [Array<Yao::Resources::Role>]

# File lib/yao/resources/role.rb, line 37
def list_for_user(user_name, on:)
  user   = Yao::User.get(user_name)
  tenant = if api_version_v2?
             Yao::Tenant.get(on)
           else
             Yao::Project.get(on)
           end

  res = GET(path_for_role_resource(tenant, user))
  resources_from_json(res.body)
end
resources_path() click to toggle source

override Yao::Resources::RestfullyAccessible#resources_path This is workaround of keystone versioning v2.0/v3. @return [String]

# File lib/yao/resources/role.rb, line 26
def resources_path
  if api_version_v2?
    "OS-KSADM/roles"
  else
    resources_name
  end
end
revoke(role_name, from:, on:) click to toggle source

@param role_name [String] @param from [String] @param on [String] @return [Faraday::Response]

# File lib/yao/resources/role.rb, line 70
def revoke(role_name, from:, on:)
  role   = Yao::Role.get(role_name)
  user   = Yao::User.get(from)
  tenant = if api_version_v2?
             Yao::Tenant.get(on)
           else
             Yao::Project.get(on)
           end

  # response is "204 Not Content"
  DELETE(path_for_role_resource(tenant, user, role))
end

Private Class Methods

api_version_v2?() click to toggle source

workaround of keystone versioning v2.0/v3 @return [Bool]

# File lib/yao/resources/role.rb, line 87
def api_version_v2?
  client.url_prefix.to_s =~ /v2\.0/
end
path_for_role_resource(tenant, user, role = nil) click to toggle source

@param tenant [String] @param user [String]

# File lib/yao/resources/role.rb, line 93
def path_for_role_resource(tenant, user, role = nil)
  if api_version_v2?
    paths = ["tenants", tenant.id, "users", user.id, "roles"]
    paths += ["OS-KSADM", role.id] if role
  else
    paths = ["projects", tenant.id, "users", user.id, "roles"]
    paths << role.id if role
  end
  paths.join("/")
end