summaryrefslogtreecommitdiff
path: root/ansible
diff options
context:
space:
mode:
authorJoe Carstairs <me@joeac.net>2026-07-25 13:27:19 +0100
committerJoe Carstairs <me@joeac.net>2026-07-25 13:27:19 +0100
commitf93ee559bc1080182a4c466c97e922f53e69783a (patch)
treea01f45b73b4bc202af48ce49dad6876f314840c3 /ansible
parent6cd86414799c98180ee49357ab522a72e4dc4cd5 (diff)
moves dyndns config management to ansible
Diffstat (limited to 'ansible')
-rw-r--r--ansible/inventory.yml2
-rw-r--r--ansible/playbook.yml7
-rw-r--r--ansible/roles/dyndns/tasks/main.yml72
-rw-r--r--ansible/vars/common.yml10
4 files changed, 91 insertions, 0 deletions
diff --git a/ansible/inventory.yml b/ansible/inventory.yml
index 9058c72..156368e 100644
--- a/ansible/inventory.yml
+++ b/ansible/inventory.yml
@@ -3,6 +3,8 @@ ungrouped:
pi-broughton:
ansible_host: 192.168.178.91
ansible_ssh_user: broughton
+ connection_device_name: eth0
blade-canongate:
ansible_host: 192.168.178.75
ansible_ssh_user: canongate
+ connection_device_name: eth0
diff --git a/ansible/playbook.yml b/ansible/playbook.yml
new file mode 100644
index 0000000..d91eaa4
--- /dev/null
+++ b/ansible/playbook.yml
@@ -0,0 +1,7 @@
+- name: Install dyndns
+ hosts: blade-canongate
+ become: true
+ roles:
+ - dyndns
+ vars_files:
+ - common.yml
diff --git a/ansible/roles/dyndns/tasks/main.yml b/ansible/roles/dyndns/tasks/main.yml
new file mode 100644
index 0000000..ed547d2
--- /dev/null
+++ b/ansible/roles/dyndns/tasks/main.yml
@@ -0,0 +1,72 @@
+- name: Fetch digitalocean_dyndns source
+ ansible.builtin.git:
+ repo: https://git.joeac.net/joeac/digitalocean_dyndns.git
+ dest: /usr/local/lib/digitalocean_dyndns
+
+- name: Mark get_ip_addr.sh executable
+ ansible.builtin.file:
+ path: /usr/local/lib/digitalocean_dyndns/get_ip_addr.sh
+ owner: joeac.net
+ group: joeac.net
+ mode: "775"
+
+- name: Mark dyndns.sh executable
+ ansible.builtin.file:
+ path: /usr/local/lib/digitalocean_dyndns/dyndns.sh
+ owner: joeac.net
+ group: joeac.net
+ mode: "775"
+
+- name: Symlink get_ip_addr.sh
+ ansible.builtin.file:
+ src: /usr/local/lib/digitalocean_dyndns/get_ip_addr.sh
+ dest: /usr/bin/get_ip_addr.sh
+ owner: joeac.net
+ group: joeac.net
+ state: link
+
+- name: Symlink dyndns.sh
+ ansible.builtin.file:
+ src: /usr/local/lib/digitalocean_dyndns/dyndns.sh
+ dest: /usr/bin/dyndns.sh
+ owner: joeac.net
+ group: joeac.net
+ state: link
+
+- name: Create config directory
+ ansible.builtin.file:
+ path: /etc/digitalocean_dyndns
+ state: directory
+ mode: "644"
+
+- name: Create cache directory
+ ansible.builtin.file:
+ path: /var/digitalocean_dyndns
+ state: directory
+ mode: "666"
+
+- name: Create log directory
+ ansible.builtin.file:
+ path: /var/log/digitalocean_dyndns
+ state: directory
+ mode: "666"
+
+- name: Copy DIGITALOCEAN_TOKEN
+ ansible.builtin.copy:
+ src: DIGITALOCEAN_TOKEN
+ dest: /etc/digitalocean_dyndns/DIGITALOCEAN_TOKEN
+ mode: "644"
+
+- name: Install daily crontabs for dyndns (IPv4)
+ loop: "{{ subdomains }}"
+ ansible.builtin.cron:
+ special_time: daily
+ name: daily crontab for dyndns for {{ item }}.joeac.net (IPv4)
+ job: CACHE_DIR=/var/digitalocean_dyndns CONFIG_DIR=/etc/digitalocean_dyndns dyndns.sh 4 {{ item }}.joeac.net >> /var/log/digitalocean_dyndns/{{ item }}.joeac.net.ipv4.log
+
+- name: Install daily crontabs for dyndns (IPv6)
+ loop: "{{ subdomains }}"
+ ansible.builtin.cron:
+ special_time: daily
+ name: daily crontab for dyndns for {{ item }}.joeac.net (IPv6)
+ job: CACHE_DIR=/var/digitalocean_dyndns CONFIG_DIR=/etc/digitalocean_dyndns CONN_DEVICE_NAME={{ connection_device_name }} dyndns.sh 6 {{ item }}.joeac.net >> /var/log/digitalocean_dyndns/{{ item }}.joeac.net.ipv6.log
diff --git a/ansible/vars/common.yml b/ansible/vars/common.yml
new file mode 100644
index 0000000..e6dc18c
--- /dev/null
+++ b/ansible/vars/common.yml
@@ -0,0 +1,10 @@
+subdomains:
+ - "@"
+ - budget
+ - docs
+ - ln
+ - mail
+ - autoconfig.mail
+ - clientsettings.mail
+ - mta-sts.mail
+ - pwd