Skip to content

Commit

Permalink
Port over scrubbed version of EC2 Docker Worker cookbook
Browse files Browse the repository at this point in the history
  • Loading branch information
Dan Buch committed Mar 31, 2015
1 parent 17dee5f commit 81c37dd
Show file tree
Hide file tree
Showing 13 changed files with 320 additions and 0 deletions.
39 changes: 39 additions & 0 deletions worker_host/ec2_docker_worker/attributes/default.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
hostname = `hostname`.strip

default[:ec2_docker_worker][:docker][:volume][:device] = "/dev/xvdc"
default[:ec2_docker_worker][:docker][:volume][:metadata_size] = '2G'
default[:ec2_docker_worker][:docker][:preseed] = false
default[:ec2_docker_worker][:docker][:dir] = "/mnt/docker"
# The dm_basesize is set at cloud-init time to the max available per container
default[:ec2_docker_worker][:docker][:dm_basesize] = "12G"
default[:ec2_docker_worker][:docker][:dm_fs] = "xfs"
default[:ec2_docker_worker][:docker][:restart_retries] = 30
default[:ec2_docker_worker][:docker][:restart_retry_delay] = 2
default[:ec2_docker_worker][:docker][:languages] = %w[
android
erlang
go
haskell
jvm
node-js
perl
php
python
ruby
]

default[:travis][:worker][:tld] = "com"

set[:travis][:worker][:domain] = "bb.travis-ci.#{node[:travis][:worker][:tld]}"
set[:travis][:worker][:fqdn] = "#{hostname}.#{node[:travis][:worker][:domain]}"
set[:travis][:worker][:hostname] = hostname
set[:travis][:worker][:provider] = 'docker'
set[:travis][:worker][:home] = '/home/deploy/travis-worker'
set[:travis][:worker][:env] = 'linux'

set[:jruby][:version] = '1.7.16'

set[:collectd][:interval] = 60

set[:sudo][:groups] = ["admin"]
set[:sudo][:users] = [{ name: "ubuntu", nopassword: true }]
19 changes: 19 additions & 0 deletions worker_host/ec2_docker_worker/metadata.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
name "ec2_docker_worker"
version "0.0.1"

depends "build-essential"
depends "git"
depends "apt"
depends "networking_basic"
depends "ntp"
depends "java"
depends "jruby"
depends "collectd"
depends "collectd-librato"
depends "travis_worker_collectd"
depends "users"
depends "sudo"
depends "ssh"
depends "monit"
depends "travis_worker"
depends "papertrail"
6 changes: 6 additions & 0 deletions worker_host/ec2_docker_worker/recipes/apt.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
apt_repository "restricted-universe-multiverse" do
uri "http://archive.ubuntu.com/ubuntu"
distribution node[:lsb][:codename]
components ["restricted", "universe", "multiverse"]
action :add
end
15 changes: 15 additions & 0 deletions worker_host/ec2_docker_worker/recipes/docker_preseed.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
service 'docker' do
provider Chef::Provider::Service::Upstart
action [:enable, :start]
end

bash 'zomg wait for docker' do
code 'start docker ; docker version'
retries node[:ec2_docker_worker][:docker][:restart_retries]
retry_delay node[:ec2_docker_worker][:docker][:restart_retry_delay]
end

node[:ec2_docker_worker][:docker][:languages].each do |lang|
execute "docker pull quay.io/travisci/travis-#{lang}:latest"
execute "docker tag quay.io/travisci/travis-#{lang}:latest travis:#{lang}"
end
40 changes: 40 additions & 0 deletions worker_host/ec2_docker_worker/recipes/setup.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
user "deploy" do
action :create
end

include_recipe "build-essential"
include_recipe "apt"
include_recipe "ec2_docker_worker::apt"
include_recipe "ec2_docker_worker::volume_pre"
include_recipe "git"
include_recipe "networking_basic"
include_recipe "ntp"
include_recipe "users"
include_recipe "sudo"
include_recipe "ssh::sshd"
include_recipe "java"
include_recipe "jruby"

