Beispiel #1
0
 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)
Beispiel #2
0
 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)
Beispiel #3
0
 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
Beispiel #4
0
 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
Beispiel #5
0
 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.")
Beispiel #7
0
 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.")
Beispiel #9
0
 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
Beispiel #10
0
 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
Beispiel #11
0
 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']
Beispiel #12
0
 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']
Beispiel #13
0
 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
Beispiel #14
0
 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
Beispiel #15
0
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"],
Beispiel #17
0
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:
Beispiel #18
0
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.")