def process(self): (opts, args) = getopts() chkopts(opts) self.up_progress(10) exist_bond_list = get_ifconfig_info("regex:^bond") if opts.dev not in exist_bond_list: raise KssCommandOptException('Target bonding device not found. target=%s' % opts.dev) self.up_progress(10) dop = DictOp() ifcfg_parser = ifcfgParser() dop.addconf("ifcfg", ifcfg_parser.read_conf()) if dop.getconf("ifcfg") == {}: raise KssCommandException('Failure read network config file.') if dop.get("ifcfg", opts.dev) is False: raise KssCommandException('Target device ifcfg file not found.') self.up_progress(10) restore_dev_list = [] for dev in dop.getconf("ifcfg").keys(): if dop.get("ifcfg", [dev, "MASTER"]) == opts.dev: restore_dev_list.append(dev) self.up_progress(10) if opts.succession is True: bond_bridge = dop.get("ifcfg", [opts.dev, "BRIDGE"]) bond_dev = opts.dev if bond_bridge: bond_dev = bond_bridge ipaddr = dop.get("ifcfg", [bond_dev, "IPADDR"]) netmask = dop.get("ifcfg", [bond_dev, "NETMASK"]) gateway = dop.get("ifcfg", [bond_dev, "GATEWAY"]) bonding_opts = dop.get("ifcfg", [opts.dev, "BONDING_OPTS"]) bonding_opts = bonding_opts.strip('"') primary_dev = None for combination in bonding_opts.split(" "): if re.match("primary", combination): (key,val) = combination.split("=") val = val.strip() primary_dev = val self.up_progress(10) for restore_dev in restore_dev_list: if move_file("%s/ifcfg-%s" % (VENDOR_DATA_BONDING_EVACUATION_DIR, restore_dev), NETWORK_IFCFG_DIR) is False: raise KssCommandException('Failure restore ifcfg file.') if os.path.isfile("%s/ifcfg-p%s" % (VENDOR_DATA_BONDING_EVACUATION_DIR, restore_dev)): if move_file("%s/ifcfg-p%s" % (VENDOR_DATA_BONDING_EVACUATION_DIR, restore_dev), NETWORK_IFCFG_DIR) is False: raise KssCommandException('Failure restore ifcfg file.') self.up_progress(10) if opts.succession is True and primary_dev is not None: dop = DictOp() ifcfg_parser = ifcfgParser() dop.addconf("ifcfg", ifcfg_parser.read_conf()) if dop.getconf("ifcfg") == {}: raise KssCommandException('Failure read network config file.') if ipaddr: dop.set("ifcfg", [primary_dev, "IPADDR"], ipaddr) if netmask: dop.set("ifcfg", [primary_dev, "NETMASK"], netmask) if gateway: dop.set("ifcfg", [primary_dev, "GATEWAY"], gateway) if ifcfg_parser.write_conf(dop.getconf("ifcfg")) is False: raise KssCommandException('Failure write network config file.') self.up_progress(10) remove_file("%s/ifcfg-%s" % (NETWORK_IFCFG_DIR, opts.dev)) self.up_progress(10) dop = DictOp() modprobe_parser = modprobe_confParser() dop.addconf("modprobe_conf", modprobe_parser.read_conf()) if dop.getconf("modprobe_conf") == {}: raise KssCommandException('Failure read modprobe config file.') dop.unset("modprobe_conf", ["alias", opts.dev]) if modprobe_parser.write_conf(dop.getconf("modprobe_conf")) is False: raise KssCommandException('Failure write modprobe config file.') self.up_progress(10) # # Delete bridge device # bridge_list = get_bridge_info() bond_bridge = None for bridge in bridge_list: if opts.dev in bridge_list[bridge]: bond_bridge = bridge if bond_bridge: ifdown_cmd = (NETWORK_IFDOWN_COMMAND, bond_bridge, ) (ifdown_rc, ifdown_res) = execute_command(ifdown_cmd) if ifdown_rc != 0: raise KssCommandException('Failure stop interface. interface:%s' % (dev)) for brif in bridge_list[bond_bridge]: brctl_delif_cmd = (NETWORK_BRCTL_COMMAND, "delif", bond_bridge, brif, ) (brctl_rc, brctl_res) = execute_command(brctl_delif_cmd) if brctl_rc != 0: raise KssCommandException('Failure delete bridge port. bridge:%s port:%s' % (dev, brif)) brctl_delbr_cmd = (NETWORK_BRCTL_COMMAND, "delbr", bond_bridge, ) (brctl_rc, brctl_res) = execute_command(brctl_delbr_cmd) if brctl_rc != 0: raise KssCommandException('Failure delete bridge. bridge:%s' % (dev, brif)) remove_file("%s/ifcfg-%s" % (NETWORK_IFCFG_DIR, bond_bridge)) # # Unload bonding module # remove_bonding_cmd = (SYSTEM_COMMAND_REMOVE_MODULE, "bonding", ) (rmmod_rc, rmmod_res) = execute_command(remove_bonding_cmd) if rmmod_rc != 0: raise KssCommandException('Failure remove bonding module.') # # Restart network # network_restart_cmd = (NETWORK_COMMAND, "restart", ) (net_rc, net_res) = execute_command(network_restart_cmd) if net_rc != 0: raise KssCommandException('Failure restart network.') self.logger.info("Deleted bonding device. - bond=%s dev=%s" % (opts.dev, ','.join(restore_dev_list))) print >>sys.stdout, _("Deleted bonding device. - bond=%s dev=%s" % (opts.dev, ','.join(restore_dev_list))) return True
def process(self): (opts, args) = getopts() chkopts(opts) self.up_progress(10) exist_bond_list = get_ifconfig_info("regex:^bond") if opts.dev not in exist_bond_list: raise KssCommandOptException( 'Target bonding device not found. target=%s' % opts.dev) self.up_progress(10) dop = DictOp() ifcfg_parser = ifcfgParser() dop.addconf("ifcfg", ifcfg_parser.read_conf()) if dop.getconf("ifcfg") == {}: raise KssCommandException('Failure read network config file.') if dop.get("ifcfg", opts.dev) is False: raise KssCommandException('Target device ifcfg file not found.') self.up_progress(10) restore_dev_list = [] for dev in dop.getconf("ifcfg").keys(): if dop.get("ifcfg", [dev, "MASTER"]) == opts.dev: restore_dev_list.append(dev) self.up_progress(10) if opts.succession is True: bond_bridge = dop.get("ifcfg", [opts.dev, "BRIDGE"]) bond_dev = opts.dev if bond_bridge: bond_dev = bond_bridge ipaddr = dop.get("ifcfg", [bond_dev, "IPADDR"]) netmask = dop.get("ifcfg", [bond_dev, "NETMASK"]) gateway = dop.get("ifcfg", [bond_dev, "GATEWAY"]) bonding_opts = dop.get("ifcfg", [opts.dev, "BONDING_OPTS"]) bonding_opts = bonding_opts.strip('"') primary_dev = None for combination in bonding_opts.split(" "): if re.match("primary", combination): (key, val) = combination.split("=") val = val.strip() primary_dev = val self.up_progress(10) for restore_dev in restore_dev_list: if move_file( "%s/ifcfg-%s" % (VENDOR_DATA_BONDING_EVACUATION_DIR, restore_dev), NETWORK_IFCFG_DIR) is False: raise KssCommandException('Failure restore ifcfg file.') if os.path.isfile( "%s/ifcfg-p%s" % (VENDOR_DATA_BONDING_EVACUATION_DIR, restore_dev)): if move_file( "%s/ifcfg-p%s" % (VENDOR_DATA_BONDING_EVACUATION_DIR, restore_dev), NETWORK_IFCFG_DIR) is False: raise KssCommandException('Failure restore ifcfg file.') self.up_progress(10) if opts.succession is True and primary_dev is not None: dop = DictOp() ifcfg_parser = ifcfgParser() dop.addconf("ifcfg", ifcfg_parser.read_conf()) if dop.getconf("ifcfg") == {}: raise KssCommandException('Failure read network config file.') if ipaddr: dop.set("ifcfg", [primary_dev, "IPADDR"], ipaddr) if netmask: dop.set("ifcfg", [primary_dev, "NETMASK"], netmask) if gateway: dop.set("ifcfg", [primary_dev, "GATEWAY"], gateway) if ifcfg_parser.write_conf(dop.getconf("ifcfg")) is False: raise KssCommandException('Failure write network config file.') self.up_progress(10) remove_file("%s/ifcfg-%s" % (NETWORK_IFCFG_DIR, opts.dev)) self.up_progress(10) dop = DictOp() modprobe_parser = modprobe_confParser() dop.addconf("modprobe_conf", modprobe_parser.read_conf()) if dop.getconf("modprobe_conf") == {}: raise KssCommandException('Failure read modprobe config file.') dop.unset("modprobe_conf", ["alias", opts.dev]) if modprobe_parser.write_conf(dop.getconf("modprobe_conf")) is False: raise KssCommandException('Failure write modprobe config file.') self.up_progress(10) # # Delete bridge device # bridge_list = get_bridge_info() bond_bridge = None for bridge in bridge_list: if opts.dev in bridge_list[bridge]: bond_bridge = bridge if bond_bridge: ifdown_cmd = ( NETWORK_IFDOWN_COMMAND, bond_bridge, ) (ifdown_rc, ifdown_res) = execute_command(ifdown_cmd) if ifdown_rc != 0: raise KssCommandException( 'Failure stop interface. interface:%s' % (dev)) for brif in bridge_list[bond_bridge]: brctl_delif_cmd = ( NETWORK_BRCTL_COMMAND, "delif", bond_bridge, brif, ) (brctl_rc, brctl_res) = execute_command(brctl_delif_cmd) if brctl_rc != 0: raise KssCommandException( 'Failure delete bridge port. bridge:%s port:%s' % (dev, brif)) brctl_delbr_cmd = ( NETWORK_BRCTL_COMMAND, "delbr", bond_bridge, ) (brctl_rc, brctl_res) = execute_command(brctl_delbr_cmd) if brctl_rc != 0: raise KssCommandException('Failure delete bridge. bridge:%s' % (dev, brif)) remove_file("%s/ifcfg-%s" % (NETWORK_IFCFG_DIR, bond_bridge)) # # Unload bonding module # remove_bonding_cmd = ( SYSTEM_COMMAND_REMOVE_MODULE, "bonding", ) (rmmod_rc, rmmod_res) = execute_command(remove_bonding_cmd) if rmmod_rc != 0: raise KssCommandException('Failure remove bonding module.') # # Restart network # network_restart_cmd = ( NETWORK_COMMAND, "restart", ) (net_rc, net_res) = execute_command(network_restart_cmd) if net_rc != 0: raise KssCommandException('Failure restart network.') self.logger.info("Deleted bonding device. - bond=%s dev=%s" % (opts.dev, ','.join(restore_dev_list))) print >> sys.stdout, _("Deleted bonding device. - bond=%s dev=%s" % (opts.dev, ','.join(restore_dev_list))) return True
def process(self): (opts, args) = getopts() chkopts(opts) self.up_progress(10) dev_list = comma_split(opts.dev) if len(dev_list) < 2: # TRANSLATORS: # bondingするためのdeviceが少ないです raise KssCommandOptException('ERROR: Small device for bonding. - dev=%s' % (opts.dev)) interface_list = get_ifconfig_info() for dev in dev_list: if dev not in interface_list: raise KssCommandOptException('ERROR: Bonding target device not found. - dev=%s' % (dev)) if opts.primary not in dev_list: raise KssCommandOptException('ERROR: Primary device not found in bonding device. - primary=%s dev=%s' % (opts.primary, opts.dev)) exist_bond_max_num = -1 exist_bond_list = get_ifconfig_info("regex:^bond") for bond_name in exist_bond_list.keys(): try: num = int(bond_name.replace("bond","")) except ValueError: continue if exist_bond_max_num < num: exist_bond_max_num = num self.up_progress(10) physical_bond_name = "bond%s" % (exist_bond_max_num + 1) bridge_bond_name = "bondbr%s" % (exist_bond_max_num + 1) bond_options = '"mode=%s primary=%s miimon=%s"' % (opts.mode, opts.primary, BONDING_CONFIG_MII_DEFAULT) self.up_progress(10) dop = DictOp() ifcfg_parser = ifcfgParser() modprobe_parser = modprobe_confParser() dop.addconf("ifcfg", ifcfg_parser.read_conf()) if dop.getconf("ifcfg") == {}: raise KssCommandException('Failure read network config file.') dop.addconf("modprobe_conf", modprobe_parser.read_conf()) if dop.getconf("modprobe_conf") == {}: raise KssCommandException('Failure read modprobe config file.') self.up_progress(10) eth_conf_copykey = ["HWADDR", "BOOTPROTO", "ONBOOT", "USERCTL", ] bond_conf_nocopykey = ["TYPE", "HWADDR", "MACADDR", "ETHTOOL_OPTS", "ESSID", "CHANNEL", ] self.up_progress(10) for dev in dev_list: conf = dop.get("ifcfg", dev) if dev == opts.primary: primary_conf = copy.deepcopy(conf) dop.unset("ifcfg", dev) dop.set("ifcfg", [dev, "DEVICE"], conf["DEVICE"]["value"]) for key in eth_conf_copykey: if key in conf: dop.set("ifcfg", [dev, key], conf[key]["value"]) dop.set("ifcfg", [dev, "MASTER"], physical_bond_name) dop.set("ifcfg", [dev, "SLAVE"], "yes") dop.set("ifcfg", [dev, "BOOTPROTO"], "none") if dop.get("ifcfg", "p%s" % (dev)): hwaddr = dop.get("ifcfg", ["p%s" % (dev), "HWADDR"]) if hwaddr: dop.set("ifcfg", [dev, "HWADDR"], hwaddr) dop.unset("ifcfg", "p%s" % (dev)) for key in bond_conf_nocopykey: if key in primary_conf: del primary_conf[key] dop.set("ifcfg", bridge_bond_name, primary_conf) dop.set("ifcfg", [bridge_bond_name, "DEVICE"], bridge_bond_name) dop.set("ifcfg", [bridge_bond_name, "TYPE"], "Bridge") dop.set("ifcfg", [physical_bond_name, "DEVICE"], physical_bond_name) dop.set("ifcfg", [physical_bond_name, "BRIDGE"], bridge_bond_name) dop.set("ifcfg", [physical_bond_name, "BOOTPROTO"], "none") dop.set("ifcfg", [physical_bond_name, "ONBOOT"], dop.get("ifcfg", [bridge_bond_name, "ONBOOT"])) dop.set("ifcfg", [physical_bond_name, "BONDING_OPTS"], bond_options) self.up_progress(10) dop.set("modprobe_conf", ["alias", physical_bond_name], "bonding") for dev in dev_list: if os.path.isfile("%s/ifcfg-%s" % (NETWORK_IFCFG_DIR, dev)): copy_file("%s/ifcfg-%s" % (NETWORK_IFCFG_DIR, dev), VENDOR_DATA_BONDING_EVACUATION_DIR) if os.path.isfile("%s/ifcfg-p%s" % (NETWORK_IFCFG_DIR, dev)): move_file("%s/ifcfg-p%s" % (NETWORK_IFCFG_DIR, dev), VENDOR_DATA_BONDING_EVACUATION_DIR) if ifcfg_parser.write_conf(dop.getconf("ifcfg")) is False: raise KssCommandException('Failure write network config file.') if modprobe_parser.write_conf(dop.getconf("modprobe_conf")) is False: raise KssCommandException('Failure write modprobe config file.') self.up_progress(10) # # Delete bridge device # bridge_list = get_bridge_info() for dev in dev_list: if dev in bridge_list: ifdown_cmd = (NETWORK_IFDOWN_COMMAND, dev, ) (ifdown_rc, ifdown_res) = execute_command(ifdown_cmd) if ifdown_rc != 0: raise KssCommandException('Failure stop interface. interface:%s' % (dev)) for brif in bridge_list[dev]: brctl_delif_cmd = (NETWORK_BRCTL_COMMAND, "delif", dev, brif, ) (brctl_rc, brctl_res) = execute_command(brctl_delif_cmd) if brctl_rc != 0: raise KssCommandException('Failure delete bridge port. bridge:%s port:%s' % (dev, brif)) brctl_delbr_cmd = (NETWORK_BRCTL_COMMAND, "delbr", dev, ) (brctl_rc, brctl_res) = execute_command(brctl_delbr_cmd) if brctl_rc != 0: raise KssCommandException('Failure delete bridge. bridge:%s' % (dev, brif)) self.up_progress(10) # # Restart network # network_restart_cmd = (NETWORK_COMMAND, "restart", ) (net_rc, net_res) = execute_command(network_restart_cmd) if net_rc != 0: raise KssCommandException('Failure restart network.') self.logger.info("Created bonding device. - dev=%s bond=%s" % (opts.dev, bridge_bond_name)) print >>sys.stdout, _("Created bonding device. - dev=%s bond=%s" % (opts.dev, bridge_bond_name)) return True
def process(self): (opts, args) = getopts() chkopts(opts) self.up_progress(10) dev_list = comma_split(opts.dev) if len(dev_list) < 2: # TRANSLATORS: # bondingするためのdeviceが少ないです raise KssCommandOptException( 'ERROR: Small device for bonding. - dev=%s' % (opts.dev)) interface_list = get_ifconfig_info() for dev in dev_list: if dev not in interface_list: raise KssCommandOptException( 'ERROR: Bonding target device not found. - dev=%s' % (dev)) if opts.primary not in dev_list: raise KssCommandOptException( 'ERROR: Primary device not found in bonding device. - primary=%s dev=%s' % (opts.primary, opts.dev)) exist_bond_max_num = -1 exist_bond_list = get_ifconfig_info("regex:^bond") for bond_name in exist_bond_list.keys(): try: num = int(bond_name.replace("bond", "")) except ValueError: continue if exist_bond_max_num < num: exist_bond_max_num = num self.up_progress(10) physical_bond_name = "bond%s" % (exist_bond_max_num + 1) bridge_bond_name = "bondbr%s" % (exist_bond_max_num + 1) bond_options = '"mode=%s primary=%s miimon=%s"' % ( opts.mode, opts.primary, BONDING_CONFIG_MII_DEFAULT) self.up_progress(10) dop = DictOp() ifcfg_parser = ifcfgParser() modprobe_parser = modprobe_confParser() dop.addconf("ifcfg", ifcfg_parser.read_conf()) if dop.getconf("ifcfg") == {}: raise KssCommandException('Failure read network config file.') dop.addconf("modprobe_conf", modprobe_parser.read_conf()) if dop.getconf("modprobe_conf") == {}: raise KssCommandException('Failure read modprobe config file.') self.up_progress(10) eth_conf_copykey = [ "HWADDR", "BOOTPROTO", "ONBOOT", "USERCTL", ] bond_conf_nocopykey = [ "TYPE", "HWADDR", "MACADDR", "ETHTOOL_OPTS", "ESSID", "CHANNEL", ] self.up_progress(10) for dev in dev_list: conf = dop.get("ifcfg", dev) if dev == opts.primary: primary_conf = copy.deepcopy(conf) dop.unset("ifcfg", dev) dop.set("ifcfg", [dev, "DEVICE"], conf["DEVICE"]["value"]) for key in eth_conf_copykey: if key in conf: dop.set("ifcfg", [dev, key], conf[key]["value"]) dop.set("ifcfg", [dev, "MASTER"], physical_bond_name) dop.set("ifcfg", [dev, "SLAVE"], "yes") dop.set("ifcfg", [dev, "BOOTPROTO"], "none") if dop.get("ifcfg", "p%s" % (dev)): hwaddr = dop.get("ifcfg", ["p%s" % (dev), "HWADDR"]) if hwaddr: dop.set("ifcfg", [dev, "HWADDR"], hwaddr) dop.unset("ifcfg", "p%s" % (dev)) for key in bond_conf_nocopykey: if key in primary_conf: del primary_conf[key] dop.set("ifcfg", bridge_bond_name, primary_conf) dop.set("ifcfg", [bridge_bond_name, "DEVICE"], bridge_bond_name) dop.set("ifcfg", [bridge_bond_name, "TYPE"], "Bridge") dop.set("ifcfg", [physical_bond_name, "DEVICE"], physical_bond_name) dop.set("ifcfg", [physical_bond_name, "BRIDGE"], bridge_bond_name) dop.set("ifcfg", [physical_bond_name, "BOOTPROTO"], "none") dop.set("ifcfg", [physical_bond_name, "ONBOOT"], dop.get("ifcfg", [bridge_bond_name, "ONBOOT"])) dop.set("ifcfg", [physical_bond_name, "BONDING_OPTS"], bond_options) self.up_progress(10) dop.set("modprobe_conf", ["alias", physical_bond_name], "bonding") for dev in dev_list: if os.path.isfile("%s/ifcfg-%s" % (NETWORK_IFCFG_DIR, dev)): copy_file("%s/ifcfg-%s" % (NETWORK_IFCFG_DIR, dev), VENDOR_DATA_BONDING_EVACUATION_DIR) if os.path.isfile("%s/ifcfg-p%s" % (NETWORK_IFCFG_DIR, dev)): move_file("%s/ifcfg-p%s" % (NETWORK_IFCFG_DIR, dev), VENDOR_DATA_BONDING_EVACUATION_DIR) if ifcfg_parser.write_conf(dop.getconf("ifcfg")) is False: raise KssCommandException('Failure write network config file.') if modprobe_parser.write_conf(dop.getconf("modprobe_conf")) is False: raise KssCommandException('Failure write modprobe config file.') self.up_progress(10) # # Delete bridge device # bridge_list = get_bridge_info() for dev in dev_list: if dev in bridge_list: ifdown_cmd = ( NETWORK_IFDOWN_COMMAND, dev, ) (ifdown_rc, ifdown_res) = execute_command(ifdown_cmd) if ifdown_rc != 0: raise KssCommandException( 'Failure stop interface. interface:%s' % (dev)) for brif in bridge_list[dev]: brctl_delif_cmd = ( NETWORK_BRCTL_COMMAND, "delif", dev, brif, ) (brctl_rc, brctl_res) = execute_command(brctl_delif_cmd) if brctl_rc != 0: raise KssCommandException( 'Failure delete bridge port. bridge:%s port:%s' % (dev, brif)) brctl_delbr_cmd = ( NETWORK_BRCTL_COMMAND, "delbr", dev, ) (brctl_rc, brctl_res) = execute_command(brctl_delbr_cmd) if brctl_rc != 0: raise KssCommandException( 'Failure delete bridge. bridge:%s' % (dev, brif)) self.up_progress(10) # # Restart network # network_restart_cmd = ( NETWORK_COMMAND, "restart", ) (net_rc, net_res) = execute_command(network_restart_cmd) if net_rc != 0: raise KssCommandException('Failure restart network.') self.logger.info("Created bonding device. - dev=%s bond=%s" % (opts.dev, bridge_bond_name)) print >> sys.stdout, _("Created bonding device. - dev=%s bond=%s" % (opts.dev, bridge_bond_name)) return True