def __init__(self, chassis_name, chassis_info): self.__chassis = chassis_info self.__chassis_model = None self.__node_list = {} self.__chassis_name = chassis_name self.__numactl_obj = NumaCtl() self.__dataset = DataSet() self.__file_name = None self.__daemon = None self.logger = infrasim_log.get_chassis_logger(chassis_name) self.workspace = None
def init(self): if not helper.check_kvm_existence(): self.__enable_kvm = False else: self.__enable_kvm = self.__compute.get('kvm_enabled', True) if 'smbios' in self.__compute: self.__smbios = self.__compute['smbios'] elif self.get_workspace(): self.__smbios = os.path.join( self.get_workspace(), "data", "{}_smbios.bin".format(self.__vendor_type)) else: self.__smbios = os.path.join( config.infrasim_data, "{0}/{0}_smbios.bin".format(self.__vendor_type)) self.__bios = self.__compute.get('bios') if 'boot' in self.__compute: self.__boot_order = self.__compute['boot'].get('boot_order', "ncd") if 'menu' in self.__compute['boot']: self.__boot_menu = "on" if self.__compute['boot']['menu'] in [ True, 'on' ] else "off" self.__boot_splash_name = self.__compute['boot'].get( 'splash', None) self.__boot_splash_time = self.__compute['boot'].get( 'splash-time', None) else: self.__boot_order = "ncd" self.__cdrom_file = self.__compute.get('cdrom') self.__numactl_info = self.__compute.get("numa_control") if self.__numactl_info and os.path.exists("/usr/bin/numactl"): self.__numactl_mode = self.__numactl_info.get("mode", "auto") if self.__class__.numactl is None: self.__class__.numactl = NumaCtl() self.logger.info('[compute] infrasim has ' 'enabled numa control') else: self.logger.info('[compute] infrasim can\'t ' 'find numactl in this environment') self.__display = self.__compute.get('vnc_display', 1) self.__kernel = self.__compute.get('kernel') self.__initrd = self.__compute.get('initrd') self.__cmdline = self.__compute.get("cmdline") self.__mem_path = self.__compute.get("mem_path") self.__machine = self.__compute.get("machine") self.__extra_option = self.__compute.get("extra_option") self.__qemu_bin = self.__compute.get("qemu_bin", self.__qemu_bin) self.__force_shutdown = self.__compute.get("force_shutdown", True) self.__shm_key = self.__compute.get("communicate", {}).get("shm_key") machine_obj = CMachine(self.__machine) machine_obj.logger = self.logger self.__element_list.append(machine_obj) cpu_obj = CCPU(self.__compute['cpu']) cpu_obj.logger = self.logger self.__element_list.append(cpu_obj) self.__cpu_obj = cpu_obj memory_obj = CMemory(self.__compute['memory']) memory_obj.logger = self.logger self.__element_list.append(memory_obj) # If PCI device wants to sit on one specific PCI bus, the bus should be # created first prior to using the bus, here we always create the PCI # bus prior to other PCI devices' creation pci_topology_manager_obj = None if 'pci_bridge_topology' in self.__compute: pci_topology_manager_obj = CPCITopologyManager( self.__compute['pci_bridge_topology']) pci_topology_manager_obj.logger = self.logger self.__element_list.append(pci_topology_manager_obj) if 'pcie_topology' in self.__compute: pcie_topology_obj = CPCIETopology(self.__compute['pcie_topology']) pcie_topology_obj.logger = self.logger self.__element_list.append(pcie_topology_obj) if 'sec_bus' in str(self.__compute.get('pcie_topology')): fw_cfg_obj = CPCIEFwcfg() fw_cfg_obj.logger = self.logger fw_cfg_obj.set_workspace(self.get_workspace()) pcie_topology_obj.set_fw_cfg_obj(fw_cfg_obj) self.__element_list.append(fw_cfg_obj) backend_storage_obj = CBackendStorage( self.__compute['storage_backend']) backend_storage_obj.logger = self.logger backend_storage_obj.owner = self if pci_topology_manager_obj: backend_storage_obj.set_pci_topology_mgr(pci_topology_manager_obj) backend_storage_obj.owner = self self.__element_list.append(backend_storage_obj) backend_network_obj = CBackendNetwork(self.__compute['networks']) backend_network_obj.logger = self.logger self.__element_list.append(backend_network_obj) if has_option(self.__compute, "ipmi"): ipmi_obj = CIPMI(self.__compute['ipmi']) else: ipmi_info = { 'interface': 'kcs', 'chardev': { 'backend': 'socket', 'host': '127.0.0.1', } } ipmi_obj = CIPMI(ipmi_info) ipmi_obj.logger = self.logger ipmi_obj.set_bmc_conn_port(self.__port_qemu_ipmi) self.__element_list.append(ipmi_obj) if self.__enable_monitor: self.__monitor = CQemuMonitor({ 'mode': 'control', 'chardev': { 'backend': 'socket', 'path': os.path.join(self.get_workspace(), '.monitor'), 'server': True, 'wait': False } }) self.__monitor.set_workspace(self.get_workspace()) self.__monitor.logger = self.logger self.__element_list.append(self.__monitor) for element in self.__element_list: element.init()
def __init__(self, chassis_info): self.__chassis = chassis_info self.__chassis_model = None self.__node_list = {} self.__numactl_obj = NumaCtl()
def init(self): if not helper.check_kvm_existence(): self.__enable_kvm = False else: self.__enable_kvm = self.__compute.get('kvm_enabled', True) if self.get_workspace(): # this file copy is performed in workspace.init() self.__smbios = os.path.join( self.get_workspace(), "data", "{}_smbios.bin".format(self.__vendor_type)) else: default = os.path.join( config.infrasim_data, "{0}/{0}_smbios.bin".format(self.__vendor_type)) if isinstance(self.__compute.get("smbios"), dict): self.__smbios = self.__compute["smbios"].get("file", default) else: self.__smbios = self.__compute.get("smbios", default) if os.path.exists(self.__smbios): if 'serial_number' in self.__compute: self.__serial_number = self.__compute['serial_number'] set_option(self.__compute, "smbios", "type1", "sn", self.__serial_number) if 'uuid' in self.__compute: set_option(self.__compute, "smbios", "type1", "uuid", self.__compute["uuid"]) bios = SMBios(self.__smbios) # safe check for compatible with previous version. if isinstance(self.__compute.get("smbios"), dict): bios.ModifyData(self.__compute["smbios"]) bios.save(self.__smbios) self.__bios = self.__compute.get('bios') if 'boot' in self.__compute: self.__boot_order = self.__compute['boot'].get('boot_order', "ncd") if 'menu' in self.__compute['boot']: self.__boot_menu = "on" if self.__compute['boot']['menu'] in [ True, 'on' ] else "off" self.__boot_splash_name = self.__compute['boot'].get( 'splash', None) self.__boot_splash_time = self.__compute['boot'].get( 'splash-time', None) self.checking_time = self.__compute['boot'].get('checking_time', 1) else: self.__boot_order = "ncd" self.__numactl_info = self.__compute.get("numa_control") if self.__numactl_info and os.path.exists("/usr/bin/numactl"): self.__numactl_mode = self.__numactl_info.get("mode", "auto") if self.__class__.numactl is None: self.__class__.numactl = NumaCtl() self.logger.info('[compute] infrasim has ' 'enabled numa control') else: self.logger.info('[compute] infrasim can\'t ' 'find numactl in this environment') self.__display = self.__compute.get('vnc_display', 1) self.__kernel = self.__compute.get('kernel') self.__initrd = self.__compute.get('initrd') self.__cmdline = self.__compute.get("cmdline") self.__mem_path = self.__compute.get("mem_path") self.__machine = self.__compute.get("machine") self.__extra_option = self.__compute.get("extra_option") self.__extra_device = self.__compute.get("extra_device", "") self.__qemu_bin = self.__compute.get("qemu_bin", self.__qemu_bin) self.__force_shutdown = self.__compute.get("force_shutdown", True) self.__shm_key = self.__compute.get("communicate", {}).get("shm_key") if "uuid" in self.__compute: self.__uuid = self.__compute.get("uuid") machine_obj = CMachine(self.__machine) machine_obj.logger = self.logger self.__element_list.append(machine_obj) cpu_obj = CCPU(self.__compute['cpu']) cpu_obj.logger = self.logger self.__element_list.append(cpu_obj) self.__cpu_obj = cpu_obj memory_obj = CMemory(self.__compute['memory']) memory_obj.logger = self.logger self.__element_list.append(memory_obj) # If PCI device wants to sit on one specific PCI bus, the bus should be # created first prior to using the bus, here we always create the PCI # bus prior to other PCI devices' creation pci_topology_manager_obj = None if 'pci_bridge_topology' in self.__compute: pci_topology_manager_obj = CPCITopologyManager( self.__compute['pci_bridge_topology']) pci_topology_manager_obj.logger = self.logger self.__element_list.append(pci_topology_manager_obj) if 'pcie_topology' in self.__compute: pcie_topology_obj = CPCIETopology(self.__compute['pcie_topology']) pcie_topology_obj.logger = self.logger self.__element_list.append(pcie_topology_obj) if 'sec_bus' in str(self.__compute.get('pcie_topology')): fw_cfg_obj = CPCIEFwcfg() fw_cfg_obj.logger = self.logger fw_cfg_obj.set_workspace(self.get_workspace()) pcie_topology_obj.set_fw_cfg_obj(fw_cfg_obj) self.__element_list.append(fw_cfg_obj) backend_network_obj = CBackendNetwork(self.__compute['networks']) backend_network_obj.logger = self.logger self.__element_list.append(backend_network_obj) for imc_element in self.__compute.get("imc", []): imc_obj = CPCIIMC(imc_element) self.__element_list.append(imc_obj) for pcu_element in self.__compute.get("pcu", []): pcu_obj = CPCIPCU(pcu_element) self.__element_list.append(pcu_obj) cdrom_info = self.__compute.get("cdrom") backend_storage_obj = CBackendStorage( self.__compute['storage_backend'], (cdrom_info is not None)) backend_storage_obj.logger = self.logger backend_storage_obj.owner = self if pci_topology_manager_obj: backend_storage_obj.set_pci_topology_mgr(pci_topology_manager_obj) backend_storage_obj.owner = self self.__element_list.append(backend_storage_obj) for ntb in self.__compute.get("ntb", []): ntb_obj = CNTB(ntb) self.__element_list.append(ntb_obj) for dma_engine in self.__compute.get("dma_engine", []): dma_engine_obj = CDMAEngine(dma_engine) self.__element_list.append(dma_engine_obj) if has_option(self.__compute, "ipmi"): ipmi_obj = CIPMI(self.__compute['ipmi']) else: ipmi_info = { 'interface': 'kcs', 'chardev': { 'backend': 'socket', 'host': '127.0.0.1', } } ipmi_obj = CIPMI(ipmi_info) ipmi_obj.logger = self.logger ipmi_obj.set_bmc_conn_port(self.__port_qemu_ipmi) self.__element_list.append(ipmi_obj) if self.__enable_monitor: self.__monitor = CQemuMonitor({ 'mode': 'control', 'chardev': { 'backend': 'socket', 'path': os.path.join(self.get_workspace(), '.monitor'), 'server': True, 'wait': False } }) self.__monitor.set_workspace(self.get_workspace()) self.__monitor.logger = self.logger self.__element_list.append(self.__monitor) if has_option(self.__compute, "cpu_binding"): self.__cpu_binding_obj = CCPUBinding(self.__compute["cpu_binding"]) self.__cpu_binding_obj.monitor = self.__monitor self.__cpu_binding_obj.logger = self.logger self.__cpu_binding_obj.owner = self self.__cpu_binding_obj.vcpu_quantities = self.__compute["cpu"].get( "quantities", 0) self.__element_list.append(self.__cpu_binding_obj) # create cdrom if exits if cdrom_info: cdrom_obj = IDECdrom(cdrom_info) cdrom_obj.logger = self.logger cdrom_obj.index = 0 cdrom_obj.owner = cdrom_obj cdrom_obj.set_bus(0) cdrom_obj.set_scsi_id(0) self.__element_list.append(cdrom_obj) # create channel for guest agent has_guest_agent = self.__compute.get('guest-agent') if has_guest_agent or has_guest_agent == 'on': self.__element_list.append(GuestAgent(self.get_workspace())) # add debug option trace_info = self.__compute.get("trace") if trace_info: self.__element_list.append(QTrace(trace_info, self.get_workspace())) for ppi in self.__compute.get("pcie-passthrough", []): ppi_obj = CPCIEPassthrough(ppi) self.__element_list.append(ppi_obj) for element in self.__element_list: element.init()