1 ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
2 : Copyright (c) 2019 Mirantis Inc., Enea AB and others.
4 : All rights reserved. This program and the accompanying materials
5 : are made available under the terms of the Apache License, Version 2.0
6 : which accompanies this distribution, and is available at
7 : http://www.apache.org/licenses/LICENSE-2.0
8 ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
9 From: Michael Polenchuk <mpolenchuk@mirantis.com>
10 Date: Wed, 28 Feb 2018 17:54:28 +0400
11 Subject: [PATCH] Set ovs bridges as L3 interfaces
13 diff --git a/linux/files/ovs_bridge b/linux/files/ovs_bridge
15 index 0000000..1322eeb
17 +++ b/linux/files/ovs_bridge
19 +auto {{ bridge_name }}
20 +allow-ovs {{ bridge_name }}
21 +iface {{ bridge_name }} inet {{ bridge.get('proto', 'static' if bridge.address is defined else 'manual') }}
23 + {%- if bridge.address is defined %}
24 + address {{ bridge.address }}
25 + netmask {{ bridge.netmask }}
27 + {%- if bridge.use_interfaces is defined %}
28 + ovs_ports {{ bridge.use_interfaces|join(' ') }}
30 + {%- if bridge.datapath_type is defined %}
31 + ovs_extra set Bridge ${IFACE} datapath_type={{ bridge.datapath_type }}
33 + {%- if bridge.gateway is defined %}
34 + gateway {{ bridge.gateway }}
36 + {%- if bridge.name_servers is defined %}
37 + dns-nameservers {{ bridge.name_servers | join(' ') }}
39 diff --git a/linux/files/ovs_port b/linux/files/ovs_port
40 index 222ca8e..efb0307 100644
41 --- a/linux/files/ovs_port
42 +++ b/linux/files/ovs_port
45 allow-{{ port.bridge }} {{ port_name }}
46 iface {{ port_name }} inet {{ port.get('proto', 'manual') }}
47 +{%- if '.' in port_name %}
48 +vlan-raw-device {{ port_name.split('.')[0] }}
50 ovs_type {{ port.get('ovs_port_type', 'OVSIntPort') }}
51 mtu {{ port.get('mtu', '1500') }}
52 ovs_bridge {{ port.bridge }}
53 diff --git a/linux/network/interface.sls b/linux/network/interface.sls
54 index a39fc37..8bce092 100644
55 --- a/linux/network/interface.sls
56 +++ b/linux/network/interface.sls
57 @@ -92,6 +92,35 @@ add_int_{{ int_name }}_to_ovs_dpdk_bridge_{{ interface_name }}:
58 ovs_bridge_{{ interface_name }}:
59 openvswitch_bridge.present:
60 - name: {{ interface_name }}
62 + - name: /etc/network/interfaces.u/ifcfg-{{ interface_name }}
64 + - source: salt://linux/files/ovs_bridge
66 + bridge: {{ interface|yaml }}
67 + bridge_name: {{ interface_name }}
70 +linux_interfaces_include_{{ interface_name }}:
72 + - name: /etc/network/interfaces
74 + source /etc/network/interfaces.d/*
75 + # Workaround for Upstream-Bug: https://github.com/saltstack/salt/issues/40262
76 + source /etc/network/interfaces.u/*
78 +ovs_bridge_up_{{ interface_name }}:
80 + - name: ifup --ignore-errors {{ interface_name }}
82 + - file: ovs_bridge_{{ interface_name }}
83 + - openvswitch_bridge: ovs_bridge_{{ interface_name }}
84 + - file: linux_interfaces_final_include
85 + {%- if network.noifupdown|d(false) or interface.noifupdown|d(false) %}
86 + - onlyif: /bin/false
88 + - unless: grep -qFx up /sys/class/net/{{ interface_name }}/operstate
91 {# add linux network interface into OVS bridge #}
92 {%- for int_name, int in network.interface.items() %}
93 @@ -102,7 +131,7 @@ ovs_bridge_{{ interface_name }}:
95 add_int_{{ int_name }}_to_ovs_bridge_{{ interface_name }}:
97 - - unless: ovs-vsctl show | grep {{ int_name }}
98 + - unless: ovs-vsctl list-ports {{ interface_name }} | grep -qFx {{ int_name }}
99 - name: ovs-vsctl{%- if network.ovs_nowait %} --no-wait{%- endif %} add-port {{ interface_name }} {{ int_name }}
102 @@ -176,6 +205,9 @@ ovs_port_{{ interface_name }}_line2:
103 ovs_port_up_{{ interface_name }}:
105 - name: ifup {{ interface_name }}
106 + {%- if network.noifupdown|d(false) or interface.noifupdown|d(false) %}
107 + - onlyif: /bin/false
110 - file: ovs_port_{{ interface_name }}
111 - file: ovs_port_{{ interface_name }}_line1