From f887426f211e419fbcbbd480f1e5ac66370b8e62 Mon Sep 17 00:00:00 2001
From: Martin van Es <martin@mrvanes.com>
Date: Thu, 10 Feb 2022 14:06:28 +0100
Subject: [PATCH] Add alternate-mdx/mdserver/mdproxy

---
 inventory/group_vars/all.yml                 |  8 ++++
 playbook.yml                                 | 14 ++++---
 roles/alternate-mdx/defaults/main.yml        |  6 +++
 roles/alternate-mdx/tasks/main.yml           | 21 ++++++++++
 roles/mdproxy/handlers/main.yml              |  7 ++++
 roles/mdproxy/tasks/main.yml                 | 15 +++++++
 roles/mdproxy/templates/mdproxy.service.j2   | 15 +++++++
 roles/mdproxy/templates/mdproxy.yaml.j2      |  2 +
 roles/mdserver/handlers/main.yml             |  7 ++++
 roles/mdserver/tasks/main.yml                | 43 ++++++++++++++++++++
 roles/mdserver/templates/mdserver.service.j2 | 15 +++++++
 roles/mdserver/templates/mdserver.yaml.j2    |  2 +
 12 files changed, 149 insertions(+), 6 deletions(-)
 create mode 100644 roles/alternate-mdx/defaults/main.yml
 create mode 100644 roles/alternate-mdx/tasks/main.yml
 create mode 100644 roles/mdproxy/handlers/main.yml
 create mode 100644 roles/mdproxy/tasks/main.yml
 create mode 100644 roles/mdproxy/templates/mdproxy.service.j2
 create mode 100644 roles/mdproxy/templates/mdproxy.yaml.j2
 create mode 100644 roles/mdserver/handlers/main.yml
 create mode 100644 roles/mdserver/tasks/main.yml
 create mode 100644 roles/mdserver/templates/mdserver.service.j2
 create mode 100644 roles/mdserver/templates/mdserver.yaml.j2

diff --git a/inventory/group_vars/all.yml b/inventory/group_vars/all.yml
index 4f11918..22c5b06 100644
--- a/inventory/group_vars/all.yml
+++ b/inventory/group_vars/all.yml
@@ -3,3 +3,11 @@
 hosts:
   alternative-mdx.pt-76.utr.surfcloud.nl:
     hostname: srv4
+    mdserver:
+      test:
+        signer: normal_signer
+        metadir: metadata/test
+    mdproxy:
+      test:
+        signer: 'http://localhost:5001'
+
diff --git a/playbook.yml b/playbook.yml
index e2bd310..1b3801f 100644
--- a/playbook.yml
+++ b/playbook.yml
@@ -2,24 +2,26 @@
 - hosts: all
   gather_facts: true
   roles:
-    - {role: base,      tage: ['base']}
+    - {role: base,          tage: ['base']}
 
 - name: geoDNS
   hosts: geodns
   gather_facts: false
   roles:
-    - {role: geodns,    tags: ['geodns']}
+    - {role: geodns,        tags: ['geodns']}
 
 - name: MDServer
   hosts: mdserver
   gather_facts: false
   roles:
-    - {role: apache,    tags: ['apache']}
-    #- {role: mdserver,  tags: ['mdserver']}
+    - {role: apache,        tags: ['apache']}
+    - {role: alternate-mdx, tags: ['altmdx']}
+    - {role: mdserver,      tags: ['mdserver']}
 
 - name: MDProxy
   hosts: mdproxy
   gather_facts: false
   roles:
-    - {role: apache,    tags: ['apache']}
-    #- {role: mdproxy,   tags: ['mdproxy']}
+    - {role: apache,        tags: ['apache']}
+    - {role: alternate-mdx, tags: ['altmdx']}
+    - {role: mdproxy,       tags: ['mdproxy']}
diff --git a/roles/alternate-mdx/defaults/main.yml b/roles/alternate-mdx/defaults/main.yml
new file mode 100644
index 0000000..fbb1c27
--- /dev/null
+++ b/roles/alternate-mdx/defaults/main.yml
@@ -0,0 +1,6 @@
+---
+
+altmdx_repo: https://gitlab.geant.org/TI_Incubator/alternate-mdx.git
+altmdx_version: master
+altmdx_dir: /opt/alternate-mdx
+altmdx_metadir: "{{ altmdx_dir }}/metadata"
diff --git a/roles/alternate-mdx/tasks/main.yml b/roles/alternate-mdx/tasks/main.yml
new file mode 100644
index 0000000..0ceef43
--- /dev/null
+++ b/roles/alternate-mdx/tasks/main.yml
@@ -0,0 +1,21 @@
+---
+
+- name: Install packages
+  apt:
+    state: present
+    name:
+      - virtualenv
+      - python3-virtualenv
+      - swig
+
+- name: Clone alternative-mdx repository
+  ansible.builtin.git:
+    repo: "{{ altmdx_repo }}"
+    dest: "{{ altmdx_dir }}"
+    version: "{{ altmdx_version }}"
+  register: altmdx_git
+
+- name: Create python virtualenv
+  ansible.builtin.pip:
+    virtualenv: "{{ altmdx_dir }}"
+    requirements: "{{ altmdx_dir }}/requirements.txt"
diff --git a/roles/mdproxy/handlers/main.yml b/roles/mdproxy/handlers/main.yml
new file mode 100644
index 0000000..0111a86
--- /dev/null
+++ b/roles/mdproxy/handlers/main.yml
@@ -0,0 +1,7 @@
+---
+- name: enable mdproxy job
+  systemd:
+    name: "mdproxy.service"
+    enabled: true
+    state: "restarted"
+    daemon_reload: true
diff --git a/roles/mdproxy/tasks/main.yml b/roles/mdproxy/tasks/main.yml
new file mode 100644
index 0000000..8d6cadb
--- /dev/null
+++ b/roles/mdproxy/tasks/main.yml
@@ -0,0 +1,15 @@
+---
+
+- name: Create mdproxy config
+  ansible.builtin.template:
+    src: "mdproxy.yaml.j2"
+    dest: "{{ altmdx_dir }}/mdproxy.yaml"
+  notify:
+    - "enable mdproxy job"
+
+- name: Copy mdproxy service files
+  ansible.builtin.template:
+    src: "mdproxy.service.j2"
+    dest: "/etc/systemd/system/mdproxy.service"
+  notify:
+    - "enable mdproxy job"
diff --git a/roles/mdproxy/templates/mdproxy.service.j2 b/roles/mdproxy/templates/mdproxy.service.j2
new file mode 100644
index 0000000..a411e2f
--- /dev/null
+++ b/roles/mdproxy/templates/mdproxy.service.j2
@@ -0,0 +1,15 @@
+[Unit]
+Description=MDProxy
+After=syslog.target network.target
+
+[Service]
+Type=simple
+WorkingDirectory={{ altmdx_dir }}
+ExecStart={{ altmdx_dir }}/bin/python -u mdproxy.py
+ExecReload=/bin/kill -HUP $MAINPID
+Restart=on-failure
+RestartSec=10
+SyslogIdentifier=mdproxy
+
+[Install]
+WantedBy=multi-user.target
diff --git a/roles/mdproxy/templates/mdproxy.yaml.j2 b/roles/mdproxy/templates/mdproxy.yaml.j2
new file mode 100644
index 0000000..e17c6fe
--- /dev/null
+++ b/roles/mdproxy/templates/mdproxy.yaml.j2
@@ -0,0 +1,2 @@
+---
+{{ hosts[inventory_hostname]['mdproxy'] | tojson }}
diff --git a/roles/mdserver/handlers/main.yml b/roles/mdserver/handlers/main.yml
new file mode 100644
index 0000000..8f6dc76
--- /dev/null
+++ b/roles/mdserver/handlers/main.yml
@@ -0,0 +1,7 @@
+---
+- name: enable mdserver job
+  systemd:
+    name: "mdserver.service"
+    enabled: true
+    state: "restarted"
+    daemon_reload: true
diff --git a/roles/mdserver/tasks/main.yml b/roles/mdserver/tasks/main.yml
new file mode 100644
index 0000000..9bbf971
--- /dev/null
+++ b/roles/mdserver/tasks/main.yml
@@ -0,0 +1,43 @@
+---
+
+- name: Create mdserver config
+  ansible.builtin.template:
+    src: "mdserver.yaml.j2"
+    dest: "{{ altmdx_dir }}/mdserver.yaml"
+  notify:
+    - "enable mdserver job"
+
+- name: Create metadata dir
+  ansible.builtin.file:
+    path: "{{ altmdx_metadir }}"
+    state: directory
+    mode: '0755'
+
+- name: Create metadata subdirs
+  ansible.builtin.file:
+    path: "{{ altmdx_metadir }}/{{ item.key }}"
+    state: directory
+    mode: '0755'
+  with_dict: "{{ hosts[inventory_hostname]['mdserver'] }}"
+
+- name: Check existence of metadata signing cert
+  stat:
+    path: "{{ altmdx_metadir }}/meta.crt"
+  register: mdcert
+
+- name: create self-signed Metadata Signing SSL certs
+  shell: >
+    openssl genrsa -out "{{ altmdx_dir }}/meta.key" 2048;
+    openssl req -new -nodes -x509 -subj "/C=NL/CN=metadata"
+    -days 3650 -key "{{ altmdx_dir }}/meta.key"
+    -out "{{ altmdx_dir }}/meta.crt" -extensions v3_ca
+  args:
+    creates: "{{ altmdx_dir }}/meta.crt"
+  when: not mdcert.stat.exists
+
+- name: Copy mdserver service files
+  ansible.builtin.template:
+    src: "mdserver.service.j2"
+    dest: "/etc/systemd/system/mdserver.service"
+  notify:
+    - "enable mdserver job"
diff --git a/roles/mdserver/templates/mdserver.service.j2 b/roles/mdserver/templates/mdserver.service.j2
new file mode 100644
index 0000000..6c6fb26
--- /dev/null
+++ b/roles/mdserver/templates/mdserver.service.j2
@@ -0,0 +1,15 @@
+[Unit]
+Description=MDServer
+After=syslog.target network.target
+
+[Service]
+Type=simple
+WorkingDirectory={{ altmdx_dir }}
+ExecStart={{ altmdx_dir }}/bin/python -u mdserver.py
+ExecReload=/bin/kill -HUP $MAINPID
+Restart=on-failure
+RestartSec=10
+SyslogIdentifier=mdserver
+
+[Install]
+WantedBy=multi-user.target
diff --git a/roles/mdserver/templates/mdserver.yaml.j2 b/roles/mdserver/templates/mdserver.yaml.j2
new file mode 100644
index 0000000..b8fa37f
--- /dev/null
+++ b/roles/mdserver/templates/mdserver.yaml.j2
@@ -0,0 +1,2 @@
+---
+{{ hosts[inventory_hostname]['mdserver'] | to_yaml }}
-- 
GitLab