diff --git a/roles/cloudflare-ddns/handlers/main.yml b/roles/cloudflare-ddns/handlers/main.yml deleted file mode 100644 index b8c958c..0000000 --- a/roles/cloudflare-ddns/handlers/main.yml +++ /dev/null @@ -1,2 +0,0 @@ ---- -# handlers file for cloudflare-ddns diff --git a/roles/cloudflare-ddns/meta/main.yml b/roles/cloudflare-ddns/meta/main.yml deleted file mode 100644 index 253dee9..0000000 --- a/roles/cloudflare-ddns/meta/main.yml +++ /dev/null @@ -1,11 +0,0 @@ -galaxy_info: - author: Jan Christian Grünhage - description: Cloudflare DDNS tool - license: AGPL-3.0-only - min_ansible_version: 2.10 - platforms: - - name: VoidLinux - versions: - - all - galaxy_tags: [] -dependencies: [] diff --git a/roles/cloudflare-ddns/tasks/main.yml b/roles/cloudflare-ddns/tasks/main.yml deleted file mode 100644 index 419766f..0000000 --- a/roles/cloudflare-ddns/tasks/main.yml +++ /dev/null @@ -1,19 +0,0 @@ ---- -# tasks file for cloudflare-ddns -- name: install cloudflare-ddns package - become: true - xbps: - name: cloudflare-ddns - state: present -- name: template wrapper script - become: true - no_log: true - template: - src: wrapper.sh.j2 - dest: /usr/local/bin/cloudflare-ddns-wrapper.sh - mode: 755 -- name: add cron job - become: true - cron: - name: cloudflare-ddns - job: /usr/local/bin/cloudflare-ddns-wrapper.sh diff --git a/roles/cloudflare-ddns/templates/wrapper.sh.j2 b/roles/cloudflare-ddns/templates/wrapper.sh.j2 deleted file mode 100644 index 261ef8d..0000000 --- a/roles/cloudflare-ddns/templates/wrapper.sh.j2 +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/sh -exec /usr/bin/cloudflare-ddns \ - --token {{ cloudflare_ddns_api_token }} \ - --domain {{ cloudflare_ddns_domain }} \ - --zone {{ cloudflare_ddns_zone }} \ - --cache /tmp/cloudflare-ddns-ip-cache diff --git a/roles/cloudflare-ddns/vars/main.yml b/roles/cloudflare-ddns/vars/main.yml deleted file mode 100644 index 959be23..0000000 --- a/roles/cloudflare-ddns/vars/main.yml +++ /dev/null @@ -1,2 +0,0 @@ ---- -# vars file for cloudflare-ddns diff --git a/roles/cloudflare-ddns/README.md b/roles/cloudflare_ddns_service/README.md similarity index 52% rename from roles/cloudflare-ddns/README.md rename to roles/cloudflare_ddns_service/README.md index caccc2c..8ae5c43 100644 --- a/roles/cloudflare-ddns/README.md +++ b/roles/cloudflare_ddns_service/README.md @@ -1,40 +1,30 @@ -cloudflare-ddns -=============== +# `jcgruenhage.cloudflare_ddns_service` -Dynamic DNS using Cloudflare. +Dynamic DNS using Cloudflare, running in Docker. -Requirements ------------- - -VoidLinux, as the tool is not packaged for other distros, and installing using cargo isn't supported yet. - -Role Variables --------------- +## Role Variables - **cloudflare_ddns_api_token**: API token with access to the zone - **cloudflare_ddns_domain**: Domain for which to update the record - **cloudflare_ddns_zone**: Zone which contains the domain +- **cloudflare_ddns_ipv4**: Whether to set v4 record, defaults to true +- **cloudflare_ddns_ipv6**: Whether to set v6 record, defaults to false -Example Playbook ----------------- +## Example Playbook ```yaml - hosts: servers - collections: - - jcgruenhage.base roles: - - role: cloudflare-ddns + - role: jcgruenhage.base.cloudflare_ddns_service cloudflare_ddns_api_token: your-token-here cloudflare_ddns_zone: example.org cloudflare_ddns_domain: host.example.org ``` -License -------- +## License -AGPL-3.0-only +CNPLv7+ -Author Information ------------------- +## Author Information Jan Christian Grünhage diff --git a/roles/cloudflare-ddns/defaults/main.yml b/roles/cloudflare_ddns_service/defaults/main.yml similarity index 100% rename from roles/cloudflare-ddns/defaults/main.yml rename to roles/cloudflare_ddns_service/defaults/main.yml diff --git a/roles/cloudflare_ddns_service/handlers/main.yml b/roles/cloudflare_ddns_service/handlers/main.yml new file mode 100644 index 0000000..726f48a --- /dev/null +++ b/roles/cloudflare_ddns_service/handlers/main.yml @@ -0,0 +1,9 @@ +--- +# handlers file for cloudflare-ddns +- name: Restart cloudflare-ddns-service + become: true + community.docker.docker_container: + name: cloudflare-ddns-service + restart: true + state: started + listen: restart-cloudflare-ddns-service diff --git a/roles/cloudflare_ddns_service/meta/main.yml b/roles/cloudflare_ddns_service/meta/main.yml new file mode 100644 index 0000000..0cccf62 --- /dev/null +++ b/roles/cloudflare_ddns_service/meta/main.yml @@ -0,0 +1,11 @@ +galaxy_info: + author: Jan Christian Grünhage + description: Cloudflare DDNS service, hosted in a container + license: CNPLv7+ + min_ansible_version: "2.10" + platforms: + - name: Debian + versions: + - bullseye + galaxy_tags: [] +dependencies: [] diff --git a/roles/cloudflare_ddns_service/tasks/main.yml b/roles/cloudflare_ddns_service/tasks/main.yml new file mode 100644 index 0000000..61fad61 --- /dev/null +++ b/roles/cloudflare_ddns_service/tasks/main.yml @@ -0,0 +1,41 @@ +--- +# tasks file for cloudflare-ddns +- name: Create cloudflare-ddns-service user + become: true + ansible.builtin.user: + name: cloudflare-ddns-service + system: true + register: cloudflare_ddns_user_result +- name: Create config and cache dirs + become: true + ansible.builtin.file: + path: "{{ item }}" + state: directory + owner: "{{ cloudflare_ddns_user_result.name }}" + group: "{{ cloudflare_ddns_user_result.group }}" + mode: 0700 + loop: + - "/etc/cloudflare-ddns-service" + - "/var/cache/cloudflare-ddns-service" +- name: Template config file + become: true + ansible.builtin.copy: + content: "{{ cloudflare_ddns_config | to_nice_yaml }}" + dest: /etc/cloudflare-ddns-service/config.yaml + owner: "{{ cloudflare_ddns_user_result.name }}" + group: "{{ cloudflare_ddns_user_result.group }}" + mode: 0600 + notify: restart-cloudflare-ddns-service +- name: Start cloudflare-ddns-service container + become: true + community.docker.docker_container: + name: cloudflare-ddns-service + image: git.jcg.re/jcgruenhage/cloudflare-ddns-service:v0.5.1 + volumes: + - "/etc/cloudflare-ddns-service:/etc/cloudflare-ddns-service:ro" + - "/var/cache/cloudflare-ddns-service:/var/cache/cloudflare-ddns-service" + env: + RUST_LOG: INFO + user: "{{ cloudflare_ddns_user_result.uid }}:{{ cloudflare_ddns_user_result.group }}" + network_mode: host + restart_policy: unless-stopped diff --git a/roles/cloudflare_ddns_service/vars/main.yml b/roles/cloudflare_ddns_service/vars/main.yml new file mode 100644 index 0000000..18c4bf6 --- /dev/null +++ b/roles/cloudflare_ddns_service/vars/main.yml @@ -0,0 +1,9 @@ +--- +# vars file for cloudflare-ddns +cloudflare_ddns_config: + api_token: "{{ cloudflare_ddns_api_token }}" + domain: "{{ cloudflare_ddns_domain }}" + zone: "{{ cloudflare_ddns_zone }}" + ipv4: "{{ cloudflare_ddns_ipv4 | default(true) }}" + ipv6: "{{ cloudflare_ddns_ipv6 | default(false) }}" + interval: 15