blob: 655c2df1cb521951721517777795dc8684a1190b [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
41DOCKER_PACKAGE_VERSION=${DOCKER_PACKAGE_VERSION:-0.6.1}
42DOCKER_APT_REPO=${DOCKER_APT_REPO:-https://get.docker.io/ubuntu}
43
44
45# Entry Points
46# ------------
47
48# clean_nova_hypervisor - Clean up an installation
49function cleanup_nova_hypervisor() {
50 stop_service docker
51
52 # Clean out work area
53 sudo rm -rf /var/lib/docker
54}
55
56# configure_nova_hypervisor - Set config files, create data dirs, etc
57function configure_nova_hypervisor() {
Dean Troyer2aa2a892013-08-04 19:53:19 -050058 iniset $NOVA_CONF DEFAULT compute_driver docker.DockerDriver
59 iniset $GLANCE_API_CONF DEFAULT container_formats ami,ari,aki,bare,ovf,docker
60
61 sudo cp -p ${DOCKER_DIR}/nova-driver/docker.filters $NOVA_CONF_DIR/rootwrap.d
62}
63
64# install_nova_hypervisor() - Install external components
65function install_nova_hypervisor() {
66 # So far this is Ubuntu only
67 if ! is_ubuntu; then
68 die $LINENO "Docker is only supported on Ubuntu at this time"
69 fi
70
71 # Make sure Docker is installed
Min Lifdc9ae82013-10-09 15:45:41 -040072 if ! is_package_installed lxc-docker-${DOCKER_PACKAGE_VERSION}; then
Dean Troyer2aa2a892013-08-04 19:53:19 -050073 die $LINENO "Docker is not installed. Please run tools/docker/install_docker.sh"
74 fi
75
76 local docker_pid
77 read docker_pid <$DOCKER_PID_FILE
78 if [[ -z $docker_pid ]] || ! ps -p $docker_pid | grep [d]ocker; then
79 die $LINENO "Docker not running"
80 fi
81}
82
83# start_nova_hypervisor - Start any required external services
84function start_nova_hypervisor() {
85 local docker_pid
86 read docker_pid <$DOCKER_PID_FILE
87 if [[ -z $docker_pid ]] || ! ps -p $docker_pid | grep [d]ocker; then
88 die $LINENO "Docker not running, start the daemon"
89 fi
90
91 # Start the Docker registry container
92 docker run -d -p ${DOCKER_REGISTRY_PORT}:5000 \
93 -e SETTINGS_FLAVOR=openstack -e OS_USERNAME=${OS_USERNAME} \
94 -e OS_PASSWORD=${OS_PASSWORD} -e OS_TENANT_NAME=${OS_TENANT_NAME} \
95 -e OS_GLANCE_URL="${SERVICE_PROTOCOL}://${GLANCE_HOSTPORT}" \
96 -e OS_AUTH_URL=${OS_AUTH_URL} \
97 $DOCKER_REGISTRY_IMAGE_NAME ./docker-registry/run.sh
98
99 echo "Waiting for docker registry to start..."
100 DOCKER_REGISTRY=${SERVICE_HOST}:${DOCKER_REGISTRY_PORT}
101 if ! timeout $SERVICE_TIMEOUT sh -c "while ! curl -s $DOCKER_REGISTRY; do sleep 1; done"; then
102 die $LINENO "docker-registry did not start"
103 fi
104
105 # Tag image if not already tagged
106 if ! docker images | grep $DOCKER_REPOSITORY_NAME; then
107 docker tag $DOCKER_IMAGE_NAME $DOCKER_REPOSITORY_NAME
108 fi
109
110 # Make sure we copied the image in Glance
111 DOCKER_IMAGE=$(glance image-list | egrep " $DOCKER_IMAGE_NAME ")
112 if ! is_set DOCKER_IMAGE ; then
113 docker push $DOCKER_REPOSITORY_NAME
114 fi
115}
116
117# stop_nova_hypervisor - Stop any external services
118function stop_nova_hypervisor() {
119 # Stop the docker registry container
120 docker kill $(docker ps | grep docker-registry | cut -d' ' -f1)
121}
122
123
124# Restore xtrace
125$MY_XTRACE
126
127# Local variables:
128# mode: shell-script
129# End: