-
-
Save pombredanne/8ac712176ace6d773d863b3780e8738d to your computer and use it in GitHub Desktop.
Configures a complete pulp environment with docker-machine
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
ACTION=$1 | |
PULP_IMAGES=( | |
pulp/mongodb | |
pulp/qpid | |
pulp/base | |
pulp/worker | |
pulp/apache | |
pulp/crane-allinone | |
pulp/admin-client | |
) | |
PERSISTENT_FOLDERS=( | |
.pulp | |
etc/pulp | |
etc/pki/pulp | |
var/lib/pulp | |
var/log/httpd-pulpapi | |
var/log/httpd-crane | |
) | |
DOCKER_MACHINE_NAME='pulp' | |
LINKS="--link qpid:qpid --link db:db" | |
MOUNTS="-v /home/docker/pulp/etc/pulp:/etc/pulp -v /home/docker/pulp/etc/pki/pulp:/etc/pki/pulp -v /home/docker/pulp/var/lib/pulp:/var/lib/pulp -v /dev/log:/dev/log" | |
API_IP='' | |
_usage() { | |
echo "$0 [start|stop|clean]" | |
echo "start: starts all containers" | |
echo "stop: stops all containers (does not remove)" | |
echo "clean: removes all stopped containers" | |
} | |
_no_docker_machine() { | |
echo "docker-machine could not be found" | |
echo "verify your PATH settings are correct or install docker machine" | |
echo "if on OSX using homebrew: brew cask install docker-machine" | |
} | |
_output() { | |
echo "[-] $1" | |
} | |
_create_docker_machine() { | |
if ! docker-machine ls | egrep "^${DOCKER_MACHINE_NAME}" | grep -q Running; then | |
_output "Creating docker-machine ${DOCKER_MACHINE_NAME}" | |
docker-machine create --driver virtualbox $DOCKER_MACHINE_NAME | |
fi | |
} | |
_pull_pulp_images() { | |
for image in ${PULP_IMAGES[@]}; do | |
if ! docker images | awk '{ print $1 }' | grep -q $image; then | |
_output "Pulling image ${image}" | |
docker pull $image | |
fi | |
done | |
} | |
_create_host_folders() { | |
for f in ${PERSITENT_FOLDERS[@]}; do | |
_output "Creating folder ${f}" | |
docker-machine ssh $DOCKER_MACHINE_NAME "test -d pulp/${f} || { mkdir -p pulp/${f}; chown -R 755 pulp/${f}; }" | |
done | |
_output "Setting up logging on docker-machine" | |
docker-machine ssh $DOCKER_MACHINE_NAME "test -d /dev/log && sudo rm -Rf /dev/log || true" | |
docker-machine ssh $DOCKER_MACHINE_NAME "test -S /dev/log || sudo syslogd" | |
} | |
_start_containers() { | |
_output "Starting mongodb" | |
docker run -d --name db -p 27017:27017 pulp/mongodb | |
_output "Starting qpid" | |
docker run -d --name qpid -p 5672:5672 pulp/qpid | |
_output "Running pulp setup" | |
docker run -it --rm $LINKS $MOUNTS --hostname pulpapi pulp/base bash -c /setup.sh | |
_output "Starting pulp celery-beat" | |
docker run $MOUNTS $LINKS -d --name beat pulp/worker beat | |
_output "Starting pulp resource-manager" | |
docker run $MOUNTS $LINKS -d --name resource_manager pulp/worker resource_manager | |
_output "Starting pulp worker 1" | |
docker run $MOUNTS $LINKS -d --name worker1 pulp/worker worker 1 | |
_output "Starting pulp worker 2" | |
docker run $MOUNTS $LINKS -d --name worker2 pulp/worker worker 2 | |
_output "Starting pulp api" | |
docker run $MOUNTS -v $DROOT/var/log/httpd-pulpapi:/var/log/httpd $LINKS -d --name pulpapi --hostname pulpapi -p 443:443 -p 80:80 pulp/apache | |
_output "Starting pulp crane" | |
docker run $MOUNTS -v $DROOT/var/log/httpd-crane:/var/log/httpd -d --name crane -p 5000:80 pulp/crane-allinone | |
} | |
_stop_containers() { | |
for image in "${PULP_IMAGES[@]}"; do | |
_output "Stopping container ${image}" | |
docker ps | grep $image | awk '{ print $1 }' | xargs docker stop | |
done | |
} | |
_clean_containers() { | |
_output "Removing all stopped containers" | |
docker ps -a | grep -v 'CONTAINER ID' | awk '{ print $1 }' | xargs docker rm | |
} | |
_get_api_ip() { | |
local container_id=$(docker ps | grep 'pulp/apache' | awk '{ print $1 }' | head -n1) | |
API_IP=$(docker inspect $container_id | grep "IPAddress" | awk '{ print $NF }' | sed 's/[",]//g') | |
} | |
_write_env_file() { | |
_output "Writing env file" | |
touch .pulp_env | |
echo "export DOCKER_TLS_VERIFY=${DOCKER_TLS_VERIFY}" >> .pulp_env | |
echo "export DOCKER_CERT_PATH=${DOCKER_CERT_PATH}" >> .pulp_env | |
echo "export DOCKER_HOST=${DOCKER_HOST}" >> .pulp_env | |
cat <<EOF >> .pulp_env | |
function pulp-admin() { | |
local user='admin'; | |
local pass='admin'; | |
docker run --rm -t -v /home/docker/.pulp:/.pulp \ | |
-v /tmp/pulp_uploads/:/tmp/pulp_uploads/ pulp/admin-client \ | |
/bin/bash -c "echo '${API_IP} pulpapi' >> /etc/hosts; pulp-admin -u \${user} -p \${pass} \${*}" | |
} | |
EOF | |
} | |
_print_env() { | |
echo "========================================================" | |
echo "= Environment ready" | |
echo "= To being, run the following command:" | |
echo "=" | |
echo "= source .pulp_env" | |
echo "=" | |
echo "= After sourcing the environment file:" | |
echo "= 1) Docker commands will be scoped to the pulp environment" | |
echo "= 2) 'pulp-admin' command will be available" | |
echo "=" | |
echo "= Example:" | |
echo "=" | |
echo "= pulp-admin repo list" | |
echo "=" | |
echo "========================================================" | |
} | |
main() { | |
which -s docker-machine || { no_docker_machine; exit 1; } | |
_create_docker_machine | |
$(docker-machine env pulp) | |
if [[ $ACTION == 'start' ]]; then | |
_pull_pulp_images | |
_create_host_folders | |
_start_containers | |
_get_api_ip | |
_write_env_file | |
_print_env | |
elif [[ $ACTION == 'stop' ]]; then | |
_stop_containers | |
elif [[ $ACTION == 'clean' ]]; then | |
_clean_containers | |
else | |
_usage | |
exit 1 | |
fi | |
} | |
main |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment