aboutsummaryrefslogtreecommitdiffstats
path: root/os_net_config/objects.py
diff options
context:
space:
mode:
Diffstat (limited to 'os_net_config/objects.py')
-rw-r--r--os_net_config/objects.py49
1 files changed, 32 insertions, 17 deletions
diff --git a/os_net_config/objects.py b/os_net_config/objects.py
index 8d7ee4c..8d52e73 100644
--- a/os_net_config/objects.py
+++ b/os_net_config/objects.py
@@ -25,6 +25,8 @@ logger = logging.getLogger(__name__)
_MAPPED_NICS = None
+DEFAULT_OVS_BRIDGE_FAIL_MODE = 'standalone'
+
class InvalidConfigException(ValueError):
pass
@@ -131,6 +133,12 @@ def _mapped_nics(nic_mapping=None):
return _MAPPED_NICS
+def format_ovs_extra(obj, templates):
+ """Map OVS object properties into a string to be used for ovs_extra."""
+
+ return [t.format(name=obj.name) for t in templates or []]
+
+
class Route(object):
"""Base class for network routes."""
@@ -391,11 +399,11 @@ class OvsBridge(_BaseOpts):
def __init__(self, name, use_dhcp=False, use_dhcpv6=False, addresses=None,
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):
+ defroute=True, dhclient_args=None, dns_servers=None,
+ fail_mode=None):
addresses = addresses or []
routes = routes or []
members = members or []
- ovs_extra = ovs_extra or []
dns_servers = dns_servers or []
super(OvsBridge, self).__init__(name, use_dhcp, use_dhcpv6, addresses,
routes, mtu, False, nic_mapping,
@@ -403,7 +411,10 @@ class OvsBridge(_BaseOpts):
dhclient_args, dns_servers)
self.members = members
self.ovs_options = ovs_options
- self.ovs_extra = ovs_extra
+ ovs_extra = ovs_extra or []
+ if fail_mode:
+ ovs_extra.append('set bridge {name} fail_mode=%s' % fail_mode)
+ self.ovs_extra = format_ovs_extra(self, ovs_extra)
for member in self.members:
member.bridge_name = name
if not isinstance(member, OvsTunnel):
@@ -425,7 +436,8 @@ class OvsBridge(_BaseOpts):
dhclient_args, dns_servers) = _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')
+ fail_mode = json.get('ovs_fail_mode', DEFAULT_OVS_BRIDGE_FAIL_MODE)
members = []
# members
@@ -443,7 +455,8 @@ class OvsBridge(_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,
+ fail_mode=fail_mode)
class OvsUserBridge(_BaseOpts):
@@ -452,7 +465,8 @@ class OvsUserBridge(_BaseOpts):
def __init__(self, name, use_dhcp=False, use_dhcpv6=False, addresses=None,
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):
+ defroute=True, dhclient_args=None, dns_servers=None,
+ fail_mode=None):
super(OvsUserBridge, self).__init__(name, use_dhcp, use_dhcpv6,
addresses, routes, mtu, False,
nic_mapping, persist_mapping,
@@ -460,7 +474,10 @@ class OvsUserBridge(_BaseOpts):
dns_servers)
self.members = members or []
self.ovs_options = ovs_options
- self.ovs_extra = ovs_extra or []
+ ovs_extra = ovs_extra or []
+ if fail_mode:
+ ovs_extra.append('set bridge {name} fail_mode=%s' % fail_mode)
+ self.ovs_extra = format_ovs_extra(self, ovs_extra)
for member in self.members:
member.bridge_name = name
if not isinstance(member, OvsTunnel) and \
@@ -484,7 +501,8 @@ class OvsUserBridge(_BaseOpts):
dhclient_args, dns_servers) = _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')
+ fail_mode = json.get('ovs_fail_mode', DEFAULT_OVS_BRIDGE_FAIL_MODE)
members = []
# members
@@ -503,7 +521,7 @@ 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)
+ dns_servers=dns_servers, fail_mode=fail_mode)
class LinuxBridge(_BaseOpts):
@@ -808,7 +826,6 @@ class OvsBond(_BaseOpts):
addresses = addresses or []
routes = routes or []
members = members or []
- ovs_extra = ovs_extra or []
dns_servers = dns_servers or []
super(OvsBond, self).__init__(name, use_dhcp, use_dhcpv6, addresses,
routes, mtu, primary, nic_mapping,
@@ -816,7 +833,7 @@ class OvsBond(_BaseOpts):
dns_servers)
self.members = members
self.ovs_options = ovs_options
- self.ovs_extra = ovs_extra
+ self.ovs_extra = format_ovs_extra(self, ovs_extra)
for member in self.members:
if member.primary:
if self.primary_interface_name:
@@ -870,7 +887,6 @@ class OvsTunnel(_BaseOpts):
ovs_extra=None):
addresses = addresses or []
routes = routes or []
- ovs_extra = ovs_extra or []
dns_servers = dns_servers or []
super(OvsTunnel, self).__init__(name, use_dhcp, use_dhcpv6, addresses,
routes, mtu, primary, nic_mapping,
@@ -878,7 +894,7 @@ class OvsTunnel(_BaseOpts):
dhclient_args, dns_servers)
self.tunnel_type = tunnel_type
self.ovs_options = ovs_options or []
- self.ovs_extra = ovs_extra or []
+ self.ovs_extra = format_ovs_extra(self, ovs_extra)
@staticmethod
def from_json(json):
@@ -902,7 +918,6 @@ class OvsPatchPort(_BaseOpts):
ovs_options=None, ovs_extra=None):
addresses = addresses or []
routes = routes or []
- ovs_extra = ovs_extra or []
dns_servers = dns_servers or []
super(OvsPatchPort, self).__init__(name, use_dhcp, use_dhcpv6,
addresses, routes, mtu, primary,
@@ -912,7 +927,7 @@ class OvsPatchPort(_BaseOpts):
self.bridge_name = bridge_name
self.peer = peer
self.ovs_options = ovs_options or []
- self.ovs_extra = ovs_extra or []
+ self.ovs_extra = format_ovs_extra(self, ovs_extra)
@staticmethod
def from_json(json):
@@ -967,7 +982,7 @@ class OvsDpdkPort(_BaseOpts):
dns_servers)
self.members = members or []
self.ovs_options = ovs_options or []
- self.ovs_extra = ovs_extra or []
+ self.ovs_extra = format_ovs_extra(self, ovs_extra)
self.driver = driver
@staticmethod
@@ -1024,7 +1039,7 @@ class OvsDpdkBond(_BaseOpts):
defroute, dhclient_args, dns_servers)
self.members = members or []
self.ovs_options = ovs_options
- self.ovs_extra = ovs_extra or []
+ self.ovs_extra = format_ovs_extra(self, ovs_extra)
for member in self.members:
if member.primary: