check-running-showcase_instances.py
Home
/
deployment-scripts /
scripts /
software /
check-running-showcase_instances.py
import subprocess
from novaclient.v1_1 import client as novaclient
import time
import boto
def read_config(config_file):
cfg = boto.Config()
cfg.load_from_path(config_file)
return cfg
class Checker:
def __init__(self):
self.cfg = read_config('config.ini')
self.user = self.cfg.get('OPENSTACK', 'username')
self.pwd = self.cfg.get('OPENSTACK', 'password')
self.url = self.cfg.get('OPENSTACK', 'auth_url')
self.tenant = self.cfg.get('OPENSTACK', 'tenant_name')
self.nc = novaclient.Client(self.user, self.pwd, self.tenant, auth_url=self.url)
self.showcase_server_ips = []
while True:
self.check()
time.sleep(5)
def get_ip(self, server):
for address in server.addresses['private']:
if address['OS-EXT-IPS:type'] == 'fixed':
server_ip = address['addr']
break
else:
server_ip = None
print "Error: can not get IP address of this server"
return server_ip
def check(self):
running_server_ips = []
new_server_ips = []
servers = self.nc.servers.findall(name='cloudscale-sc')
ps = {}
for server in servers:
if server.status == 'ACTIVE':
server_ip = self.get_ip(server)
if server_ip in self.showcase_server_ips:
running_server_ips.append(server_ip)
else:
new_server_ips.append(server_ip)
ps[server_ip] = subprocess.Popen('curl -I --silent %s > /dev/null' % server_ip, shell=True)
for server_ip in new_server_ips:
ps[server_ip].wait()
if ps[server_ip].returncode == 0:
running_server_ips.append(server_ip)
if not set(self.showcase_server_ips) == set(running_server_ips):
self.showcase_server_ips = running_server_ips
self.update_config()
self.reload_haproxy()
def update_config(self):
ha_proxy_config = open('/etc/haproxy/haproxy.cfg_NO_SERVERS', 'r').read()
for server_ip in self.showcase_server_ips:
ha_proxy_config += """
server %s %s:80 check""" % (server_ip, server_ip)
open('/etc/haproxy/haproxy.cfg', 'w').write(ha_proxy_config)
def reload_haproxy(self):
print "config changed... reloading haproxy"
ps = subprocess.Popen('service haproxy reload', shell=True)
ps.wait()
if __name__ == '__main__':
checker = Checker()