diff options
| author | Joe Carstairs <me@joeac.net> | 2026-07-25 13:27:19 +0100 |
|---|---|---|
| committer | Joe Carstairs <me@joeac.net> | 2026-07-25 13:27:19 +0100 |
| commit | f93ee559bc1080182a4c466c97e922f53e69783a (patch) | |
| tree | a01f45b73b4bc202af48ce49dad6876f314840c3 | |
| parent | 6cd86414799c98180ee49357ab522a72e4dc4cd5 (diff) | |
moves dyndns config management to ansible
| -rw-r--r-- | Makefile | 11 | ||||
| -rw-r--r-- | ansible/inventory.yml | 2 | ||||
| -rw-r--r-- | ansible/playbook.yml | 7 | ||||
| -rw-r--r-- | ansible/roles/dyndns/tasks/main.yml | 72 | ||||
| -rw-r--r-- | ansible/vars/common.yml | 10 | ||||
| -rw-r--r-- | make/dyndns.mk | 55 |
6 files changed, 96 insertions, 61 deletions
@@ -17,19 +17,19 @@ endef define install_module_rule = .PHONY: install_$(module) -install_$(module): install_openrc_$(module) install_dyndns_$(module) $(if $(SUBDOMAIN_$(module)),install_tls_$(SUBDOMAIN_$(module))) $(install_submake_file) +install_$(module): install_openrc_$(module) $(if $(SUBDOMAIN_$(module)),install_tls_$(SUBDOMAIN_$(module))) $(install_submake_file) $(if $(install_submake_file),$(MAKE) --makefile=$(notdir $(install_submake_file)) --directory=$(dir $(install_submake_file)) install) endef define reinstall_module_rule = .PHONY: reinstall_$(module) -reinstall_$(module): reinstall_openrc_$(module) reinstall_dyndns_$(module) $(if $(SUBDOMAIN_$(module)),reinstall_tls_$(SUBDOMAIN_$(module))) $(install_submake_file) +reinstall_$(module): reinstall_openrc_$(module) $(if $(SUBDOMAIN_$(module)),reinstall_tls_$(SUBDOMAIN_$(module))) $(install_submake_file) $(if $(install_submake_file),$(MAKE) --makefile=$(notdir $(install_submake_file)) --directory=$(dir $(install_submake_file)) reinstall) endef define uninstall_module_rule = .PHONY: uninstall_$(module) -uninstall_$(module): uninstall_openrc_$(module) uninstall_dyndns_$(module) $(if $(SUBDOMAIN_$(module)),install_tls_$(SUBDOMAIN_$(module))) +uninstall_$(module): uninstall_openrc_$(module) $(if $(SUBDOMAIN_$(module)),install_tls_$(SUBDOMAIN_$(module))) $(if $(install_submake_file),\ $(MAKE) --makefile=$(notdir $(install_submake_file)) --directory $(dir $(install_submake_file)) uninstall ) @@ -45,10 +45,10 @@ $(foreach module,$(ALL_MODULES),$(eval $(call module_env_rule))) install: install_tls install_nginx $(ENV_RULES) $(INSTALL_RULES) install_crontab .PHONY: reinstall -reinstall: reinstall_tls reinstall_nginx reinstall_dyndns $(ENV_RULES) $(REINSTALL_RULES) reinstall_crontab +reinstall: reinstall_tls reinstall_nginx $(ENV_RULES) $(REINSTALL_RULES) reinstall_crontab .PHONY: uninstall -uninstall: uninstall_nginx uninstall_dyndns uninstall_tls uninstall_joeac.net_service $(UNINSTALL_RULES) uninstall_crontab +uninstall: uninstall_nginx uninstall_tls uninstall_joeac.net_service $(UNINSTALL_RULES) uninstall_crontab $(foreach module,$(ALL_MODULES),$(eval $(install_module_rule))) $(foreach module,$(ALL_MODULES),$(eval $(reinstall_module_rule))) @@ -62,5 +62,4 @@ include make/container.mk include make/openrc.mk include make/nginx.mk include make/crontab.mk -include make/dyndns.mk include make/tls.mk 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 diff --git a/make/dyndns.mk b/make/dyndns.mk deleted file mode 100644 index 20490a9..0000000 --- a/make/dyndns.mk +++ /dev/null @@ -1,55 +0,0 @@ -installed_dyndns_crontabs = $(wildcard /etc/periodic/daily/dyndns-*.joeac.net) -installed_dyndns_subdomains = $(installed_dyndns_crontabs:/etc/periodic/daily/dyndns-%.joeac.net=%) -dyndns_subdomains_to_remove = $(filter-out $(SUBDOMAINS),$(installed_dyndns_subdomains)) -dyndns_crontabs_to_remove = $(dyndns_subdomains_to_remove:%=/etc/periodic/daily/dyndns-%.joeac.net) - -define install_dyndns_module_rule = -.PHONY: install_dyndns_$(module) -install_dyndns_module_$(module): $(if $(SUBDOMAIN_$(module)),/etc/periodic/daily/dyndns-$(SUBDOMAIN_$(module)).joeac.net) -endef - -define reinstall_dyndns_module_rule = -.PHONY: reinstall_dyndns_$(module) -reinstall_dyndns_$(module): $(if $(SUBDOMAIN_$(module)),/etc/periodic/daily/dyndns-$(SUBDOMAIN_$(module)).joeac.net reinstall_dyndns) -endef - -define uninstall_dyndns_module_rule = -.PHONY: uninstall_dyndns_$(module) -uninstall_dyndns_$(module): - $(if $(SUBDOMAIN_$(module)), \ - sudo rm -f /etc/periodic/daily/dyndns-$(SUBDOMAIN_$(module)).joeac.net - ) -endef - -$(foreach module,$(ALL_MODULES), $(eval $(install_dyndns_module_rule))) -$(foreach module,$(ALL_MODULES), $(eval $(reinstall_dyndns_module_rule))) -$(foreach module,$(ALL_MODULES), $(eval $(uninstall_dyndns_module_rule))) - -.PHONY: remove_/etc/periodic/daily/dyndns-%.joeac.net -remove_/etc/periodic/daily/dyndns-%.joeac.net: - rm -f $(@:remove_%=%) - -/etc/periodic/daily/dyndns-%joeac.net: ~/digitalocean_dyndns/dyndns.sh ~/.config/dyndns/DIGITALOCEAN_TOKEN - echo "#!/bin/sh" > crontab.tmp - echo " $(shell realpath ~)/digitalocean_dyndns/dyndns.sh 4 $(*F)joeac.net" >> crontab.tmp - echo "CONN_DEVICE_NAME=eth0 $(shell realpath ~)/digitalocean_dyndns/dyndns.sh 6 $(*F)joeac.net" >> crontab.tmp - sudo mv crontab.tmp $@ - sudo chmod +x $@ - -.PHONY: reinstall_dyndns -reinstall_dyndns: $(addprefix remove_,$(dyndns_crontabs_to_remove)) - -.PHONY: uninstall_dyndns -uninstall_dyndns: $(foreach module,$(ALL_MODULES),$(uninstall_dyndns_$(module))) - sudo rm -rf \ - ~/digitalocean_dyndns/ \ - ~/.config/dyndns \ - ~/.cache/dyndns - -~/digitalocean_dyndns/%: - git clone https://git.joeac.net/joeac/digitalocean_dyndns.git ~/digitalocean_dyndns - -~/.config/dyndns/DIGITALOCEAN_TOKEN: DIGITALOCEAN_TOKEN - mkdir -p ~/.config/dyndns/ - rm -f ~/.config/dyndns/DIGITALOCEAN_TOKEN - cp DIGITALOCEAN_TOKEN ~/.config/dyndns/DIGITALOCEAN_TOKEN |
