From 8b682b86dfd4ac142724151f4489063dbecc5bda Mon Sep 17 00:00:00 2001 From: Hangbin Liu Date: Fri, 24 Mar 2023 15:57:36 +0800 Subject: [PATCH 15/15] utils/team2bond: update python code format Signed-off-by: Hangbin Liu --- utils/team2bond | 114 ++++++++++++++++++++++++++---------------------- 1 file changed, 62 insertions(+), 52 deletions(-) diff --git a/utils/team2bond b/utils/team2bond index 2f5d868..2032c1d 100755 --- a/utils/team2bond +++ b/utils/team2bond @@ -6,40 +6,42 @@ import subprocess import json import sys + def handle_cmd_line(): parser = OptionParser() - parser.add_option('--config', dest='config', default = '', - help = "convert the team JSON format configuration file " \ - + "to NetworkManager connection profile, please use " \ - + "'teamdctl TEAM config dump [actual]' to dump the config file." \ - + " Note the script only convert config file. IP " \ + parser.add_option('--config', dest='config', default='', + help="convert the team JSON format configuration file " + + "to NetworkManager connection profile, please use " + + "'teamdctl TEAM config dump [actual]' to dump the config file." + + " Note the script only convert config file. IP " + "address configurations still need to be set manually.") - parser.add_option('--rename', dest='rename', default = '', - help = "rename the default team interface name." \ - + " Careful: firewall rules, aliases interfaces, etc., " \ - + "will break after the renaming because the tool " \ + parser.add_option('--rename', dest='rename', default='', + help="rename the default team interface name." + + " Careful: firewall rules, aliases interfaces, etc., " + + "will break after the renaming because the tool " + "will only change the config file, nothing else.") group = OptionGroup(parser, 'Dangerous Options', - "Caution: You need to dump the team configuration " \ - "file first and then delete old team device to avoid " \ + "Caution: You need to dump the team configuration " + "file first and then delete old team device to avoid " "device name conflicts.") - group.add_option('--exec-cmd', dest='exec_cmd', action='store_true', default = False, - help = "exec nmcli and add the connections directly " \ - + "instead of printing the nmcli cmd to screen. " \ - + "This parameter is NOT recommended, it would be good " \ - + "to double check the cmd before apply.") + group.add_option('--exec-cmd', dest='exec_cmd', action='store_true', default=False, + help="exec nmcli and add the connections directly " + + "instead of printing the nmcli cmd to screen. " + + "This parameter is NOT recommended, it would be good " + + "to double check the cmd before apply.") parser.add_option_group(group) (options, args) = parser.parse_args() if subprocess.run(['nmcli', '-v'], stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL).returncode != 0: - print("Warn: NetworkManager is needed for this script!"); + print("Warn: NetworkManager is needed for this script!") sys.exit(1) return options + def convert_runner_opts(runner_opts): bond_opts = "" @@ -50,14 +52,14 @@ def convert_runner_opts(runner_opts): elif runner_opts['name'] == 'activebackup': bond_opts = "mode=active-backup" if 'hwaddr_policy' in runner_opts: - if runner_opts['hwaddr_policy'] == 'same_all': - bond_opts += ",fail_over_mac=none" - elif runner_opts['hwaddr_policy'] == 'by_active': - bond_opts += ",fail_over_mac=active" - elif runner_opts['hwaddr_policy'] == 'only_active': - bond_opts += ",fail_over_mac=follow" - else: - print("# Warn: invalid runner.hwaddr_policy: " + runner_opts['hwaddr_policy']) + if runner_opts['hwaddr_policy'] == 'same_all': + bond_opts += ",fail_over_mac=none" + elif runner_opts['hwaddr_policy'] == 'by_active': + bond_opts += ",fail_over_mac=active" + elif runner_opts['hwaddr_policy'] == 'only_active': + bond_opts += ",fail_over_mac=follow" + else: + print("# Warn: invalid runner.hwaddr_policy: " + runner_opts['hwaddr_policy']) elif runner_opts['name'] == 'loadbalance': bond_opts = "mode=balance-tlb" elif runner_opts['name'] == 'lacp': @@ -73,7 +75,7 @@ def convert_runner_opts(runner_opts): else: bond_opts += ",lacp_rate=0" if 'sys_prio' in runner_opts: - bond_opts += ",ad_actor_sys_prio=" + str(runner_opts['sys_prio']) + bond_opts += ",ad_actor_sys_prio=" + str(runner_opts['sys_prio']) if 'min_ports' in runner_opts: bond_opts += ",min_links=" + str(runner_opts['min_ports']) if 'agg_select_policy' in runner_opts: @@ -83,7 +85,7 @@ def convert_runner_opts(runner_opts): bond_opts += ",ad_select=count" else: print("# Warn: Option runner.agg_select_policy: %s is not supported by bonding" % - runner_opts['agg_select_policy']) + runner_opts['agg_select_policy']) sys.exit(1) else: print("Error: Unsupported runner.name: %s for bonding" % runner_opts['name']) @@ -92,14 +94,14 @@ def convert_runner_opts(runner_opts): if 'tx_hash' in runner_opts: print("# Warn: tx_hash ipv4, ipv6, tcp, udp, sctp are not supported by bonding") if 'vlan' in runner_opts['tx_hash']: - bond_opts +=",xmit_hash_policy=vlan+srcmac" + bond_opts += ",xmit_hash_policy=vlan+srcmac" if 'eth' in runner_opts['tx_hash']: - bond_opts +=",xmit_hash_policy=layer2" + bond_opts += ",xmit_hash_policy=layer2" if 'l3' in runner_opts['tx_hash'] or 'ip' in runner_opts['tx_hash']: - bond_opts +="+3" - elif ('l3' in runner_opts['tx_hash'] or 'ip' in runner_opts['tx_hash']) \ - and 'l4' in runner_opts['tx_hash']: - bond_opts +=",xmit_hash_policy=layer3+4" + bond_opts += "+3" + elif (('l3' in runner_opts['tx_hash'] or 'ip' in runner_opts['tx_hash']) + and 'l4' in runner_opts['tx_hash']): + bond_opts += ",xmit_hash_policy=layer3+4" if 'tx_balancer' in runner_opts: if 'name' in runner_opts['tx_balancer']: @@ -107,14 +109,15 @@ def convert_runner_opts(runner_opts): bond_opts += ",tlb_dynamic_lb=1" if 'balancing_interval' in runner_opts['tx_balancer']: print("# Warn: option runner.tx_balancer.balancing_interval: %d is not supported by bonding" % - runner_opts['tx_balancer']['balancing_interval']) + runner_opts['tx_balancer']['balancing_interval']) return bond_opts + # target_hosts is used to store multi targets # exist_opts is used to check if there are duplicated options def convert_link_watch(link_watch_opts, target_hosts, exist_opts): - bond_opts="" + bond_opts = "" if 'name' not in link_watch_opts: print("Error: no link_watch.name in team config file!") sys.exit(1) @@ -159,8 +162,8 @@ def convert_link_watch(link_watch_opts, target_hosts, exist_opts): else: bond_opts += ",arp_missed_max=" + str(link_watch_opts['missed_max']) - if 'validate_active' in link_watch_opts and link_watch_opts['validate_active'] and \ - 'validate_inactive' in link_watch_opts and link_watch_opts['validate_inactive']: + if ('validate_active' in link_watch_opts and link_watch_opts['validate_active'] and + 'validate_inactive' in link_watch_opts and link_watch_opts['validate_inactive']): if exist_opts.find('arp_validate') >= 0: print("# Warn: duplicated arp_validate detected, bonding supports only one.") else: @@ -177,20 +180,25 @@ def convert_link_watch(link_watch_opts, target_hosts, exist_opts): bond_opts += ",arp_validate=backup" if 'init_wait' in link_watch_opts: - print("# Warn: option link_watch.init_wait: %d is not supported by bonding" % link_watch_opts['init_wait']) + print("# Warn: option link_watch.init_wait: %d is not supported by bonding" % + link_watch_opts['init_wait']) if 'source_host' in link_watch_opts: - print("# Warn: option link_watch.source_host: %s is not supported by bonding" % link_watch_opts['source_host']) + print("# Warn: option link_watch.source_host: %s is not supported by bonding" % + link_watch_opts['source_host']) if 'vlanid' in link_watch_opts: - print("# Warn: option link_watch.vlanid: %d is not supported by bonding" % link_watch_opts['vlanid']) + print("# Warn: option link_watch.vlanid: %d is not supported by bonding" % + link_watch_opts['vlanid']) if 'send_always' in link_watch_opts: - print("# Warn: option link_watch.send_always: %r is not supported by bonding" % link_watch_opts['send_always']) + print("# Warn: option link_watch.send_always: %r is not supported by bonding" % + link_watch_opts['send_always']) else: print("# Error: Option link_watch.name: %s is not supported by bonding" % - link_watch_opts['name']) + link_watch_opts['name']) sys.exit(1) return bond_opts + def convert_opts(bond_name, team_opts, exec_cmd): bond_opts = "" @@ -214,7 +222,8 @@ def convert_opts(bond_name, team_opts, exec_cmd): if 'count' in team_opts['mcast_rejoin']: bond_opts += ",resend_igmp=" + str(team_opts['mcast_rejoin']['count']) if 'interval' in team_opts['mcast_rejoin']: - print("# Warn: option mcast_rejoin.interval: %d is not supported by bonding" % team_opts['mcast_rejoin']['count']) + print("# Warn: option mcast_rejoin.interval: %d is not supported by bonding" % + team_opts['mcast_rejoin']['count']) # The link_watch maybe a dict or list target_hosts = list() @@ -252,12 +261,12 @@ def convert_opts(bond_name, team_opts, exec_cmd): subprocess.run(['nmcli', 'con', 'add', 'type', 'bond', 'ifname', bond_name, 'bond.options', bond_opts]) else: - print('nmcli con add type bond ifname ' + bond_name \ + print('nmcli con add type bond ifname ' + bond_name + ' bond.options "' + bond_opts + '"') + def setup_ports(bond_name, team_opts, exec_cmd): primary = {'name': "", 'prio': -2**63, 'sticky': False} - bond_ports = [] lacp_key = 0 prio = 0 @@ -270,7 +279,7 @@ def setup_ports(bond_name, team_opts, exec_cmd): port_options.append(str(team_opts['ports'][iface]['queue_id'])) if 'lacp_prio' in team_opts['ports'][iface]: print("# Warn: Option lacp_prio: %d on interface %s is not supported by bonding" % - (team_opts['ports'][iface]['lacp_prio'], iface)) + (team_opts['ports'][iface]['lacp_prio'], iface)) if 'lacp_key' in team_opts['ports'][iface]: if lacp_key == 0: lacp_key = team_opts['ports'][iface]['lacp_key'] @@ -279,14 +288,14 @@ def setup_ports(bond_name, team_opts, exec_cmd): print("# Warn: Option lacp_key: Invalid value %d for port %s" % (lacp_key, iface)) else: print("# Warn: Option lacp_key: already has one key %d, ignore the new one %d" % - (lacp_key, team_opts['ports'][iface]['lacp_key'])) + (lacp_key, team_opts['ports'][iface]['lacp_key'])) if 'prio' in team_opts['ports'][iface]: prio = int(team_opts['ports'][iface]['prio']) if prio > primary['prio'] and primary['sticky'] is False: primary['name'] = iface primary['prio'] = prio - if 'sticky' in team_opts['ports'][iface] and \ - team_opts['ports'][iface]['sticky']: + if ('sticky' in team_opts['ports'][iface] and + team_opts['ports'][iface]['sticky']): primary['name'] = iface primary['sticky'] = True @@ -311,7 +320,7 @@ def setup_ports(bond_name, team_opts, exec_cmd): subprocess.run(['nmcli', 'con', 'mod', 'bond-' + bond_name, '+bond.options', "ad_user_port_key=" + str(lacp_key)]) else: - print('nmcli con mod bond-' + bond_name \ + print('nmcli con mod bond-' + bond_name + ' +bond.options "ad_user_port_key=' + str(lacp_key) + '"') if primary['name']: @@ -319,9 +328,10 @@ def setup_ports(bond_name, team_opts, exec_cmd): subprocess.run(['nmcli', 'con', 'mod', 'bond-' + bond_name, '+bond.options', "primary=" + primary['name']]) else: - print('nmcli con mod bond-' + bond_name \ + print('nmcli con mod bond-' + bond_name + ' +bond.options "primary=' + primary['name'] + '"') + def main(): options = handle_cmd_line() team_opts = dict() @@ -358,4 +368,4 @@ def main(): print("### After this, IP addresses, routes, and so on, need to be configured.") if __name__ == '__main__': - main() + main() -- 2.38.1