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) }}'