def __init__(self, exchange_name, topic_routing_key, external_callback, timeout=10): threading.Thread.__init__(self) pika_logger = logging.getLogger('pika') if fit_common.VERBOSITY >= 8: pika_logger.setLevel(logging.DEBUG) elif fit_common.VERBOSITY >= 4: pika_logger.setLevel(logging.WARNING) else: pika_logger.setLevel(logging.ERROR) if fit_common.API_PORT == 9090: amqp_port = fit_common.fitports()['amqp-vagrant'] else: amqp_port = fit_common.fitports()['amqp'] self.connection = pika.BlockingConnection( pika.ConnectionParameters(host=fit_common.fitargs()["rackhd_host"], port=amqp_port)) self.channel = self.connection.channel() result = self.channel.queue_declare(exclusive=True) queue_name = result.method.queue self.channel.queue_bind(exchange=exchange_name, queue=queue_name, routing_key=topic_routing_key) self.channel.basic_consume(external_callback, queue=queue_name) self.connection.add_timeout(timeout, self.dispose)
def __init__(self, exchange_name, topic_routing_key, external_callback, timeout=10): threading.Thread.__init__(self) pika_logger = logging.getLogger('pika') if fit_common.VERBOSITY >= 8: pika_logger.setLevel(logging.DEBUG) elif fit_common.VERBOSITY >= 4: pika_logger.setLevel(logging.WARNING) else: pika_logger.setLevel(logging.ERROR) if fit_common.API_PORT == 9090: amqp_port = fit_common.fitports()['amqp-vagrant'] else: amqp_port = fit_common.fitports()['amqp'] self.connection = pika.BlockingConnection( pika.ConnectionParameters(host=fit_common.fitargs()["ora"], port=amqp_port)) self.channel = self.connection.channel() # self.channel.basic_qos(prefetch_count=1) result = self.channel.queue_declare(exclusive=True) queue_name = result.method.queue self.channel.queue_bind( exchange=exchange_name, queue=queue_name, routing_key=topic_routing_key) self.channel.basic_consume(external_callback, queue=queue_name) self.connection.add_timeout(timeout, self.dispose)
def createRackHDUser(self): headers = { 'content-type': 'application/json', 'accept': 'application/json' } payload = { 'username': self.username, 'password': self.passwd, 'role': self.role } url = "https://{0}:{1}/api/2.0/users?auth_token={2}".format( fit_common.fitcfg()['rackhd_host'], str(fit_common.fitports()['https']), fit_common.AUTH_TOKEN) try: r = requests.post(url, headers=headers, data=json.dumps(payload), timeout=User.timeout, verify=False) except requests.exceptions.RequestException as e: logs.info("error, {0}", e) return False if r.status_code != 201: logs.info( "error status code {0}, could not create RackHD user account", r.status_code) return False return True
def createRedfishUser(self): headers = { 'content-type': 'application/json', 'accept': 'application/json', 'x-auth-token': fit_common.REDFISH_TOKEN } payload = { 'Password': self.passwd, 'UserName': self.username, 'RoleId': self.role } url = "https://{0}:{1}/redfish/v1/AccountService/Accounts".format( fit_common.fitcfg()['rackhd_host'], str(fit_common.fitports()['https'])) try: r = requests.post(url, headers=headers, data=json.dumps(payload), timeout=User.timeout, verify=False) except requests.exceptions.RequestException as e: logs.info("error, {0}", e) return False if r.status_code != 201: logs.info_4( "error status code {0}, could not create Redfish user account '{1}'" .format(r.status_code, self.username)) return False return True
def test01_set_auth_user(self): fit_common.remote_shell('rm auth.json') auth_json = open('auth.json', 'w') auth_json.write('{"username":"******"api"][0]["admin_user"] + '", "password":"******"api"][0]["admin_pass"] + '", "role":"Administrator"}') auth_json.close() fit_common.scp_file_to_ora('auth.json') rc = fit_common.remote_shell("curl -ks -X POST -H 'Content-Type:application/json' https://localhost:" + str(fit_common.fitports()['https']) + "/api/2.0/users -d @auth.json") if rc['exitcode'] != 0: log.info_5("ALERT: Auth admin user not set! Please manually set the admin user account if required.")
def test01_set_auth_user(self): auth_json = open('auth.json', 'w') auth_json.write('{"username":"******"api"][0]["admin_user"] + '", "password":"******"api"][0]["admin_pass"] + '", "role":"Administrator"}') auth_json.close() try: # add first user to remote rackhd directly return_code = "" rackhd_hostname = fit_common.fitargs()['rackhd_host'] set_auth_url = "https://" + rackhd_hostname + ":" + str(fit_common.fitports()['https']) + "/api/2.0/users" rc = fit_common.restful(url_command=set_auth_url, rest_action="post", rest_payload=json.load(open('auth.json'))) return_code = str(rc['status']) except Exception as e: log.info_5("ALERT: RackHD is not in localhost, will set first user through ssh{0}".format(e)) if return_code != '201': log.info_5("ALERT: Can't set first user to RackHD https port directly, will set it through ssh") # ssh login to rackhd and add first user to localhost rackhd fit_common.remote_shell('rm auth.json') fit_common.scp_file_to_ora('auth.json') rc = fit_common.remote_shell("curl -ks -X POST -H 'Content-Type:application/json' https://localhost:" + str(fit_common.fitports()['https']) + "/api/2.0/users -d @auth.json") if rc['exitcode'] != 0: log.info_5("ALERT: Auth admin user not set! Please manually set the admin user account if required.")
def deleteRackHDUserAccount(self): headers = { 'accept': 'application/json', 'authorization': 'JWT ' + fit_common.AUTH_TOKEN } url = "https://{0}:{1}/api/2.0/users/{2}".format(fit_common.fitcfg()['rackhd_host'], str(fit_common.fitports()['https']), self.username) try: r = requests.delete(url, headers=headers, timeout=User.timeout, verify=False) except requests.exceptions.RequestException as e: logs.info("error, {0}", e) return None if r.status_code != 204: logs.info("error status code {0}, unable to delete RackHD user '{1}'", r.status_code, self.username) return None
def test04_setup_rackhd_docker_services(self): # add the .env variables for HOST IP into the ".env" file envfile = open("envfile", 'w') envfile.write("TAG=latest\n") envfile.write("REGISTRY_IP=172.31.128.1\n") host_ip = "HOST_IP=" + socket.gethostbyname(fit_common.fitcfg()['rackhd_host']) + "\n" envfile.write(host_ip) envfile.close() fit_common.scp_file_to_ora("envfile") self.assertEqual(fit_common.remote_shell('cp envfile /home/onrack/.env' )['exitcode'], 0, "copy of env file failed.") os.remove('envfile') # Get the username and password from config-mn/credentials.json username = fit_common.fitcreds()['docker_hub'][0]['username'] password = fit_common.fitcreds()['docker_hub'][0]['password'] command = 'cd rackhd/docker/dell; sudo docker login --username='******' --password='******'exitcode'], 0, "Docker login failed.") # Docker up consul command = "cd rackhd/docker/dell; sudo docker-compose up -d consul" self.assertEqual(fit_common.remote_shell(command)['exitcode'], 0, "Docker up consul failed.") time.sleep(30) command = "cd rackhd/docker/dell; sudo chmod +x set_config.sh; sudo ./set_config.sh" self.assertEqual(fit_common.remote_shell(command)['exitcode'], 0, "set_config.sh failed.") # Docker up the rest of micro service containers command = "cd rackhd/docker/dell; sudo docker-compose up -d" self.assertEqual(fit_common.remote_shell(command)['exitcode'], 0, "docker-compose up failed.") time.sleep(180) # Set port to 8080 in smi config file port_var = fit_common.fitports()['http'] command = "cd rackhd/docker/dell; sudo sed -i 's/9090/" + str(port_var) + "/g' set_rackhd_smi_config.sh" self.assertEqual(fit_common.remote_shell(command)['exitcode'], 0, "set_rackhd_smi_config.sh failed.") # Populates smi config file command = "cd rackhd/docker/dell; sudo ./set_rackhd_smi_config.sh" self.assertEqual(fit_common.remote_shell(command)['exitcode'], 0, "set_rackhd_smi_config.sh failed.") # Replace callback Uri port from 9988 to 9080 in smi config file command = "cd /opt/monorail; sudo sed -i 's/9988/9080/g' smiConfig.json" self.assertEqual(fit_common.remote_shell(command)['exitcode'], 0, "Change port from 9988 to 9080 in smiConfig failed.") # Restart on-http service command = "sudo service on-http restart" self.assertEqual(fit_common.remote_shell(command)['exitcode'], 0, "failed to start on-http service.")
def deleteRedfishUserAccount(self): headers = { 'accept': 'application/json', 'x-auth-token': fit_common.REDFISH_TOKEN } url = "https://{0}:{1}/redfish/v1/AccountService/Accounts/{2}".format(fit_common.fitcfg()['rackhd_host'], str(fit_common.fitports()['https']), self.username) try: r = requests.delete(url, headers=headers, timeout=User.timeout, verify=False) except requests.exceptions.RequestException as e: logs.info("error, {0}", e) return None if r.status_code != 204: logs.info("error status code {0}, unable to delete Redfish user '{1}'", r.status_code, self.username) return None
def changeRackHDPasswd(self, passwd, token): headers = { 'content-type': 'application/json', 'accept': 'application/json', 'authorization': token } payload = {'role': self.role, 'password': passwd} url = "https://{0}:{1}/api/2.0/users/{2}".format(fit_common.fitargs()['rackhd_host'], str(fit_common.fitports()['https']), self.username) try: r = requests.patch(url, headers=headers, data=json.dumps(payload), timeout=User.timeout, verify=False) except requests.exceptions.RequestException as e: logs.info("error, {0}".format(e)) return None if r.status_code != 200: logs.info("error status code {0}, unable to change user password".format(r.status_code)) return r.status_code
def setRackHDToken(self, username, passwd): headers = { 'content-type': 'application/json', 'accept': 'application/json' } payload = { 'username': username, 'password': passwd } url = "https://{0}:{1}/login".format(fit_common.fitcfg()['rackhd_host'], str(fit_common.fitports()['https'])) try: r = requests.post(url, headers=headers, data=json.dumps(payload), timeout=User.timeout, verify=False) except requests.exceptions.RequestException as e: logs.debug_3("error, %s", e) return None if r.status_code != 200: logs.info_4("error status code {0}, unable to set user rackhd token".format(r.status_code)) return None return 'JWT ' + json.loads(r.content)['token']
def setRedfishToken(self, username, passwd): headers = { 'content-type': 'application/json', 'accept': 'text/html' } payload = { 'UserName': username, 'Password': passwd } url = "https://{0}:{1}/redfish/v1/SessionService/Sessions".format(fit_common.fitcfg()['rackhd_host'], str(fit_common.fitports()['https'])) try: r = requests.post(url, headers=headers, data=json.dumps(payload), timeout=User.timeout, verify=False) except requests.exceptions.RequestException as e: logs.debug_3("error, %s", e) return None if r.status_code != 200: logs.info("error status code {0}, unable to set redfish token", r.status_code) return None return r.headers['X-Auth-Token']
def createRackHDUser(self): headers = { 'content-type': 'application/json', 'accept': 'application/json' } payload = { 'username': self.username, 'password': self.passwd, 'role': self.role } url = "https://{0}:{1}/api/2.0/users?auth_token={2}".format(fit_common.fitcfg()['rackhd_host'], str(fit_common.fitports()['https']), fit_common.AUTH_TOKEN) try: r = requests.post(url, headers=headers, data=json.dumps(payload), timeout=User.timeout, verify=False) except requests.exceptions.RequestException as e: logs.info("error, {0}", e) return False if r.status_code != 201: logs.info("error status code {0}, could not create RackHD user account", r.status_code) return False return True
def createRedfishUser(self): headers = { 'content-type': 'application/json', 'accept': 'application/json', 'x-auth-token': fit_common.REDFISH_TOKEN } payload = { 'Password': self.passwd, 'UserName': self.username, 'RoleId': self.role } url = "https://{0}:{1}/redfish/v1/AccountService/Accounts".format(fit_common.fitcfg()['rackhd_host'], str(fit_common.fitports()['https'])) try: r = requests.post(url, headers=headers, data=json.dumps(payload), timeout=User.timeout, verify=False) except requests.exceptions.RequestException as e: logs.info("error, {0}", e) return False if r.status_code != 201: logs.info_4("error status code {0}, could not create Redfish user account '{1}'".format(r.status_code, self.username)) return False return True
from getpass import getpass from base64 import b64encode, b64decode import logging import json import os, sys import ConfigParser # Check for fit-based configuration CONFIG = os.environ.get('FIT_CONFIG', None) if CONFIG: # Load FIT configuration (.json format) import fit_common defaults = fit_common.fitcfg()['cit-config'] defaults['RACKHD_HOST'] = fit_common.fitcfg()['rackhd_host'] defaults['RACKHD_PORT'] = fit_common.fitports()['http'] defaults['RACKHD_PORT_AUTH'] = fit_common.fitports()['https'] defaults['RACKHD_HTTPD_PORT'] = fit_common.fitports()['httpd'] defaults['RACKHD_SSH_PORT'] = fit_common.fitports()['ssh'] defaults['RACKHD_SSH_USER'] = fit_common.fitcreds( )['rackhd_ssh'][0]['username'] defaults['RACKHD_SSH_PASSWORD'] = fit_common.fitcreds( )['rackhd_ssh'][0]['password'] defaults['RACKHD_SMB_USER'] = fit_common.fitcreds( )['rackhd_smb'][0]['username'] defaults['RACKHD_SMB_PASSWORD'] = fit_common.fitcreds( )['rackhd_smb'][0]['password'] defaults['RACKHD_AMQP_URL'] = fit_common.fitrackhd()['amqp'] # map from original cit repo path name to httpProxies in rackhd configuration mappings = {
import unittest import threading import fit_common from nose.plugins.attrib import attr logs = flogging.get_loggers() amqp_queue = Queue.Queue(maxsize=0) from pymongo import MongoClient from bson.objectid import ObjectId import json # Check the running test environment if fit_common.fitargs()['stack'] in ['vagrant_guest', 'vagrant', 'vagrant_ucs']: env_vagrant = True else: env_vagrant = False AMQP_PORT = fit_common.fitports()['amqp_ssl'] MONGO_PORT = fit_common.fitports()['mongo_port'] HTTP_PORT = fit_common.fitports()['http'] class AmqpWorker(threading.Thread): def __init__(self, exchange_name, topic_routing_key, external_callback, timeout=10): threading.Thread.__init__(self) pika_logger = logging.getLogger('pika') if fit_common.VERBOSITY >= 8: pika_logger.setLevel(logging.DEBUG) elif fit_common.VERBOSITY >= 4: pika_logger.setLevel(logging.WARNING) else: pika_logger.setLevel(logging.ERROR) self.connection = pika.BlockingConnection(pika.ConnectionParameters(host=fit_common.fitargs()["rackhd_host"],
import fit_common from nose.plugins.attrib import attr logs = flogging.get_loggers() amqp_queue = Queue.Queue(maxsize=0) from pymongo import MongoClient from bson.objectid import ObjectId import json # Check the running test environment if fit_common.fitargs()['stack'] in [ 'vagrant_guest', 'vagrant', 'vagrant_ucs' ]: env_vagrant = True else: env_vagrant = False AMQP_PORT = fit_common.fitports()['amqp_ssl'] MONGO_PORT = fit_common.fitports()['mongo_port'] HTTP_PORT = fit_common.fitports()['http'] class AmqpWorker(threading.Thread): def __init__(self, exchange_name, topic_routing_key, external_callback, timeout=10): threading.Thread.__init__(self) pika_logger = logging.getLogger('pika') if fit_common.VERBOSITY >= 8: pika_logger.setLevel(logging.DEBUG) elif fit_common.VERBOSITY >= 4:
from getpass import getpass from base64 import b64encode, b64decode import logging import json import os, sys import ConfigParser # Check for fit-based configuration CONFIG = os.environ.get('FIT_CONFIG', None) if CONFIG: # Load FIT configuration (.json format) import fit_common defaults = fit_common.fitcfg()['cit-config'] defaults['RACKHD_HOST'] = fit_common.fitcfg()['rackhd_host'] defaults['RACKHD_PORT'] = fit_common.fitports()['http'] defaults['RACKHD_PORT_AUTH'] = fit_common.fitports()['https'] defaults['RACKHD_USER_AUTH_PORT'] = fit_common.fitports()['https'] defaults['RACKHD_HTTPD_PORT'] = fit_common.fitports()['httpd'] defaults['RACKHD_SSH_PORT'] = fit_common.fitports()['ssh'] defaults['RACKHD_SSH_USER'] = fit_common.fitcreds()['rackhd_ssh'][0]['username'] defaults['RACKHD_SSH_PASSWORD'] = fit_common.fitcreds()['rackhd_ssh'][0]['password'] defaults['RACKHD_SMB_USER'] = fit_common.fitcreds()['rackhd_smb'][0]['username'] defaults['RACKHD_SMB_PASSWORD'] = fit_common.fitcreds()['rackhd_smb'][0]['password'] defaults['RACKHD_AMQP_URL'] = fit_common.fitrackhd()['amqp'] # map from original cit repo path name to httpProxies in rackhd configuration mappings = { 'RACKHD_CENTOS_REPO_PATH': '/CentOS/6.5', 'RACKHD_ESXI_REPO_PATH': '/ESXi/6.0', 'RACKHD_UBUNTU_REPO_PATH': '/Ubuntu/14'
def test04_setup_rackhd_docker_services(self): # add the .env variables for HOST IP into the ".env" file envfile = open("envfile", 'w') envfile.write("TAG=latest\n") envfile.write("REGISTRY_IP=172.31.128.1\n") host_ip = "HOST_IP=" + socket.gethostbyname( fit_common.fitcfg()['rackhd_host']) + "\n" envfile.write(host_ip) envfile.close() fit_common.scp_file_to_ora("envfile") self.assertEqual( fit_common.remote_shell('cp envfile /home/onrack/.env') ['exitcode'], 0, "copy of env file failed.") os.remove('envfile') # Get the username and password from config-mn/credentials.json username = fit_common.fitcreds()['docker_hub'][0]['username'] password = fit_common.fitcreds()['docker_hub'][0]['password'] command = 'cd rackhd/docker/dell; sudo docker login --username='******' --password='******'exitcode'], 0, "Docker login failed.") # Docker up consul command = "cd rackhd/docker/dell; sudo docker-compose up -d consul" self.assertEqual( fit_common.remote_shell(command)['exitcode'], 0, "Docker up consul failed.") time.sleep(30) command = "cd rackhd/docker/dell; sudo chmod +x set_config.sh; sudo ./set_config.sh" self.assertEqual( fit_common.remote_shell(command)['exitcode'], 0, "set_config.sh failed.") # Docker up the rest of micro service containers command = "cd rackhd/docker/dell; sudo docker-compose up -d" self.assertEqual( fit_common.remote_shell(command)['exitcode'], 0, "docker-compose up failed.") time.sleep(180) # Set port to 8080 in smi config file port_var = fit_common.fitports()['http'] command = "cd rackhd/docker/dell; sudo sed -i 's/9090/" + str( port_var) + "/g' set_rackhd_smi_config.sh" self.assertEqual( fit_common.remote_shell(command)['exitcode'], 0, "set_rackhd_smi_config.sh failed.") # Populates smi config file command = "cd rackhd/docker/dell; sudo ./set_rackhd_smi_config.sh" self.assertEqual( fit_common.remote_shell(command)['exitcode'], 0, "set_rackhd_smi_config.sh failed.") # Replace callback Uri port from 9988 to 9080 in smi config file command = "cd /opt/monorail; sudo sed -i 's/9988/9080/g' smiConfig.json" self.assertEqual( fit_common.remote_shell(command)['exitcode'], 0, "Change port from 9988 to 9080 in smiConfig failed.") # Restart on-http service command = "sudo service on-http restart" self.assertEqual( fit_common.remote_shell(command)['exitcode'], 0, "failed to start on-http service.")