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))
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
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
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
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))
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
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
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
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
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))
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))
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
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
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
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
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
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
def get(self, nodename): """ Show workspace details on this InfraSIM host """ node_info = Workspace.get_node_info_in_workspace(nodename) return node_info, 200
def get(self, nodename): """ Show workspace details on this InfraSIM host """ node_info = Workspace.get_node_info_in_workspace(nodename) return node_info, 200
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