devstack/lib/nova_plugins/hypervisor-docker
Eric Windisch 2dac885e6c Pull docker images from global registry
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
2014-01-31 01:39:03 -05:00

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: