-
Notifications
You must be signed in to change notification settings - Fork 32
Expand file tree
/
Copy pathopenstack-discovery
More file actions
executable file
·84 lines (68 loc) · 2.79 KB
/
openstack-discovery
File metadata and controls
executable file
·84 lines (68 loc) · 2.79 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
#!/usr/bin/env python
from sys import exit
from sys import argv
from sys import stderr
import json
from datetime import datetime
from urlparse import urlparse
try:
from keystoneclient.v3 import client as keystone_client
from keystoneauth1 import loading
from keystoneauth1 import session
from novaclient import client as nova_client
except ImportError:
print 'ZBX_NOTSUPPORTED\x00 Failed to import openstack python modules'
exit(1)
def get_host_port(url):
parsed = urlparse(url)
if parsed:
return (parsed.hostname, parsed.port)
def print_json(data):
print json.dumps({'data':data},sort_keys=True,indent=7,separators=(',',':'))
def discover_endpoints(auth_url, tenant_name, username, password):
conn = keystone_client.Client(username=username, password=password, tenant_name=tenant_name, auth_url=auth_url)
services = []
for e in conn.endpoints.list():
if e.interface != 'public':
continue
host = get_host_port(e.url)
if e.enabled:
service = conn.services.get(e.service_id)
services.append({'{#OS_SERVICENAME}':service.name, '{#OS_SERVICEURL}':e.url, '{#OS_SERVICEHOST}':host[0], '{#OS_SERVICEPORT}':host[1] })
print_json(services)
def discover_hypervisors(auth_url, tenant_name, username, password):
loader = loading.get_plugin_loader('password')
print loader.get_options()
auth = loader.load_from_options(auth_url=auth_url,
username=username,
password=password,
project_name=tenant_name,
user_domain_name='default',
project_domain_name='default')
sess = session.Session(auth=auth)
conn = nova_client.Client(2, session=sess)
hypervisors = []
for h in conn.hypervisors.list(detailed=True):
if h.status == 'enabled':
hypervisors.append({'{#OS_HYPERVISOR_HOSTNAME}':h.hypervisor_hostname, '{#OS_HYPERVISOR_IP}':h.host_ip, '{#OS_HYPERVISOR_TYPE}':h.hypervisor_type })
print_json(hypervisors)
if __name__ == '__main__':
if (len(argv) != 6):
print """Usage: %s TYPE AUTH_URL TENANT USERNAME PASSWORD
where
TYPE - one of the following: endpoints hypervisors
AUTH_URL - URL to keystone
TENANT - tenant name
USERNAME - user name
PASSWORD - password for user
""" % argv[0]
exit(2)
else:
(TYPE,AUTH_URL,TENANT,USERNAME,PASSWORD) = argv[1:]
if TYPE == 'endpoints':
discover_endpoints(AUTH_URL,TENANT,USERNAME,PASSWORD)
elif TYPE == 'hypervisors':
discover_hypervisors(AUTH_URL,TENANT,USERNAME,PASSWORD)
else:
print 'ZBX_NOTSUPPORTED\x00 Unknown type: %s' % TYPE
exit(1)