Skip to content

Commit cd178b6

Browse files
authored
Add support to docker-compose (#65)
1 parent f03699a commit cd178b6

14 files changed

+117
-79
lines changed

.yamllint

+11-26
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,18 @@
11
---
2-
# Based on ansible-lint config
2+
33
extends: default
44

55
rules:
6+
7+
# Disable line-length and truthy values reporting
8+
line-length: disable
9+
truthy: disable
10+
11+
# Max 1 space to separate the elements in brakets
612
braces:
713
max-spaces-inside: 1
8-
level: error
14+
15+
# Max 1 space in empty brackets
916
brackets:
10-
max-spaces-inside: 1
11-
level: error
12-
colons:
13-
max-spaces-after: -1
14-
level: error
15-
commas:
16-
max-spaces-after: -1
17-
level: error
18-
comments: disable
19-
comments-indentation: disable
20-
document-start: disable
21-
empty-lines:
22-
max: 3
23-
level: error
24-
hyphens:
25-
level: error
26-
indentation: disable
27-
key-duplicates: enable
28-
line-length: disable
29-
new-line-at-end-of-file: disable
30-
new-lines:
31-
type: unix
32-
trailing-spaces: disable
33-
truthy: disable
17+
min-spaces-inside-empty: 0
18+
max-spaces-inside-empty: 1

README.md

+11-3
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,15 @@ Ansible Role: Docker
66
[![Ansible Role](http://img.shields.io/badge/galaxy-atosatto.docker--swarm-blue.svg?style=flat-square)](https://galaxy.ansible.com/atosatto/docker-swarm)
77
[![GitHub tag](https://img.shields.io/github/tag/atosatto/ansible-dockerswarm.svg)](https://github.com/atosatto/ansible-dockerswarm/tags)
88

9-
Setup Docker on RHEL/CentOS and Debian/Ubuntu servers.
9+
Setup Docker on RHEL/CentOS and Debian/Ubuntu servers. <br />
1010
The role supports Docker Engine's "Swarm Mode" (https://docs.docker.com/engine/swarm/) to create a cluster of Docker nodes.
1111

1212
Requirements
1313
------------
1414

1515
An Ansible 2.7 or higher installation.
16+
This role makes use of the Ansible `json_filter` that requires `jmespath` to be installed on the Ansible machine.
17+
See the `requirements.txt` file for further details on the specific version of `jmespath` required by the role.
1618

1719
Dependencies
1820
------------
@@ -34,12 +36,12 @@ To skip the configuration of the repository and use the system repositories set
3436

3537
Name of the package providing the Docker daemon.
3638

37-
docker_package_version: ""
39+
docker_package_version: ""
3840

3941
Version of the Docker package to be installed on the target hosts.
4042
When set to `""` the latest available version will be installed.
4143

42-
docker_package_state: present
44+
docker_package_state: present
4345

4446
Set it to `latest` to force the upgrade of the installed Docker packages.
4547

@@ -92,6 +94,11 @@ the default containerd service definition.
9294

9395
State of the containerd service.
9496

97+
docker_compose_version: ""
98+
99+
Version of docker-compose to be installed via python-pip.
100+
When set to `""` the latest available version will be installed.
101+
95102
docker_group_name: "docker"
96103
docker_group_users:
97104
- "{{ ansible_user }}"
@@ -118,6 +125,7 @@ Listen port for the Swarm raft API.
118125
skip_group: false
119126
skip_swarm: false
120127
skip_docker_py: false
128+
skip_docker_compose: false
121129

122130
Switches allowing to disable specific functionalities of the role.
123131
If you want to use this role to install `docker-engine` without enabling `swarm-mode` set `skip_swarm: true`.

defaults/main.yml

+9
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,14 @@ containerd_service_state: "started"
6666
# Whether the containerd service should start on boot
6767
containerd_service_enabled: "yes"
6868

69+
##
70+
# Docker Compose
71+
##
72+
73+
# Version of the docker-compose package to be installed.
74+
# By default, the latest available version will be installed.
75+
docker_compose_version: ""
76+
6977
##
7078
# Docker Users
7179
##
@@ -102,3 +110,4 @@ skip_engine: false # if true, skips the docker engine installation
102110
skip_group: false # if true, does not add the docker_admin_users to the docker_group_name
103111
skip_swarm: false # if true, skips the swarm setup
104112
skip_docker_py: false # if true, skips the installation of docker-py
113+
skip_docker_compose: false # if true, skips the installation of docker-compose
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
import os
2+
import testinfra.utils.ansible_runner
3+
4+
testinfra_hosts = testinfra.utils.ansible_runner.AnsibleRunner(
5+
os.environ['MOLECULE_INVENTORY_FILE']).get_hosts('all')
6+
7+
8+
def test_docker_compose_installed(host):
9+
10+
f = host.file('/usr/local/bin/docker-compose')
11+
12+
assert f.exists
13+
assert f.user == 'root'
14+
assert f.group == 'root'
15+
assert f.mode == 0o755

molecule/swarm-singlenode/molecule.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -41,4 +41,4 @@ verifier:
4141
additional_files_or_dirs:
4242
- ../../resources/tests/
4343
lint:
44-
name: flake8 # Will use the rules defined in .flake8
44+
name: flake8 # Will use the rules defined in .flake8

requirements.txt

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
jmespath==0.9.3

tasks/main.yml

+6-1
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,8 @@
1919
name: "{{ item }}"
2020
state: present
2121
with_items: "{{ python_pip_packages }}"
22-
when: (not skip_docker_py) or (ansible_os_family == 'Debian'
22+
when: (not skip_docker_py) or (not skip_docker_compose)
23+
or (ansible_os_family == 'Debian'
2324
and ansible_python_version is version_compare('2.6.0', '>=')
2425
and ansible_python_version is version_compare('2.7.9', '<'))
2526

@@ -65,6 +66,10 @@
6566
- include_tasks: setup-docker-py.yml
6667
when: not skip_docker_py
6768

69+
# Install docker-compose
70+
- include_tasks: setup-docker-compose.yml
71+
when: not skip_docker_compose
72+
6873
# Adds the Docker admin users to the Docker group
6974
- include_tasks: setup-docker-group.yml
7075
when: not skip_group

tasks/setup-containerd.yml

+17-17
Original file line numberDiff line numberDiff line change
@@ -29,23 +29,23 @@
2929

3030
- block:
3131

32-
- name: Create the systemd overrides directory for containerd.
33-
file:
34-
name: "/etc/systemd/system/containerd.service.d"
35-
state: directory
36-
37-
- name: Override the systemd unit for containerd.
38-
template:
39-
src: containerd-override.conf.j2
40-
dest: "/etc/systemd/system/containerd.service.d/override.conf"
41-
register: _containerd_systemd_override
42-
43-
- name: Reload systemd and restart containerd.
44-
service:
45-
name: containerd
46-
state: "{% if containerd_service_state != 'stopped' %}restarted{% else %}stopped{% endif %}"
47-
daemon_reload: yes
48-
when: _containerd_systemd_override.changed
32+
- name: Create the systemd overrides directory for containerd.
33+
file:
34+
name: "/etc/systemd/system/containerd.service.d"
35+
state: directory
36+
37+
- name: Override the systemd unit for containerd.
38+
template:
39+
src: containerd-override.conf.j2
40+
dest: "/etc/systemd/system/containerd.service.d/override.conf"
41+
register: _containerd_systemd_override
42+
43+
- name: Reload systemd and restart containerd.
44+
service:
45+
name: containerd
46+
state: "{% if containerd_service_state != 'stopped' %}restarted{% else %}stopped{% endif %}"
47+
daemon_reload: yes
48+
when: _containerd_systemd_override.changed
4949

5050
when: containerd_service_override | length > 0
5151
and ansible_service_mgr == 'systemd'

tasks/setup-docker-compose.yml

+25
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
---
2+
3+
- block:
4+
5+
- name: Get information on the latest docker-compose release from Github.
6+
uri:
7+
url: "https://api.github.com/repos/docker/compose/releases/latest"
8+
method: GET
9+
register: _docker_compose_github_release
10+
check_mode: no
11+
until: _docker_compose_github_release.status == 200
12+
retries: 5
13+
delay: 15
14+
15+
- name: Extract the name of the latest docker-compose release tag.
16+
set_fact:
17+
docker_compose_version: "{{ _docker_compose_github_release['json'] | json_query('tag_name') }}"
18+
19+
when: docker_compose_version | length == 0
20+
21+
- name: Download docker-compose.
22+
get_url:
23+
url: "https://github.com/docker/compose/releases/download/{{ docker_compose_version }}/docker-compose-{{ ansible_system }}-{{ ansible_userspace_architecture }}" # noqa 204
24+
dest: "/usr/local/bin/docker-compose"
25+
mode: '0755'

tasks/setup-docker-engine.yml

+18-18
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,12 @@
22

33
- block:
44

5-
- name: Prefix the Docker package version with the correct separator on RedHat
5+
- name: Prefix the Docker package version with the correct separator on RedHat.
66
set_fact:
77
_docker_package_version: "-{{ docker_package_version }}"
88
when: ansible_os_family == 'RedHat'
99

10-
- name: Prefix the Docker package version with the correct separator on Debian
10+
- name: Prefix the Docker package version with the correct separator on Debian.
1111
set_fact:
1212
_docker_package_version: "={{ docker_package_version }}"
1313
when: ansible_os_family == 'Debian'
@@ -21,28 +21,28 @@
2121

2222
- block:
2323

24-
- name: Create the systemd overrides directory for Docker.
25-
file:
26-
name: "/etc/systemd/system/docker.service.d"
27-
state: directory
24+
- name: Create the systemd overrides directory for Docker.
25+
file:
26+
name: "/etc/systemd/system/docker.service.d"
27+
state: directory
2828

29-
- name: Override the systemd unit for Docker.
30-
template:
31-
src: docker-override.conf.j2
32-
dest: "/etc/systemd/system/docker.service.d/override.conf"
33-
register: _docker_systemd_override
29+
- name: Override the systemd unit for Docker.
30+
template:
31+
src: docker-override.conf.j2
32+
dest: "/etc/systemd/system/docker.service.d/override.conf"
33+
register: _docker_systemd_override
3434

35-
- name: Reload systemd and restart Docker.
36-
service:
37-
name: docker
38-
state: "{% if docker_service_state != 'stopped' %}restarted{% else %}stopped{% endif %}"
39-
daemon_reload: yes
40-
when: _docker_systemd_override.changed
35+
- name: Reload systemd and restart Docker.
36+
service:
37+
name: docker
38+
state: "{% if docker_service_state != 'stopped' %}restarted{% else %}stopped{% endif %}"
39+
daemon_reload: yes
40+
when: _docker_systemd_override.changed
4141

4242
when: docker_service_override | length > 0
4343
and ansible_service_mgr == 'systemd'
4444

45-
- name: Make sure the Docker daemon configuration directory exists
45+
- name: Make sure the Docker daemon configuration directory exists.
4646
file:
4747
path: /etc/docker
4848
owner: root

tasks/setup-docker-group.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
---
22

3-
- name: Add the Docker administrators to the Docker group
3+
- name: Add the Docker administrators to the Docker group.
44
user:
55
name: "{{ item }}"
66
groups: "{{ docker_group_name }}"

tasks/setup-docker-py.yml

-11
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,6 @@
11
---
22

3-
# Specified version because of https://github.com/ansible/ansible/issues/17495
4-
- name: Install docker-py 1.9.0.
5-
pip:
6-
name: docker-py
7-
version: 1.9.0
8-
state: present
9-
when: ansible_version is defined
10-
and ansible_version.full is version_compare('2.2.0.0', '<')
11-
123
- name: Install docker-py.
134
pip:
145
name: docker-py
156
state: present
16-
when: (ansible_version is not defined) or (ansible_version is defined
17-
and ansible_version.full is version_compare('2.2.0.0', '>='))

tox.ini

+1
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ ANSIBLE=
1212
[testenv]
1313
passenv = *
1414
deps =
15+
-rrequirements.txt
1516
-rtest-requirements.txt
1617
ansible27: ansible<2.8
1718
ansible28: ansible<2.9

vars/Debian.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -8,4 +8,4 @@ python_sni_support_packages:
88
- libssl-dev
99
- libffi-dev
1010

11-
default_docker_dependencies: [ ]
11+
default_docker_dependencies: []

0 commit comments

Comments
 (0)