Files
homelab-iac/homelab-iac/playbooks/20_dokploy.yml
2026-06-25 22:45:18 -04:00

62 lines
2.1 KiB
YAML

---
- name: Deploy Dokploy control plane
hosts: swarm_managers
become: true
gather_facts: false
run_once: true
tasks:
- name: Ensure Dokploy network exists
ansible.builtin.command: docker network create --driver overlay --attachable {{ dokploy_network_name }}
register: net_create
changed_when: "'already exists' not in net_create.stderr"
failed_when:
- net_create.rc != 0
- "'already exists' not in net_create.stderr"
- name: Ensure /etc/dokploy directory exists
ansible.builtin.file:
path: "{{ dokploy_etc_dir }}"
state: directory
mode: "0755"
- name: Ensure Traefik dynamic directory exists
ansible.builtin.file:
path: "{{ dokploy_etc_dir }}/traefik/dynamic"
state: directory
mode: "0755"
- name: Create or update Traefik static config
ansible.builtin.template:
src: traefik.yml.j2
dest: "{{ dokploy_etc_dir }}/traefik/traefik.yml"
mode: "0644"
- name: Create Dokploy dynamic config
ansible.builtin.template:
src: traefik-dokploy.yml.j2
dest: "{{ dokploy_etc_dir }}/traefik/dynamic/dokploy.yml"
mode: "0644"
- name: Create or update Docker secrets
ansible.builtin.shell: |
set -e
printf '%s' '{{ item.value }}' | docker secret create {{ item.name }} - 2>/dev/null || \
printf '%s' '{{ item.value }}' | docker secret create --replace {{ item.name }} -
loop:
- { name: dokploy_postgres_password, value: "{{ vault_dokploy_postgres_password }}" }
- { name: dokploy-auth-secret, value: "{{ vault_dokploy_auth_secret }}" }
no_log: true
- name: Render Dokploy stack file
ansible.builtin.template:
src: dokploy-stack.yml.j2
dest: "{{ dokploy_compose_dir }}/dokploy-stack.yml"
mode: "0644"
- name: Deploy Dokploy stack
ansible.builtin.command: |
docker stack deploy -c {{ dokploy_compose_dir }}/dokploy-stack.yml dokploy
register: stack_deploy
changed_when: "'Nothing found in stack' not in stack_deploy.stdout"