diff options
author | Trygve Laugstøl <trygvis@inamo.no> | 2018-11-24 20:31:54 +0100 |
---|---|---|
committer | Trygve Laugstøl <trygvis@inamo.no> | 2018-11-24 20:31:54 +0100 |
commit | f985755b32cc3f3558604264823de32de557b288 (patch) | |
tree | 322a0d116a6be03a7f604f778e04e1c81f31bba2 /ansible/roles/linode-dns-update | |
parent | c25c490677bcba2c2e9fee90db10594bd43f6982 (diff) | |
download | infra-f985755b32cc3f3558604264823de32de557b288.tar.gz infra-f985755b32cc3f3558604264823de32de557b288.tar.bz2 infra-f985755b32cc3f3558604264823de32de557b288.tar.xz infra-f985755b32cc3f3558604264823de32de557b288.zip |
o Adding Linode update code.
Diffstat (limited to 'ansible/roles/linode-dns-update')
-rw-r--r-- | ansible/roles/linode-dns-update/handlers/main.yml | 10 | ||||
-rw-r--r-- | ansible/roles/linode-dns-update/tasks/main.yml | 65 | ||||
-rw-r--r-- | ansible/roles/linode-dns-update/templates/linode-dns-update.j2 | 45 |
3 files changed, 120 insertions, 0 deletions
diff --git a/ansible/roles/linode-dns-update/handlers/main.yml b/ansible/roles/linode-dns-update/handlers/main.yml new file mode 100644 index 0000000..9d7ba98 --- /dev/null +++ b/ansible/roles/linode-dns-update/handlers/main.yml @@ -0,0 +1,10 @@ +- name: systemd daemon-reload + become: yes + systemd: + daemon_reload: true + +- name: service start linode-dns-update.timer + become: yes + service: + name: linode-dns-update.timer + state: restarted diff --git a/ansible/roles/linode-dns-update/tasks/main.yml b/ansible/roles/linode-dns-update/tasks/main.yml new file mode 100644 index 0000000..8b305f8 --- /dev/null +++ b/ansible/roles/linode-dns-update/tasks/main.yml @@ -0,0 +1,65 @@ +- when: (linode_dns__ipv4_resource is defined) or (linode_dns__ipv6_resource is defined) + become: true + tags: linode-dns-update + block: + - name: /usr/local/bin/linode-dns-update + template: + src: linode-dns-update.j2 + dest: /usr/local/bin/linode-dns-update + owner: root + group: root + mode: a=rx,u=rwx + + - name: /etc/systemd/system/linode-dns-update.service + notify: + - systemd daemon-reload + copy: + dest: /etc/systemd/system/linode-dns-update.service + content: | + [Unit] + Description=Update DNS entry + + [Service] + Type=oneshot + ExecStart=/usr/local/bin/linode-dns-update + User=nobody + Group=systemd-journal + + - name: systemctl enable linode-dns-update.service + systemd: + name: linode-dns-update.service + enabled: yes + + - name: /etc/systemd/system/linode-dns-update.timer + notify: + - systemd daemon-reload + - service start linode-dns-update.timer + copy: + dest: /etc/systemd/system/linode-dns-update.timer + content: | + [Unit] + Description=Update DNS entry + + [Timer] + OnBootSec=5min + OnUnitActiveSec=1hour + + [Install] + WantedBy=timers.target + + - name: systemctl enable linode-dns-update.timer + systemd: + name: linode-dns-update.timer + enabled: yes + state: started + + # Remove old stuff + - file: + path: /usr/local/bin/update-linode + state: absent + + - name: Install cron job + cron: + name: update-linode + cron_file: update-linode + state: absent diff --git a/ansible/roles/linode-dns-update/templates/linode-dns-update.j2 b/ansible/roles/linode-dns-update/templates/linode-dns-update.j2 new file mode 100644 index 0000000..97ab7c9 --- /dev/null +++ b/ansible/roles/linode-dns-update/templates/linode-dns-update.j2 @@ -0,0 +1,45 @@ +#!/bin/bash + +set -e + +# Hostname: {{ ansible_hostname }} +URL="https://api.linode.com/" +USERNAME="{{ linode_dns__api_username }}" +KEY="{{ linode_dns__api_key }}" +DOMAIN_ID="{{ linode_dns__domain_id }}" + +PATH=/sbin:/usr/sbin:/bin:/usr/bin: + +req() { + PARAMS=() + for p in "$@" + do + PARAMS+=(-F "$p") + done + + curl \ + -4 \ + --user "$USERNAME:$KEY" -s \ + "${PARAMS[@]}" \ + "$URL" >/dev/null # | jq +} + +domain_resource_update() { + req api_action=domain.resource.update DomainId="$1" ResourceId="$2" Type="$3" Target="$4" +} + +{% if linode_dns__ipv4_resource is defined %} +domain_resource_update "$DOMAIN_ID" "{{ linode_dns__ipv4_resource }}" "A" "[remote_addr]" +{% endif %} + +{% if linode_dns__ipv6_resource is defined %} +q='' +#q='map(select(.ifname=="wlx00e01d0808b2"))' +q='map(.addr_info) | flatten | map(select(.scope=="global" and .deprecated != true and .mngtmpaddr != true) | .local) | first' +ip=$(ip -6 -json addr | jq -r -c "$q") + +if [[ ! -z $ip ]] +then + domain_resource_update "$DOMAIN_ID" "{{ linode_dns__ipv6_resource }}" "AAAA" "$ip" +fi +{% endif %} |