76 lines
3.1 KiB
YAML
76 lines
3.1 KiB
YAML
---
|
|
- name: Create volumes directory
|
|
ansible.builtin.file:
|
|
path: '{{ item | split(":") | first | split(".") | first }}'
|
|
state: directory
|
|
mode: '0755'
|
|
loop: '{{ container.volumes | default([]) }}'
|
|
become: true
|
|
|
|
- name: Reset container labels
|
|
ansible.builtin.set_fact:
|
|
_labels: []
|
|
|
|
- name: Add traefik labels
|
|
ansible.builtin.set_fact:
|
|
_labels:
|
|
- key: 'traefik.enable'
|
|
value: 'true'
|
|
- key: 'traefik.http.routers.{{ container.name }}-service-http.rule'
|
|
value: 'Host(`{{ container.network.domain_name }}`)'
|
|
- key: 'traefik.http.routers.{{ container.name }}-service-http.entrypoints'
|
|
value: 'http'
|
|
- key: 'traefik.http.routers.{{ container.name }}-service-https.rule'
|
|
value: 'Host(`{{ container.network.domain_name }}`)'
|
|
- key: 'traefik.http.routers.{{ container.name }}-service-https.entrypoints'
|
|
value: 'https'
|
|
- key: 'traefik.http.routers.{{ container.name }}-service-https.tls.certResolver'
|
|
value: 'acme-http'
|
|
when: container.network is defined and container.network.domain_name is defined
|
|
|
|
- name: Add traefik labels for auth
|
|
ansible.builtin.set_fact:
|
|
_labels: '{{ _labels + [{"key": "traefik.http.routers.{{ container.name }}-service-https.middlewares", "value": "auth@file"}] }}'
|
|
when: container.network is defined and (container.network.auth | default(false))
|
|
|
|
- name: Add traefik labels for custom_port
|
|
ansible.builtin.set_fact:
|
|
_labels: '{{ _labels + [{"key": "traefik.http.services.{{ container.name }}-service-https.loadbalancer.server.port", "value": "{{ container.network.custom_port | default(80) }}"}] }}' # noqa yaml[line-length]
|
|
|
|
- name: Save data to file
|
|
ansible.builtin.copy:
|
|
content: '{{ item.content }}'
|
|
dest: '{{ item.dest }}'
|
|
mode: '0644'
|
|
loop: '{{ container.data | default([]) }}'
|
|
become: true
|
|
|
|
- name: Create network(s)
|
|
community.docker.docker_network:
|
|
name: '{{ item.name }}'
|
|
ipam_config: '{{ item.ipam_config | default(omit) }}'
|
|
state: present
|
|
loop: '{{ container.networks | default([]) }}'
|
|
|
|
- name: 'Deploy container: {{ container.name }}'
|
|
community.docker.docker_container:
|
|
name: '{{ container.name }}'
|
|
image: '{{ container.image }}'
|
|
state: started
|
|
user: '{{ container.user | default(omit) }}'
|
|
command: '{{ container.command | default(omit) }}'
|
|
env: '{{ container.variables | default({}) }}'
|
|
ports: '{{ container.ports | default([]) }}'
|
|
volumes: '{{ container.volumes | default([]) }}'
|
|
restart: '{{ container.recreate | default(false) }}'
|
|
restart_policy: always
|
|
labels: '{{ _labels | default([]) | items2dict }}'
|
|
recreate: '{{ container.recreate | default(false) }}'
|
|
healthcheck: '{{ container.healthcheck | default(omit) }}'
|
|
network_mode: '{{ container.network_mode | default(omit) }}'
|
|
networks: '{{ container.networks | default(omit) }}'
|
|
capabilities: '{{ container.capabilities | default(omit) }}'
|
|
container_default_behavior: '{{ container.container_default_behavior | default(omit) }}'
|
|
interactive: '{{ container.interactive | default(omit) }}'
|
|
tty: '{{ container.tty | default(omit) }}'
|