Ejemplo n.º 1
0
 def destroy(self, node_name):
     if Workspace.check_workspace_exists(node_name):
         try:
             node_info = Workspace.get_node_info_in_workspace(node_name)
         except InfraSimError as e:
             print e.value
             logger_cmd.error("cmd res: {}".format(e.value))
             return
     else:
         print "Node {} runtime workspace is not found, destroy action is not applied.".\
             format(node_name)
         logger_cmd.warning(
             "cmd res: Node {} runtime workspace is not found, "
             "destroy action is not applied.".format(node_name))
         return
     node = model.CNode(node_info)
     try:
         self._node_preinit(node, ignore_check=True)
     except InfraSimError as e:
         print(e.value)
         logger_cmd.error("cmd res: {}".format(e.value))
     except Exception as e:
         print(e)
         logger_cmd.error("cmd res: {}".format(e))
     try:
         node.stop()
         node.terminate_workspace()
         logger_cmd.info("cmd res: destroy node {} OK".format(node_name))
     except Exception as e:
         print(
             "You have to destroy node {} manually due to fatal error: {}".
             format(node_name, e))
Ejemplo n.º 2
0
def check_node_start_workspace(node_name):

    conf = Workspace.get_node_info_in_workspace(node_name)
    node_root = os.path.join(config.infrasim_home, conf["name"])

    # Check node data folder and files exist
    node_type = conf["type"]
    data_folder = os.path.join(node_root, "data")
    node_emu = os.path.join(data_folder, "{}.emu".format(node_type))
    node_bios = os.path.join(data_folder, "{}_smbios.bin".format(node_type))
    assert os.path.exists(data_folder) is True
    assert os.path.exists(node_emu) is True
    assert os.path.exists(node_bios) is True

    # Check node script folder and files exist
    script_folder = os.path.join(node_root, "scripts")
    script_chassiscontrol = os.path.join(script_folder, "chassiscontrol")
    script_lancontrol = os.path.join(script_folder, "lancontrol")
    script_startcmd = os.path.join(script_folder, "startcmd")
    script_stopcmd = os.path.join(script_folder, "stopcmd")
    script_resetcmd = os.path.join(script_folder, "resetcmd")
    assert os.path.exists(script_folder) is True
    assert os.path.exists(script_chassiscontrol) is True
    assert os.path.exists(script_lancontrol) is True
    assert os.path.exists(script_startcmd) is True
    assert os.path.exists(script_stopcmd) is True
    assert os.path.exists(script_resetcmd) is True

    # Check etc folder and files exist
    etc_folder = os.path.join(node_root, "etc")
    etc_infrasim_yml = os.path.join(etc_folder, "infrasim.yml")
    etc_vbmc_conf = os.path.join(etc_folder, "vbmc.conf")
    assert os.path.exists(etc_folder) is True
    assert os.path.exists(etc_infrasim_yml) is True
    assert os.path.exists(etc_vbmc_conf) is True

    # Check disk image exist
    node_name = conf["name"]
    node_drive = conf['compute']['storage_backend'][0]['drives']

    # set drive 'file'
    for i in range(1, len(node_drive) + 1):
        disk_file = os.path.join(node_root, "sd{0}.img".format(chr(96 + i)))
        assert os.path.exists(disk_file) is True

    # Check serial device exist
    serial_dev = os.path.join(node_root, ".pty0_{}".format(node_name))
    assert os.path.exists(serial_dev) is True

    # Check unix socket file
    serial = os.path.join(node_root, ".serial")
    assert os.path.exists(serial) is True

    # Check node runtime pid file exist
    node_socat = os.path.join(node_root, ".{}-socat.pid".format(node_name))
    node_ipmi = os.path.join(node_root, ".{}-bmc.pid".format(node_name))
    node_qemu = os.path.join(node_root, ".{}-node.pid".format(node_name))
    assert os.path.exists(node_socat) is True
    assert os.path.exists(node_ipmi) is True
    assert os.path.exists(node_qemu) is True
