Allow setting NM_CONTROLLED=yes in os-net-config ifcfg files
This change adds a flag to the base interface type, nm_controlled. If this flag is true, the ifcfg file will contain NM_CONTROLLED=yes. Since this flag is applied at the base it applies to any interface type. Note that not all interface types are supported by NetworkManager at this time, so this option should be used with caution. A demonstration of the usage is included in the linux_bond_networkmanager.yaml file in the sample directory. Change-Id: I2df6ce5b4bdb04651f27fc5daa64aa752e47f3b1 Closes-Bug: 1671888
This commit is contained in:
parent
ab0e0d433f
commit
5f0145b885
|
@ -0,0 +1,18 @@
|
|||
# To use NetworkManager to manage an interface, set nm_controlled=true.
|
||||
# Note that some interface types may not be supported by NetworkManager.
|
||||
network_config:
|
||||
-
|
||||
type: linux_bond
|
||||
name: bond1
|
||||
nm_controlled: true
|
||||
use_dhcp: true
|
||||
bonding_options: "mode=active-backup"
|
||||
members:
|
||||
-
|
||||
type: interface
|
||||
name: em1
|
||||
nm_controlled: true
|
||||
-
|
||||
type: interface
|
||||
name: em2
|
||||
nm_controlled: true
|
|
@ -142,7 +142,10 @@ class IfcfgNetConfig(os_net_config.NetConfig):
|
|||
data += "HOTPLUG=yes\n"
|
||||
else:
|
||||
data += "HOTPLUG=no\n"
|
||||
data += "NM_CONTROLLED=no\n"
|
||||
if base_opt.nm_controlled:
|
||||
data += "NM_CONTROLLED=yes\n"
|
||||
else:
|
||||
data += "NM_CONTROLLED=no\n"
|
||||
if not base_opt.dns_servers and not base_opt.use_dhcp:
|
||||
data += "PEERDNS=no\n"
|
||||
if isinstance(base_opt, objects.Vlan):
|
||||
|
|
|
@ -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,14 +289,16 @@ 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, hotplug=False):
|
||||
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
|
||||
|
||||
|
@ -318,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 []
|
||||
|
@ -326,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)
|
||||
|
@ -350,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 []
|
||||
|
@ -359,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
|
||||
|
@ -376,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 []
|
||||
|
@ -385,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
|
||||
|
@ -403,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 []
|
||||
|
@ -411,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 []
|
||||
|
@ -436,7 +443,8 @@ 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', [])
|
||||
|
@ -461,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):
|
||||
|
@ -471,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 []
|
||||
|
@ -503,7 +511,8 @@ 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', [])
|
||||
|
@ -528,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):
|
||||
|
@ -537,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 []
|
||||
|
@ -545,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
|
||||
|
@ -564,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 = []
|
||||
|
||||
|
@ -583,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):
|
||||
|
@ -602,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 []
|
||||
|
@ -610,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):
|
||||
|
@ -625,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 = []
|
||||
|
||||
|
@ -644,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):
|
||||
|
@ -658,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 []
|
||||
|
@ -667,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:
|
||||
|
@ -683,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
|
||||
|
@ -707,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):
|
||||
|
@ -716,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 []
|
||||
|
@ -724,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:
|
||||
|
@ -743,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 = []
|
||||
|
@ -763,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):
|
||||
|
@ -772,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 []
|
||||
|
@ -780,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:
|
||||
|
@ -799,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 = []
|
||||
|
@ -819,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):
|
||||
|
@ -829,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 []
|
||||
|
@ -837,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)
|
||||
|
@ -860,7 +881,7 @@ 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', [])
|
||||
|
@ -883,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):
|
||||
|
@ -892,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)
|
||||
|
@ -925,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 []
|
||||
|
@ -934,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 []
|
||||
|
@ -961,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
|
||||
|
@ -985,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)
|
||||
|
@ -1047,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)
|
||||
|
@ -1075,7 +1100,7 @@ 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', [])
|
||||
|
@ -1104,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)
|
||||
|
|
|
@ -34,6 +34,14 @@ NM_CONTROLLED=no
|
|||
PEERDNS=no
|
||||
"""
|
||||
|
||||
_BASE_IFCFG_NETWORKMANAGER = """# This file is autogenerated by os-net-config
|
||||
DEVICE=em1
|
||||
ONBOOT=yes
|
||||
HOTPLUG=no
|
||||
NM_CONTROLLED=yes
|
||||
PEERDNS=no
|
||||
"""
|
||||
|
||||
_HOTPLUG = """# This file is autogenerated by os-net-config
|
||||
DEVICE=em1
|
||||
ONBOOT=yes
|
||||
|
@ -153,6 +161,19 @@ OVSBOOTPROTO=dhcp
|
|||
OVSDHCPINTERFACES="em1"
|
||||
"""
|
||||
|
||||
_NM_CONTROLLED_INTERFACE = _BASE_IFCFG_NETWORKMANAGER + """MASTER=bond1
|
||||
SLAVE=yes
|
||||
BOOTPROTO=none
|
||||
"""
|
||||
|
||||
_NM_CONTROLLED_BOND = """# This file is autogenerated by os-net-config
|
||||
DEVICE=bond1
|
||||
ONBOOT=yes
|
||||
HOTPLUG=no
|
||||
NM_CONTROLLED=yes
|
||||
PEERDNS=no
|
||||
"""
|
||||
|
||||
_OVS_BRIDGE_DHCP_STANDALONE = _OVS_BRIDGE_DHCP + \
|
||||
"OVS_EXTRA=\"set bridge br-ctlplane fail_mode=standalone\"\n"
|
||||
|
||||
|
@ -845,6 +866,20 @@ DNS2=5.6.7.8
|
|||
"""
|
||||
self.assertEqual(em1_config, self.get_interface_config('em1'))
|
||||
|
||||
def test_nm_controlled(self):
|
||||
interface1 = objects.Interface('em1', nm_controlled=True)
|
||||
interface2 = objects.Interface('em2', nm_controlled=True)
|
||||
bond = objects.LinuxBond('bond1', nm_controlled=True,
|
||||
members=[interface1, interface2])
|
||||
self.provider.add_linux_bond(bond)
|
||||
self.provider.add_interface(interface1)
|
||||
self.provider.add_interface(interface2)
|
||||
|
||||
ifcfg_data = self.get_interface_config('em1')
|
||||
self.assertEqual(_NM_CONTROLLED_INTERFACE, ifcfg_data)
|
||||
bond_data = self.get_linux_bond_config('bond1')
|
||||
self.assertEqual(_NM_CONTROLLED_BOND, bond_data)
|
||||
|
||||
def test_network_ovs_dpdk_bridge_and_port(self):
|
||||
nic_mapping = {'nic1': 'eth0', 'nic2': 'eth1', 'nic3': 'eth2'}
|
||||
self.stubbed_mapped_nics = nic_mapping
|
||||
|
@ -924,6 +959,7 @@ class TestIfcfgNetConfigApply(base.TestCase):
|
|||
def setUp(self):
|
||||
super(TestIfcfgNetConfigApply, self).setUp()
|
||||
self.temp_ifcfg_file = tempfile.NamedTemporaryFile()
|
||||
self.temp_bond_file = tempfile.NamedTemporaryFile()
|
||||
self.temp_route_file = tempfile.NamedTemporaryFile()
|
||||
self.temp_route6_file = tempfile.NamedTemporaryFile()
|
||||
self.temp_bridge_file = tempfile.NamedTemporaryFile()
|
||||
|
|
Loading…
Reference in New Issue