--- _service_additional_containers_with_default_image: >- {{ ([{ 'image': service_container_image }] * service_additional_containers | length) | zip(service_additional_containers) | map('combine') }} _service_additional_container_same_image_defaults: user: "{{ service_container_user }}" command: "{{ service_container_command }}" entrypoint: "{{ service_container_entrypoint }}" devices: "{{ service_container_devices }}" env: "{{ service_container_env }}" add_capabilities: "{{ service_container_add_capabilities }}" pinp: false _service_additional_container_different_image_defaults: user: "" command: [] entrypoint: "" mounts: [] devices: [] publish_ports: [] env: {} add_capabilities: [] secrets: [] pinp: false _service_additional_same_image_containers: >- {{ _service_additional_containers_with_default_image | selectattr('image', '==', service_container_image) }} _service_additional_different_image_containers: >- {{ _service_additional_containers_with_default_image | selectattr('image', '!=', service_container_image) }} _service_additional_containers: >- {{ ( ( ( [_service_additional_container_same_image_defaults] * (_service_additional_same_image_containers | length) ) | zip(_service_additional_same_image_containers) | map('combine') ) + ( ( [_service_additional_container_different_image_defaults] * (_service_additional_different_image_containers | length) ) | zip(_service_additional_different_image_containers) | map('combine') ) ) | zip( ( _service_additional_same_image_containers + _service_additional_different_image_containers ) | map(attribute='name') | map('regex_replace', '^', service_name ~ '-') | map('community.general.dict_kv', 'name') ) | map('combine') }} _service_additional_container_wants: >- {{ service_wants + _service_additional_container_publish_socket_ports | map(attribute='name') | map('regex_replace', '^', service_name ~ '-') | map('regex_replace', '$', '-socat.socket') }} _service_additional_container_networks: >- {{ [{ 'name': service_name, 'ip': service_container_ip | ansible.utils.ipmath(20 + _service_additional_container_index) if _service_static_ip else '' }] + ( service_container_additional_networks + ( _service_additional_container_publish_socket_ports | map(attribute='name') | map('regex_replace', '^', service_name ~ '-') | map('regex_replace', '$', '-socat') ) ) | map('community.general.dict_kv', 'name') }} _service_additional_container_secrets: >- {{ ( _service_additional_container.secrets | map(attribute='name') | map('community.general.dict_kv', 'target') | zip( _service_additional_container.secrets, _service_additional_container.secrets | map(attribute='name') | map('regex_replace', '^', service_name ~ '-') | map('community.general.dict_kv', 'name') ) | map('combine') ) if _service_additional_container.secrets is defined else _service_container_secrets }} _service_additional_container_publish_ports_with_defaults: >- {{ ([{ 'type': 'port', 'host_address': '0.0.0.0' }] * _service_additional_container.publish_ports | length) | zip(_service_additional_container.publish_ports) | map('combine') }} _service_additional_container_publish_socket_ports: >- {{ _service_additional_container_publish_ports_with_defaults | selectattr('type', '==', 'socket') if _service_additional_container.publish_ports is defined else [] }} _service_additional_container_publish_port_ports: >- {{ _service_additional_container_publish_ports_with_defaults | selectattr('type', '==', 'port') if _service_additional_container.publish_ports is defined else [] }} _service_additional_container_publish_ports: >- {{ _service_additional_container_publish_port_ports | map(attribute='host_address') | zip( _service_additional_container_publish_port_ports | map(attribute='host_port'), _service_additional_container_publish_port_ports | map(attribute='container_port') ) | map('join', ':') }} _service_additional_volume_mounts: "{{ _service_additional_container.mounts | selectattr('type', '==', 'volume') }}" _service_additional_template_mounts: "{{ _service_additional_container.mounts | selectattr('type', '==', 'template') }}" _service_additional_copy_mounts: "{{ _service_additional_container.mounts | selectattr('type', '==', 'copy') }}" _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 | community.general.remove_keys(['mode']), _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_copy_mounts: >- {{ ([{'readonly': true}] * _service_additional_copy_mounts | length) | zip( _service_additional_copy_mounts | community.general.remove_keys(['mode']), _service_additional_copy_mounts | map(attribute='source') | map('regex_replace', '\/$', '') | map('regex_replace', '^', _service_host_directory ~ '/mounts/') | map('community.general.dict_kv', 'source'), ([{'type': 'bind'}] * _service_additional_copy_mounts | length) ) | map('combine') }} _service_additional_container_mounts: >- {{ _service_additional_container_volume_mounts + _service_additional_container_bind_mounts + _service_additional_container_template_mounts + _service_additional_container_copy_mounts if _service_additional_container.mounts is defined else _service_container_mounts }} _service_additional_plain_container: image: "{{ _service_additional_container.image }}" entrypoint: "{{ _service_additional_container.entrypoint }}" command: "{{ _service_additional_container.command }}" user: "{{ _service_additional_container.user }}" env: "{{ _service_additional_container.env }}" mounts: "{{ _service_additional_container_mounts }}" _service_additional_pinp_container_mounts: - type: bind source: "{{ _service_host_directory }}/mounts/{{ _service_additional_container.name }}-entrypoint.sh" destination: /entrypoint.sh readonly: true - type: volume source: "{{ _service_additional_container.name }}-containers" destination: /home/podman/.local/share/containers _service_additional_pinp_container: image: quay.io/podman/stable:latest entrypoint: /entrypoint.sh command: [] user: podman env: {} mounts: >- {{ _service_additional_pinp_container_mounts + ( _service_additional_container_mounts | zip( _service_additional_container_mounts | map(attribute='source') | map('replace', '/', '_') | map('regex_replace', '^', '/mounts/') | map('community.general.dict_kv', 'destination') ) | map('combine') ) }} _service_additional_container_final: >- {{ _service_additional_pinp_container if _service_additional_container.pinp else _service_additional_plain_container }} _service_additional_container_pinp_inner_mounts: >- {{ _service_additional_container_mounts | zip( _service_additional_container_mounts | map(attribute='source') | map('replace', '/', '_') | map('regex_replace', '^', '/mounts/') | map('community.general.dict_kv', 'source') ) | map('combine') }}