--- - name: Restart n8n community.docker.docker_compose_v2: project_src: "{{ n8n_data_dir }}" state: present recreate: always # "Import n8n content" is a topic, not a single handler: the tasks below all listen # on it and run in the order they are defined (handlers cannot be blocks). # Credentials first (workflows reference them by id), then workflows. # Imported workflows start inactive; the ones marked "active": true are published. # n8n only registers triggers/webhooks at startup, so restart afterwards. - name: Wait for n8n to be ready (database migrations finished) ansible.builtin.command: docker exec n8n wget -qO- http://localhost:5678/healthz/readiness listen: Import n8n content register: n8n_ready changed_when: false retries: 40 delay: 3 until: n8n_ready.rc == 0 - name: Import n8n credentials ansible.builtin.command: docker exec n8n n8n import:credentials --separate --input=/import/credentials listen: Import n8n content no_log: true changed_when: true - name: Import n8n workflows ansible.builtin.command: docker exec n8n n8n import:workflow --separate --input=/import/workflows listen: Import n8n content changed_when: true - name: Publish active n8n workflows ansible.builtin.command: docker exec n8n n8n publish:workflow --id={{ item }} listen: Import n8n content loop: "{{ n8n_publish_ids | from_json }}" changed_when: true - name: Restart n8n to register triggers ansible.builtin.command: docker restart n8n listen: Import n8n content changed_when: true