Source code for i3pystatus.openstack_vms
from i3pystatus import IntervalModule
# requires python-novaclient
from novaclient import client
import webbrowser
[docs]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)