blob: d7d453b62c4a167f397a6113ab687aa93c6e23be [file] [log] [blame]
Dean Troyer2aa2a892013-08-04 19:53:19 -05001# lib/nova_plugins/docker
2# Configure the Docker hypervisor
3
4# Enable with:
Adam Spiers6a5aa7c2013-10-24 11:27:02 +01005#
6# VIRT_DRIVER=docker
Dean Troyer2aa2a892013-08-04 19:53:19 -05007
8# Dependencies:
Adam Spiers6a5aa7c2013-10-24 11:27:02 +01009#
10# - ``functions`` file
11# - ``nova`` and ``glance`` configurations
Dean Troyer2aa2a892013-08-04 19:53:19 -050012
13# install_nova_hypervisor - install any external requirements
14# configure_nova_hypervisor - make configuration changes, including those to other services
15# start_nova_hypervisor - start any external services
16# stop_nova_hypervisor - stop any external services
17# cleanup_nova_hypervisor - remove transient data and cache
18
19# Save trace setting
20MY_XTRACE=$(set +o | grep xtrace)
21set +o xtrace
22
23
24# Defaults
25# --------
26
27# Set up default directories
28DOCKER_DIR=$DEST/docker
Dean Troyer2aa2a892013-08-04 19:53:19 -050029DOCKER_BRANCH=${DOCKER_BRANCH:-master}
30
31DOCKER_UNIX_SOCKET=/var/run/docker.sock
32DOCKER_PID_FILE=/var/run/docker.pid
33DOCKER_REGISTRY_PORT=${DOCKER_REGISTRY_PORT:-5042}
34
35DOCKER_IMAGE=${DOCKER_IMAGE:-http://get.docker.io/images/openstack/docker-ut.tar.gz}
36DOCKER_IMAGE_NAME=docker-busybox
37DOCKER_REGISTRY_IMAGE=${DOCKER_REGISTRY_IMAGE:-http://get.docker.io/images/openstack/docker-registry.tar.gz}
38DOCKER_REGISTRY_IMAGE_NAME=docker-registry
39DOCKER_REPOSITORY_NAME=${SERVICE_HOST}:${DOCKER_REGISTRY_PORT}/${DOCKER_IMAGE_NAME}
40
Dean Troyer2aa2a892013-08-04 19:53:19 -050041DOCKER_APT_REPO=${DOCKER_APT_REPO:-https://get.docker.io/ubuntu}
42
43
44# Entry Points
45# ------------
46
47# clean_nova_hypervisor - Clean up an installation
48function cleanup_nova_hypervisor() {
49 stop_service docker
50
51 # Clean out work area
52 sudo rm -rf /var/lib/docker
53}
54
55# configure_nova_hypervisor - Set config files, create data dirs, etc
56function configure_nova_hypervisor() {
Dean Troyer2aa2a892013-08-04 19:53:19 -050057 iniset $NOVA_CONF DEFAULT compute_driver docker.DockerDriver
58 iniset $GLANCE_API_CONF DEFAULT container_formats ami,ari,aki,bare,ovf,docker
59
60 sudo cp -p ${DOCKER_DIR}/nova-driver/docker.filters $NOVA_CONF_DIR/rootwrap.d
61}
62
63# install_nova_hypervisor() - Install external components
64function install_nova_hypervisor() {
65 # So far this is Ubuntu only
66 if ! is_ubuntu; then
67 die $LINENO "Docker is only supported on Ubuntu at this time"
68 fi
69
70 # Make sure Docker is installed
Sam Alba5a77d032013-10-21 16:17:30 -070071 if ! is_package_installed lxc-docker; then
Dean Troyer2aa2a892013-08-04 19:53:19 -050072 die $LINENO "Docker is not installed. Please run tools/docker/install_docker.sh"
73 fi
74
75 local docker_pid
76 read docker_pid <$DOCKER_PID_FILE
77 if [[ -z $docker_pid ]] || ! ps -p $docker_pid | grep [d]ocker; then
78 die $LINENO "Docker not running"
79 fi
80}
81
82# start_nova_hypervisor - Start any required external services
83function start_nova_hypervisor() {
84 local docker_pid
85 read docker_pid <$DOCKER_PID_FILE
86 if [[ -z $docker_pid ]] || ! ps -p $docker_pid | grep [d]ocker; then
87 die $LINENO "Docker not running, start the daemon"
88 fi
89
90 # Start the Docker registry container
91 docker run -d -p ${DOCKER_REGISTRY_PORT}:5000 \
92 -e SETTINGS_FLAVOR=openstack -e OS_USERNAME=${OS_USERNAME} \
93 -e OS_PASSWORD=${OS_PASSWORD} -e OS_TENANT_NAME=${OS_TENANT_NAME} \
94 -e OS_GLANCE_URL="${SERVICE_PROTOCOL}://${GLANCE_HOSTPORT}" \
95 -e OS_AUTH_URL=${OS_AUTH_URL} \
96 $DOCKER_REGISTRY_IMAGE_NAME ./docker-registry/run.sh
97
98 echo "Waiting for docker registry to start..."
99 DOCKER_REGISTRY=${SERVICE_HOST}:${DOCKER_REGISTRY_PORT}
100 if ! timeout $SERVICE_TIMEOUT sh -c "while ! curl -s $DOCKER_REGISTRY; do sleep 1; done"; then
101 die $LINENO "docker-registry did not start"
102 fi
103
104 # Tag image if not already tagged
105 if ! docker images | grep $DOCKER_REPOSITORY_NAME; then
106 docker tag $DOCKER_IMAGE_NAME $DOCKER_REPOSITORY_NAME
107 fi
108
109 # Make sure we copied the image in Glance
110 DOCKER_IMAGE=$(glance image-list | egrep " $DOCKER_IMAGE_NAME ")
111 if ! is_set DOCKER_IMAGE ; then
112 docker push $DOCKER_REPOSITORY_NAME
113 fi
114}
115
116# stop_nova_hypervisor - Stop any external services
117function stop_nova_hypervisor() {
118 # Stop the docker registry container
119 docker kill $(docker ps | grep docker-registry | cut -d' ' -f1)
120}
121
122
123# Restore xtrace
124$MY_XTRACE
125
126# Local variables:
127# mode: shell-script
128# End: