Instantly share code, notes, and snippets.

Embed
What would you like to do?
Ansible Skeleton
---
# file: roles/app/tasks/main.yml
- name: ensure logging directory exists
file: path=/var/log/acme state=directory
tags:
- install
- name: ensure config directory exists
file: path=/etc/acme/app state=directory
tags:
- install
- name: download image
shell: docker pull acme/app
tags:
- install
- name: copy environment config
template: src=../files/config.env dest=/etc/acme/app/config.env
tags:
- install
- update
- copy
# Must be run with --tags=install first, or this will hang forever
- name: Wait for backup server to be up
wait_for: host={{ ansible_ssh_host }} port={{ app_port + 1 }} state=started timeout=80
tags:
- update
- name: update image
shell: docker pull acme/app
tags:
- update
- name: kill app
shell: docker stop app && docker rm app
tags:
- update
- rollback
- stop
- restart
- name: start app
shell: docker run
--restart on-failure
-v /var/log/acme:/var/log/acme
-p {{ app_port }}:{{ app_port }}
--env-file=/etc/acme/app/config.env
--name app
-d
-t acme/app:{{ version | default('latest') }}
tags:
- update
- rollback
- start
- restart
- name: Wait for main server to be up
wait_for: host={{ ansible_ssh_host }} port={{ app_port }} state=started timeout=80
tags:
- update
- rollback
- name: kill app backup
shell: docker stop app-backup && docker rm app-backup
tags:
- update
- rollback
- stop-backup
- restart-backup
- name: start app backup
shell: docker run
--restart on-failure
-v /var/log/acme:/var/log/acme
-p {{ app_port + 1 }}:{{ app_port }}
--env-file=/etc/acme/app/config.env
--name app-backup
-d
-t acme/app:{{ version | default('latest') }}
tags:
- update
- rollback
- start-backup
- restart-backup
---
# file: roles/docker/tasks/main.yml
- name: add docker apt key
apt_key: keyserver=hkp://keyserver.ubuntu.com:80 id=36A1D7869245C8950F966E92D8576A8BA88D21E9
- name: add docker apt repo
apt_repository: repo='deb https://get.docker.io/ubuntu docker main'
- name: update apt and install docker
apt: name=lxc-docker update_cache=yes
- name: install pip
apt: name=python-pip
- name: fix pip, because for some reason its broken on apt
shell: easy_install -U pip
- name: pip install docker-py
pip: name=docker-py
- name: login to registry
shell: docker login -u USERNAME -p PASSWORD -e EMAIL@EMAIL.EMAIL
# Will error if no dangling containers
- name: clean up docker containers
shell: docker rm $(docker ps -aq)
ignore_errors: yes
tags:
- update
# Will error if no dangling images
- name: clean up docker images
shell: docker rmi $(docker images -f "dangling=true" -q)
ignore_errors: yes
tags:
- update
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment