From 0de5dc23a738ac564c69b0abcac4466457b8784e Mon Sep 17 00:00:00 2001
From: Martin van Es <martin@mrvanes.com>
Date: Wed, 23 Mar 2022 15:24:36 +0100
Subject: [PATCH] WIP

---
 deploy.sh                                     |  1 +
 inventory/inventory                           |  3 ++
 roles/geodns/defaults/main.yml                |  8 +++--
 roles/geodns/handlers/main.yml                |  2 ++
 roles/geodns/tasks/main.yml                   | 29 +++++++++++++++----
 .../geodns/templates/geodns-config.service.j2 |  4 +--
 .../geodns/templates/geodns-update.service.j2 | 12 ++++++++
 roles/geodns/templates/geodns-update.timer.j2 |  9 ++++++
 roles/geodns/templates/geodns.service.j2      |  2 +-
 9 files changed, 59 insertions(+), 11 deletions(-)
 create mode 100644 roles/geodns/templates/geodns-update.service.j2
 create mode 100644 roles/geodns/templates/geodns-update.timer.j2

diff --git a/deploy.sh b/deploy.sh
index 1b4d178..22b1cba 100755
--- a/deploy.sh
+++ b/deploy.sh
@@ -1,2 +1,3 @@
+#!/bin/sh
 #ansible-galaxy collection install community.general
 ansible-playbook playbook.yml -i inventory/inventory $@
diff --git a/inventory/inventory b/inventory/inventory
index 49d8a9d..a09de80 100644
--- a/inventory/inventory
+++ b/inventory/inventory
@@ -1,4 +1,6 @@
 # Inventory Aliases
+local           ansible_connection=local
+
 # Make sure to change group_vars/all.yml for the same hosts keys
 et2             ansible_host=et2.gndev.hexaa.eu ansible_user=ansible ansible_ssh_private_key_file=.ssh/id_ansible
 mdxcdn          ansible_host=mdxcdn.pt-38.utr.surfcloud.nl ansible_user=ansible ansible_ssh_private_key_file=.ssh/id_ansible
@@ -20,6 +22,7 @@ okeanos
 
 # Hosts that receive the GeoDNS role
 [geodns]
+local
 et2
 mdxcdn
 
diff --git a/roles/geodns/defaults/main.yml b/roles/geodns/defaults/main.yml
index 3e4b604..291d8ef 100644
--- a/roles/geodns/defaults/main.yml
+++ b/roles/geodns/defaults/main.yml
@@ -4,7 +4,11 @@ go_link: https://go.dev/dl/go1.16.13.linux-amd64.tar.gz
 
 geodns_repo: https://github.com/abh/geodns.git
 geodns_dir: /opt/geodns
-geo_dns_version: v3.2.0
-geo_dns_config: "{{ geodns_dir}}/config"
+geodns_version: v3.2.0
+geodns_config: "{{ geodns_dir}}/config"
 
 geolite_dir: "{{ geodns_dir }}/GeoLite2DB"
+
+mdxsaas_repo: https://gitlab.geant.org/TI_Incubator/mdx-saas-config.git
+mdxsaas_dir: /opt/mdx-saas
+mdxsaas_version: main
diff --git a/roles/geodns/handlers/main.yml b/roles/geodns/handlers/main.yml
index 0b00ab4..676bcc7 100644
--- a/roles/geodns/handlers/main.yml
+++ b/roles/geodns/handlers/main.yml
@@ -9,3 +9,5 @@
     - geodns.service
     - geodns-config.service
     - geodns-config.timer
+    - geodns-update.service
+    - geodns-update.timer
diff --git a/roles/geodns/tasks/main.yml b/roles/geodns/tasks/main.yml
index ce0ec6e..08cf9fc 100644
--- a/roles/geodns/tasks/main.yml
+++ b/roles/geodns/tasks/main.yml
@@ -1,4 +1,10 @@
 ---
+- name: Install packages
+  apt:
+    state: present
+    name:
+      - ansible
+      - netcat-openbsd
 
 - name: Check if go binary exists
   stat:
@@ -16,7 +22,7 @@
   ansible.builtin.git:
     repo: "{{ geodns_repo }}"
     dest: "{{ geodns_dir }}"
-    version: "{{ geo_dns_version }}"
+    version: "{{ geodns_version }}"
   register: geodns_git
 
 - name: Check if geodns binary exists
@@ -38,13 +44,13 @@
     state: directory
     mode: '0755'
   with_items:
-    - "{{ geo_dns_config }}"
+    - "{{ geodns_config }}"
     - "{{ geolite_dir }}"
 
 - name: Copy geoDNS config
   ansible.builtin.copy:
     src: "{{ tld }}.yaml"
-    dest: "{{ geo_dns_config }}/{{ tld }}.yaml"
+    dest: "{{ geodns_config }}/{{ tld }}.yaml"
     mode: '0644'
   notify:
     - "enable geodns job"
@@ -52,7 +58,7 @@
 - name: Copy geoDNS config parser
   ansible.builtin.copy:
     src: "geoconfig.py"
-    dest: "{{ geo_dns_config }}/geoconfig.py"
+    dest: "{{ geodns_config }}/geoconfig.py"
     mode: '0755'
   notify:
     - "enable geodns job"
@@ -70,14 +76,14 @@
 - name: Create geoDNS config
   ansible.builtin.template:
     src: "geodns.conf.j2"
-    dest: "{{ geo_dns_config }}/geodns.conf"
+    dest: "{{ geodns_config }}/geodns.conf"
   notify:
     - "enable geodns job"
 
 - name: Run GeoDns config job once
   ansible.builtin.command:
     cmd: "/opt/geodns/config/geoconfig.py {{ tld }}"
-    chdir: "{{ geo_dns_config }}"
+    chdir: "{{ geodns_config }}"
 
 - name: Copy geoDNS service files
   ansible.builtin.template:
@@ -87,5 +93,16 @@
     - geodns.service
     - geodns-config.service
     - geodns-config.timer
+    - geodns-update.service
+    - geodns-update.timer
   notify:
     - "enable geodns job"
+
+- name: Clone MDX-SAAS-config repository
+  ansible.builtin.git:
+    repo: "{{ mdxsaas_repo }}"
+    dest: "{{ mdxsaas_dir }}"
+    version: "{{ mdxsaas_version }}"
+  register: mdxsaas_git
+
+
diff --git a/roles/geodns/templates/geodns-config.service.j2 b/roles/geodns/templates/geodns-config.service.j2
index dd98870..f74f869 100644
--- a/roles/geodns/templates/geodns-config.service.j2
+++ b/roles/geodns/templates/geodns-config.service.j2
@@ -3,8 +3,8 @@ Description=GeoDNS config
 
 [Service]
 Type=oneshot
-WorkingDirectory={{ geo_dns_config }}
-ExecStart={{ geo_dns_config }}/geoconfig.py {{ tld }}
+WorkingDirectory={{ geodns_config }}
+ExecStart={{ geodns_config }}/geoconfig.py {{ tld }}
 ExecStartPost=/bin/systemctl restart geodns
 
 [Install]
diff --git a/roles/geodns/templates/geodns-update.service.j2 b/roles/geodns/templates/geodns-update.service.j2
new file mode 100644
index 0000000..748012f
--- /dev/null
+++ b/roles/geodns/templates/geodns-update.service.j2
@@ -0,0 +1,12 @@
+[Unit]
+Description=GeoDNS config
+
+[Service]
+Type=oneshot
+WorkingDirectory={{ mdxsaas_dir }}
+ExecStart=git pull
+ExecStart={{ mdxsaas_dir }}/deploy.sh --tags geodns --limit local
+ExecStartPost=/bin/systemctl restart geodns
+
+[Install]
+WantedBy=multi-user.target
diff --git a/roles/geodns/templates/geodns-update.timer.j2 b/roles/geodns/templates/geodns-update.timer.j2
new file mode 100644
index 0000000..0a4e475
--- /dev/null
+++ b/roles/geodns/templates/geodns-update.timer.j2
@@ -0,0 +1,9 @@
+[Unit]
+Description=Run GeoDNS update
+
+[Timer]
+OnCalendar=*-*-* *:0/5:00
+Unit=geodns-update.service
+
+[Install]
+WantedBy=timers.target
diff --git a/roles/geodns/templates/geodns.service.j2 b/roles/geodns/templates/geodns.service.j2
index cc60802..47c9484 100644
--- a/roles/geodns/templates/geodns.service.j2
+++ b/roles/geodns/templates/geodns.service.j2
@@ -5,7 +5,7 @@ After=syslog.target network.target
 [Service]
 Type=simple
 WorkingDirectory={{ geodns_dir }}
-ExecStart={{ geodns_dir }}/geodns -config={{ geo_dns_config }} -log -interface {{ ansible_facts.default_ipv4.address }} -port 53
+ExecStart={{ geodns_dir }}/geodns -config={{ geodns_config }} -log -interface {{ ansible_facts.default_ipv4.address }} -port 53
 # ExecReload=/bin/kill -HUP $MAINPID
 Restart=on-failure
 RestartSec=10
-- 
GitLab