diff options
Diffstat (limited to 'os_net_config/objects.py')
-rw-r--r-- | os_net_config/objects.py | 165 |
1 files changed, 104 insertions, 61 deletions
diff --git a/os_net_config/objects.py b/os_net_config/objects.py index 8d52e73..944aecd 100644 --- a/os_net_config/objects.py +++ b/os_net_config/objects.py @@ -181,7 +181,7 @@ class _BaseOpts(object): def __init__(self, name, use_dhcp=False, use_dhcpv6=False, addresses=None, routes=None, mtu=None, primary=False, nic_mapping=None, persist_mapping=False, defroute=True, dhclient_args=None, - dns_servers=None): + dns_servers=None, nm_controlled=False): addresses = addresses or [] routes = routes or [] dns_servers = dns_servers or [] @@ -209,6 +209,7 @@ class _BaseOpts(object): self.defroute = defroute self.dhclient_args = dhclient_args self.dns_servers = dns_servers + self.nm_controlled = nm_controlled self.bridge_name = None # internal self.linux_bridge_name = None # internal self.ivs_bridge_name = None # internal @@ -244,6 +245,7 @@ class _BaseOpts(object): mtu = json.get('mtu', None) dhclient_args = json.get('dhclient_args') dns_servers = json.get('dns_servers') + nm_controlled = json.get('nm_controlled') primary = strutils.bool_from_string(str(json.get('primary', False))) addresses = [] routes = [] @@ -274,11 +276,11 @@ class _BaseOpts(object): if include_primary: return (use_dhcp, use_dhcpv6, addresses, routes, mtu, primary, nic_mapping, persist_mapping, defroute, dhclient_args, - dns_servers) + dns_servers, nm_controlled) else: return (use_dhcp, use_dhcpv6, addresses, routes, mtu, nic_mapping, persist_mapping, defroute, dhclient_args, - dns_servers) + dns_servers, nm_controlled) class Interface(_BaseOpts): @@ -287,22 +289,27 @@ class Interface(_BaseOpts): def __init__(self, name, use_dhcp=False, use_dhcpv6=False, addresses=None, routes=None, mtu=None, primary=False, nic_mapping=None, persist_mapping=False, defroute=True, dhclient_args=None, - dns_servers=None, ethtool_opts=None): + dns_servers=None, nm_controlled=False, ethtool_opts=None, + hotplug=False): addresses = addresses or [] routes = routes or [] dns_servers = dns_servers or [] super(Interface, self).__init__(name, use_dhcp, use_dhcpv6, addresses, routes, mtu, primary, nic_mapping, persist_mapping, defroute, - dhclient_args, dns_servers) + dhclient_args, dns_servers, + nm_controlled) self.ethtool_opts = ethtool_opts + self.hotplug = hotplug @staticmethod def from_json(json): name = _get_required_field(json, 'name', 'Interface') + hotplug = strutils.bool_from_string(str(json.get('hotplug', False))) opts = _BaseOpts.base_opts_from_json(json) ethtool_opts = json.get('ethtool_opts', None) - return Interface(name, *opts, ethtool_opts=ethtool_opts) + return Interface(name, *opts, ethtool_opts=ethtool_opts, + hotplug=hotplug) class Vlan(_BaseOpts): @@ -315,7 +322,7 @@ class Vlan(_BaseOpts): def __init__(self, device, vlan_id, use_dhcp=False, use_dhcpv6=False, addresses=None, routes=None, mtu=None, primary=False, nic_mapping=None, persist_mapping=False, defroute=True, - dhclient_args=None, dns_servers=None): + dhclient_args=None, dns_servers=None, nm_controlled=False): addresses = addresses or [] routes = routes or [] dns_servers = dns_servers or [] @@ -323,7 +330,7 @@ class Vlan(_BaseOpts): super(Vlan, self).__init__(name, use_dhcp, use_dhcpv6, addresses, routes, mtu, primary, nic_mapping, persist_mapping, defroute, dhclient_args, - dns_servers) + dns_servers, nm_controlled) self.vlan_id = int(vlan_id) mapped_nic_names = _mapped_nics(nic_mapping) @@ -347,7 +354,7 @@ class IvsInterface(_BaseOpts): def __init__(self, vlan_id, name='ivs', use_dhcp=False, use_dhcpv6=False, addresses=None, routes=None, mtu=1500, primary=False, nic_mapping=None, persist_mapping=False, defroute=True, - dhclient_args=None, dns_servers=None): + dhclient_args=None, dns_servers=None, nm_controlled=False): addresses = addresses or [] routes = routes or [] dns_servers = dns_servers or [] @@ -356,7 +363,7 @@ class IvsInterface(_BaseOpts): addresses, routes, mtu, primary, nic_mapping, persist_mapping, defroute, dhclient_args, - dns_servers) + dns_servers, nm_controlled) self.vlan_id = int(vlan_id) @staticmethod @@ -373,7 +380,8 @@ class NfvswitchInternal(_BaseOpts): def __init__(self, vlan_id, name='nfvswitch', use_dhcp=False, use_dhcpv6=False, addresses=None, routes=None, mtu=1500, primary=False, nic_mapping=None, persist_mapping=False, - defroute=True, dhclient_args=None, dns_servers=None): + defroute=True, dhclient_args=None, dns_servers=None, + nm_controlled=False): addresses = addresses or [] routes = routes or [] dns_servers = dns_servers or [] @@ -382,7 +390,8 @@ class NfvswitchInternal(_BaseOpts): use_dhcpv6, addresses, routes, mtu, primary, nic_mapping, persist_mapping, defroute, - dhclient_args, dns_servers) + dhclient_args, dns_servers, + nm_controlled) self.vlan_id = int(vlan_id) @staticmethod @@ -400,7 +409,7 @@ class OvsBridge(_BaseOpts): routes=None, mtu=None, members=None, ovs_options=None, ovs_extra=None, nic_mapping=None, persist_mapping=False, defroute=True, dhclient_args=None, dns_servers=None, - fail_mode=None): + nm_controlled=False, fail_mode=None): addresses = addresses or [] routes = routes or [] members = members or [] @@ -408,7 +417,8 @@ class OvsBridge(_BaseOpts): super(OvsBridge, self).__init__(name, use_dhcp, use_dhcpv6, addresses, routes, mtu, False, nic_mapping, persist_mapping, defroute, - dhclient_args, dns_servers) + dhclient_args, dns_servers, + nm_controlled) self.members = members self.ovs_options = ovs_options ovs_extra = ovs_extra or [] @@ -433,10 +443,13 @@ class OvsBridge(_BaseOpts): name = _get_required_field(json, 'name', 'OvsBridge') (use_dhcp, use_dhcpv6, addresses, routes, mtu, nic_mapping, persist_mapping, defroute, - dhclient_args, dns_servers) = _BaseOpts.base_opts_from_json( + dhclient_args, dns_servers, + nm_controlled) = _BaseOpts.base_opts_from_json( json, include_primary=False) ovs_options = json.get('ovs_options') - ovs_extra = json.get('ovs_extra') + ovs_extra = json.get('ovs_extra', []) + if not isinstance(ovs_extra, list): + ovs_extra = [ovs_extra] fail_mode = json.get('ovs_fail_mode', DEFAULT_OVS_BRIDGE_FAIL_MODE) members = [] @@ -456,7 +469,7 @@ class OvsBridge(_BaseOpts): ovs_extra=ovs_extra, nic_mapping=nic_mapping, persist_mapping=persist_mapping, defroute=defroute, dhclient_args=dhclient_args, dns_servers=dns_servers, - fail_mode=fail_mode) + nm_controlled=nm_controlled, fail_mode=fail_mode) class OvsUserBridge(_BaseOpts): @@ -466,12 +479,12 @@ class OvsUserBridge(_BaseOpts): routes=None, mtu=None, members=None, ovs_options=None, ovs_extra=None, nic_mapping=None, persist_mapping=False, defroute=True, dhclient_args=None, dns_servers=None, - fail_mode=None): + nm_controlled=False, fail_mode=None): super(OvsUserBridge, self).__init__(name, use_dhcp, use_dhcpv6, addresses, routes, mtu, False, nic_mapping, persist_mapping, defroute, dhclient_args, - dns_servers) + dns_servers, nm_controlled) self.members = members or [] self.ovs_options = ovs_options ovs_extra = ovs_extra or [] @@ -498,10 +511,13 @@ class OvsUserBridge(_BaseOpts): name = _get_required_field(json, 'name', 'OvsUserBridge') (use_dhcp, use_dhcpv6, addresses, routes, mtu, nic_mapping, persist_mapping, defroute, - dhclient_args, dns_servers) = _BaseOpts.base_opts_from_json( + dhclient_args, dns_servers, + nm_controlled) = _BaseOpts.base_opts_from_json( json, include_primary=False) ovs_options = json.get('ovs_options') - ovs_extra = json.get('ovs_extra') + ovs_extra = json.get('ovs_extra', []) + if not isinstance(ovs_extra, list): + ovs_extra = [ovs_extra] fail_mode = json.get('ovs_fail_mode', DEFAULT_OVS_BRIDGE_FAIL_MODE) members = [] @@ -521,7 +537,8 @@ class OvsUserBridge(_BaseOpts): ovs_extra=ovs_extra, nic_mapping=nic_mapping, persist_mapping=persist_mapping, defroute=defroute, dhclient_args=dhclient_args, - dns_servers=dns_servers, fail_mode=fail_mode) + dns_servers=dns_servers, + nm_controlled=nm_controlled, fail_mode=fail_mode) class LinuxBridge(_BaseOpts): @@ -530,7 +547,7 @@ class LinuxBridge(_BaseOpts): def __init__(self, name, use_dhcp=False, use_dhcpv6=False, addresses=None, routes=None, mtu=None, members=None, nic_mapping=None, persist_mapping=False, defroute=True, dhclient_args=None, - dns_servers=None): + dns_servers=None, nm_controlled=False): addresses = addresses or [] routes = routes or [] members = members or [] @@ -538,7 +555,8 @@ class LinuxBridge(_BaseOpts): super(LinuxBridge, self).__init__(name, use_dhcp, use_dhcpv6, addresses, routes, mtu, False, nic_mapping, persist_mapping, - defroute, dhclient_args, dns_servers) + defroute, dhclient_args, dns_servers, + nm_controlled) self.members = members for member in self.members: member.linux_bridge_name = name @@ -557,7 +575,7 @@ class LinuxBridge(_BaseOpts): name = _get_required_field(json, 'name', 'LinuxBridge') (use_dhcp, use_dhcpv6, addresses, routes, mtu, nic_mapping, persist_mapping, defroute, dhclient_args, - dns_servers) = _BaseOpts.base_opts_from_json( + dns_servers, nm_controlled) = _BaseOpts.base_opts_from_json( json, include_primary=False) members = [] @@ -576,7 +594,8 @@ class LinuxBridge(_BaseOpts): members=members, nic_mapping=nic_mapping, persist_mapping=persist_mapping, defroute=defroute, dhclient_args=dhclient_args, - dns_servers=dns_servers) + dns_servers=dns_servers, + nm_controlled=nm_controlled) class IvsBridge(_BaseOpts): @@ -595,7 +614,7 @@ class IvsBridge(_BaseOpts): def __init__(self, name='ivs', use_dhcp=False, use_dhcpv6=False, addresses=None, routes=None, mtu=1500, members=None, nic_mapping=None, persist_mapping=False, defroute=True, - dhclient_args=None, dns_servers=None): + dhclient_args=None, dns_servers=None, nm_controlled=False): addresses = addresses or [] routes = routes or [] members = members or [] @@ -603,7 +622,8 @@ class IvsBridge(_BaseOpts): super(IvsBridge, self).__init__(name, use_dhcp, use_dhcpv6, addresses, routes, mtu, False, nic_mapping, persist_mapping, - defroute, dhclient_args, dns_servers) + defroute, dhclient_args, dns_servers, + nm_controlled) self.members = members for member in self.members: if isinstance(member, OvsBond) or isinstance(member, LinuxBond): @@ -618,7 +638,7 @@ class IvsBridge(_BaseOpts): name = 'ivs' (use_dhcp, use_dhcpv6, addresses, routes, mtu, nic_mapping, persist_mapping, defroute, dhclient_args, - dns_servers) = _BaseOpts.base_opts_from_json( + dns_servers, nm_controlled) = _BaseOpts.base_opts_from_json( json, include_primary=False) members = [] @@ -637,7 +657,7 @@ class IvsBridge(_BaseOpts): members=members, nic_mapping=nic_mapping, persist_mapping=persist_mapping, defroute=defroute, dhclient_args=dhclient_args, - dns_servers=dns_servers) + dns_servers=dns_servers, nm_controlled=nm_controlled) class NfvswitchBridge(_BaseOpts): @@ -651,7 +671,8 @@ class NfvswitchBridge(_BaseOpts): def __init__(self, name='nfvswitch', use_dhcp=False, use_dhcpv6=False, addresses=None, routes=None, mtu=1500, members=None, nic_mapping=None, persist_mapping=False, defroute=True, - dhclient_args=None, dns_servers=None, options=""): + dhclient_args=None, dns_servers=None, nm_controlled=False, + options=""): addresses = addresses or [] routes = routes or [] members = members or [] @@ -660,7 +681,7 @@ class NfvswitchBridge(_BaseOpts): addresses, routes, mtu, False, nic_mapping, persist_mapping, defroute, dhclient_args, - dns_servers) + dns_servers, nm_controlled) self.options = options self.members = members for member in self.members: @@ -676,7 +697,7 @@ class NfvswitchBridge(_BaseOpts): name = 'nfvswitch' (use_dhcp, use_dhcpv6, addresses, routes, mtu, nic_mapping, persist_mapping, defroute, dhclient_args, - dns_servers) = _BaseOpts.base_opts_from_json( + dns_servers, nm_controlled) = _BaseOpts.base_opts_from_json( json, include_primary=False) # members @@ -700,7 +721,8 @@ class NfvswitchBridge(_BaseOpts): members=members, nic_mapping=nic_mapping, persist_mapping=persist_mapping, defroute=defroute, dhclient_args=dhclient_args, - dns_servers=dns_servers, options=options) + dns_servers=dns_servers, + nm_controlled=nm_controlled, options=options) class LinuxTeam(_BaseOpts): @@ -709,7 +731,8 @@ class LinuxTeam(_BaseOpts): def __init__(self, name, use_dhcp=False, use_dhcpv6=False, addresses=None, routes=None, mtu=None, primary=False, members=None, bonding_options=None, nic_mapping=None, persist_mapping=False, - defroute=True, dhclient_args=None, dns_servers=None): + defroute=True, dhclient_args=None, dns_servers=None, + nm_controlled=False): addresses = addresses or [] routes = routes or [] members = members or [] @@ -717,7 +740,8 @@ class LinuxTeam(_BaseOpts): super(LinuxTeam, self).__init__(name, use_dhcp, use_dhcpv6, addresses, routes, mtu, primary, nic_mapping, persist_mapping, defroute, - dhclient_args, dns_servers) + dhclient_args, dns_servers, + nm_controlled) self.members = members self.bonding_options = bonding_options for member in self.members: @@ -736,7 +760,7 @@ class LinuxTeam(_BaseOpts): name = _get_required_field(json, 'name', 'LinuxTeam') (use_dhcp, use_dhcpv6, addresses, routes, mtu, nic_mapping, persist_mapping, defroute, dhclient_args, - dns_servers) = _BaseOpts.base_opts_from_json( + dns_servers, nm_controlled) = _BaseOpts.base_opts_from_json( json, include_primary=False) bonding_options = json.get('bonding_options') members = [] @@ -756,7 +780,8 @@ class LinuxTeam(_BaseOpts): members=members, bonding_options=bonding_options, nic_mapping=nic_mapping, persist_mapping=persist_mapping, defroute=defroute, - dhclient_args=dhclient_args, dns_servers=dns_servers) + dhclient_args=dhclient_args, dns_servers=dns_servers, + nm_controlled=nm_controlled) class LinuxBond(_BaseOpts): @@ -765,7 +790,8 @@ class LinuxBond(_BaseOpts): def __init__(self, name, use_dhcp=False, use_dhcpv6=False, addresses=None, routes=None, mtu=None, primary=False, members=None, bonding_options=None, nic_mapping=None, persist_mapping=False, - defroute=True, dhclient_args=None, dns_servers=None): + defroute=True, dhclient_args=None, dns_servers=None, + nm_controlled=False): addresses = addresses or [] routes = routes or [] members = members or [] @@ -773,7 +799,8 @@ class LinuxBond(_BaseOpts): super(LinuxBond, self).__init__(name, use_dhcp, use_dhcpv6, addresses, routes, mtu, primary, nic_mapping, persist_mapping, defroute, - dhclient_args, dns_servers) + dhclient_args, dns_servers, + nm_controlled) self.members = members self.bonding_options = bonding_options for member in self.members: @@ -792,7 +819,7 @@ class LinuxBond(_BaseOpts): name = _get_required_field(json, 'name', 'LinuxBond') (use_dhcp, use_dhcpv6, addresses, routes, mtu, nic_mapping, persist_mapping, defroute, dhclient_args, - dns_servers) = _BaseOpts.base_opts_from_json( + dns_servers, nm_controlled) = _BaseOpts.base_opts_from_json( json, include_primary=False) bonding_options = json.get('bonding_options') members = [] @@ -812,7 +839,8 @@ class LinuxBond(_BaseOpts): members=members, bonding_options=bonding_options, nic_mapping=nic_mapping, persist_mapping=persist_mapping, defroute=defroute, - dhclient_args=dhclient_args, dns_servers=dns_servers) + dhclient_args=dhclient_args, dns_servers=dns_servers, + nm_controlled=nm_controlled) class OvsBond(_BaseOpts): @@ -822,7 +850,7 @@ class OvsBond(_BaseOpts): routes=None, mtu=None, primary=False, members=None, ovs_options=None, ovs_extra=None, nic_mapping=None, persist_mapping=False, defroute=True, dhclient_args=None, - dns_servers=None): + dns_servers=None, nm_controlled=False): addresses = addresses or [] routes = routes or [] members = members or [] @@ -830,7 +858,7 @@ class OvsBond(_BaseOpts): super(OvsBond, self).__init__(name, use_dhcp, use_dhcpv6, addresses, routes, mtu, primary, nic_mapping, persist_mapping, defroute, dhclient_args, - dns_servers) + dns_servers, nm_controlled) self.members = members self.ovs_options = ovs_options self.ovs_extra = format_ovs_extra(self, ovs_extra) @@ -853,10 +881,12 @@ class OvsBond(_BaseOpts): name = _get_required_field(json, 'name', 'OvsBond') (use_dhcp, use_dhcpv6, addresses, routes, mtu, nic_mapping, persist_mapping, defroute, dhclient_args, - dns_servers) = _BaseOpts.base_opts_from_json( + dns_servers, nm_controlled) = _BaseOpts.base_opts_from_json( json, include_primary=False) ovs_options = json.get('ovs_options') ovs_extra = json.get('ovs_extra', []) + if not isinstance(ovs_extra, list): + ovs_extra = [ovs_extra] members = [] # members @@ -874,7 +904,8 @@ class OvsBond(_BaseOpts): members=members, ovs_options=ovs_options, ovs_extra=ovs_extra, nic_mapping=nic_mapping, persist_mapping=persist_mapping, defroute=defroute, - dhclient_args=dhclient_args, dns_servers=dns_servers) + dhclient_args=dhclient_args, dns_servers=dns_servers, + nm_controlled=nm_controlled) class OvsTunnel(_BaseOpts): @@ -883,15 +914,16 @@ class OvsTunnel(_BaseOpts): def __init__(self, name, use_dhcp=False, use_dhcpv6=False, addresses=None, routes=None, mtu=None, primary=False, nic_mapping=None, persist_mapping=False, defroute=True, dhclient_args=None, - dns_servers=None, tunnel_type=None, ovs_options=None, - ovs_extra=None): + dns_servers=None, nm_controlled=False, tunnel_type=None, + ovs_options=None, ovs_extra=None): addresses = addresses or [] routes = routes or [] dns_servers = dns_servers or [] super(OvsTunnel, self).__init__(name, use_dhcp, use_dhcpv6, addresses, routes, mtu, primary, nic_mapping, persist_mapping, defroute, - dhclient_args, dns_servers) + dhclient_args, dns_servers, + nm_controlled) self.tunnel_type = tunnel_type self.ovs_options = ovs_options or [] self.ovs_extra = format_ovs_extra(self, ovs_extra) @@ -903,6 +935,8 @@ class OvsTunnel(_BaseOpts): ovs_options = json.get('ovs_options', []) ovs_options = ['options:%s' % opt for opt in ovs_options] ovs_extra = json.get('ovs_extra', []) + if not isinstance(ovs_extra, list): + ovs_extra = [ovs_extra] opts = _BaseOpts.base_opts_from_json(json) return OvsTunnel(name, *opts, tunnel_type=tunnel_type, ovs_options=ovs_options, ovs_extra=ovs_extra) @@ -914,8 +948,8 @@ class OvsPatchPort(_BaseOpts): def __init__(self, name, use_dhcp=False, use_dhcpv6=False, addresses=None, routes=None, mtu=None, primary=False, nic_mapping=None, persist_mapping=False, defroute=True, dhclient_args=None, - dns_servers=None, bridge_name=None, peer=None, - ovs_options=None, ovs_extra=None): + dns_servers=None, nm_controlled=False, bridge_name=None, + peer=None, ovs_options=None, ovs_extra=None): addresses = addresses or [] routes = routes or [] dns_servers = dns_servers or [] @@ -923,7 +957,7 @@ class OvsPatchPort(_BaseOpts): addresses, routes, mtu, primary, nic_mapping, persist_mapping, defroute, dhclient_args, - dns_servers) + dns_servers, nm_controlled) self.bridge_name = bridge_name self.peer = peer self.ovs_options = ovs_options or [] @@ -937,6 +971,8 @@ class OvsPatchPort(_BaseOpts): ovs_options = json.get('ovs_options', []) ovs_options = ['options:%s' % opt for opt in ovs_options] ovs_extra = json.get('ovs_extra', []) + if not isinstance(ovs_extra, list): + ovs_extra = [ovs_extra] opts = _BaseOpts.base_opts_from_json(json) return OvsPatchPort(name, *opts, bridge_name=bridge_name, peer=peer, ovs_options=ovs_options, ovs_extra=ovs_extra) @@ -948,14 +984,15 @@ class IbInterface(_BaseOpts): def __init__(self, name, use_dhcp=False, use_dhcpv6=False, addresses=None, routes=None, mtu=None, primary=False, nic_mapping=None, persist_mapping=False, defroute=True, dhclient_args=None, - dns_servers=None, ethtool_opts=None): + dns_servers=None, nm_controlled=False, ethtool_opts=None): addresses = addresses or [] routes = routes or [] dns_servers = dns_servers or [] super(IbInterface, self).__init__(name, use_dhcp, use_dhcpv6, addresses, routes, mtu, primary, nic_mapping, persist_mapping, - defroute, dhclient_args, dns_servers) + defroute, dhclient_args, dns_servers, + nm_controlled) self.ethtool_opts = ethtool_opts @staticmethod @@ -972,14 +1009,14 @@ class OvsDpdkPort(_BaseOpts): def __init__(self, name, use_dhcp=False, use_dhcpv6=False, addresses=None, routes=None, mtu=None, primary=False, nic_mapping=None, persist_mapping=False, defroute=True, dhclient_args=None, - dns_servers=None, members=None, driver='vfio-pci', - ovs_options=None, ovs_extra=None): + dns_servers=None, nm_controlled=False, members=None, + driver='vfio-pci', ovs_options=None, ovs_extra=None): super(OvsDpdkPort, self).__init__(name, use_dhcp, use_dhcpv6, addresses, routes, mtu, primary, nic_mapping, persist_mapping, defroute, dhclient_args, - dns_servers) + dns_servers, nm_controlled) self.members = members or [] self.ovs_options = ovs_options or [] self.ovs_extra = format_ovs_extra(self, ovs_extra) @@ -1020,6 +1057,8 @@ class OvsDpdkPort(_BaseOpts): ovs_options = json.get('ovs_options', []) ovs_options = ['options:%s' % opt for opt in ovs_options] ovs_extra = json.get('ovs_extra', []) + if not isinstance(ovs_extra, list): + ovs_extra = [ovs_extra] opts = _BaseOpts.base_opts_from_json(json) return OvsDpdkPort(name, *opts, members=members, driver=driver, ovs_options=ovs_options, ovs_extra=ovs_extra) @@ -1032,11 +1071,12 @@ class OvsDpdkBond(_BaseOpts): routes=None, mtu=None, primary=False, members=None, ovs_options=None, ovs_extra=None, nic_mapping=None, persist_mapping=False, defroute=True, dhclient_args=None, - dns_servers=None): + dns_servers=None, nm_controlled=False): super(OvsDpdkBond, self).__init__(name, use_dhcp, use_dhcpv6, addresses, routes, mtu, primary, nic_mapping, persist_mapping, - defroute, dhclient_args, dns_servers) + defroute, dhclient_args, dns_servers, + nm_controlled) self.members = members or [] self.ovs_options = ovs_options self.ovs_extra = format_ovs_extra(self, ovs_extra) @@ -1060,10 +1100,12 @@ class OvsDpdkBond(_BaseOpts): name = _get_required_field(json, 'name', 'OvsDpdkBond') (use_dhcp, use_dhcpv6, addresses, routes, mtu, nic_mapping, persist_mapping, defroute, dhclient_args, - dns_servers) = _BaseOpts.base_opts_from_json( + dns_servers, nm_controlled) = _BaseOpts.base_opts_from_json( json, include_primary=False) ovs_options = json.get('ovs_options') ovs_extra = json.get('ovs_extra', []) + if not isinstance(ovs_extra, list): + ovs_extra = [ovs_extra] members = [] # members @@ -1087,4 +1129,5 @@ class OvsDpdkBond(_BaseOpts): ovs_extra=ovs_extra, nic_mapping=nic_mapping, persist_mapping=persist_mapping, defroute=defroute, dhclient_args=dhclient_args, - dns_servers=dns_servers) + dns_servers=dns_servers, + nm_controlled=nm_controlled) |