Skip to content

Commit

Permalink
A new start
Browse files Browse the repository at this point in the history
  • Loading branch information
Eric Anderson committed Nov 14, 2018
0 parents commit 9b9da57
Show file tree
Hide file tree
Showing 55 changed files with 1,190 additions and 0 deletions.
51 changes: 51 additions & 0 deletions .travis.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
---
dist: trusty
sudo: required
language: python
services:
- docker

before_install:
- sudo apt-get -qq update

env:
global:
- ROLE_NAME: docker
matrix:
- MOLECULE_DISTRO: centos:7
MOLECULE_SERVICE_MANAGER: systemd
MOLECULE_COMMAND: /usr/sbin/init
- MOLECULE_DISTRO: fedora:27
MOLECULE_SERVICE_MANAGER: systemd
MOLECULE_COMMAND: /usr/sbin/init
- MOLECULE_DISTRO: fedora:28
MOLECULE_SERVICE_MANAGER: systemd
MOLECULE_COMMAND: /usr/sbin/init
- MOLECULE_DISTRO: ubuntu-upstart:trusty
MOLECULE_COMMAND: /sbin/init
- MOLECULE_DISTRO: ubuntu:xenial
MOLECULE_COMMAND: /sbin/init
- MOLECULE_DISTRO: ubuntu:bionic
MOLECULE_SERVICE_MANAGER: systemd
MOLECULE_COMMAND: /lib/systemd/systemd
- MOLECULE_DISTRO: debian:wheezy
MOLECULE_COMMAND: /sbin/init
- MOLECULE_DISTRO: debian:jessie
MOLECULE_COMMAND: /sbin/init
- MOLECULE_DISTRO: debian:stretch
MOLECULE_SERVICE_MANAGER: systemd
MOLECULE_COMMAND: /lib/systemd/systemd

install:
- pip install molecule docker

before_script:
- cd ../
- mv ansible-role-$ROLE_NAME avinetworks.$ROLE_NAME
- cd avinetworks.$ROLE_NAME

script:
- molecule --debug test

notifications:
webhooks: https://galaxy.ansible.com/api/v1/notifications/
137 changes: 137 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,137 @@
# avinetworks.docker

