#!/usr/bin/env python import os import requests import yaml import argparse from keystoneclient.v3.client import Client as keystone_auth def get_credentials(site_id): home = os.environ['HOME'] with open('{}/clouds.yaml'.format(home),'r') as stream: creds = yaml.safe_load(stream)['clouds'][site_id]['auth'] creds['version'] = '2' return creds def get_keystoneclient(creds): return keystone_auth(**creds) def get_auth_token(creds): keystone_client = get_keystoneclient(creds) return keystone_client.auth_token def get_servers(keystone,token): url = keystone.service_catalog.get_endpoints(service_name="nova",endpoint_type="public")['compute'][0]['url'] headers = {} headers['content-type'] = 'application/json' headers['x-auth-token'] = token request = "/servers" r = requests.get("{}/{}".format(url,request),headers=headers) servers = r.json()['servers'] for server in servers: print("id: {}".format(server['id'])) def get_cores(keystone,token): url = keystone.service_catalog.get_endpoints(service_name="placement",endpoint_type="public")['placement'][0]['url'] headers = {} headers['content-type'] = 'application/json' headers['x-auth-token'] = token request = "/resource_providers" r = requests.get("{}/{}".format(url,request),headers=headers) for res in r.json()['resource_providers']: uuid = res['uuid'] hostname = res['name'] request = "/resource_providers/{}/inventories".format(uuid) r = requests.get("{}/{}".format(url,request),headers=headers) inventory = r.json()['inventories'] cores=0 if 'VCPU' in inventory: cores+=inventory['VCPU']['total'] if 'PCPU' in inventory: cores+=inventory['PCPU']['total'] print("{}: {}".format(hostname,cores)) def get_networks(keystone,token): url = keystone.service_catalog.get_endpoints(service_name="neutron",endpoint_type="public")['network'][0]['url'] headers = {} headers['content-type'] = 'application/json' headers['x-auth-token'] = token data = {} request = "networks" r = requests.get("{}/v2.0/{}".format(url,request),headers=headers) networks = r.json()['networks'] for network in networks: print("id: {}".format(network['id'])) def _parse_args(): parser = argparse.ArgumentParser() parser.add_argument('-s', '--site', metavar="", help="Site to run against", dest="site_id", required=True) return parser.parse_args() def main(args): creds = get_credentials(args.site_id) keystone = get_keystoneclient(creds) token = keystone.auth_token get_servers(keystone,token) get_cores(keystone,token) get_networks(keystone,token) if __name__ == '__main__': main(_parse_args())