7f4146e044
This adds an alpine linux based docker image for running kuryr one can try it out doing: sudo mkdir -p /usr/lib/docker/plugins/kuryr sudo curl -o /usr/lib/docker/plugins/kuryr/kuryr.spec \ https://raw.githubusercontent.com/openstack/kuryr/master/etc/kuryr.spec sudo service docker restart docker run --name kuryr-libnetwork \ --net=host \ --cap-add=NET_ADMIN \ -e SERVICE_USER=admin \ -e SERVICE_TENANT_NAME=admin \ -e SERVICE_PASSWORD=pass \ -e IDENTITY_URL=http://127.0.0.1:35357/v2.0 \ -e OS_URL=http://127.0.0.1:9696 \ -v /var/log/kuryr:/var/log/kuryr \ kuryr/libnetwork Change-Id: I68d727194d6029da965fca90fdd464ed45b02044 Signed-off-by: Antoni Segura Puimedon <toni@midokura.com>
116 lines
3.3 KiB
Bash
Executable File
116 lines
3.3 KiB
Bash
Executable File
#!/bin/bash
|
|
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
|
# not use this file except in compliance with the License. You may obtain
|
|
# a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
# License for the specific language governing permissions and limitations
|
|
# under the License.
|
|
|
|
INT_BRIDGE="br-int"
|
|
HYBRID_PLUG="'ovs_hybrid_plug': True"
|
|
|
|
OPERATION=$1
|
|
PORT=$2
|
|
VETH=$3
|
|
CONTAINER_UUID=$4
|
|
MAC_ADDRESS=$5
|
|
|
|
ovs_bind_port() {
|
|
echo "plugging veth $VETH (Neutron port $PORT)..."
|
|
ovs-vsctl -- --may-exist add-port $INT_BRIDGE $VETH -- \
|
|
set interface $VETH external_ids:attached-mac=$MAC_ADDRESS \
|
|
external_ids:iface-id=$PORT external_ids:vm-uuid=$CONTAINER_UUID \
|
|
external_ids:iface-status=active external_ids:owner=kuryr
|
|
}
|
|
|
|
ovs_unbind_port() {
|
|
echo "unplugging port $PORT..."
|
|
MYPORT=`ovs-vsctl --data=bare --no-heading --columns=name \
|
|
find interface external_ids:iface-id=$PORT \
|
|
external_ids:owner=kuryr`
|
|
if [ -z "$MYPORT" ]; then
|
|
echo >&2 "Failed to find port $PORT."
|
|
exit 1
|
|
fi
|
|
ovs-vsctl del-port $INT_BRIDGE $MYPORT
|
|
}
|
|
|
|
ovs_hybrid_bind_port() {
|
|
echo "... plugging veth $VETH (Neutron port $PORT) ..."
|
|
# create a linux bridge
|
|
br_name="qbr"${PORT:0:11}
|
|
ip link add name $br_name type bridge
|
|
# Using brctl allows containerized usage not to need privileged mode
|
|
# as sysfs is mounted read-only when running with just CAP_NET_ADMIN
|
|
brctl setfd $br_name 0
|
|
brctl stp $br_name off
|
|
|
|
# connect the veth outside to linux bridge
|
|
ip link set $VETH up
|
|
ip link set dev $VETH master $br_name
|
|
# create a veth pair to connect linux bridge and the integration bridge
|
|
veth_lb="qvb"${PORT:0:11}
|
|
veth_ovs="qvo"${PORT:0:11}
|
|
ip link add $veth_lb type veth peer name $veth_ovs
|
|
|
|
# connect one end to the linux bridge
|
|
ip link set dev $veth_lb master $br_name
|
|
ip link set $br_name up
|
|
|
|
# connect one end to the ovs integration bridge
|
|
ovs-vsctl add-port $INT_BRIDGE $veth_ovs -- \
|
|
set interface $veth_ovs external_ids:attached-mac=$MAC_ADDRESS \
|
|
external_ids:iface-id=$PORT external_ids:vm-id=$CONTAINER_UUID \
|
|
external_ids:iface-status=active external_ids:owner=kuryr
|
|
|
|
ip link set $veth_lb up
|
|
ip link set $veth_ovs up
|
|
}
|
|
|
|
ovs_hybrid_unbind_port() {
|
|
echo "unplugging port $PORT ..."
|
|
br_name="qbr"${PORT:0:11}
|
|
veth_lb="qvb"${PORT:0:11}
|
|
veth_ovs="qvo"${PORT:0:11}
|
|
|
|
ip link set dev $veth_lb nomaster
|
|
ovs-vsctl del-port $veth_ovs
|
|
ip link delete $veth_lb type veth
|
|
|
|
ip link set $br_name down
|
|
ip link delete $br_name type bridge
|
|
}
|
|
|
|
|
|
case $OPERATION in
|
|
"bind")
|
|
shift
|
|
if [ "${7/$HYBRID_PLUG}" = "$7" ]
|
|
then
|
|
ovs_bind_port
|
|
else
|
|
ovs_hybrid_bind_port
|
|
fi
|
|
exit 0
|
|
;;
|
|
"unbind")
|
|
shift
|
|
if [ "${5/$HYBRID_PLUG}" = "$5" ]
|
|
then
|
|
ovs_unbind_port
|
|
else
|
|
ovs_hybrid_unbind_port
|
|
fi
|
|
exit 0
|
|
;;
|
|
*)
|
|
echo >&2 "$0: Invalid command $OPERATION."
|
|
exit 1
|
|
;;
|
|
esac
|