commit 5c9615fd2b9456e9c36094a551c4a23e1698212e Author: Knut Ahlers Date: Thu Sep 14 11:10:19 2017 +0200 Initial import as galaxy role Signed-off-by: Knut Ahlers diff --git a/README.md b/README.md new file mode 100644 index 0000000..8d2b387 --- /dev/null +++ b/README.md @@ -0,0 +1,13 @@ +# luzifer-ansible / docker-compose + +This role installs latest docker-compose on a host and start it as a systemd daemon (it does not take care about installing Docker itself so this needs to be done before by some other role or external functionality.) + +## Requirements + +- Debian >= 8 (jessie) +- Ubuntu >= 16.04 (xenial) +- Docker + +## Usage + +See the [Ansible Galaxy Intro](https://galaxy.ansible.com/intro) for usage of roles within Ansible Galaxy. diff --git a/defaults/main.yml b/defaults/main.yml new file mode 100644 index 0000000..044df7a --- /dev/null +++ b/defaults/main.yml @@ -0,0 +1,7 @@ +--- + +reload_minutes: 15 + +config: + version: "3" + services: diff --git a/meta/main.yml b/meta/main.yml new file mode 100644 index 0000000..4aa530f --- /dev/null +++ b/meta/main.yml @@ -0,0 +1,41 @@ +--- +galaxy_info: + author: Knut Ahlers + description: | + Install latest docker-compose on a host and start it as a systemd + daemon (it does not take care about installing Docker itself so + this needs to be done before by some other role or external + functionality.) + + license: Apache + min_ansible_version: 2.3 + + platforms: + - name: Ubuntu + versions: + - xenial + - name: Debian + versions: + - jessie + - stretch + + categories: + #- cloud + #- cloud:ec2 + #- cloud:gce + #- cloud:rax + #- clustering + #- database + #- database:nosql + #- database:sql + #- development + #- monitoring + #- networking + #- packaging + - system + #- web + +dependencies: [] + # List your role dependencies here, one per line. + # Be sure to remove the '[]' above if you add dependencies + # to this list. diff --git a/tasks/main.yml b/tasks/main.yml new file mode 100644 index 0000000..ed355d0 --- /dev/null +++ b/tasks/main.yml @@ -0,0 +1,125 @@ +--- + +# Install docker-compose + +- name: Ensure pip to be available + apt: + name: python-pip + update_cache: yes + +- name: Install or update docker-compose + pip: + name: docker-compose + state: latest + register: docker_compose + +# Configure docker-compose + +- name: Create configuration directory + file: + dest: /etc/docker-compose + state: directory + mode: 0700 + +- name: Write docker-compose.yml + template: + dest: /etc/docker-compose/docker-compose.yml + src: templates/docker-compose.yml + mode: 0600 + register: compose_file + +- name: Validate configuration + command: docker-compose config -q + args: + chdir: /etc/docker-compose + when: compose_file.changed + +# Install and start services + +- name: Install docker-compose.service + copy: + dest: /etc/systemd/system/docker-compose.service + content: | + [Unit] + Description=Docker Compose container starter + After=docker.service network-online.target + Requires=docker.service network-online.target + + [Service] + WorkingDirectory=/etc/docker-compose + Type=oneshot + RemainAfterExit=yes + + ExecStartPre=/usr/local/bin/docker-compose pull --quiet --parallel --ignore-pull-failures + ExecStart=/usr/local/bin/docker-compose up -d + + ExecStop=/usr/local/bin/docker-compose down + + ExecReload=/usr/local/bin/docker-compose pull --quiet --parallel --ignore-pull-failures + ExecReload=/usr/local/bin/docker-compose up -d + + [Install] + WantedBy=multi-user.target + register: docker_compose_service + +- name: Start and enable docker-compose service + systemd: + name: docker-compose.service + daemon_reload: yes + enabled: yes + state: started + +- name: Restart service if service configuration changed + systemd: + name: docker-compose.service + daemon_reload: yes + state: restarted + when: docker_compose_service.changed + +- name: Reload and apply configuration + systemd: + name: docker-compose.service + state: reloaded + when: docker_compose.changed or compose_file.changed + +- name: Install docker-compose-reload.service + copy: + dest: /etc/systemd/system/docker-compose-reload.service + content: | + [Unit] + Description=Refresh images and update containers + + [Service] + Type=oneshot + + ExecStart=/bin/systemctl reload docker-compose.service + +- name: Install docker-compose-reload.timer + copy: + dest: /etc/systemd/system/docker-compose-reload.timer + content: | + [Unit] + Description=Refresh images and update containers + Requires=docker-compose.service + After=docker-compose.service + + [Timer] + OnCalendar=*:0/{{ reload_minutes }} + + [Install] + WantedBy=timers.target + register: docker_compose_reload_timer + +- name: Enable and start docker-compose-reload.timer + systemd: + name: docker-compose-reload.timer + daemon_reload: yes + enabled: yes + state: started + +- name: Restart docker-compose-reload.timer if it changed + systemd: + name: docker-compose-reload.timer + daemon_reload: yes + state: restarted + when: docker_compose_reload_timer.changed diff --git a/templates/docker-compose.yml b/templates/docker-compose.yml new file mode 100644 index 0000000..b3ab9a8 --- /dev/null +++ b/templates/docker-compose.yml @@ -0,0 +1,3 @@ +# {{ ansible_managed }} + +{{ config | to_nice_yaml }}