Skip to content

Instantly share code, notes, and snippets.

@slivik
Created April 20, 2020 11:30
Show Gist options
  • Select an option

  • Save slivik/0bea6eaf09e361e91f037ac22f212186 to your computer and use it in GitHub Desktop.

Select an option

Save slivik/0bea6eaf09e361e91f037ac22f212186 to your computer and use it in GitHub Desktop.
Get Openstack quotas (Manage IQ provider)
class OSTquotas
require 'rest-client'
require 'json'
def initialize(project, provider_name="PROVIDER_NAME", provider_url="PROVIDER_URL", admin_project_id="ADMIN_PROJECT_ID")
@provider_name=provider_name
@provider_url=provider_url
@admin_project_id=admin_project_id
@project = project
@std_headers = {content_type: :json, accept: :json}
@quota_services = ['compute', 'volumev3', 'network']
login
end
def call_rest(url, method, body_hash='', headers={})
response = RestClient::Request.new(
:method => method,
:url => url,
:headers => @std_headers.update(headers),
:payload => body_hash,
:verify_ssl => false
).execute
#results = JSON.parse(response.to_str)
#results = response
end
def login
provider = $evm.vmdb(:ManageIQ_Providers_Openstack_CloudManager).find_by(:name => @provider_name)
username = provider.authentication_userid
password = provider.authentication_password
auth_body = {auth: {identity: {methods: ["password"], password: { user: {name: username, domain: { "id": "default" }, password: password}}}}}.to_json
resp = call_rest("#{@provider_url}/v3/auth/tokens", :post, auth_body)
token = resp.headers[:x_subject_token]
@std_headers.update('X-Auth-Token': token)
end
def get_quota_services
qsvcs = {'compute' => {}, 'volumev3' => {}, 'network' => {}}
endpoints = JSON.parse(call_rest("#{@provider_url}/v3/endpoints", :get).body)['endpoints']
services = JSON.parse(call_rest("#{@provider_url}/v3/services", :get).body)['services']
merged_services = endpoints.each {|ep| ep.update(services.find {|svc| ep['service_id'] == svc['id']})}
@quota_services.each {|svc| qsvcs[svc] = merged_services.find {|ms| ms['type'] == svc}}
return qsvcs
end
def get
svcs = get_quota_services
quotas = {}
url = svcs['compute']['url'].gsub(/\%\(tenant_id\)s/, @admin_project_id)
v = JSON.parse(call_rest("#{url}/os-quota-sets/#{@project}/detail", :get).body)
quotas.update(v['quota_set'])
url = svcs['volumev3']['url'].gsub(/\%\(tenant_id\)s/, @admin_project_id)
v = JSON.parse(call_rest("#{url}/os-quota-sets/#{@project}?usage=True", :get).body)
quotas.update(v['quota_set'])
url = svcs['network']['url'].gsub(/\%\(tenant_id\)s/, @admin_project_id)
v = JSON.parse(call_rest("#{url}/v2.0/quotas/#{@project}/details.json", :get).body)
quotas.update(v['quota'])
end
end
quotas = OSTquotas.new('PROJECT_ID')
p quotas.get
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment