diff options
author | James Slagle <jslagle@redhat.com> | 2016-06-14 11:40:55 -0400 |
---|---|---|
committer | James Slagle <jslagle@redhat.com> | 2016-06-14 17:50:56 -0400 |
commit | 789bd1ea089314b49db02ddd517809a82c380cf1 (patch) | |
tree | 828cbac57e63232bedb2910609835a5f3eed0ef9 /os_net_config/objects.py | |
parent | 4d88e7f349f725704c707093c8b44d7409eae481 (diff) |
Add support for OVS patch ports
OVS patch ports are used to connect two OVS bridges so traffic can flow
between them. This is generally useful for various cases.
Specifically it could be used to connect the bridges created by TripleO
networking configurations (br-ex, etc) to the bridge created by the
multinode networking setup in infra's nodepool (br_pub). This allows the
nodes in a multinode deployment to have connectivity across private
subnets where such traffic is typically firewalled off in public clouds.
Change-Id: I11404106cb3f53734f6fc9a35c22f905a0770245
Diffstat (limited to 'os_net_config/objects.py')
-rw-r--r-- | os_net_config/objects.py | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/os_net_config/objects.py b/os_net_config/objects.py index 2958f84..9815832 100644 --- a/os_net_config/objects.py +++ b/os_net_config/objects.py @@ -50,6 +50,8 @@ def object_from_json(json): return IvsInterface.from_json(json) elif obj_type == "ovs_tunnel": return OvsTunnel.from_json(json) + elif obj_type == "ovs_patch_port": + return OvsPatchPort.from_json(json) def _get_required_field(json, name, object_name): @@ -652,3 +654,38 @@ class OvsTunnel(_BaseOpts): opts = _BaseOpts.base_opts_from_json(json) return OvsTunnel(name, *opts, tunnel_type=tunnel_type, ovs_options=ovs_options, ovs_extra=ovs_extra) + + +class OvsPatchPort(_BaseOpts): + """Base class for OVS Patch Ports.""" + + 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): + 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, + nic_mapping, persist_mapping, + defroute, dhclient_args, + dns_servers) + self.bridge_name = bridge_name + self.peer = peer + self.ovs_options = ovs_options or [] + self.ovs_extra = ovs_extra or [] + + @staticmethod + def from_json(json): + name = _get_required_field(json, 'name', 'OvsPatchPort') + bridge_name = _get_required_field(json, 'bridge_name', 'OvsPatchPort') + peer = _get_required_field(json, 'peer', 'OvsPatchPort') + ovs_options = json.get('ovs_options', []) + ovs_options = ['options:%s' % opt for opt in ovs_options] + ovs_extra = json.get('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) |