Adding ContainerPilot skeleton.

This commit is contained in:
Tom Gallacher 2016-10-14 11:57:26 +01:00
parent 50a265da8c
commit fe5b7ffc5c
5 changed files with 167 additions and 0 deletions

50
.gitignore vendored Normal file
View File

@ -0,0 +1,50 @@
# Logs
logs
*.log
npm-debug.log*
# Runtime data
pids
*.pid
*.seed
*.pid.lock
# Directory for instrumented libs generated by jscoverage/JSCover
lib-cov
# Coverage directory used by tools like istanbul
coverage
# nyc test coverage
.nyc_output
# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
.grunt
# node-waf configuration
.lock-wscript
# Compiled binary addons (http://nodejs.org/api/addons.html)
build/Release
# Dependency directories
node_modules
jspm_packages
# Optional npm cache directory
.npm
# Optional eslint cache
.eslintcache
# Optional REPL history
.node_repl_history
# Output of 'npm pack'
*.tgz
# Vim files:
*.sw*
# Mac OS dirty files
.DS_Store

6
Makefile Normal file
View File

@ -0,0 +1,6 @@
SHELL := /bin/bash
.SHELLFLAGS := -eu -o pipefail
.PHONY: check
check:
@./bin/setup.sh

85
bin/setup.sh Executable file
View File

@ -0,0 +1,85 @@
#! /usr/bin/env bash
# setup.sh - Checks that all the required tools are present and that they are
# appropriately configured for deploying to Triton.
#
# Adapted from https://github.com/autopilotpattern/mysql/blob/master/setup.sh
#
#
# Prelude
#
set -euo pipefail
IFS=$'\n\t'
#
# Utilities
#
die() {
local msg="$@"
[[ -z "${msg}" ]] || {
echo
tput setaf 1 # red
tput bold
echo "${msg}"
tput sgr0 # reset
}
exit 1
}
#
# Check functions
#
ensure_command() {
local cmd="$1"
command -v "${cmd}" > /dev/null 2>&1 || {
die "Couldn't find required command: ${cmd}"
}
}
ensure_docker_config_matches_triton_config_and_capture_triton_details() {
local docker_user=$(docker info 2>&1 | awk -F": " '/SDCAccount:/{print $2}')
local docker_dc=$(echo $DOCKER_HOST | awk -F"/" '{print $3}' | awk -F'.' '{print $1}')
TRITON_USER=$(triton profile get | awk -F": " '/account:/{print $2}')
TRITON_DC=$(triton profile get | awk -F"/" '/url:/{print $3}' | awk -F'.' '{print $1}')
TRITON_ACCOUNT=$(triton account get | awk -F": " '/id:/{print $2}')
if [[ ! "$docker_user" = "$TRITON_USER" ]] || [[ ! "$docker_dc" = "$TRITON_DC" ]]; then
echo "Docker user: ${docker_user}"
echo "Triton user: ${TRITON_USER}"
echo "Docker data center: ${docker_dc}"
echo "Triton data center: ${TRITON_DC}"
die "Your Triton configuration does not match your Docker configuration."
fi
}
ensure_triton_cns_is_enabled() {
local triton_cns_enabled=$(triton account get | awk -F": " '/cns/{print $2}')
[[ "$triton_cns_enabled" == "true" ]] || {
die "Triton CNS is required and not enabled."
}
}
write_env_file() {
[[ -f .env ]] || {
echo '# Consul discovery via Triton CNS' >> .env
echo CONSUL=consul.svc.${TRITON_ACCOUNT}.${TRITON_DC}.cns.joyent.com >> .env
echo MONGO_URL=mongodb://mongo.svc.${TRITON_ACCOUNT}.${TRITON_DC}.cns.joyent.com:27017/rocketchat >> .env
echo ROOT_URL=http://rocketchat.svc.${TRITON_ACCOUNT}.${TRITON_DC}.cns.joyent.com:3000/ >> .env
echo >> .env
}
}
ensure_prerequisites() {
ensure_command docker
ensure_command docker-compose
ensure_command triton
}
#
# Main
#
ensure_prerequisites
ensure_docker_config_matches_triton_config_and_capture_triton_details
ensure_triton_cns_is_enabled
write_env_file

20
docker-compose.yml Normal file
View File

@ -0,0 +1,20 @@
#############################################################################
# CONSUL
#############################################################################
consul:
image: progrium/consul:latest
labels:
- triton.cns.services=consul
restart: always
mem_limit: 128m
expose:
- 53
- 8300
- 8301
- 8302
- 8400
- 8500
env_file: .env
ports:
- 8500:8500
command: -server -bootstrap -ui-dir /ui

6
local-compose.yml Normal file
View File

@ -0,0 +1,6 @@
consul:
extends:
file: docker-compose.yml
service: consul
ports:
- 8500:8500