traefik-deploy/ansible/roles/traefik/tasks/main.yml
2025-10-08 16:03:46 -04:00

93 lines
No EOL
2.1 KiB
YAML

---
- 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 }}"