template "/etc/profile.d/jruby.sh" do
source "etc-profile.d-jruby.sh.erb"
owner "root"
mode "0755"
end

include_recipe "travis_docker"
include_recipe "collectd"
include_recipe "collectd-librato"
include_recipe "travis_worker_collectd::ec2-docker"
include_recipe "monit"
include_recipe "travis_worker::ec2-docker"
include_recipe "papertrail"

template "/etc/cloud/cloud.cfg" do
source "cloud.cfg.erb"
owner "root"
group "root"
mode "0644"
end

include_recipe "ec2_docker_worker::volume_post"
include_recipe "ec2_docker_worker::docker_preseed" if !!node[:ec2_docker_worker][:docker][:preseed]
20 changes: 20 additions & 0 deletions worker_host/ec2_docker_worker/recipes/volume_post.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
template "/etc/default/docker.chef" do
source "etc-default-docker.chef.sh.erb"
owner "root"
group "root"
mode 0644
end

template "/etc/default/docker" do
source "etc-default-docker.sh.erb"
owner "root"
group "root"
mode 0644
end

template "/etc/init/docker.conf" do
source "etc-init-docker.conf.erb"
owner "root"
group "root"
mode 0644
end
13 changes: 13 additions & 0 deletions worker_host/ec2_docker_worker/recipes/volume_pre.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package "lvm2"
package "xfsprogs"

template "/usr/local/bin/travis-docker-volume-setup" do
source "travis-docker-volume-setup.sh.erb"
owner "root"
group "root"
mode 0755
variables(
device: node[:ec2_docker_worker][:docker][:volume][:device],
metadata_size: node[:ec2_docker_worker][:docker][:volume][:metadata_size],
)
end
75 changes: 75 additions & 0 deletions worker_host/ec2_docker_worker/templates/default/cloud.cfg.erb
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
# Chef manages this file on <%= node.name %> <3 <3 <3
# vim:filetype=yaml
disable_root: true
preserve_hostname: true

bootcmd:
- "echo worker-linux-docker-${INSTANCE_ID#i-} > /etc/hostname"
- "hostname -F /etc/hostname"

timezone: "UTC"

cloud_init_modules:
- "migrator"
- "seed_random"
- "bootcmd"
- "write-files"
- "growpart"
- "resizefs"
- "ca-certs"
- "rsyslog"
- "ssh"

cloud_config_modules:
- "emit_upstart"
- "disk_setup"
- "mounts"
- "ssh-import-id"
- "locale"
- "set-passwords"
- "grub-dpkg"
- "apt-pipelining"
- "apt-configure"
- "package-update-upgrade-install"
- "timezone"
- "disable-ec2-metadata"
- "runcmd"

cloud_final_modules:
- "scripts-vendor"
- "scripts-per-once"
- "scripts-per-boot"
- "scripts-per-instance"
- "scripts-user"
- "ssh-authkey-fingerprints"
- "keys-to-console"
- "phone-home"
- "final-message"
- "power-state-change"

