--- # Register a service's logical network with Caddy. # # Caddy is the *base* unit and knows nothing about its upstreams. Each service # adds itself by writing two files into the Quadlet directory: # # 1. its own .network unit, and # 2. a drop-in next to caddy.container that pulls that network into Caddy. # # Caddy's own playbook never changes when a service is added or removed. # # Include this from a service playbook: # # - name: Register this service with Caddy # ansible.builtin.include_tasks: "{{ playbook_dir }}/../caddy/roles/register/tasks/main.yaml" # vars: # network_name: "{{ container_name }}" # # The including play must also run the `podman` role (for podman_user and # quadlet_dir) and define a "Restart Caddy" handler: # # - name: Restart Caddy # ansible.builtin.systemd_service: # name: caddy.service # scope: user # state: restarted # daemon_reload: true # listen: Restart Caddy # # It runs as the connection user, which must be {{ podman_user }}. - name: "Create the {{ network_name }} network unit" ansible.builtin.copy: dest: "{{ quadlet_dir }}/{{ network_name }}.network" owner: "{{ podman_user }}" group: "{{ podman_user }}" mode: '0644' content: | # {{ network_name }} — logical app network. # Managed by Ansible. Do not edit by hand. # # NetworkName pins the Podman network name. Without it Quadlet would # create "systemd-{{ network_name }}". # # isolate blocks traffic between separate Podman networks, so a container # on this network cannot reach one that is only on another. Caddy and any # shared service still reach it, because they are members of it. [Network] NetworkName={{ network_name }}_net Options=isolate=true notify: Restart Caddy - name: "Register {{ network_name }} with Caddy" ansible.builtin.copy: dest: "{{ quadlet_dir }}/{{ caddy_name | default('caddy') }}.container.d/50-{{ network_name }}.conf" owner: "{{ podman_user }}" group: "{{ podman_user }}" mode: '0644' content: | # Added by the {{ network_name }} playbook. Do not edit by hand. # # Quadlet merges this into caddy.container. Deleting this file removes # the network from Caddy on the next daemon-reload. [Container] Network={{ network_name }}.network notify: Restart Caddy