--- - name: Install minimal dependencies apt: name: - curl - ca-certificates state: present update_cache: yes when: ansible_os_family == "Debian" - name: Create directories file: path: "{{ item }}" state: directory mode: '0755' loop: - "{{ traefik_base_dir }}/{{ new_color }}" - "{{ traefik_base_dir }}/{{ new_color }}/config" - "{{ traefik_base_dir }}/{{ new_color }}/logs" - name: Create acme.json file: path: "{{ traefik_base_dir }}/{{ new_color }}/acme.json" state: touch mode: '0600' - name: Download binary from Forgejo get_url: url: "{{ forgejo_url }}/{{ forgejo_owner }}/{{ forgejo_repo }}/releases/download/{{ traefik_version }}/traefik-{{ traefik_version }}-linux-amd64.tar.gz" dest: "/tmp/traefik_{{ new_color }}.tar.gz" mode: '0644' force: yes - name: Extract binary unarchive: src: "/tmp/traefik_{{ new_color }}.tar.gz" dest: "{{ traefik_base_dir }}/{{ new_color }}" remote_src: yes - name: Make executable file: path: "{{ traefik_base_dir }}/{{ new_color }}/traefik" mode: '0755' - name: Copy static config template: src: traefik.yml.j2 dest: "{{ traefik_base_dir }}/{{ new_color }}/config/traefik.yml" mode: '0644' - name: Copy dynamic config template: src: dynamic.yml.j2 dest: "{{ traefik_base_dir }}/{{ new_color }}/config/dynamic.yml" mode: '0644' - name: Create systemd service template: src: traefik.service.j2 dest: "/etc/systemd/system/traefik-{{ new_color }}.service" mode: '0644' - name: Reload systemd systemd: daemon_reload: yes - name: Start new instance systemd: name: "traefik-{{ new_color }}" state: started enabled: yes - name: Wait for health check uri: url: "http://localhost:8080/ping" status_code: 200 register: result until: result.status == 200 retries: 30 delay: 2 - name: Stop old instance systemd: name: "traefik-{{ current_color }}" state: stopped enabled: no when: current_color != new_color ignore_errors: yes - name: Update color marker copy: content: "{{ new_color }}" dest: "{{ current_color_file }}"