Skip to content

Instantly share code, notes, and snippets.

@pombredanne
Forked from nextrevision/docker_pulp_env.sh
Created August 2, 2019 16:18
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save pombredanne/8ac712176ace6d773d863b3780e8738d to your computer and use it in GitHub Desktop.
Save pombredanne/8ac712176ace6d773d863b3780e8738d to your computer and use it in GitHub Desktop.
Configures a complete pulp environment with docker-machine
#!/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