Skip to content
Snippets Groups Projects
Commit 159d4289 authored by m.grandolfo's avatar m.grandolfo
Browse files

Change line ending from DOS to UNIX

parent 9b10cec9
No related branches found
No related tags found
1 merge request!9Change line ending from DOS to UNIX
This commit is part of merge request !9. Comments created here will be created in the context of that merge request.
#!/usr/bin/env python #!/usr/bin/env python
import calendar import calendar
import ConfigParser import ConfigParser
import httplib import httplib
import json import json
import math import math
import optparse import optparse
import os import os
import sys import sys
import time import time
from filelock import FileLock from filelock import FileLock
class api_response(): class api_response():
__status = None __status = None
__data = None __data = None
__msg = None __msg = None
def __init__(self, status, data, msg): def __init__(self, status, data, msg):
self.setStatus(status) self.setStatus(status)
self.setData(data) self.setData(data)
self.setMsg(msg) self.setMsg(msg)
def setStatus(self, status): def setStatus(self, status):
self.__status = status self.__status = status
def getStatus(self): def getStatus(self):
return self.__status return self.__status
def setData(self, data): def setData(self, data):
self.__data = data self.__data = data
def getData(self): def getData(self):
return self.__data return self.__data
def setMsg(self, msg): def setMsg(self, msg):
self.__msg = msg self.__msg = msg
def getMsg(self): def getMsg(self):
return self.__msg return self.__msg
class api_request(): class api_request():
@staticmethod @staticmethod
def httpGet(url, host, port, header): def httpGet(url, host, port, header):
conn = httplib.HTTPConnection(host, port) conn = httplib.HTTPConnection(host, port)
conn.request("GET", url, headers = header) conn.request("GET", url, headers = header)
res = conn.getresponse() res = conn.getresponse()
response = api_response(res.status, res.read(), res.msg) response = api_response(res.status, res.read(), res.msg)
return response return response
@staticmethod @staticmethod
def httpsGet(url, host, port, header): def httpsGet(url, host, port, header):
conn = httplib.HTTPSConnection(host, port) conn = httplib.HTTPSConnection(host, port)
conn.request("GET", url, headers = header) conn.request("GET", url, headers = header)
res = conn.getresponse() res = conn.getresponse()
response = api_response(res.status, res.read(), res.msg) response = api_response(res.status, res.read(), res.msg)
return response return response
@staticmethod @staticmethod
def httpPost(url, host, port, params, headers): def httpPost(url, host, port, params, headers):
conn = httplib.HTTPConnection(host, port) conn = httplib.HTTPConnection(host, port)
conn.request("POST", url, params, headers) conn.request("POST", url, params, headers)
res = conn.getresponse() res = conn.getresponse()
response = api_response(res.status, res.read(), res.msg) response = api_response(res.status, res.read(), res.msg)
return response return response
@staticmethod @staticmethod
def httpsPost(url, host, port, params, headers): def httpsPost(url, host, port, params, headers):
conn = httplib.HTTPSConnection(host, port) conn = httplib.HTTPSConnection(host, port)
conn.request("POST", url, params, headers) conn.request("POST", url, params, headers)
res = conn.getresponse() res = conn.getresponse()
response = api_response(res.status, res.read(), res.msg) response = api_response(res.status, res.read(), res.msg)
return response return response
def add_service_to_host(struct, host, service, state): def add_service_to_host(struct, host, service, state):
find = 0 find = 0
if 'hosts' not in struct.keys(): if 'hosts' not in struct.keys():
struct['hosts'] = [] struct['hosts'] = []
for h in iter(struct['hosts']): for h in iter(struct['hosts']):
if h['host'] == host: if h['host'] == host:
h['services'][service] = state h['services'][service] = state
find = 1 find = 1
else: else:
continue continue
if find == 0: if find == 0:
struct['hosts'].append({'host' : host, 'services' : {service : state}}) struct['hosts'].append({'host' : host, 'services' : {service : state}})
def add_service(struct, service, state): def add_service(struct, service, state):
struct[service] = state struct[service] = state
class Prisma: class Prisma:
__username = '' __username = ''
__tenant = '' __tenant = ''
__token = '' __token = ''
__password = '' __password = ''
__protocol = 'http' __protocol = 'http'
__server = '' __server = ''
__port = None __port = None
__tenantID = None __tenantID = None
def __init__(self, protocol, server, port, username, tenant, password): def __init__(self, protocol, server, port, username, tenant, password):
self.setUsername(username) self.setUsername(username)
self.setTenant(tenant) self.setTenant(tenant)
self.setPassword(password) self.setPassword(password)
self.setProtocol(protocol) self.setProtocol(protocol)
self.setServer(server) self.setServer(server)
self.setPort(port) self.setPort(port)
self.getToken() self.getToken()
def setUsername(self, username): def setUsername(self, username):
self.__username = username self.__username = username
def getUsername(self): def getUsername(self):
return self.__username return self.__username
def setPassword(self, password): def setPassword(self, password):
self.__password = password self.__password = password
def getPassword(self): def getPassword(self):
return self.__password return self.__password
def setTenant(self, tenant): def setTenant(self, tenant):
self.__tenant = tenant self.__tenant = tenant
def getTenant(self): def getTenant(self):
return self.__tenant return self.__tenant
def setTenantID(self, tenantID): def setTenantID(self, tenantID):
self.__tenantID = tenantID self.__tenantID = tenantID
def getTenantID(self): def getTenantID(self):
return self.__tenantID return self.__tenantID
def setProtocol(self, protocol): def setProtocol(self, protocol):
self.__protocol = protocol self.__protocol = protocol
def getProtocol(self): def getProtocol(self):
return self.__protocol return self.__protocol
def setServer(self, server): def setServer(self, server):
self.__server = server self.__server = server
def setPort(self, port): def setPort(self, port):
self.__port = port self.__port = port
def getPort(self): def getPort(self):
return self.__port return self.__port
def getServer(self): def getServer(self):
return self.__server return self.__server
def setToken(self, token): def setToken(self, token):
self.__token = token self.__token = token
def getToken(self): def getToken(self):
token_file_path = os.path.join(os.path.dirname(__file__), 'token_backup') token_file_path = os.path.join(os.path.dirname(__file__), 'token_backup')
parser_token = ConfigParser.SafeConfigParser() parser_token = ConfigParser.SafeConfigParser()
with FileLock(token_file_path): with FileLock(token_file_path):
parser_token.readfp(open(token_file_path)) parser_token.readfp(open(token_file_path))
if (not parser_token.get('token', 'expires')) or (int(float(parser_token.get('token', 'expires')) - time.time()) <= 0): if (not parser_token.get('token', 'expires')) or (int(float(parser_token.get('token', 'expires')) - time.time()) <= 0):
auth = '{"auth": {"tenantName": "%s", "passwordCredentials": {"username": "%s", "password": "%s"}}}' % (self.getTenant(), self.getUsername(), self.getPassword()) auth = '{"auth": {"tenantName": "%s", "passwordCredentials": {"username": "%s", "password": "%s"}}}' % (self.getTenant(), self.getUsername(), self.getPassword())
header = {"Content-Type": "application/json", "Accept": "application/json"} header = {"Content-Type": "application/json", "Accept": "application/json"}
if self.getProtocol() == 'http': if self.getProtocol() == 'http':
res = api_request.httpPost('/v2.0/tokens', self.getServer(), self.getPort(), auth, header) res = api_request.httpPost('/v2.0/tokens', self.getServer(), self.getPort(), auth, header)
else: else:
res = api_request.httpsPost('/v2.0/tokens', self.getServer(), self.getPort(), auth, header) res = api_request.httpsPost('/v2.0/tokens', self.getServer(), self.getPort(), auth, header)
res_json = json.loads(res.getData()) res_json = json.loads(res.getData())
timestamp = calendar.timegm(time.strptime(res_json['access']['token']['expires'],"%Y-%m-%dT%H:%M:%SZ")) timestamp = calendar.timegm(time.strptime(res_json['access']['token']['expires'],"%Y-%m-%dT%H:%M:%SZ"))
parser_token.set('token', 'id', res_json['access']['token']['id']) parser_token.set('token', 'id', res_json['access']['token']['id'])
parser_token.set('token', 'expires', str(timestamp)) parser_token.set('token', 'expires', str(timestamp))
parser_token.set('tenant', 'id', res_json['access']['token']['tenant']['id']) parser_token.set('tenant', 'id', res_json['access']['token']['tenant']['id'])
with FileLock(token_file_path): with FileLock(token_file_path):
with open(token_file_path, 'w') as configfile: with open(token_file_path, 'w') as configfile:
parser_token.write(configfile) parser_token.write(configfile)
self.setToken(parser_token.get('token', 'id')) self.setToken(parser_token.get('token', 'id'))
self.setTenantID(parser_token.get('tenant','id')) self.setTenantID(parser_token.get('tenant','id'))
return self.__token return self.__token
def getAuth(self): def getAuth(self):
return {"X-Auth-Token": self.getToken()} return {"X-Auth-Token": self.getToken()}
def nova_service_list(self): def nova_service_list(self):
service = None service = None
res = api_request.httpGet("/v2/%s/os-services" % (self.getTenantID()), self.getServer(), 8774, self.getAuth()) res = api_request.httpGet("/v2/%s/os-services" % (self.getTenantID()), self.getServer(), 8774, self.getAuth())
if res.getStatus() == 200: if res.getStatus() == 200:
service = json.loads(res.getData()) service = json.loads(res.getData())
return service return service
def neutron_agent_list(self): def neutron_agent_list(self):
agent = None agent = None
res = api_request.httpGet('/v2.0/agents.json', self.getServer(), 9696, self.getAuth()) res = api_request.httpGet('/v2.0/agents.json', self.getServer(), 9696, self.getAuth())
if res.getStatus() == 200: if res.getStatus() == 200:
agent = json.loads(res.getData()) agent = json.loads(res.getData())
return agent return agent
def glance_images(self): def glance_images(self):
images = None images = None
res = api_request.httpGet('/v1.1/images', self.getServer(), '9292', self.getAuth()) res = api_request.httpGet('/v1.1/images', self.getServer(), '9292', self.getAuth())
if res.getStatus() == 200: if res.getStatus() == 200:
images = json.loads(res.getData()) images = json.loads(res.getData())
return images return images
def cinder_blocks_list(self): def cinder_blocks_list(self):
blocks = None blocks = None
res = api_request.httpGet('/v2/%s/os-services' % (self.getTenantID()), self.getServer(), '8776', self.getAuth()) res = api_request.httpGet('/v2/%s/os-services' % (self.getTenantID()), self.getServer(), '8776', self.getAuth())
if res.getStatus() == 200: if res.getStatus() == 200:
blocks = json.loads(res.getData()) blocks = json.loads(res.getData())
return blocks return blocks
def swift_blocks_list(self): def swift_blocks_list(self):
blocks = None blocks = None
res = api_request.httpsGet('/v1/AUTH_%s?format=json' % (self.getTenantID()), self.getServer(), '8080', self.getAuth()) res = api_request.httpsGet('/v1/AUTH_%s?format=json' % (self.getTenantID()), self.getServer(), '8080', self.getAuth())
if res.getStatus() == 200: if res.getStatus() == 200:
blocks = json.loads(res.getData()) blocks = json.loads(res.getData())
return blocks return blocks
def encode(): def encode():
struct = {} struct = {}
config_file_path = os.path.join(os.path.dirname(__file__), 'credentials.conf') config_file_path = os.path.join(os.path.dirname(__file__), 'credentials.conf')
parser_config = ConfigParser.SafeConfigParser() parser_config = ConfigParser.SafeConfigParser()
parser_config.readfp(open(config_file_path)) parser_config.readfp(open(config_file_path))
prisma = Prisma( prisma = Prisma(
parser_config.get('keystone', 'protocol'), parser_config.get('keystone', 'protocol'),
parser_config.get('keystone', 'server'), parser_config.get('keystone', 'server'),
parser_config.get('keystone', 'port'), parser_config.get('keystone', 'port'),
parser_config.get('keystone', 'username'), parser_config.get('keystone', 'username'),
parser_config.get('keystone', 'tenant'), parser_config.get('keystone', 'tenant'),
parser_config.get('keystone', 'password') parser_config.get('keystone', 'password')
) )
#keystone #keystone
keystone = prisma.getTenantID() keystone = prisma.getTenantID()
#print keystone #print keystone
if keystone != None: if keystone != None:
add_service(struct, 'keystone', 1) add_service(struct, 'keystone', 1)
else: else:
add_service(struct, 'keystone', 0) add_service(struct, 'keystone', 0)
#nova #nova
nova = prisma.nova_service_list() nova = prisma.nova_service_list()
compute = 0 compute = 0
if nova != None: if nova != None:
add_service(struct, 'nova', 1) add_service(struct, 'nova', 1)
for i in iter(nova['services']): for i in iter(nova['services']):
if i['status'] == 'enabled': if i['status'] == 'enabled':
add_service_to_host(struct, i['host'], i['binary'],0 if i['state'] == 'down' else 1) add_service_to_host(struct, i['host'], i['binary'],0 if i['state'] == 'down' else 1)
else: else:
add_service(struct, 'nova', 0) add_service(struct, 'nova', 0)
#neutron #neutron
neutron = prisma.neutron_agent_list() neutron = prisma.neutron_agent_list()
if neutron != None: if neutron != None:
add_service(struct, 'neutron', 1) add_service(struct, 'neutron', 1)
for i in iter(neutron['agents']): for i in iter(neutron['agents']):
add_service_to_host(struct, i['host'], i['binary'],0 if i['alive'] == 'false' else 1) add_service_to_host(struct, i['host'], i['binary'],0 if i['alive'] == 'false' else 1)
else: else:
add_service(struct, 'neutron', 0) add_service(struct, 'neutron', 0)
#glance #glance
# glance = prisma.glance_images() # glance = prisma.glance_images()
# if glance != None: # if glance != None:
# add_service(struct, 'glance', 1) # add_service(struct, 'glance', 1)
# else: # else:
# add_service(struct, 'glance', 0) # add_service(struct, 'glance', 0)
#cinder #cinder
cinder = prisma.cinder_blocks_list() cinder = prisma.cinder_blocks_list()
if cinder != None: if cinder != None:
add_service(struct, 'cinder', 1) add_service(struct, 'cinder', 1)
else: else:
add_service(struct, 'cinder', 0) add_service(struct, 'cinder', 0)
#swift #swift
# swift = prisma.swift_blocks_list() # swift = prisma.swift_blocks_list()
# if swift != None: # if swift != None:
# add_service(struct, 'swift', 1) # add_service(struct, 'swift', 1)
# else: # else:
# add_service(struct, 'swift', 0) # add_service(struct, 'swift', 0)
# print struct # print struct
return struct return struct
def check( test_json): def check( test_json):
try: try:
keystone = test_json["keystone"] keystone = test_json["keystone"]
except: except:
print "keystone" print "keystone"
return return
#nova #nova
controller_dic = {'nova-cert': 0, 'nova-consoleauth': 0, 'nova-scheduler': 0, 'nova-conductor': 0} controller_dic = {'nova-cert': 0, 'nova-consoleauth': 0, 'nova-scheduler': 0, 'nova-conductor': 0}
nova = test_json["nova"] nova = test_json["nova"]
for host in iter(test_json["hosts"]): for host in iter(test_json["hosts"]):
for i in iter(host["services"]): for i in iter(host["services"]):
try: try:
controller_dic[i]|=host["services"][i] controller_dic[i]|=host["services"][i]
except: except:
continue continue
for i in iter(controller_dic): for i in iter(controller_dic):
nova &= controller_dic[i] nova &= controller_dic[i]
#neutron #neutron
network_dic = {'neutron-metadata-agent': 0, 'neutron-dhcp-agent': 0, 'neutron-linuxbridge-agent': 0} network_dic = {'neutron-metadata-agent': 0, 'neutron-dhcp-agent': 0, 'neutron-linuxbridge-agent': 0}
neutron = test_json["neutron"] neutron = test_json["neutron"]
for host in iter(test_json["hosts"]): for host in iter(test_json["hosts"]):
for i in iter(host["services"]): for i in iter(host["services"]):
try: try:
network_dic[i]|=host["services"][i] network_dic[i]|=host["services"][i]
except: except:
continue continue
for i in iter(network_dic): for i in iter(network_dic):
neutron &= network_dic[i] neutron &= network_dic[i]
#cinder #cinder
cinder = test_json["cinder"] cinder = test_json["cinder"]
#glance #glance
# glance = test_json["glance"] # glance = test_json["glance"]
#compute #compute
computerun = 0 computerun = 0
computecount = 0 computecount = 0
compute = 1 compute = 1
for host in iter(test_json["hosts"]): for host in iter(test_json["hosts"]):
test = 0 test = 0
try: try:
if 'nova-compute' in host["services"].keys(): if 'nova-compute' in host["services"].keys():
computecount += 1 computecount += 1
if host["services"]["nova-compute"] & host["services"]["neutron-linuxbridge-agent"]: if host["services"]["nova-compute"] & host["services"]["neutron-linuxbridge-agent"]:
computerun += 1 computerun += 1
if host["services"]["nova-compute"] == 1 and host["services"]["neutron-linuxbridge-agent"] == 0: if host["services"]["nova-compute"] == 1 and host["services"]["neutron-linuxbridge-agent"] == 0:
compute = 0 compute = 0
except: except:
continue continue
status = {} status = {}
if cinder == 1: if cinder == 1:
add_service(status, 'storage', 'OK') add_service(status, 'storage', 'OK')
else: else:
add_service(status, 'storage', 'KO') add_service(status, 'storage', 'KO')
if neutron == 1: if neutron == 1:
add_service(status, 'network', 'OK') add_service(status, 'network', 'OK')
else: else:
add_service(status, 'network', 'KO') add_service(status, 'network', 'KO')
if compute == 1: if compute == 1:
add_service(status, 'available_nodes', computerun) add_service(status, 'available_nodes', computerun)
add_service(status, 'total_nodes', computecount) add_service(status, 'total_nodes', computecount)
else: else:
add_service(status, 'available_nodes', 0) add_service(status, 'available_nodes', 0)
add_service(status, 'total_nodes', computecount) add_service(status, 'total_nodes', computecount)
return json.dumps(status, sort_keys=False, indent=4) return json.dumps(status, sort_keys=False, indent=4)
# return status # return status
# return keystone & compute & nova & neutron & cinder & glance # return keystone & compute & nova & neutron & cinder & glance
def main(): def main():
struct = encode() struct = encode()
status = check(struct) status = check(struct)
print status print status
if __name__ == "__main__": if __name__ == "__main__":
main() main()
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment