i3pystatus/i3pystatus/openstack_vms.py
David Wahlstrom 338d446bb3 openstack_vms: update novaclient auth
The openstack novaclient has updated it's auth mechanism, deprecating
the method used in this module.  This patch updates the novaclient
authentication call to leverage this new auth method.
2016-08-30 13:55:27 -07:00

72 lines
2.2 KiB
Python

from i3pystatus import IntervalModule
# requires python-novaclient
from novaclient import client
import webbrowser
class Openstack_vms(IntervalModule):
"""
Displays the number of VMs in an openstack cluster in ACTIVE and
non-ACTIVE states.
Requires: python-novaclient
"""
settings = (
("auth_url", "OpenStack cluster authentication URL (OS_AUTH_URL)"),
("username", "Username for OpenStack authentication (OS_USERNAME)"),
("password", "Password for Openstack authentication (OS_PASSWORD)"),
("tenant_name", "Tenant/Project name to view (OS_TENANT_NAME)"),
("color", "Display color when non-active VMs are =< `threshold`"),
("crit_color", "Display color when non-active VMs are => `threshold`"),
("threshold", "Set critical indicators when non-active VM pass this "
"number"),
("horizon_url", "When clicked, open this URL in a browser"),
"format"
)
required = ("auth_url", "password", "tenant_name", "username")
color = "#00FF00"
crit_color = "#FF0000"
threshold = 0
horizon_url = None
format = "{tenant_name}: {active_servers} up, "\
"{nonactive_servers} down"
on_leftclick = "openurl"
def run(self):
nclient = client.Client(
'2.0',
self.username,
self.password,
self.tenant_name,
self.auth_url
)
active_servers = 0
nonactive_servers = 0
server_list = nclient.servers.list()
for server in server_list:
if server.status == 'ACTIVE':
active_servers = active_servers + 1
else:
nonactive_servers = nonactive_servers + 1
if nonactive_servers > self.threshold:
display_color = self.crit_color
else:
display_color = self.color
cdict = {
"tenant_name": self.tenant_name,
"active_servers": active_servers,
"nonactive_servers": nonactive_servers,
}
self.data = cdict
self.output = {
"full_text": self.format.format(**cdict),
"color": display_color
}
def openurl(self):
webbrowser.open_new_tab(self.horizon_url)