[![Build Status](https://travis-ci.org/avinetworks/ansible-role-docker.svg?branch=master)](https://travis-ci.org/avinetworks/ansible-role-docker)

## Role Summary
This role provides the following:
* Installation of Docker following Docker-Engine install procedures as documented by Docker.
* It will manage kernel versions as well, verifying the that the correct kernel for Docker support is installed.

Supports the following Operating Systems:
* CentOS 7
* RedHat 7
* Fedora 24
* Fedora 23
* Fedora 26
* Fedora 27
* Fedora 29
* OracleLinux 7
* Ubuntu 14.04
* Ubuntu 16.04

## Requirements

This role requires Ansible 2.4 or higher. Requirements are listed in the metadata file.

If you rely on privileage escalation (e.g. `become: true`) with this role, you will need Ansible 2.2.1 or higher to take advantage of this issue being fixed: https://github.com/ansible/ansible/issues/17490

## Role Variables
For more information about the variables many can be found https://docs.docker.com/engine/reference/commandline/dockerd/

| Variable | Required | Default | Comments |
|----------|----------|---------|----------|
| `docker_edition` | No | `ce` | Specifies either legacy, ce, or ee version of Docker. |
| `docker_ee_url` | No | `Undefined` | Docker EE URL from the Docker Store |
| `docker_repo` | No | `docker` | Defines how Ansible manages the repository. Options are "other" and "docker" |
| `docker_channel` | No | `stable` | What release channel of Docker to install. |
| `docker_ee_version` | No | `17.03` | Docker EE version for EE repository |
| `docker_storage_driver` | No | `Undefined` | Storage driver to use |
| `docker_block_device` | No | `Undefined` | The device name used for the storage driver. |
| `docker_mount_opts` | No | `Undefined` | The mount options when mounting filesystems |
| `docker_storage_opts` | No | `Undefined` | Storage driver options |
| `docker_api_cors_header` | No | `Undefined` | Set CORS headers in the remote API |
| `docker_authorization_plugins` | No | `Undefined` | Authorization plugins to load |
| `docker_bip` | No | `Undefined` | Specify network bridge IP |
| `docker_bridge` | No | `Undefined` | Attach containers to a network bridge |
| `docker_cgroup_parent` | No | `Undefined` | Set parent cgroup for all containers |
| `docker_cluster_store` | No | `Undefined` | Set cluster store options |
| `docker_cluster_store_opts` | No | `Undefined` | Please see dockerd manual for info |
| `docker_cluster_advertise` | No | `Undefined` | Address or interface name to advertise |
| `docker_debug` | No | `Undefined` | Enable debug mode |
| `docker_default_gateway` | No | `Undefined` | Container default gateway IPv4 address |
| `docker_default_gateway_v6` | No | `Undefined` | Container default gateway IPv6 address |
| `docker_default_runtime` | No | `Undefined` | Default OCI runtime for containers |
| `docker_default_ulimits` | No | `Undefined` | Default ulimits for containers |
| `docker_disable_legacy_registry` | No | `Undefined` | Disable contacting legacy registries |
| `docker_dns` | No | `Undefined` | DNS server to use |
| `docker_dns_opts` | No | `Undefined` | DNS options to use |
| `docker_dns_search` | No | `Undefined` | DNS search domains to use |
| `docker_exec_opts` | No | `Undefined` | Runtime execution options |
| `docker_exec_root` | No | `Undefined` | Root directory for execution state files |
| `docker_fixed_cidr` | No | `Undefined` | IPv4 subnet for fixed IPs |
| `docker_fixed_cidr_v6` | No | `Undefined` | IPv6 subnet for fixed IPs |
| `docker_graph` | No | `Undefined` | Root of the Docker runtime |
| `docker_group` | No | `Undefined` | Group for the unix socket |
| `docker_hosts` | No | `Undefined` | Daemon socket(s) to connect to |
| `docker_icc` | No | `Undefined` | Enable inter-container communication |
| `docker_insecure_registries` | No | `Undefined` | Enable insecure registry communication |
| `docker_ip` | No | `Undefined` | Default IP when binding container ports |
| `docker_iptables` | No | `Undefined` | Enable addition of iptables rules |
| `docker_ipv6` | No | `Undefined` | Enable IPv6 networking |
| `docker_ip_forward` | No | `Undefined` | Enable net.ipv4.ip_forward |
| `docker_ip_masq` | No | `Undefined` | Enable IP masquerading |
| `docker_labels` | No | `Undefined` | Set key=value labels to the daemon |
| `docker_live_restore` | No | `Undefined` | Enables keeping containers alive during daemon downtime |
| `docker_log_driver` | No | `Undefined` | Default driver for container logs |
| `docker_log_level` | No | `Undefined` | Set the logging level |
| `docker_log_opts` | No | `Undefined` | Default log driver options for containers |
| `docker_max_concurrent_downloads` | No | `Undefined` | Set the max concurrent downloads for each pull |
| `docker_max_concurrent_uploads` | No | `Undefined` | Set the max concurrent uploads for each push |
| `docker_mtu` | No | `Undefined` | Set the containers network MTU |
| `docker_oom_score_adjust` | No | `Undefined` | Set the oom_score_adj for the daemon |
| `docker_pidfile` | No | `Undefined` | Path to use for daemon PID file |
| `docker_raw_logs` | No | `Undefined` | Full timestamps without ANSI coloring |
| `docker_registry_mirrors` | No | `Undefined` | Preferred Docker registry mirror |
| `docker_runtimes` | No | `Undefined` | Register an additional OCI compatible runtime |
| `docker_selinux_enabled` | No | `Undefined` | Enable selinux support |
| `docker_swarm_default_advertise_addr` | No | `Undefined` | Set default address or interface for swarm advertised address |
| `docker_tls` | No | `Undefined` | Use TLS; implied by –tlsverify |
| `docker_tlscacert` | No | `Undefined` | Trust certs signed only by this CA |
| `docker_tlscert` | No | `Undefined` | Path to TLS certificate file |
| `docker_tlskey` | No | `Undefined` | Path to TLS key file |
| `docker_tlsverify` | No | `Undefined` | Use TLS and verify the remote |
| `docker_userland_proxy` | No | `Undefined` | Use userland proxy for loopback traffic |
| `docker_userns_remap` | No | `Undefined` | User/Group setting for user namespaces |
| `docker_http_proxy` | No | `Undefined` | Set the Docker service to use HTTP_PROXY |
| `docker_https_proxy` | No | `Undefined` | Set the Docker service to use HTTPS_PROXY |
| `docker_no_proxy_params` | No | `Undefined` | Do not proxy for Docker service params |

## Example Playbooks

Install docker to the hosts with basic defaults. This does not install devicemapper, or configure the server for production. This just simply installs docker and gets it running. Compare this to `apt install docker-ce` or `yum install docker-ce`.

```
- hosts: servers
roles:
- role: avinetworks.docker
```

Install docker with devicemapper. Please note, this will create a new LVM on /dev/sda3, please do not use a block device already in use. This is the recommended production deployment on RHEL/CentOS/Fedora systems.

```
- hosts: servers
roles:
- role: avinetworks.docker
docker_storage_driver: devicemapper
docker_block_device: /dev/sda3
```

Install docker with AUFS. This is recommended for production deployment on Ubuntu systems.

```
- hosts: servers
roles:
- role: avinetworks.docker
docker_storage_driver: aufs
```


Please see [examples/](examples/) folder for more examples.

## License

Apache 2.0

## Author Information

[Avi Networks](http://avinetworks.com)
64 changes: 64 additions & 0 deletions defaults/main.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
---
# defaults file for avinetworks.docker
docker_service_enabled: true
docker_config: {}
docker_edition: ce
docker_repo: docker
docker_channel: stable
docker_ee_version: 17.03
docker_options:
api-cors-header: "{{ docker_api_cors_header | default(None) }}"
authorization-plugins: "{{ docker_authorization_plugins | default(None) }}"
bip: "{{ docker_bip | default(None) }}"
bridge: "{{ docker_bridge | default(None) }}"
cgroup-parent: "{{ docker_cgroup_parent | default(None) }}"
cluster-store: "{{ docker_cluster_store | default(None) }}"
cluster-store-opts: "{{ docker_cluster_store_opts | default(None) }}"
cluster-advertise: "{{ docker_cluster_advertise | default(None) }}"
debug: "{{ docker_debug | default(None) }}"
default-gateway: "{{ docker_default_gateway | default(None) }}"
default-gateway-v6: "{{ docker_default_gateway_v6 | default(None) }}"
default-runtime: "{{ docker_default_runtime | default(None) }}"
default-ulimits: "{{ docker_default_ulimits | default(None) }}"
disable-legacy-registry: "{{ docker_disable_legacy_registry | default(None) }}"
dns: "{{ docker_dns | default(None) }}"
dns-opts: "{{ docker_dns_opts | default(None) }}"
dns-search: "{{ docker_dns_search | default(None) }}"
exec-opts: "{{ docker_exec_opts | default(None) }}"
exec-root: "{{ docker_exec_root | default(None) }}"
fixed-cidr: "{{ docker_fixed_cidr | default(None) }}"
fixed-cidr-v6: "{{ docker_fixed_cidr_v6 | default(None) }}"
graph: "{{ docker_graph | default(None) }}"
group: "{{ docker_group | default(None) }}"
hosts: "{{ docker_hosts | default(None) }}"
icc: "{{ docker_icc | default(None) }}"
insecure-registries: "{{ docker_insecure_registries | default(None) }}"
ip: "{{ docker_ip | default(None) }}"
iptables: "{{ docker_iptables | default(None) }}"
ipv6: "{{ docker_ipv6 | default(None) }}"
ip-forward: "{{ docker_ip_forward | default(None) }}"
ip-masq: "{{ docker_ip_masq | default(None) }}"
labels: "{{ docker_labels | default(None) }}"
live-restore: "{{ docker_live_restore | default(None) }}"
log-driver: "{{ docker_log_driver | default(None) }}"
log-level: "{{ docker_log_level | default(None) }}"
log-opts: "{{ docker_log_opts | default(None) }}"
max-concurrent-downloads: "{{ docker_max_concurrent_downloads | default(None) }}"
max-concurrent-uploads: "{{ docker_max_concurrent_uploads | default(None) }}"
mtu: "{{ docker_mtu | default(None) }}"
oom-score-adjust: "{{ docker_oom_score_adjust | default(None) }}"
pidfile: "{{ docker_pidfile | default(None) }}"
raw-logs: "{{ docker_raw_logs | default(None) }}"
registry-mirrors: "{{ docker_registry_mirrors | default(None) }}"
runtimes: "{{ docker_runtimes | default(None) }}"
selinux-enabled: "{{ docker_selinux_enabled | default(None) }}"
swarm-default-advertise-addr: "{{ docker_swarm_default_advertise_addr | default(None) }}"
storage-driver: "{{ docker_storage_driver | default(None) }}"
storage-opts: "{{ docker_storage_opts | default(None) }}"
tls: "{{ docker_tls | default(None) }}"
tlscacert: "{{ docker_tlscacert | default(None) }}"
tlscert: "{{ docker_tlscert | default(None) }}"
tlskey: "{{ docker_tlskey | default(None) }}"
tlsverify: "{{ docker_tlsverify | default(None) }}"
userland-proxy: "{{ docker_userland_proxy | default(None) }}"
userns-remap: "{{ docker_userns_remap | default(None) }}"
57 changes: 57 additions & 0 deletions examples/readme.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
## Installing Docker via Ansible
### Default Docker Install
```
---
- hosts: all
roles:
- role: avinetworks.docker
```

### Install Docker w/devicemapper
```
---
- hosts: all
roles:
- role: avinetworks.docker
docker_storage_driver: devicemapper
docker_block_device: /dev/sda3
```

### Install Docker w/HTTP Proxy Support
```
---
- hosts: all
roles:
- role: avinetworks.docker
docker_http_proxy: http://proxy.example.com:80/
docker_https_proxy: https://proxy.example.com:443/
```

### Install Docker w/HTTP Proxy Support & without proxy on internal sites
```
---
- hosts: all
roles:
- role: avinetworks.docker
docker_http_proxy: http://proxy.example.com:80/
docker_https_proxy: https://proxy.example.com:443/
docker_no_proxy_params: "localhost,127.0.0.0/8,docker-registry.example.com"
```

### Install Docker and customize the storage directory of images and containers
```
---
- hosts: all
roles:
- role: avinetworks.docker
docker_graph: /home/docker
```

### Install/Upgrade Docker. Avoid container downtime during the upgrade of a Docker
```
---
- hosts: all
roles:
- role: avinetworks.docker
docker_live_restore: true
```
4 changes: 4 additions & 0 deletions files/docker-thinpool.profile
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
activation {
thin_pool_autoextend_threshold=80
thin_pool_autoextend_percent=20
}
6 changes: 6 additions & 0 deletions handlers/main.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
---
- name: Docker | Daemon-reload
systemd: daemon_reload=yes

- name: Docker | Restart Docker
service: name=docker state=restarted
34 changes: 34 additions & 0 deletions meta/main.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
---
galaxy_info:
role_name: docker
author: Avi Networks
description: Ansible role that installs Docker
company: Avi Networks
issue_tracker_url: https://github.com/avinetworks/ansible-role-docker/issues
license: Apache 2.0
min_ansible_version: 2.4.0
github_branch: master
platforms:
- name: CentOS
versions:
- 7
- name: Fedora
versions:
- 27
- 28
- name: Ubuntu
versions:
- trusty
- xenial
- bionic
- name: Debian
versions:
- jessie
- stretch
- wheezy
galaxy_tags:
- docker
- ubuntu
- centos
- debian
dependencies: []
12 changes: 12 additions & 0 deletions molecule/default/.yamllint
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
---
extends: default

rules:
braces:
max-spaces-inside: 1
level: error
brackets:
max-spaces-inside: 1
level: error
line-length: disable
truthy: disable
Loading

0 comments on commit 9b9da57

Please sign in to comment.