Ejemplo n.º 3
0
def check_node_start_workspace(node_name):

    conf = Workspace.get_node_info_in_workspace(node_name)
    node_root = os.path.join(config.infrasim_home, conf["name"])

    # Check node data folder and files exist
    node_type = conf["type"]
    data_folder = os.path.join(node_root, "data")
    node_emu = os.path.join(data_folder, "{}.emu".format(node_type))
    node_bios = os.path.join(data_folder, "{}_smbios.bin".format(node_type))
    assert os.path.exists(data_folder) is True
    assert os.path.exists(node_emu) is True
    assert os.path.exists(node_bios) is True

    # Check node script folder and files exist
    script_folder = os.path.join(node_root, "scripts")
    script_chassiscontrol = os.path.join(script_folder, "chassiscontrol")
    script_lancontrol = os.path.join(script_folder, "lancontrol")
    script_startcmd = os.path.join(script_folder, "startcmd")
    script_stopcmd = os.path.join(script_folder, "stopcmd")
    script_resetcmd = os.path.join(script_folder, "resetcmd")
    assert os.path.exists(script_folder) is True
    assert os.path.exists(script_chassiscontrol) is True
    assert os.path.exists(script_lancontrol) is True
    assert os.path.exists(script_startcmd) is True
    assert os.path.exists(script_stopcmd) is True
    assert os.path.exists(script_resetcmd) is True

    # Check etc folder and files exist
    etc_folder = os.path.join(node_root, "etc")
    etc_infrasim_yml = os.path.join(etc_folder, "infrasim.yml")
    etc_vbmc_conf = os.path.join(etc_folder, "vbmc.conf")
    assert os.path.exists(etc_folder) is True
    assert os.path.exists(etc_infrasim_yml) is True
    assert os.path.exists(etc_vbmc_conf) is True

    # Check disk image exist
    node_name = conf["name"]
    node_drive = conf['compute']['storage_backend'][0]['drives']

    # set drive 'file'
    for i in range(1, len(node_drive) + 1):
        disk_file = os.path.join(node_root, "sd{0}.img".format(chr(96 + i)))
        assert os.path.exists(disk_file) is True

    # Check serial device exist
    serial_dev = os.path.join(node_root, ".pty0_{}".format(node_name))
    assert os.path.exists(serial_dev) is True

    # Check unix socket file
    serial = os.path.join(node_root, ".serial")
    assert os.path.exists(serial) is True

    # Check node runtime pid file exist
    node_socat = os.path.join(node_root, ".{}-socat.pid".format(node_name))
    node_ipmi = os.path.join(node_root, ".{}-bmc.pid".format(node_name))
    node_qemu = os.path.join(node_root, ".{}-node.pid".format(node_name))
    assert os.path.exists(node_socat) is True
    assert os.path.exists(node_ipmi) is True
    assert os.path.exists(node_qemu) is True
Ejemplo n.º 4
0
 def destroy(self, node_name):
     if Workspace.check_workspace_exists(node_name):
         try:
             node_info = Workspace.get_node_info_in_workspace(node_name)
         except InfraSimError, e:
             print e.value
             return
Ejemplo n.º 5
0
    def start(self, node_name):
        try:
            if Workspace.check_workspace_exists(node_name):
                node_info = Workspace.get_node_info_in_workspace(node_name)
            else:
                node_info = nm.get_item_info(node_name)
            node = model.CNode(node_info)
            self._node_preinit(node)

        except InfraSimError as e:
            print e.value
            logger_cmd.error("cmd res: {}".format(e.value))
            return

        node.start()

        vnc_port = node_info["compute"].get("vnc_display", 1) + 5900

        # get IP address
        print "Infrasim service started.\n" \
            "Node {} graphic interface accessible via: \n" \
            "VNC port: {} \n" \
            "Either host IP: {} \n" \
            "depending on host in which network VNC viewer is running \n"\
            "Node log folder: {}". \
            format(node.get_node_name(),
                   vnc_port,
                   helper.ip4_addresses(netns=node_info.get("namespace")),
                   infrasim_log.get_log_path(node_name))
        logger_cmd.info("cmd res: start node {} OK".format(node_name))
