#! /usr/bin/python
import os
import sys
import subprocess
import time

def get_systemd_status(service):
    p=subprocess.Popen(["/bin/systemctl", "is-active", service], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
    (out, err) = p.communicate()
    out = out.strip()
    return out

libvirt_enabled = os.system("systemctl -q is-enabled libvirtd.service")==0
nova_compute_enabled = os.system("systemctl -q is-enabled openstack-nova-compute.service")==0
openvswitch_agent_enabled = os.system("systemctl -q is-enabled quantum-openvswitch-agent.service")==0

print "enabled:"
print "  libvirtd=", libvirt_enabled
print "  openstack-nova-compute=", nova_compute_enabled
print "  quantum-openvswitch-agent=", openvswitch_agent_enabled

if (not libvirt_enabled) or (not nova_compute_enabled) or (not openvswitch_agent_enabled):
    print "services are not enabled. exiting"
    sys.exit(0)

libvirt_status = get_systemd_status("libvirtd.service")
nova_compute_status = get_systemd_status("openstack-nova-compute.service")
openvswitch_agent_status = get_systemd_status("quantum-openvswitch-agent.service")

print "status:"
print "  libvirtd=", libvirt_status
print "  openstack-nova-compute=", nova_compute_status
print "  quantum-openvswitch-agent=", openvswitch_agent_status

if (libvirt_status=="failed") or (nova_compute_status=="failed") or (openvswitch_agent_status=="failed"):
    print "services have failed. doing the big restart"
    os.system("systemctl stop openstack-nova-compute.service")
    os.system("systemctl stop quantum-openvswitch-agent.service")
    os.system("systemctl stop libvirtd.service")
    time.sleep(5)
    os.system("systemctl start libvirtd.service")
    time.sleep(5)
    os.system("systemctl start quantum-openvswitch-agent.service")
    time.sleep(5)
    os.system("systemctl start openstack-nova-compute.service")
    print "done"




