Add service role
This commit is contained in:
139
roles/service/tasks/main.yml
Normal file
139
roles/service/tasks/main.yml
Normal file
@@ -0,0 +1,139 @@
|
||||
---
|
||||
|
||||
- name: Container role initialization
|
||||
import_tasks: init.yml
|
||||
|
||||
- name: Docker network
|
||||
when: docker_network_mode != 'host' or docker_networks | length > 0
|
||||
block:
|
||||
- name: Set networks variable to {{ docker_namespace + ('-' + docker_service_suffix if docker_service_suffix | length > 0 else '') }}
|
||||
ansible.builtin.set_fact:
|
||||
container_networks:
|
||||
- name: "{{ docker_namespace + ('-' + docker_service_suffix if docker_service_suffix | length > 0 else '') }}"
|
||||
when: docker_networks | length == 0
|
||||
- name: Set networks variable to {{ docker_networks }}
|
||||
ansible.builtin.set_fact:
|
||||
container_networks: "{{ docker_networks }}"
|
||||
when: docker_networks | length > 0
|
||||
- name: Create docker networks
|
||||
community.docker.docker_network:
|
||||
name: "{{ item.name }}"
|
||||
loop: "{{ container_networks }}"
|
||||
|
||||
- name: Reverse proxy for container
|
||||
include_tasks: proxy.yml
|
||||
when: reverse_proxy_type != 'none'
|
||||
|
||||
- name: Create directory /opt/{{ docker_namespace }}
|
||||
ansible.builtin.file:
|
||||
path: "/opt/{{ docker_namespace }}"
|
||||
state: directory
|
||||
mode: 0755
|
||||
when: create_opt_directory
|
||||
|
||||
- name: Container image
|
||||
import_tasks: image.yml
|
||||
|
||||
- name: Container user
|
||||
include_tasks: host_user.yml
|
||||
when: docker_host_user
|
||||
|
||||
- name: Create suffix directory
|
||||
when: create_opt_directory and docker_service_suffix | length > 0
|
||||
block:
|
||||
- name: Create directory /opt/{{ docker_namespace + '/' + docker_service_suffix }}
|
||||
ansible.builtin.file:
|
||||
path: "/opt/{{ docker_namespace }}/{{ docker_service_suffix }}"
|
||||
state: directory
|
||||
owner: "{{ user.uid | default(omit) }}"
|
||||
group: "{{ user.group | default(omit) }}"
|
||||
mode: 0755
|
||||
- name: Set container_workdir variable
|
||||
ansible.builtin.set_fact:
|
||||
container_workdir: /opt/{{ docker_namespace }}/{{ docker_service_suffix }}
|
||||
|
||||
- name: Set container_workdir variable
|
||||
ansible.builtin.set_fact:
|
||||
container_workdir: /opt/{{ docker_namespace }}
|
||||
when: docker_service_suffix | length == 0
|
||||
|
||||
- name: Create mounts directory
|
||||
when: create_mounts_directory
|
||||
block:
|
||||
- name: Set docker_mounts_dir
|
||||
ansible.builtin.set_fact:
|
||||
docker_mounts_dir: "{{ container_workdir }}/mounts"
|
||||
|
||||
- name: Create directory {{ docker_mounts_dir }}
|
||||
ansible.builtin.file:
|
||||
path: "{{ docker_mounts_dir }}"
|
||||
state: directory
|
||||
owner: "{{ user.uid | default(omit) }}"
|
||||
group: "{{ user.group | default(omit) }}"
|
||||
mode: 0700
|
||||
|
||||
- name: Database container
|
||||
include_tasks: database.yml
|
||||
when: docker_database != 'none'
|
||||
|
||||
- name: Additional services
|
||||
include_tasks: additional.yml
|
||||
when: docker_additional_services | length > 0
|
||||
|
||||
- name: Container mounts
|
||||
import_tasks: mounts.yml
|
||||
|
||||
- name: "Ensure container with legacy name doesn't exist for {{ docker_service_underscore_name }}"
|
||||
community.docker.docker_container:
|
||||
name: "{{ docker_service_underscore_name }}"
|
||||
state: absent
|
||||
when: docker_service_underscore_name != docker_service_name
|
||||
|
||||
- name: Ensure network with legacy name doesn't exist
|
||||
community.docker.docker_network:
|
||||
name: "{{ docker_service_underscore_name }}"
|
||||
state: absent
|
||||
when: docker_service_underscore_name != docker_service_name
|
||||
|
||||
- name: "Container for {{ docker_service_name }}"
|
||||
community.docker.docker_container:
|
||||
name: "{{ docker_service_name }}"
|
||||
image: "{{ container_image.Id if (not ansible_check_mode) or (container_image | length > 0) else docker_image }}"
|
||||
user: "{{ docker_user if docker_host_user else omit }}"
|
||||
mounts: "{{ docker_mount_definition }}"
|
||||
published_ports: "{{ container_published_ports + docker_published_ports }}"
|
||||
labels: "{{ traefik_labels | default(omit) }}"
|
||||
env: "{{ docker_env | combine(docker_additional_env) | combine({'TZ': timezone}) }}"
|
||||
entrypoint: "{{ docker_entrypoint | default(omit) }}"
|
||||
command: "{{ docker_command | default(omit) }}"
|
||||
memory: "{{ docker_memory | default(omit) }}"
|
||||
restart_policy: "{{ docker_restart_policy }}"
|
||||
network_mode: "{{ docker_network_mode if docker_network_mode | length > 0 else omit }}"
|
||||
networks: "{{ container_networks }}"
|
||||
log_driver: local
|
||||
state: "{{ 'started' if docker_restart_policy == 'always' else 'present' }}"
|
||||
register: container_out
|
||||
notify: Ensure container running
|
||||
|
||||
- name: Flush handlers to trigger container restart
|
||||
ansible.builtin.meta: flush_handlers
|
||||
|
||||
- name: Reset variables to their original values
|
||||
ansible.builtin.set_fact:
|
||||
docker_service_name: "{{ _docker_service_name }}"
|
||||
docker_mount_definition: "{{ _docker_mount_definition }}"
|
||||
container_published_ports: "{{ _container_published_ports }}"
|
||||
container_image: "{{ _container_image }}"
|
||||
container_networks: "{{ _container_networks }}"
|
||||
template_mounts_needed: "{{ _template_mounts_needed }}"
|
||||
copypath_mounts_needed: "{{ _copypath_mounts_needed }}"
|
||||
volumes_needed: "{{ _volumes_needed }}"
|
||||
dockerfile_needed: "{{ _dockerfile_needed }}"
|
||||
db_config_mounts_needed: "{{ _db_config_mounts_needed }}"
|
||||
bind_volumes_needed: "{{ _bind_volumes_needed }}"
|
||||
named_volumes_needed: "{{ _named_volumes_needed }}"
|
||||
create_opt_directory: "{{ _create_opt_directory }}"
|
||||
create_mounts_directory: "{{ _create_mounts_directory }}"
|
||||
docker_service_underscore_name: "{{ _docker_service_underscore_name }}"
|
||||
image_user: "{{ _image_user }}"
|
||||
when: _docker_service_name is defined
|
||||
Reference in New Issue
Block a user