Ejemplo n.º 6
0
    def info(self, node_name, type=True):
        try:
            node_info = Workspace.get_node_info_in_workspace(node_name)
            node_info_net = node_info['compute']['networks']
            node_info_stor = node_info['compute']['storage_backend']
            print "{:<20}{}\n" \
                  "{:<20}{}\n" \
                  "{:<20}{}\n" \
                  "{:<20}{}\n" \
                  "{:<20}{}\n" \
                  "{:<20}{}" . \
                format("node name:", node_name,
                       "type:", node_info['type'],
                       "memory size:", node_info['compute']['memory']['size'],
                       "sol_enable:", node_info['sol_enable'],
                       "cpu quantities:", node_info['compute']['cpu']['quantities'],
                       "cpu type:", node_info['compute']['cpu']['type'])
            print "{:<20}".format("network(s):") + "-" * 22
            table = Texttable()
            table_type = ~(Texttable.HEADER | Texttable.BORDER
                           | Texttable.HLINES | Texttable.VLINES)
            table.set_deco(table_type)
            table.set_cols_align(["l", "l", "l", "l"])
            row = []
            row.append([" " * 17, "device", "mode", "name"])
            for i in range(1, len(node_info_net) + 1):
                net = node_info_net[i - 1]
                row.append([
                    " " * 17, net['device'], net['network_mode'],
                    net['network_name']
                ])
            table.add_rows(row)
            print table.draw()

            print "{:<20}".format("storage backend:") + "-" * 30
            table = Texttable()
            table.set_deco(table_type)
            table.set_cols_align(["l", "l", "l", "l"])
            row = []
            row.append([" " * 17, "type", "max drive", "drive size"])
            for i in range(1, len(node_info_stor) + 1):
                stor = node_info_stor[i - 1]
                node_info_drives = stor['drives']
                for j in range(1, len(node_info_drives) + 1):
                    drive = node_info_drives[j - 1]
                    if j % stor['max_drive_per_controller'] == 1:
                        row.append([
                            " " * 17, stor['type'],
                            stor['max_drive_per_controller'], drive['size']
                        ])
                    else:
                        row.append([" " * 17, "", "", drive['size']])
            table.add_rows(row)
            print table.draw()
            logger_cmd.info("cmd res: get node {} info OK".format(node_name))
        except InfraSimError, e:
            print e.value
            logger_cmd.error("cmd res: {}".format(e.value))
            return
Ejemplo n.º 7
0
 def destroy(self, node_name):
     if Workspace.check_workspace_exists(node_name):
         try:
             node_info = Workspace.get_node_info_in_workspace(node_name)
         except InfraSimError, e:
             print e.value
             logger_cmd.error("cmd res: {}".format(e.value))
             return
Ejemplo n.º 8
0
 def status(self, node_name):
     try:
         node_info = Workspace.get_node_info_in_workspace(node_name)
         node = model.CNode(node_info)
         self._node_preinit(node, ignore_check=True)
         node.status()
     except InfraSimError, e:
         print e.value
Ejemplo n.º 9
0
 def destroy(self, node_name):
     if Workspace.check_workspace_exists(node_name):
         try:
             node_info = Workspace.get_node_info_in_workspace(node_name)
         except InfraSimError, e:
             print e.value
             logger_cmd.error("cmd res: {}".format(e.value))
             return
Ejemplo n.º 10
0
 def status(self, node_name):
     try:
         node_info = Workspace.get_node_info_in_workspace(node_name)
         node = model.CNode(node_info)
         self._node_preinit(node, ignore_check=True)
         node.status()
         logger_cmd.info("cmd res: get node {} status OK".format(node_name))
     except InfraSimError, e:
         print e.value
         logger_cmd.error("cmd res: {}".format(e.value))
Ejemplo n.º 11
0
 def status(self, node_name):
     try:
         node_info = Workspace.get_node_info_in_workspace(node_name)
         node = model.CNode(node_info)
         self._node_preinit(node, ignore_check=True)
         node.status()
         logger_cmd.info("cmd res: get node {} status OK".format(node_name))
     except InfraSimError, e:
         print e.value
         logger_cmd.error("cmd res: {}".format(e.value))
Ejemplo n.º 12
0
 def start(self, node_name):
     try:
         if Workspace.check_workspace_exists(node_name):
             node_info = Workspace.get_node_info_in_workspace(node_name)
         else:
             node_info = nm.get_node_info(node_name)
         node = model.CNode(node_info)
         self._node_preinit(node)
     except InfraSimError, e:
         print e.value
         return
Ejemplo n.º 13
0
    def info(self, node_name, type=True):
        try:
            node_info = Workspace.get_node_info_in_workspace(node_name)
            node_info_net = node_info['compute']['networks']
            node_info_stor = node_info['compute']['storage_backend']

            print "{:<20}{}\n" \
                  "{:<20}{}\n" \
                  "{:<20}{}\n" \
                  "{:<20}{}\n" \
                  "{:<20}{}\n" \
                  "{:<20}{}" . \
                format("node name:", node_name,
                       "type:", node_info['type'],
                       "memory size:", node_info['compute']['memory']['size'],
                       "sol_enable:", node_info['sol_enable'],
                       "cpu quantities:", node_info['compute']['cpu']['quantities'],
                       "cpu type:", node_info['compute']['cpu']['type'])
            print "{:<20}".format("network(s):") + "-" * 22
            table = Texttable()
            table_type = ~(Texttable.HEADER | Texttable.BORDER | Texttable.HLINES | Texttable.VLINES)
            table.set_deco(table_type)
            table.set_cols_align(["l", "l", "l", "l"])
            row = []
            row.append([" " * 17, "device", "mode", "name"])
            for i in range(1, len(node_info_net) + 1):
                net = node_info_net[i-1]
                row.append([" " * 17, net['device'], net['network_mode'], net['network_name']])
            table.add_rows(row)
            print table.draw()

            print "{:<20}".format("storage backend:") + "-" * 30
            table = Texttable()
            table.set_deco(table_type)
            table.set_cols_align(["l", "l", "l", "l"])
            row = []
            row.append([" " * 17, "type", "max drive", "drive size"])
            for i in range(1, len(node_info_stor) + 1):
                stor = node_info_stor[i - 1]
                node_info_drives = stor['controller']['drives']
                for j in range(1, len(node_info_drives) + 1):
                    drive = node_info_drives[j - 1]
                    if j == 1:
                        row.append([" " * 17, stor['controller']['type'],
                                    stor['controller']['max_drive_per_controller'], drive['size']])
                    else:
                        row.append([" " * 17, "", "", drive['size']])
            table.add_rows(row)
            print table.draw()

        except InfraSimError, e:
            print e.value
            return
