17db307e27
The endpoints 'network_driver_program_external_connectivity' and 'network_driver_revoke_external_connectivity' will dynamically create security group and security group rules to open the ports exposed by the docker container. However, such processing invokes too much neutron API calls thus significantly slowing down the container start/stop. However, such processing is not mandatory because users can manually configure the SGs to achieve the equivalent. This patch make the processing of exposed ports configurable. As a result, it can be disabled if users want a better performance. Change-Id: I6d6d176512e6b30bb7372408aec1a7bac12335ab
167 lines
6.0 KiB
Bash
167 lines
6.0 KiB
Bash
#!/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.
|
|
|
|
# Save trace setting
|
|
XTRACE=$(set +o | grep xtrace)
|
|
set +o xtrace
|
|
|
|
echo_summary "kuryr-libnetwork's plugin.sh was called..."
|
|
|
|
|
|
function check_docker {
|
|
if is_ubuntu; then
|
|
dpkg -s docker-engine > /dev/null 2>&1
|
|
else
|
|
rpm -q docker-engine > /dev/null 2>&1 || rpm -q docker > /dev/null 2>&1
|
|
fi
|
|
}
|
|
|
|
function create_kuryr_cache_dir {
|
|
# Create cache dir
|
|
sudo install -d -o "$STACK_USER" "$KURYR_AUTH_CACHE_DIR"
|
|
if [[ ! "$KURYR_AUTH_CACHE_DIR" == "" ]]; then
|
|
rm -f "$KURYR_AUTH_CACHE_DIR"/*
|
|
fi
|
|
|
|
}
|
|
|
|
function create_kuryr_account {
|
|
if is_service_enabled kuryr-libnetwork; then
|
|
create_service_user "kuryr" "admin"
|
|
get_or_create_service "kuryr-libnetwork" "kuryr-libnetwork" \
|
|
"Kuryr-Libnetwork Service"
|
|
fi
|
|
}
|
|
|
|
function configure_kuryr {
|
|
local binding_path
|
|
|
|
binding_path="$1"
|
|
sudo install -d -o "$STACK_USER" "$KURYR_CONFIG_DIR"
|
|
|
|
(cd "$KURYR_HOME" && exec ./tools/generate_config_file_samples.sh)
|
|
|
|
cp "$KURYR_HOME/etc/kuryr.conf.sample" "$KURYR_CONFIG"
|
|
|
|
create_kuryr_cache_dir
|
|
|
|
if is_service_enabled kuryr-libnetwork; then
|
|
configure_auth_token_middleware "$KURYR_CONFIG" kuryr \
|
|
"$KURYR_AUTH_CACHE_DIR" neutron
|
|
iniset $KURYR_CONFIG DEFAULT capability_scope $KURYR_CAPABILITY_SCOPE
|
|
iniset $KURYR_CONFIG DEFAULT process_external_connectivity $KURYR_PROCESS_EXTERNAL_CONNECTIVITY
|
|
fi
|
|
|
|
if [[ "$ENABLE_PLUGINV2" == "True" ]]; then
|
|
# bindir is /user/libexec/kuryr in docker image
|
|
iniset -sudo ${KURYR_CONFIG} DEFAULT bindir "/usr/libexec/kuryr"
|
|
else
|
|
iniset -sudo ${KURYR_CONFIG} DEFAULT bindir "$binding_path/libexec/kuryr"
|
|
fi
|
|
iniset -sudo ${KURYR_CONFIG} DEFAULT debug $ENABLE_DEBUG_LOG_LEVEL
|
|
}
|
|
|
|
|
|
# main loop
|
|
if is_service_enabled kuryr-libnetwork; then
|
|
DISTRO_DISTUTILS_DATA_PATH=$(python -c "import distutils.dist;import distutils.command.install;inst = distutils.command.install.install(distutils.dist.Distribution());inst.finalize_options();print inst.install_data")
|
|
if [[ "$1" == "stack" && "$2" == "install" ]]; then
|
|
# Install kuryr-lib from git so we make sure we're testing
|
|
# the latest code.
|
|
if use_library_from_git "kuryr"; then
|
|
git_clone_by_name "kuryr"
|
|
setup_dev_lib "kuryr"
|
|
# Install bind scripts
|
|
if [ ! -d "${DISTRO_DISTUTILS_DATA_PATH}/libexec/kuryr" ]; then
|
|
sudo mkdir -p ${DISTRO_DISTUTILS_DATA_PATH}/libexec/kuryr
|
|
fi
|
|
sudo cp -rf ${DEST}/kuryr/usr/libexec/kuryr/* ${DISTRO_DISTUTILS_DATA_PATH}/libexec/kuryr
|
|
fi
|
|
if [[ ! -d "${KURYR_LOG_DIR}" ]]; then
|
|
echo -n "${KURYR_LOG_DIR} directory is missing. Creating it... "
|
|
sudo mkdir -p ${KURYR_LOG_DIR}
|
|
echo "Done"
|
|
fi
|
|
setup_develop $KURYR_HOME
|
|
|
|
elif [[ "$1" == "stack" && "$2" == "post-config" ]]; then
|
|
|
|
# This is needed in legacy plugin
|
|
if [[ "$ENABLE_PLUGINV2" != "True" ]]; then
|
|
if [[ ! -d "${KURYR_ACTIVATOR_DIR}" ]]; then
|
|
echo -n "${KURYR_ACTIVATOR_DIR} directory is missing. Creating it... "
|
|
sudo mkdir -p ${KURYR_ACTIVATOR_DIR}
|
|
echo "Done"
|
|
fi
|
|
|
|
if [[ ! -f "${KURYR_ACTIVATOR}" ]]; then
|
|
echo -n "${KURYR_ACTIVATOR} is missing. Copying the default one... "
|
|
sudo cp ${KURYR_DEFAULT_ACTIVATOR} ${KURYR_ACTIVATOR}
|
|
echo "Done"
|
|
fi
|
|
fi
|
|
|
|
create_kuryr_account
|
|
configure_kuryr "${DISTRO_DISTUTILS_DATA_PATH}"
|
|
fi
|
|
|
|
if [[ "$1" == "stack" && "$2" == "extra" ]]; then
|
|
echo "Build busybox docker image for fullstack and rally test"
|
|
cd $DEST/kuryr-libnetwork/contrib/busybox
|
|
sh build_image.sh
|
|
|
|
# FIXME(limao): When Kuryr start up, it need to detect if neutron support tag plugin.
|
|
# Kuryr will call neutron extension api to verify if neutron support tag.
|
|
# So Kuryr need to start after neutron-server finish load tag plugin.
|
|
# The process of devstack is:
|
|
# ...
|
|
# run_phase "stack" "post-config"
|
|
# ...
|
|
# start neutron-server
|
|
# ...
|
|
# run_phase "stack" "extra"
|
|
#
|
|
# If Kuryr start up in "post-config" phase, there is no way to make sure
|
|
# Kuryr can start before neutron-server, so Kuryr start in "extra" phase.
|
|
# Bug: https://bugs.launchpad.net/kuryr/+bug/1587522
|
|
if [[ "$ENABLE_PLUGINV2" == "True" ]]; then
|
|
# Build pluginv2 rootfs
|
|
cd $DEST/kuryr-libnetwork/
|
|
sudo sh contrib/docker/v2plugin/v2plugin_rootfs.sh
|
|
|
|
# Build and install pluginv2 image
|
|
sudo docker plugin create kuryr/libnetwork2 ./
|
|
|
|
# Enable pluginv2
|
|
sudo docker plugin enable kuryr/libnetwork2:latest
|
|
else
|
|
run_process kuryr-libnetwork "$KURYR_BIN_DIR/kuryr-server --config-file $KURYR_CONFIG" "" "root"
|
|
fi
|
|
|
|
neutron subnetpool-create --default-prefixlen $KURYR_POOL_PREFIX_LEN --pool-prefix $KURYR_POOL_PREFIX kuryr
|
|
|
|
fi
|
|
|
|
if [[ "$1" == "unstack" ]]; then
|
|
if [[ "$ENABLE_PLUGINV2" == "True" ]]; then
|
|
sudo docker plugin disable kuryr/libnetwork2:latest
|
|
else
|
|
stop_process kuryr-libnetwork
|
|
fi
|
|
fi
|
|
fi
|
|
|
|
# Restore xtrace
|
|
$XTRACE
|
|
|