diff --git a/roles/service/tasks/additional.yaml b/roles/service/tasks/additional.yaml index fc0880b..e6e20f9 100644 --- a/roles/service/tasks/additional.yaml +++ b/roles/service/tasks/additional.yaml @@ -3,12 +3,53 @@ ansible.builtin.include_role: name: container vars: + _service_additional_volume_mounts: "{{ _service_additional_container.mounts | selectattr('type', '==', 'volume') }}" + _service_additional_template_mounts: "{{ _service_additional_container.mounts | selectattr('type', '==', 'template') }}" + _service_additional_host_directory: "/srv/{{ service_name }}" + + _service_additional_container_volume_mounts: >- + {{ + _service_additional_volume_mounts | + zip( + _service_additional_volume_mounts | + map(attribute='source') | + map('regex_replace', '^', service_name ~ '-') | + map('community.general.dict_kv', 'source') + ) | + map('combine') + }} + _service_additional_container_bind_mounts: "{{ _service_additional_container.mounts | selectattr('type', '==', 'bind') }}" + _service_additional_container_template_mounts: >- + {{ + ([{'readonly': true}] * _service_additional_template_mounts | length) | + zip( + _service_additional_template_mounts, + _service_additional_template_mounts | + map(attribute='source') | + map('regex_replace', '\.j2$', '') | + map('regex_replace', '^', _service_host_directory ~ '/mounts/') | + map('community.general.dict_kv', 'source'), + ([{'type': 'bind'}] * _service_additional_template_mounts | length) + ) | + map('combine') + }} + + _service_additional_container_mounts: >- + {{ + _service_additional_container_volume_mounts + + _service_additional_container_bind_mounts + + _service_additional_container_template_mounts + if _service_additional_container.mounts is defined + else + _service_container_mounts + }} + container_name: "{{ _service_additional_container.name }}" container_image: "{{ _service_additional_container.image | default(service_container_image) }}" container_image_creds: "{{ service_container_image_creds }}" container_command: "{{ _service_additional_container.command | default([]) }}" container_user: "{{ service_container_user }}" - container_mounts: "{{ _service_additional_container.mounts | default(_service_container_mounts) }}" + container_mounts: "{{ _service_additional_container_mounts }}" container_publish_ports: "{{ _service_additional_container.publish_ports | default([]) }}" container_networks: "{{ _service_container_networks }}" container_secrets: "{{ _service_additional_container.secrets | default(_service_container_secrets) }}"