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