--- - name: Dynamic DNS setup block: - name: Create environment file for dynamic DNS ansible.builtin.template: src: "{{ playbook_dir }}/templates/dynamic-dns.env.j2" dest: "{{ ansible_user_dir }}/.local/bin/dynamic-dns.env" mode: "0600" - name: Create dynamic DNS wrapper script ansible.builtin.copy: dest: "{{ ansible_user_dir }}/.local/bin/dynamic-dns-update.sh" mode: "0755" content: | #!/bin/bash # Load environment variables source {{ ansible_user_dir }}/.local/bin/dynamic-dns.env # Change to the directory containing the binary cd {{ ansible_user_dir }}/.local/bin # Run dynamic DNS update (binary compiled by utils.yml) dynamic-dns-cf -record "vleeuwen.me,mvl.sh,mennovanleeuwen.nl" 2>&1 | logger -t dynamic-dns - name: Setup cron job for dynamic DNS updates (fallback) ansible.builtin.cron: name: "Dynamic DNS Update" minute: "*/15" job: "{{ ansible_user_dir }}/.local/bin/dynamic-dns-update.sh" user: "{{ ansible_user }}" state: present ignore_errors: true tags: [cron] - name: Create systemd user directory ansible.builtin.file: path: "{{ ansible_user_dir }}/.config/systemd/user" state: directory mode: "0755" - name: Create dynamic DNS systemd timer ansible.builtin.copy: dest: "{{ ansible_user_dir }}/.config/systemd/user/dynamic-dns.timer" mode: "0644" content: | [Unit] Description=Dynamic DNS Update Timer Requires=dynamic-dns.service [Timer] OnCalendar=*:0/15 Persistent=true [Install] WantedBy=timers.target - name: Create dynamic DNS systemd service ansible.builtin.copy: dest: "{{ ansible_user_dir }}/.config/systemd/user/dynamic-dns.service" mode: "0644" content: | [Unit] Description=Dynamic DNS Update After=network-online.target Wants=network-online.target [Service] Type=oneshot ExecStart={{ ansible_user_dir }}/.local/bin/dynamic-dns-update.sh EnvironmentFile={{ ansible_user_dir }}/.local/bin/dynamic-dns.env [Install] WantedBy=default.target - name: Reload systemd user daemon ansible.builtin.systemd: daemon_reload: true scope: user - name: Enable and start dynamic DNS timer ansible.builtin.systemd: name: dynamic-dns.timer enabled: true state: started scope: user - name: Display setup completion message ansible.builtin.debug: msg: | Dynamic DNS setup complete! - Systemd timer: systemctl --user status dynamic-dns.timer - Check logs: journalctl --user -u dynamic-dns.service -f - Manual run: ~/.local/bin/dynamic-dns-update.sh - Domains: vleeuwen.me, mvl.sh, mennovanleeuwen.nl when: inventory_hostname == 'mennos-cachyos-desktop' tags: - dynamic-dns