Ejemplo n.º 14
0
    def start(self, node_name):
        try:
            if Workspace.check_workspace_exists(node_name):
                node_info = Workspace.get_node_info_in_workspace(node_name)
            else:
                node_info = nm.get_node_info(node_name)
            node = model.CNode(node_info)
            self._node_preinit(node)

        except InfraSimError, e:
            print e.value
            logger_cmd.error("cmd res: {}".format(e.value))
            return
Ejemplo n.º 15
0
    def start(self, node_name):
        try:
            if Workspace.check_workspace_exists(node_name):
                node_info = Workspace.get_node_info_in_workspace(node_name)
            else:
                node_info = nm.get_node_info(node_name)
            node = model.CNode(node_info)
            self._node_preinit(node)

        except InfraSimError, e:
            print e.value
            logger_cmd.error("cmd res: {}".format(e.value))
            return
Ejemplo n.º 16
0
 def get_node_status(self):
     self.__node_info = Workspace.get_node_info_in_workspace(self.__node_name)
     self.netns = self.__node_info.get("namespace", None)
     base_path = os.path.join(infrasim_home, self.__node_name)
     task_name = ['socat', 'bmc', 'node', 'racadm', 'ipmi_console']
     task_list = {}
     for task in task_name:
         if task is 'ipmi_console':
             pid_file = os.path.join(base_path, '.ipmi_console.pid')
         else:
             pid_file = os.path.join(base_path, ".{}-{}.pid".format(self.__node_name, task))
         if os.path.exists(pid_file):
             task_pid = get_task_pid(pid_file)
             if not os.path.exists("/proc/{}".format(task_pid)):
                 os.remove(pid_file)
             elif task_pid > 0:
                 task_list[task] = "{:<6}".format(task_pid)
     return task_list
Ejemplo n.º 17
0
def check_node_stop_workspace(node_name):

    conf = Workspace.get_node_info_in_workspace(node_name)
    node_root = os.path.join(config.infrasim_home, conf["name"])

    # Check node data folder and files exist
    node_type = conf["type"]
    data_folder = os.path.join(node_root, "data")
    node_emu = os.path.join(data_folder, "{}.emu".format(node_type))
    node_bios = os.path.join(data_folder, "{}_smbios.bin".format(node_type))
    assert os.path.exists(data_folder) is True
    assert os.path.exists(node_emu) is True
    assert os.path.exists(node_bios) is True

    # Check node script folder and files exist
    script_folder = os.path.join(node_root, "scripts")
    script_chassiscontrol = os.path.join(script_folder, "chassiscontrol")
    script_lancontrol = os.path.join(script_folder, "lancontrol")
    script_startcmd = os.path.join(script_folder, "startcmd")
    script_stopcmd = os.path.join(script_folder, "stopcmd")
    script_resetcmd = os.path.join(script_folder, "resetcmd")
    assert os.path.exists(script_folder) is True
    assert os.path.exists(script_chassiscontrol) is True
    assert os.path.exists(script_lancontrol) is True
    assert os.path.exists(script_startcmd) is True
    assert os.path.exists(script_stopcmd) is True
    assert os.path.exists(script_resetcmd) is True

    # Check etc folder and files exist
    etc_folder = os.path.join(node_root, "etc")
    etc_infrasim_yml = os.path.join(etc_folder, "infrasim.yml")
    etc_vbmc_conf = os.path.join(etc_folder, "vbmc.conf")
    assert os.path.exists(etc_folder) is True
    assert os.path.exists(etc_infrasim_yml) is True
    assert os.path.exists(etc_vbmc_conf) is True

    # Check disk image exist
    node_name = conf["name"]
    node_stor = conf['compute']['storage_backend']
    disk_index = 0
    for stor_control in node_stor:
        for drive in stor_control["drives"]:
            disk_file = os.path.join(node_root,
                                     "sd{0}.img".format(chr(97 + disk_index)))
            disk_index += 1
            assert os.path.exists(disk_file) is True

    # Check serial device exist
    serial_dev = os.path.join(node_root, ".pty0")
    assert os.path.exists(serial_dev) is False

    # should __NOT__ check .serial, since it will not be removed automatically
    # Check unix socket file
    # serial = os.path.join(node_root, ".serial")
    # assert os.path.exists(serial) is False

    # Check node runtime pid file don't exist
    node_socat = os.path.join(node_root, ".{}-socat.pid".format(node_name))
    node_ipmi = os.path.join(node_root, ".{}-bmc.pid".format(node_name))
    node_qemu = os.path.join(node_root, ".{}-node.pid".format(node_name))
    assert os.path.exists(node_socat) is False
    assert os.path.exists(node_ipmi) is False
    assert os.path.exists(node_qemu) is False
