--- - name: 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 if docker_host_user else omit }}" group: "{{ user.group if docker_host_user else 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 }}" docker_published_ports: "{{ _docker_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