def form_conf_mpath_file(blacklist="", defaults_extra=""): """ Form a multipath configuration file, and restart multipath service. :param blacklist: Entry in conf file to indicate blacklist section. :param defaults_extra: Extra entry in conf file in defaults section. """ conf_file = "/etc/multipath.conf" with open(conf_file, "w", encoding='utf-8') as mpath_fp: mpath_fp.write("defaults {\n") mpath_fp.write(" find_multipaths yes\n") mpath_fp.write(" user_friendly_names yes\n") if defaults_extra: mpath_fp.write(f" {defaults_extra}\n") mpath_fp.write("}\n") if blacklist: mpath_fp.write("blacklist {\n") mpath_fp.write(f" {blacklist}\n") mpath_fp.write("}\n") LOG.debug(open(conf_file, "r", encoding='utf-8').read()) # The reason for sleep here is to give some time for change in # multipath.conf file to take effect. time.sleep(5) mpath_svc = service.SpecificServiceManager(get_svc_name()) mpath_svc.restart() wait.wait_for(mpath_svc.status, timeout=10)
def setUp(self): """ Set up. """ # Install needed packages dist = distro.detect() pkg_name = "" svc_name = "" if dist.name == 'Ubuntu': pkg_name += "multipath-tools" svc_name = "multipath-tools" elif dist.name == 'SuSE': pkg_name += "multipath-tools" svc_name = "multipathd" else: pkg_name += "device-mapper-multipath" svc_name = "multipathd" smm = SoftwareManager() if not smm.check_installed(pkg_name) and not smm.install(pkg_name): self.skip("Can not install %s" % pkg_name) # Create service object self.mpath_svc = service.SpecificServiceManager(svc_name) self.mpath_svc.restart() # Check if multipath devices are present in system self.wwids = multipath.get_multipath_wwids() if self.wwids == ['']: self.skip("No Multipath Devices") # Take a backup of current config file self.mpath_file = "/etc/multipath.conf" if os.path.isfile(self.mpath_file): shutil.copyfile(self.mpath_file, "%s.bkp" % self.mpath_file) self.mpath_list = [] # Find all details of multipath devices for wwid in self.wwids: if wwid not in process.system_output('multipath -ll', ignore_status=True, shell=True): continue self.mpath_dic = {} self.mpath_dic["wwid"] = wwid self.mpath_dic["name"] = multipath.get_mpath_name(wwid) self.mpath_dic["paths"] = multipath.get_paths(wwid) self.mpath_dic["policy"] = multipath.get_policy(wwid) self.mpath_dic["size"] = multipath.get_size(wwid) self.mpath_list.append(self.mpath_dic) pprint(self.mpath_list)
def setUp(self): """ Set up. """ self.policy = self.params.get('policy', default='service-time') self.policies = ["service-time", "round-robin", "queue-length"] # We will remove and add the policy back, so that this becomes # the last member of the list. This is done so that in the # policy change test later, this policy is set in the last # iteration. self.policies.remove(self.policy) self.policies.append(self.policy) # Install needed packages dist = distro.detect() pkg_name = "" svc_name = "" if dist.name == 'Ubuntu': pkg_name += "multipath-tools" svc_name = "multipath-tools" elif dist.name == 'SuSE': pkg_name += "multipath-tools" svc_name = "multipathd" else: pkg_name += "device-mapper-multipath" svc_name = "multipathd" smm = SoftwareManager() if not smm.check_installed(pkg_name) and not smm.install(pkg_name): self.cancel("Can not install %s" % pkg_name) # Check if given multipath devices are present in system self.wwids = self.params.get('wwids', default='').split(',') system_wwids = multipath.get_multipath_wwids() wwids_to_remove = [] for wwid in self.wwids: if wwid not in system_wwids: self.log.info("%s not present in the system", wwid) wwids_to_remove.append(wwid) for wwid in wwids_to_remove: self.wwids.remove(wwid) if self.wwids == []: self.cancel("No Multipath Devices Given") # Create service object self.mpath_svc = service.SpecificServiceManager(svc_name) self.mpath_svc.restart() wait.wait_for(self.mpath_svc.status, timeout=10) # Take a backup of current config file self.mpath_file = "/etc/multipath.conf" if os.path.isfile(self.mpath_file): shutil.copyfile(self.mpath_file, "%s.bkp" % self.mpath_file) self.mpath_list = [] # Find all details of multipath devices for wwid in self.wwids: if wwid not in process.system_output('multipath -ll', ignore_status=True, shell=True).decode("utf-8"): continue self.mpath_dic = {} self.mpath_dic["wwid"] = wwid self.mpath_dic["name"] = multipath.get_mpath_name(wwid) self.mpath_dic["paths"] = multipath.get_paths(wwid) self.mpath_dic["policy"] = multipath.get_policy(wwid) self.mpath_dic["size"] = multipath.get_size(wwid) self.mpath_list.append(self.mpath_dic) pprint(self.mpath_list)