2dac885e6c
The global docker registry is where images are being built and uploaded. It's effectively docker's version of, say, 'pip'. The static tarballs are not only an extra maintenance burden as they're outside the standard build and publishing process, but are presently outside the scope of an open development / release process as well. While this process does cause some trouble with network-independence for CI purposes, the fetching is still done from install-docker.sh; Additionally, this driver is not currently tested via the community CI effort. Change-Id: I3ee6bfee9c273cd3aabe1e00a1d1a8856a466189
126 lines
3.7 KiB
Plaintext
126 lines
3.7 KiB
Plaintext
# lib/nova_plugins/docker
|
|
# Configure the Docker hypervisor
|
|
|
|
# Enable with:
|
|
#
|
|
# VIRT_DRIVER=docker
|
|
|
|
# Dependencies:
|
|
#
|
|
# - ``functions`` file
|
|
# - ``nova`` and ``glance`` configurations
|
|
|
|
# install_nova_hypervisor - install any external requirements
|
|
# configure_nova_hypervisor - make configuration changes, including those to other services
|
|
# start_nova_hypervisor - start any external services
|
|
# stop_nova_hypervisor - stop any external services
|
|
# cleanup_nova_hypervisor - remove transient data and cache
|
|
|
|
# Save trace setting
|
|
MY_XTRACE=$(set +o | grep xtrace)
|
|
set +o xtrace
|
|
|
|
|
|
# Defaults
|
|
# --------
|
|
|
|
# Set up default directories
|
|
DOCKER_DIR=$DEST/docker
|
|
|
|
DOCKER_UNIX_SOCKET=/var/run/docker.sock
|
|
DOCKER_PID_FILE=/var/run/docker.pid
|
|
DOCKER_REGISTRY_PORT=${DOCKER_REGISTRY_PORT:-5042}
|
|
|
|
DOCKER_IMAGE=${DOCKER_IMAGE:-busybox:latest}
|
|
DOCKER_IMAGE_NAME=busybox
|
|
DOCKER_REGISTRY_IMAGE=${DOCKER_REGISTRY_IMAGE:-registry:latest}
|
|
DOCKER_REGISTRY_IMAGE_NAME=registry
|
|
DOCKER_REPOSITORY_NAME=${SERVICE_HOST}:${DOCKER_REGISTRY_PORT}/${DOCKER_IMAGE_NAME}
|
|
|
|
DOCKER_APT_REPO=${DOCKER_APT_REPO:-https://get.docker.io/ubuntu}
|
|
|
|
|
|
# Entry Points
|
|
# ------------
|
|
|
|
# clean_nova_hypervisor - Clean up an installation
|
|
function cleanup_nova_hypervisor() {
|
|
stop_service docker
|
|
|
|
# Clean out work area
|
|
sudo rm -rf /var/lib/docker
|
|
}
|
|
|
|
# configure_nova_hypervisor - Set config files, create data dirs, etc
|
|
function configure_nova_hypervisor() {
|
|
iniset $NOVA_CONF DEFAULT compute_driver docker.DockerDriver
|
|
iniset $GLANCE_API_CONF DEFAULT container_formats ami,ari,aki,bare,ovf,docker
|
|
}
|
|
|
|
# install_nova_hypervisor() - Install external components
|
|
function install_nova_hypervisor() {
|
|
# So far this is Ubuntu only
|
|
if ! is_ubuntu; then
|
|
die $LINENO "Docker is only supported on Ubuntu at this time"
|
|
fi
|
|
|
|
# Make sure Docker is installed
|
|
if ! is_package_installed lxc-docker; then
|
|
die $LINENO "Docker is not installed. Please run tools/docker/install_docker.sh"
|
|
fi
|
|
|
|
local docker_pid
|
|
read docker_pid <$DOCKER_PID_FILE
|
|
if [[ -z $docker_pid ]] || ! ps -p $docker_pid | grep [d]ocker; then
|
|
die $LINENO "Docker not running"
|
|
fi
|
|
}
|
|
|
|
# start_nova_hypervisor - Start any required external services
|
|
function start_nova_hypervisor() {
|
|
local docker_pid
|
|
read docker_pid <$DOCKER_PID_FILE
|
|
if [[ -z $docker_pid ]] || ! ps -p $docker_pid | grep [d]ocker; then
|
|
die $LINENO "Docker not running, start the daemon"
|
|
fi
|
|
|
|
# Start the Docker registry container
|
|
docker run -d -p ${DOCKER_REGISTRY_PORT}:5000 \
|
|
-e SETTINGS_FLAVOR=openstack -e OS_USERNAME=${OS_USERNAME} \
|
|
-e OS_PASSWORD=${OS_PASSWORD} -e OS_TENANT_NAME=${OS_TENANT_NAME} \
|
|
-e OS_GLANCE_URL="${SERVICE_PROTOCOL}://${GLANCE_HOSTPORT}" \
|
|
-e OS_AUTH_URL=${OS_AUTH_URL} \
|
|
$DOCKER_REGISTRY_IMAGE_NAME ./docker-registry/run.sh
|
|
|
|
echo "Waiting for docker registry to start..."
|
|
DOCKER_REGISTRY=${SERVICE_HOST}:${DOCKER_REGISTRY_PORT}
|
|
if ! timeout $SERVICE_TIMEOUT sh -c "while ! curl -s $DOCKER_REGISTRY; do sleep 1; done"; then
|
|
die $LINENO "docker-registry did not start"
|
|
fi
|
|
|
|
# Tag image if not already tagged
|
|
if ! docker images | grep $DOCKER_REPOSITORY_NAME; then
|
|
docker tag $DOCKER_IMAGE_NAME $DOCKER_REPOSITORY_NAME
|
|
fi
|
|
|
|
# Make sure we copied the image in Glance
|
|
DOCKER_IMAGE=$(glance image-list | egrep " $DOCKER_IMAGE_NAME ")
|
|
if ! is_set DOCKER_IMAGE ; then
|
|
docker push $DOCKER_REPOSITORY_NAME
|
|
fi
|
|
}
|
|
|
|
# stop_nova_hypervisor - Stop any external services
|
|
function stop_nova_hypervisor() {
|
|
# Stop the docker registry container
|
|
docker kill $(docker ps | grep docker-registry | cut -d' ' -f1)
|
|
}
|
|
|
|
|
|
# Restore xtrace
|
|
$MY_XTRACE
|
|
|
|
# Local variables:
|
|
# mode: shell-script
|
|
# End:
|