#!/bin/bash exname=$(basename $0) prefix_cmd=" . /etc/shlib include common include parse . ../lib/common " ## ## Mocks ## relation-get() { local key="$1" echo "$CFG" | shyaml get-value "$key" 2>/dev/null } export -f relation-get file_put() { echo "file_put $1" cat - | prefix " | " } export -f file_put docker() { echo "docker" "$@" echo stdin: cat - | prefix " | " } export -f docker config-add() { echo "config-add" echo "$1" | prefix " | " } export -f config-add mkdir() { echo "called: $FUNCNAME $@" >&2 } export -f mkdir setfacl() { echo "called: $FUNCNAME $@" >&2 } export -f setfacl chgrp() { echo "called: $FUNCNAME $@" >&2 } export -f chgrp chmod() { echo "called: $FUNCNAME $@" >&2 } export -f chmod cached_cmd_on_base_image() { echo "called: $FUNCNAME $@" >&2 echo "stdout:" >&2 echo "<GID>" | prefix " | " >&2 echo "<GID>" } export -f cached_cmd_on_base_image ## ## apache_vhost_create ## try " export SERVICE_CONFIGSTORE='\$SERVICE_CONFIGSTORE' DOMAIN=www.example.com DOCKER_SITE_PATH=/var/www/\$DOMAIN apache_vhost_create" noerror is out reg '^file_put \$SERVICE_CONFIGSTORE/.*/www.example.com.conf' try " export SERVICE_CONFIGSTORE='\$SERVICE_CONFIGSTORE' DOMAIN=www.example.com DOCKER_SITE_PATH=/var/www/\$DOMAIN CFG=' ssl: true ' apache_vhost_create" noerror is out reg '^file_put \$SERVICE_CONFIGSTORE/.*/www.example.com.conf' is err '' try " export SERVICE_CONFIGSTORE='\$SERVICE_CONFIGSTORE' export CONFIGSTORE='\$CONFIGSTORE' export BASE_SERVICE_NAME='\$BASE_SERVICE_NAME' export MASTER_TARGET_SERVICE_NAME='\$MASTER_TARGET_SERVICE_NAME' DOMAIN=www.example.com DOCKER_SITE_PATH=/var/www/\$DOMAIN CFG=' ssl: key: | a b cert: c ' apache_vhost_create" noerror is out part 'file_put $CONFIGSTORE/$BASE_SERVICE_NAME/etc/ssl/certs/www.example.com.pem | c' is out part 'file_put $CONFIGSTORE/$BASE_SERVICE_NAME/etc/ssl/private/www.example.com.key | a | b' is out reg 'config-add' is out reg ' - \$CONFIGSTORE/\$BASE_SERVICE_NAME/etc/ssl/certs/www.example.com.pem:/etc/ssl/certs/www.example.com.pem:ro' is out reg ' - \$CONFIGSTORE/\$BASE_SERVICE_NAME/etc/ssl/private/www.example.com.key:/etc/ssl/private/www.example.com.key:ro' try " export DOCKER_BASE_IMAGE=docker/apache export SERVICE_CONFIGSTORE='\$SERVICE_CONFIGSTORE' export CONFIGSTORE='\$CONFIGSTORE' export BASE_SERVICE_NAME='\$BASE_SERVICE_NAME' export MASTER_TARGET_SERVICE_NAME='\$MASTER_TARGET_SERVICE_NAME' DOMAIN=www.example.com DOCKER_SITE_PATH=/var/www/\$DOMAIN export CFG=' creds: toto: xxx ' apache_vhost_create" noerror is out reg "htpasswd -bc '/etc/apache2/sites-enabled/www.example.com.passwd' 'toto' 'xxx'" is out reg 'docker run -i --entrypoint /bin/bash .* docker/apache' ## ## apache_proxy_dir ## try " export DOCKER_BASE_IMAGE=docker/apache export SERVICE_CONFIGSTORE='\$SERVICE_CONFIGSTORE' export CONFIGSTORE='\$CONFIGSTORE' export BASE_SERVICE_NAME='\$BASE_SERVICE_NAME' export MASTER_TARGET_SERVICE_NAME='\$MASTER_TARGET_SERVICE_NAME' export CFG=' creds: toto: xxx ' apache_publish_dir" is errlvl 1 ## no domain try " export DATASTORE='\$DATASTORE' export DOCKER_BASE_IMAGE=docker/apache export SERVICE_CONFIGSTORE='\$SERVICE_CONFIGSTORE' export CONFIGSTORE='\$CONFIGSTORE' export BASE_SERVICE_NAME='\$BASE_SERVICE_NAME' export MASTER_TARGET_SERVICE_NAME='\$MASTER_TARGET_SERVICE_NAME' export CFG=' domain: www.example.com creds: toto: xxx ' apache_publish_dir" is errlvl 0 is err reg 'setfacl -R -m g:<GID>:rx \$DATASTORE/\$BASE_SERVICE_NAME/var/www/www.example.com' is err reg 'cached_cmd_on_base_image apache id -g www-data' try " export DATASTORE='\$DATASTORE' export DOCKER_BASE_IMAGE=docker/apache export SERVICE_CONFIGSTORE='\$SERVICE_CONFIGSTORE' export CONFIGSTORE='\$CONFIGSTORE' export BASE_SERVICE_NAME='\$BASE_SERVICE_NAME' export MASTER_TARGET_SERVICE_NAME='\$MASTER_TARGET_SERVICE_NAME' export CFG=' domain: www.example.com creds: toto: xxx data-dirs: - a - b - c ' apache_publish_dir" is errlvl 0 is err reg 'setfacl -R -m g:<GID>:rwx \$DATASTORE/\$BASE_SERVICE_NAME/var/www/www.example.com/a \$DATASTORE/\$BASE_SERVICE_NAME/var/www/www.example.com/b \$DATASTORE/\$BASE_SERVICE_NAME/var/www/www.example.com/c' is err reg 'setfacl -R -d -m g:<GID>:rwx \$DATASTORE/\$BASE_SERVICE_NAME/var/www/www.example.com/a \$DATASTORE/\$BASE_SERVICE_NAME/var/www/www.example.com/b \$DATASTORE/\$BASE_SERVICE_NAME/var/www/www.example.com/c' try " export DATASTORE='\$DATASTORE' export DOCKER_BASE_IMAGE=docker/apache export SERVICE_CONFIGSTORE='\$SERVICE_CONFIGSTORE' export CONFIGSTORE='\$CONFIGSTORE' export BASE_SERVICE_NAME='\$BASE_SERVICE_NAME' export MASTER_BASE_SERVICE_NAME='\$MASTER_BASE_SERVICE_NAME' export MASTER_TARGET_SERVICE_NAME='\$MASTER_TARGET_SERVICE_NAME' export CFG=' domain: www.example.com location: /opt/apps/newlocation creds: toto: xxx data-dirs: - a - b - c ' apache_publish_dir" is errlvl 0 is err reg 'mkdir -p /opt/apps/newlocation' is err reg 'setfacl -R -m g:<GID>:rx /opt/apps/newlocation' is out part ' | $MASTER_BASE_SERVICE_NAME: | volumes: | - /opt/apps/newlocation:/var/www/www.example.com'