system_info:
distro: "ubuntu"
paths:
cloud_dir: "/var/lib/cloud/"
templates_dir: "/etc/cloud/templates/"
upstart_dir: "/etc/init/"
package_mirrors:
- arches:
- "i386"
- "amd64"
failsafe:
primary: "http://archive.ubuntu.com/ubuntu"
security: "http://security.ubuntu.com/ubuntu"
search:
primary:
- "http://%(ec2_region)s.ec2.archive.ubuntu.com/ubuntu/"
- "http://%(availability_zone)s.clouds.archive.ubuntu.com/ubuntu/"
security: []
- arches:
- "armhf"
- "armel"
- "default"
failsafe:
primary: "http://ports.ubuntu.com/ubuntu-ports"
security: "http://ports.ubuntu.com/ubuntu-ports"
ssh_svcname: "ssh"
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
# Chef manages this file on <%= node.name %> <3 <3 <3
DOCKER_STORAGE_OPT_DM_BASESIZE="<%= node[:ec2_docker_worker][:docker][:dm_basesize] %>"
DOCKER_STORAGE_OPT_DM_FS="<%= node[:ec2_docker_worker][:docker][:dm_fs] %>"
DOCKER_GRAPH_DIR="<%= node[:ec2_docker_worker][:docker][:dir] %>"
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
# Chef manages this file on <%= node.name %> <3 <3 <3
DOCKER_OPTS="\
--exec-driver=lxc --icc=false \
-H tcp://127.0.0.1:4243 \
-H unix:///var/run/docker.sock \
-g $DOCKER_GRAPH_DIR \
-s devicemapper \
--storage-opt dm.basesize=$DOCKER_STORAGE_OPT_DM_BASESIZE \
--storage-opt dm.datadev=/dev/direct-lvm/data \
--storage-opt dm.metadatadev=/dev/direct-lvm/metadata \
--storage-opt dm.fs=$DOCKER_STORAGE_OPT_DM_FS"
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
# Chef manages this file on <%= node.name %> <3 <3 <3
# vim:filetype=upstart
description "Docker daemon"

start on (local-filesystems and stopped cloud-final and net-device-up IFACE!=lo)
stop on runlevel [!2345]
limit nofile 524288 1048576
limit nproc 524288 1048576

respawn

pre-start script
# see also https://github.com/tianon/cgroupfs-mount/blob/master/cgroupfs-mount
if grep -v '^#' /etc/fstab | grep -q cgroup \
|| [ ! -e /proc/cgroups ] \
|| [ ! -d /sys/fs/cgroup ]; then
exit 0
fi
if ! mountpoint -q /sys/fs/cgroup; then
mount -t tmpfs -o uid=0,gid=0,mode=0755 cgroup /sys/fs/cgroup
fi
(
cd /sys/fs/cgroup
for sys in $(awk '!/^#/ { if ($4 == 1) print $1 }' /proc/cgroups); do
mkdir -p $sys
if ! mountpoint -q $sys; then
if ! mount -n -t cgroup -o $sys cgroup $sys; then
rmdir $sys || true
fi
fi
done
)

travis-docker-volume-setup
end script

script
DOCKER=/usr/bin/$UPSTART_JOB
DOCKER_OPTS=
if [ -f /etc/default/${UPSTART_JOB}.chef ] ; then
. /etc/default/${UPSTART_JOB}.chef
fi
if [ -f /etc/default/${UPSTART_JOB}.cloud-init ] ; then
. /etc/default/${UPSTART_JOB}.cloud-init
fi
export DOCKER_STORAGE_OPT_DM_BASESIZE
export DOCKER_STORAGE_OPT_DM_FS
export DOCKER_GRAPH_DIR
if [ -f /etc/default/$UPSTART_JOB ]; then
. /etc/default/$UPSTART_JOB
fi
exec "$DOCKER" -d $DOCKER_OPTS
end script
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# Chef manages this file on <%= node.name %> <3 <3 <3
# vim:filetype=sh
export PATH=$PATH:/opt/jruby/bin
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
#!/bin/bash
# Chef manages this file on <%= node.name %> <3 <3 <3

set -ex

: ${DEVICE:=<%= @device %>}
: ${METADATA_SIZE:=<%= @metadata_size %>}

if [[ -e /dev/direct-lvm/metadata ]] ; then
echo "$(basename $0): Metadata volume already exists. Assuming set up"
exit 0
fi

pvcreate "$DEVICE"

vgcreate direct-lvm $DEVICE

lvcreate -n metadata direct-lvm --size "$METADATA_SIZE"
dd if=/dev/zero of=/dev/direct-lvm/metadata bs=1M count=10

lvcreate -n data direct-lvm -l '100%FREE'
dd if=/dev/zero of=/dev/direct-lvm/data bs=1M count=10

0 comments on commit 81c37dd

Please sign in to comment.