Ejemplo n.º 18
0
 def get(self, nodename):
     """
     Show workspace details on this InfraSIM host
     """
     node_info = Workspace.get_node_info_in_workspace(nodename)
     return node_info, 200
Ejemplo n.º 19
0
 def get(self, nodename):
     """
     Show workspace details on this InfraSIM host
     """
     node_info = Workspace.get_node_info_in_workspace(nodename)
     return node_info, 200
Ejemplo n.º 20
0
def check_node_stop_workspace(node_name):

    conf = Workspace.get_node_info_in_workspace(node_name)
    node_root = os.path.join(config.infrasim_home, conf["name"])

    # Check node data folder and files exist
    node_type = conf["type"]
    data_folder = os.path.join(node_root, "data")
    node_emu = os.path.join(data_folder, "{}.emu".format(node_type))
    node_bios = os.path.join(data_folder, "{}_smbios.bin".format(node_type))
    assert os.path.exists(data_folder) is True
    assert os.path.exists(node_emu) is True
    assert os.path.exists(node_bios) is True

    # Check node script folder and files exist
    script_folder = os.path.join(node_root, "scripts")
    script_chassiscontrol = os.path.join(script_folder, "chassiscontrol")
    script_lancontrol = os.path.join(script_folder, "lancontrol")
    script_startcmd = os.path.join(script_folder, "startcmd")
    script_stopcmd = os.path.join(script_folder, "stopcmd")
    script_resetcmd = os.path.join(script_folder, "resetcmd")
    assert os.path.exists(script_folder) is True
    assert os.path.exists(script_chassiscontrol) is True
    assert os.path.exists(script_lancontrol) is True
    assert os.path.exists(script_startcmd) is True
    assert os.path.exists(script_stopcmd) is True
    assert os.path.exists(script_resetcmd) is True

    # Check etc folder and files exist
    etc_folder = os.path.join(node_root, "etc")
    etc_infrasim_yml = os.path.join(etc_folder, "infrasim.yml")
    etc_vbmc_conf = os.path.join(etc_folder, "vbmc.conf")
    assert os.path.exists(etc_folder) is True
    assert os.path.exists(etc_infrasim_yml) is True
    assert os.path.exists(etc_vbmc_conf) is True

    # Check disk image exist
    node_name = conf["name"]
    node_stor = conf['compute']['storage_backend']
    disk_index = 0
    for stor_control in node_stor:
        for drive in stor_control["drives"]:
            disk_file = os.path.join(node_root, "sd{0}.img".format(chr(97 + disk_index)))
            disk_index += 1
            assert os.path.exists(disk_file) is True

    # Check serial device exist
    serial_dev = os.path.join(node_root, ".pty0")
    assert os.path.exists(serial_dev) is False

    # should __NOT__ check .serial, since it will not be removed automatically
    # Check unix socket file
    # serial = os.path.join(node_root, ".serial")
    # assert os.path.exists(serial) is False

    # Check node runtime pid file don't exist
    node_socat = os.path.join(node_root, ".{}-socat.pid".format(node_name))
    node_ipmi = os.path.join(node_root, ".{}-bmc.pid".format(node_name))
    node_qemu = os.path.join(node_root, ".{}-node.pid".format(node_name))
    assert os.path.exists(node_socat) is False
    assert os.path.exists(node_ipmi) is False
    assert os.path.exists(node_qemu) is False