initial commit
This commit is contained in:
commit
4f3cf9eaab
78
README.md
Normal file
78
README.md
Normal file
@ -0,0 +1,78 @@
|
||||
# ansible-role-docker-compose-generator
|
||||
|
||||
Pass this role a hash and it will generate a docker-compose.yml file. The following structure is supported and is designed to be passed to the role using `group_vars`.
|
||||
|
||||
Rendered files are output to the `output` directory.
|
||||
|
||||
```
|
||||
---
|
||||
|
||||
# global vars
|
||||
global_env_vars:
|
||||
- "PUID=1313"
|
||||
- "PGID=1313"
|
||||
appdata_path: /opt/appdata
|
||||
container_config_path: /config
|
||||
container_data_path: /data
|
||||
|
||||
# container definitions
|
||||
containers:
|
||||
- service_name: letsencrypt
|
||||
active: true
|
||||
image: linuxserver/letsencrypt
|
||||
container_name: le
|
||||
ports:
|
||||
- 80:80
|
||||
- 443:443
|
||||
volumes:
|
||||
- "{{ appdata_path }}/letsencrypt/config:{{ container_config_path }}"
|
||||
restart: always
|
||||
depends_on:
|
||||
- unifi
|
||||
- nextcloud
|
||||
- quassel
|
||||
include_global_env_vars: true
|
||||
environment:
|
||||
- EMAIL=email@email.com
|
||||
- URL=some.tld
|
||||
- SUBDOMAINS=nc, irc, unifi
|
||||
- ONLY_SUBDOMAINS=true
|
||||
- DHLEVEL=4096
|
||||
- TZ=Europe/London
|
||||
- VALIDATION=http
|
||||
mem_limit: 256m
|
||||
- service_name: nextcloud
|
||||
active: true
|
||||
image: nextcloud
|
||||
container_name: nextcloud
|
||||
include_global_env_vars: false
|
||||
volumes:
|
||||
- "{{ appdata_path }}/nextcloud/html:/var/www/html"
|
||||
- "{{ appdata_path }}/nextcloud/apps:/var/www/html/custom_apps"
|
||||
- "{{ appdata_path }}/nextcloud/config:/var/www/html/config"
|
||||
- "{{ appdata_path }}/nextcloud/data:/var/www/html/data"
|
||||
- "{{ appdata_path }}/nextcloud/theme:/var/www/html/themes"
|
||||
mem_limit: 256m
|
||||
restart: "{{ unless_stopped }}"
|
||||
ports:
|
||||
- "8081:80"
|
||||
- service_name: unifi
|
||||
active: true
|
||||
image: linuxserver/unifi
|
||||
container_name: unifi
|
||||
mem_limit: 512m
|
||||
volumes:
|
||||
- "{{ appdata_path }}/unifi:{{ container_config_path }}"
|
||||
include_global_env_vars: true
|
||||
restart: "{{ unless_stopped }}"
|
||||
- service_name: quassel
|
||||
active: true
|
||||
image: linuxserver/quassel
|
||||
container_name: quassel
|
||||
include_global_env_vars: true
|
||||
volumes:
|
||||
- "{{ appdata_path }}/quassel:{{ container_config_path }}"
|
||||
mem_limit: 128m
|
||||
ports:
|
||||
- "4242:4242"
|
||||
```
|
3
defaults/main.yml
Normal file
3
defaults/main.yml
Normal file
@ -0,0 +1,3 @@
|
||||
---
|
||||
output_path: output/
|
||||
include_global_env_vars: false
|
11
tasks/main.yml
Normal file
11
tasks/main.yml
Normal file
@ -0,0 +1,11 @@
|
||||
---
|
||||
- name: create destination dir for generated readme
|
||||
file:
|
||||
path: "{{ output_path }}"
|
||||
state: directory
|
||||
|
||||
- name: write docker-compose file
|
||||
template:
|
||||
src: ../templates/docker-compose.yml.j2
|
||||
dest: "{{ output_path }}/docker-compose.yml"
|
||||
delegate_to: localhost
|
55
templates/docker-compose.yml.j2
Normal file
55
templates/docker-compose.yml.j2
Normal file
@ -0,0 +1,55 @@
|
||||
# {{ ansible_managed }}
|
||||
---
|
||||
version: "2"
|
||||
services:
|
||||
{% for item in containers %}
|
||||
{% if item.active %}
|
||||
{{ item.service_name }}:
|
||||
image: {{ item.image }}
|
||||
container_name: {{ item.container_name }}
|
||||
{% if item.network_mode is defined %}
|
||||
network_mode: {{ item.network_mode }}
|
||||
{% endif %}
|
||||
{% if item.volumes is defined %}
|
||||
volumes:
|
||||
{% for item in item.volumes %}
|
||||
- {{ item }}
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
{% if item.ports is defined %}
|
||||
ports:
|
||||
{% for item in item.ports %}
|
||||
- {{ item }}
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
{% if ( item.environment is defined ) or ( item.include_global_env_vars ) %}
|
||||
environment:
|
||||
{% if item.include_global_env_vars %}
|
||||
{% for item2 in global_env_vars %}
|
||||
- {{ item2 }}
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
{% if item.environment is defined %}
|
||||
{% for item in item.environment %}
|
||||
- {{ item }}
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
{% if item.depends_on is defined %}
|
||||
depends_on:
|
||||
{% for item in item.depends_on %}
|
||||
- {{ item }}
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
{% if item.hostname is defined %}
|
||||
hostname: {{ item.hostname }}
|
||||
{% endif %}
|
||||
{% if item.mem_limit is defined %}
|
||||
mem_limit: {{ item.mem_limit }}
|
||||
{% endif %}
|
||||
{% if item.restart is defined %}
|
||||
restart: {{ item.restart }}
|
||||
{% endif %}
|
||||
|
||||
{% endif %}
|
||||
{% endfor %}
|
Loading…
x
Reference in New Issue
Block a user