From 41ec75b56734604ad548b354bc929105babbb538 Mon Sep 17 00:00:00 2001 From: Serguei Bezverkhi Date: Fri, 5 Aug 2016 10:54:35 -0400 Subject: [PATCH] Introduce a script to launch ovsdb-server process The reason for introducing this script is to be able to launch ovsdb-server and initialize it (create external bridge and plug external interface) in one shot. It is applicable ONLY to Kubernetes environment and it is required for Kubernetes DaemonSet usage. The behavior in classical Kolla has not been changed. TrivialFix Change-Id: I54897cc2c0f2bcaaf0411822f3409bf96e92833d --- .../templates/openvswitch-db-server.json.j2 | 2 +- .../openvswitch-db-server/Dockerfile.j2 | 5 +++- .../start_ovsdb_server.sh | 30 +++++++++++++++++++ 3 files changed, 35 insertions(+), 2 deletions(-) create mode 100644 docker/openvswitch/openvswitch-db-server/start_ovsdb_server.sh diff --git a/ansible/roles/neutron/templates/openvswitch-db-server.json.j2 b/ansible/roles/neutron/templates/openvswitch-db-server.json.j2 index 2f925990c1..ebabe280f5 100644 --- a/ansible/roles/neutron/templates/openvswitch-db-server.json.j2 +++ b/ansible/roles/neutron/templates/openvswitch-db-server.json.j2 @@ -1,4 +1,4 @@ { - "command": "/usr/sbin/ovsdb-server /etc/openvswitch/conf.db -vconsole:emer -vsyslog:err -vfile:info --remote=punix:/run/openvswitch/db.sock --remote=ptcp:6640:{{ hostvars[inventory_hostname]['ansible_' + api_interface]['ipv4']['address'] }} --log-file=/var/log/kolla/openvswitch/ovsdb-server.log", + "command": "start-ovsdb-server {{ hostvars[inventory_hostname]['ansible_' + api_interface]['ipv4']['address'] }} {% if keystone_replicas is defined %} {{ neutron_bridge_name }} {{ neutron_external_interface }} {% endif %}", "config_files": [] } diff --git a/docker/openvswitch/openvswitch-db-server/Dockerfile.j2 b/docker/openvswitch/openvswitch-db-server/Dockerfile.j2 index 64d8fc46dc..1cc28e1684 100644 --- a/docker/openvswitch/openvswitch-db-server/Dockerfile.j2 +++ b/docker/openvswitch/openvswitch-db-server/Dockerfile.j2 @@ -3,7 +3,10 @@ MAINTAINER {{ maintainer }} COPY ovs_ensure_configured.sh /usr/local/bin/kolla_ensure_openvswitch_configured COPY extend_start.sh /usr/local/bin/kolla_openvswitch_extend_start -RUN chmod 755 /usr/local/bin/kolla_ensure_openvswitch_configured /usr/local/bin/kolla_openvswitch_extend_start +COPY start_ovsdb_server.sh /usr/local/bin/start-ovsdb-server +RUN chmod 755 /usr/local/bin/kolla_ensure_openvswitch_configured \ + /usr/local/bin/kolla_openvswitch_extend_start \ + /usr/local/bin/start-ovsdb-server {% block openvswitch_db_server_footer %}{% endblock %} {% block footer %}{% endblock %} diff --git a/docker/openvswitch/openvswitch-db-server/start_ovsdb_server.sh b/docker/openvswitch/openvswitch-db-server/start_ovsdb_server.sh new file mode 100644 index 0000000000..27a4fa50ac --- /dev/null +++ b/docker/openvswitch/openvswitch-db-server/start_ovsdb_server.sh @@ -0,0 +1,30 @@ +#!/bin/bash + +# NOTE: (sbezverk) ovs_bridge and ovs_ext_intf variables get initialized only when +# this script is executed for kubernetes deployment. With Ansible deployment, only +# ovsdb-server gets launched and then the following workflow step will create +# an external bridge and plug an external interface. With Kubernetes we want to +# leverage its dynamic nature of automatic scaling up and down. It means all +# activities related to creating initial bridge, plugging external interface +# must be done by DaemonSet launched container. + +ovsdb_ip=$1 +ovs_bridge=$2 +ovs_ext_intf=$3 + +# NOTE: (sbezverk) The reason for introducing this script is to be able +# to launch ovsdb-server and to create the initial external bridge in one step. +# It is required in order to be able to use DaemonSet. + +if [ ! -e $ovs_bridge ] && [ ! -e $ovs_ext_intf ]; then +# NOTE: (sbezverk) This part is executed only by kubernetes deployment. +# Creating external bridge + /usr/sbin/ovsdb-server /etc/openvswitch/conf.db --remote=punix:/var/run/openvswitch/db.sock --run="ovs-vsctl --no-wait --db=unix:/var/run/openvswitch/db.sock add-br $ovs_bridge" +# Plug the external interface into the external bridge. + /usr/sbin/ovsdb-server /etc/openvswitch/conf.db --remote=punix:/var/run/openvswitch/db.sock --run="ovs-vsctl --no-wait --db=unix:/var/run/openvswitch/db.sock add-port $ovs_bridge $ovs_ext_intf" +# Run ovsdb server proces + /usr/sbin/ovsdb-server /etc/openvswitch/conf.db -vconsole:emer -vsyslog:err -vfile:info --remote=punix:/var/run/openvswitch/db.sock --log-file=/var/log/kolla/openvswitch/ovsdb-server.log +else +# NOTE: (sbezverk) This part is executed only by kolla-ansible deployment. + /usr/sbin/ovsdb-server /etc/openvswitch/conf.db -vconsole:emer -vsyslog:err -vfile:info --remote=punix:/run/openvswitch/db.sock --remote=ptcp:6640:$ovsdb_ip --log-file=/var/log/kolla/openvswitch/ovsdb-server.log +fi