diff --git a/openstack/openstack-helm/centos/build_srpm.data b/openstack/openstack-helm/centos/build_srpm.data index 41fb015b..a00c0323 100644 --- a/openstack/openstack-helm/centos/build_srpm.data +++ b/openstack/openstack-helm/centos/build_srpm.data @@ -5,4 +5,4 @@ TAR="$TAR_NAME-$SHA.tar.gz" COPY_LIST="${CGCS_BASE}/downloads/$TAR $PKG_BASE/files/* " -TIS_PATCH_VER=11 +TIS_PATCH_VER=12 diff --git a/openstack/openstack-helm/centos/openstack-helm.spec b/openstack/openstack-helm/centos/openstack-helm.spec index 0cd281d6..2f0856d4 100644 --- a/openstack/openstack-helm/centos/openstack-helm.spec +++ b/openstack/openstack-helm/centos/openstack-helm.spec @@ -29,6 +29,7 @@ Patch08: 0007-Stein-Remove-ceilometer-upgrade-option.patch Patch09: 0008-Stein-Update-Cinder-to-include-resource_filters.json.patch Patch10: 0009-Stein-add-log_config_append-to-neutron-etc.patch Patch11: 0010-Stein-Nova-console-address-config-optionality.patch +Patch12: 0011-Support-per-host-overrides-of-auto_bridge_add.patch BuildRequires: helm BuildRequires: openstack-helm-infra @@ -50,6 +51,7 @@ Openstack Helm charts %patch09 -p1 %patch10 -p1 %patch11 -p1 +%patch12 -p1 %build # initialize helm and build the toolkit diff --git a/openstack/openstack-helm/files/0011-Support-per-host-overrides-of-auto_bridge_add.patch b/openstack/openstack-helm/files/0011-Support-per-host-overrides-of-auto_bridge_add.patch new file mode 100644 index 00000000..7ca8829c --- /dev/null +++ b/openstack/openstack-helm/files/0011-Support-per-host-overrides-of-auto_bridge_add.patch @@ -0,0 +1,205 @@ +From 6e2e4aba8d1053adb6dcfc598c5c3d78c3195c94 Mon Sep 17 00:00:00 2001 +From: chengli3 +Date: Mon, 25 Feb 2019 20:15:53 +0800 +Subject: [PATCH] Support per-host overrides of auto_bridge_add + +.Values.network.auto_bridge_add is a global config. So in multi nodes +deployment, it requires that all hosts have the same nic names. This is +a strict limit. +This patch is to support per-host auto_bridge_add, so that we can define +different auto_bridge_add for hosts. +Also, this patch move .network.auto_bridge_add to .conf.auto_bridge_add + +Change-Id: I4a4d6efbbfe073d035bc5c03700fbe998e708d0f +Story: 2005059 +Task: 29601 +--- + doc/source/devref/networking.rst | 2 +- + .../bin/_neutron-linuxbridge-agent-init.sh.tpl | 28 +++++++++--------- + .../bin/_neutron-openvswitch-agent-init.sh.tpl | 18 +++++++----- + neutron/templates/configmap-etc.yaml | 1 + + neutron/templates/daemonset-lb-agent.yaml | 4 +++ + neutron/templates/daemonset-ovs-agent.yaml | 4 +++ + neutron/values.yaml | 34 +++++++++++----------- + 7 files changed, 53 insertions(+), 38 deletions(-) + +diff --git a/doc/source/devref/networking.rst b/doc/source/devref/networking.rst +index e10a045..7b1afd7 100644 +--- a/doc/source/devref/networking.rst ++++ b/doc/source/devref/networking.rst +@@ -272,7 +272,7 @@ init container and main container with :code:`neutron-ovs-agent` via file + Configuration of OVS bridges can be done via + `neutron/templates/bin/_neutron-openvswitch-agent-init.sh.tpl`. The + script is configuring the external network bridge and sets up any +-bridge mappings defined in :code:`network.auto_bridge_add`. These ++bridge mappings defined in :code:`conf.auto_bridge_add`. These + values should align with + :code:`conf.plugins.openvswitch_agent.ovs.bridge_mappings`. + +diff --git a/neutron/templates/bin/_neutron-linuxbridge-agent-init.sh.tpl b/neutron/templates/bin/_neutron-linuxbridge-agent-init.sh.tpl +index e89765a..71a2b6b 100644 +--- a/neutron/templates/bin/_neutron-linuxbridge-agent-init.sh.tpl ++++ b/neutron/templates/bin/_neutron-linuxbridge-agent-init.sh.tpl +@@ -19,19 +19,21 @@ limitations under the License. + set -ex + + # configure all bridge mappings defined in config +-{{- range $br, $phys := .Values.network.auto_bridge_add }} +-if [ -n "{{- $br -}}" ] ; then +- # adding existing bridge would break out the script when -e is set +- set +e +- ip link add name {{ $br }} type bridge +- set -e +- ip link set dev {{ $br }} up +- if [ -n "{{- $phys -}}" ] ; then +- ip link set dev {{ $phys }} master {{ $br }} +- fi +-fi +-{{- end }} +- ++# /tmp/auto_bridge_add is one line json file: {"br-ex1":"eth1","br-ex2":"eth2"} ++for bmap in `sed 's/[{}"]//g' /tmp/auto_bridge_add | tr "," "\n"` ++do ++ bridge=${bmap%:*} ++ iface=${bmap#*:} ++ # adding existing bridge would break out the script when -e is set ++ set +e ++ ip link add name $bridge type bridge ++ set -e ++ ip link set dev $bridge up ++ if [ -n "$iface" ] && [ "$iface" != "null" ] ++ then ++ ip link set dev $iface master $bridge ++ fi ++done + + tunnel_interface="{{- .Values.network.interface.tunnel -}}" + if [ -z "${tunnel_interface}" ] ; then +diff --git a/neutron/templates/bin/_neutron-openvswitch-agent-init.sh.tpl b/neutron/templates/bin/_neutron-openvswitch-agent-init.sh.tpl +index 08c82e0..84f5e4b 100644 +--- a/neutron/templates/bin/_neutron-openvswitch-agent-init.sh.tpl ++++ b/neutron/templates/bin/_neutron-openvswitch-agent-init.sh.tpl +@@ -36,13 +36,17 @@ if neutron-sanity-check --version >/dev/null 2>/dev/null; then + fi + + # handle any bridge mappings +-{{- range $bridge, $port := .Values.network.auto_bridge_add }} +-ovs-vsctl --no-wait --may-exist add-br {{ $bridge }} +-{{ if $port }} +-ovs-vsctl --no-wait --may-exist add-port {{ $bridge }} {{ $port }} +-ip link set dev {{ $port }} up +-{{ end }} +-{{- end }} ++# /tmp/auto_bridge_add is one line json file: {"br-ex1":"eth1","br-ex2":"eth2"} ++for bmap in `sed 's/[{}"]//g' /tmp/auto_bridge_add | tr "," "\n"` ++do ++ bridge=${bmap%:*} ++ iface=${bmap#*:} ++ ovs-vsctl --no-wait --may-exist add-br $bridge ++ if [ -n "$iface" ] && [ "$iface" != "null" ] ++ then ++ ovs-vsctl --no-wait --may-exist add-port $bridge $iface ++ fi ++done + + tunnel_interface="{{- .Values.network.interface.tunnel -}}" + if [ -z "${tunnel_interface}" ] ; then +diff --git a/neutron/templates/configmap-etc.yaml b/neutron/templates/configmap-etc.yaml +index 027602b..4ee5774 100644 +--- a/neutron/templates/configmap-etc.yaml ++++ b/neutron/templates/configmap-etc.yaml +@@ -196,6 +196,7 @@ data: + dnsmasq.conf: "" + neutron_sudoers: {{ $envAll.Values.conf.neutron_sudoers | b64enc }} + rootwrap.conf: {{ $envAll.Values.conf.rootwrap | b64enc }} ++ auto_bridge_add: {{ toJson $envAll.Values.conf.auto_bridge_add | b64enc }} + {{- range $key, $value := $envAll.Values.conf.rootwrap_filters }} + {{- $filePrefix := replace "_" "-" $key }} + {{ printf "%s.filters" $filePrefix }}: {{ $value.content | b64enc }} +diff --git a/neutron/templates/daemonset-lb-agent.yaml b/neutron/templates/daemonset-lb-agent.yaml +index 1c7da46..c2b432f 100644 +--- a/neutron/templates/daemonset-lb-agent.yaml ++++ b/neutron/templates/daemonset-lb-agent.yaml +@@ -112,6 +112,10 @@ spec: + subPath: neutron_sudoers + readOnly: true + - name: neutron-etc ++ mountPath: /tmp/auto_bridge_add ++ subPath: auto_bridge_add ++ readOnly: true ++ - name: neutron-etc + mountPath: /etc/neutron/rootwrap.conf + subPath: rootwrap.conf + readOnly: true +diff --git a/neutron/templates/daemonset-ovs-agent.yaml b/neutron/templates/daemonset-ovs-agent.yaml +index e17693f..2e66844 100644 +--- a/neutron/templates/daemonset-ovs-agent.yaml ++++ b/neutron/templates/daemonset-ovs-agent.yaml +@@ -122,6 +122,10 @@ spec: + subPath: neutron_sudoers + readOnly: true + - name: neutron-etc ++ mountPath: /tmp/auto_bridge_add ++ subPath: auto_bridge_add ++ readOnly: true ++ - name: neutron-etc + mountPath: /etc/neutron/rootwrap.conf + subPath: rootwrap.conf + readOnly: true +diff --git a/neutron/values.yaml b/neutron/values.yaml +index a366dee..cf56ac5 100644 +--- a/neutron/values.yaml ++++ b/neutron/values.yaml +@@ -90,18 +90,6 @@ network: + # allowing agents to be restarted without packet loss and simpler + # debugging. This feature requires mount propagation support. + share_namespaces: true +- # auto_bridge_add is a table of "bridge: interface" pairs +- # To automatically add a physical interfaces to a specific bridges, +- # for example eth3 to bridge br-physnet1, if0 to br0 and iface_two +- # to br1 do something like: +- # +- # auto_bridge_add: +- # br-physnet1: eth3 +- # br0: if0 +- # br1: iface_two +- # br-ex will be added by default +- auto_bridge_add: +- br-ex: null + interface: + # Tunnel interface will be used for VXLAN tunneling. If null + # (default) there is a fallback mechanism to search for interface +@@ -1632,13 +1620,25 @@ conf: + priority: 0 + apply-to: all + pattern: '(notifications)\.' ++ ## NOTE: "besteffort" is meant for dev env with mixed compute type only. ++ ## This helps prevent sriov init script from failing due to mis-matched NIC ++ ## For prod env, target NIC should match and init script should fail otherwise. ++ ## sriov_init: ++ ## - besteffort + sriov_init: + - +- ## NOTE: "besteffort" is meant for dev env with mixed compute type only. +- ## This helps prevent sriov init script from failing due to mis-matched NIC +- ## For prod env, target NIC should match and init script should fail otherwise. +- ## sriov_init: +- ## - besteffort ++ # auto_bridge_add is a table of "bridge: interface" pairs ++ # To automatically add a physical interfaces to a specific bridges, ++ # for example eth3 to bridge br-physnet1, if0 to br0 and iface_two ++ # to br1 do something like: ++ # ++ # auto_bridge_add: ++ # br-physnet1: eth3 ++ # br0: if0 ++ # br1: iface_two ++ # br-ex will be added by default ++ auto_bridge_add: ++ br-ex: null + + # Names of secrets used by bootstrap and environmental checks + secrets: +-- +2.7.4 +