application-workloads/guacamole/guacamole-rdp-vnc-gateway-existing-vnet/scripts/cloud-config.yaml (140 lines of code) (raw):

#cloud-config coreos: update: reboot-strategy: etcd-lock units: - name: docker.service command: start - name: docker-guacamole.service command: start content: | [Unit] Description=Guacamole running on Docker Requires=docker.service docker-guacd.service docker-mariadb.service docker-mariadb-waiter.service Wants=network-online.target After=docker.service network-online.target docker-guacd.service docker-mariadb.service docker-mariadb-waiter.service [Service] Restart=always RestartSec=3 TimeoutStartSec=0 ExecStartPre=-/usr/bin/docker rm -f some-guacamole ExecStartPre=-/usr/bin/docker pull glyptodon/guacamole:latest ExecStart=/usr/bin/docker run \ --name some-guacamole \ --link some-guacd:guacd \ --link some-mariadb:mysql \ -e MYSQL_DATABASE=guacamole_db \ -e MYSQL_USER=guacamole_user \ -e MYSQL_PASSWORD=burrito-guacamole-extra-1dollar \ -p 80:8080 \ glyptodon/guacamole:latest ExecStop=/bin/bash -c " \ /usr/bin/docker stop some-guacamole || true \ /usr/bin/docker rm some-guacamole || true \ " [Install] WantedBy=multi-user.target - name: docker-guacd.service command: start content: | [Unit] Description=guacd running on Docker Requires=docker.service Wants=network-online.target After=docker.service network-online.target [Service] Restart=always RestartSec=3 TimeoutStartSec=0 ExecStartPre=-/usr/bin/docker rm -f some-guacd ExecStartPre=-/usr/bin/docker pull glyptodon/guacd:latest ExecStart=/usr/bin/docker run \ --name some-guacd \ glyptodon/guacd:latest ExecStop=/bin/bash -c " \ /usr/bin/docker stop some-guacd || true \ /usr/bin/docker rm some-guacd || true \ " [Install] WantedBy=multi-user.target - name: docker-mariadb.service command: start content: | [Unit] Description=MariaDB running on Docker Requires=docker.service Wants=network-online.target After=docker.service network-online.target [Service] Restart=always RestartSec=3 TimeoutStartSec=0 ExecStartPre=/usr/bin/chmod +x /opt/bin/docker-mariadb.sh ExecStart=/opt/bin/docker-mariadb.sh ExecStop=/bin/bash -c " \ /usr/bin/docker stop some-mariadb || true \ /usr/bin/docker rm some-mariadb || true \ " [Install] WantedBy=multi-user.target - name: docker-mariadb-waiter.service command: start content: | [Unit] Description=Wait for MariaDB to be initialized Requires=docker.service docker-mariadb.service Wants=network-online.target After=docker.service docker-mariadb.service network-online.target [Service] Type=simple RemainAfterExit=true ExecStartPre=/usr/bin/chmod +x /opt/bin/docker-mariadb-waiter.sh ExecStart=/usr/bin/bash /opt/bin/docker-mariadb-waiter.sh [Install] WantedBy=multi-user.target write_files: - path: /opt/bin/docker-mariadb.sh owner: root permissions: '0755' content: | #!/bin/sh # Parameters IMAGE_NAME="mariadb:10.1" CONTAINER_NAME="some-mariadb" GUACAMOLE_IMAGE_NAME="glyptodon/guacamole:latest" MYSQL_ROOT_PASSWORD="my-secret-pw" MYSQL_USER="guacamole_user" MYSQL_DATABASE="guacamole_db" MYSQL_PASSWORD="burrito-guacamole-extra-1dollar" # Remove pre-existing containers docker stop $CONTAINER_NAME || true docker rm $CONTAINER_NAME || true # Pull the latest version of the Docker image docker pull $IMAGE_NAME # Check if the MySQL database has been prepared already if [ ! -e /mnt/data/mysql/mysql ]; then # Initial database contents: generate them from the guacamole image TMP_SQL_FILE=/mnt/resource/initdb.sql rm -rf $TMP_SQL_FILE $TMP_SQL_FILE.tmp docker run --rm $GUACAMOLE_IMAGE_NAME /opt/guacamole/bin/initdb.sh --mysql > $TMP_SQL_FILE # Prepend database name to SQL query echo "USE $MYSQL_DATABASE; " | cat - $TMP_SQL_FILE > $TMP_SQL_FILE.tmp \ && mv $TMP_SQL_FILE.tmp $TMP_SQL_FILE docker run \ --name $CONTAINER_NAME \ -e MYSQL_ROOT_PASSWORD=$MYSQL_ROOT_PASSWORD \ -e MYSQL_DATABASE=$MYSQL_DATABASE \ -e MYSQL_USER=$MYSQL_USER \ -e MYSQL_PASSWORD=$MYSQL_PASSWORD \ -v /mnt/data/mysql:/var/lib/mysql \ -v $TMP_SQL_FILE:/docker-entrypoint-initdb.d/guacamole.sql \ $IMAGE_NAME else # Start Docker container docker run \ --name $CONTAINER_NAME \ -v /mnt/data/mysql:/var/lib/mysql \ $IMAGE_NAME fi - path: /opt/bin/docker-mariadb-waiter.sh owner: root permissions: '0755' content: | #!/bin/sh # This script waits for MariaDB to be ready to accept connections # Parameters IMAGE_NAME="mariadb:10.1" CONTAINER_NAME="some-mariadb" # Wait at least 60 seconds sleep 60 # Keep polling database until ready while ! docker run --rm --link $CONTAINER_NAME $IMAGE_NAME mysqladmin ping -h $CONTAINER_NAME --silent; do sleep 5 done # Wait 5 more seconds before sending the green light sleep 5