From 37ea941a8dc4170fea33112a950f84dd4144f9b0 Mon Sep 17 00:00:00 2001
From: shirenn <shirenn@crans.org>
Date: Fri, 18 Jun 2021 20:04:30 +0200
Subject: [PATCH] [keepalived] https://www.youtube.com/watch?v=fNFzfwLM72c
 please dont die

---
 group_vars/keepalived.yml                     | 38 +++++++------------
 .../keepalived.yml                            | 16 ++++++++
 .../routeur-jack.adm.crans.org/keepalived.yml | 16 ++++++++
 plays/keepalived.yml                          |  8 +++-
 plays/routeurs.yml                            |  1 +
 roles/isc-dhcp-server/handlers/main.yml       |  1 -
 roles/keepalived/tasks/main.yml               | 17 +++------
 roles/keepalived/templates/bin/notify-dhcp    | 24 ------------
 .../templates/keepalived/keepalived.conf.j2   |  4 +-
 roles/radvd/handlers/main.yml                 |  5 +++
 10 files changed, 65 insertions(+), 65 deletions(-)
 create mode 100644 host_vars/routeur-daniel.adm.crans.org/keepalived.yml
 create mode 100644 host_vars/routeur-jack.adm.crans.org/keepalived.yml
 mode change 100644 => 100755 plays/keepalived.yml
 delete mode 100755 roles/keepalived/templates/bin/notify-dhcp

diff --git a/group_vars/keepalived.yml b/group_vars/keepalived.yml
index 47059bf1..39f72b8c 100644
--- a/group_vars/keepalived.yml
+++ b/group_vars/keepalived.yml
@@ -1,37 +1,25 @@
 ---
-
 glob_keepalived:
   mail_source: keepalived@crans.org
-  mail_destination: root@crans.org
+  mail_destination: shirenn@crans.org
   smtp_server: smtp.adm.crans.org
   pool:
-    all:
+    VI_ALL:
       password: "{{ vault.keepalived.password }}"
       id: 60
       ipv6: yes
-      notify: /usr/scripts/notify-dhcp
+      notify: /var/local/services/keepalived/keepalived.py
       zones:
-        - vlan: zayo
-          ipv4: 158.255.113.73/31
-          brd: false
-          ipv6: 2001:1b48:2:103::bb:2/126
         - vlan: srv
-          ipv4: 185.230.79.62/26
-          ipv6: 2a0c:700:2::ff:fe00:9902/64
+          ipv4: 185.230.79.61/26
+          ipv6: 2a0c:700:2::ff:fe01:9902/64
         - vlan: srv_nat
-          ipv4: 172.16.3.99/24
-          ipv6: 2a0c:700:3::ff:fe00:9903/64
-        - vlan: accueil
-          ipv4: 172.16.14.99/24
-        - vlan: infra
-          ipv4: 172.16.32.99/22
-          ipv6: fd00::11:0:ff:fe00:9911/64
+          ipv4: 172.16.3.199/24
+          ipv6: 2a0c:700:3::ff:fe01:9903/64
         - vlan: adh
-          ipv4: 185.230.78.99/24
-          ipv6: 2a0c:700:12::ff:fe00:9912/48
-        - vlan: adh_nat
-          ipv4: 100.64.0.99/16
-          ipv6: 2a0c:700:13::ff:fe00:9913/48
-        - vlan: federez
-          ipv4: 100.65.0.99/16
-          ipv6: 2a0c:700:254::ff:fe00:99fe/64
+          ipv4: 185.230.78.199/24
+          ipv6: 2a0c:700:12::ff:fe01:9912/48
+
+glob_service_keepalived:
+  name: keepalived
+  install_dir: /var/local/services/keepalived
diff --git a/host_vars/routeur-daniel.adm.crans.org/keepalived.yml b/host_vars/routeur-daniel.adm.crans.org/keepalived.yml
new file mode 100644
index 00000000..72646b65
--- /dev/null
+++ b/host_vars/routeur-daniel.adm.crans.org/keepalived.yml
@@ -0,0 +1,16 @@
+---
+loc_keepalived:
+  instances:
+    - name: VI_ALL
+      state: MASTER
+      priority: 150
+
+loc_service_keepalived:
+  git:
+    remote: https://gitlab.adm.crans.org/nounous/keepalived.git
+    version: master
+  config:
+    services:
+      VI_ALL:
+        - isc-dhcp-server
+        - radvd
diff --git a/host_vars/routeur-jack.adm.crans.org/keepalived.yml b/host_vars/routeur-jack.adm.crans.org/keepalived.yml
new file mode 100644
index 00000000..62035449
--- /dev/null
+++ b/host_vars/routeur-jack.adm.crans.org/keepalived.yml
@@ -0,0 +1,16 @@
+---
+loc_keepalived:
+  instances:
+    - name: VI_ALL
+      state: BACKUP
+      priority: 100
+
+loc_service_keepalived:
+  git:
+    remote: https://gitlab.adm.crans.org/nounous/keepalived.git
+    version: master
+  config:
+    services:
+      VI_ALL:
+        - isc-dhcp-server
+        - radvd
diff --git a/plays/keepalived.yml b/plays/keepalived.yml
old mode 100644
new mode 100755
index 7b6a6634..9c51f6d5
--- a/plays/keepalived.yml
+++ b/plays/keepalived.yml
@@ -2,6 +2,12 @@
 ---
 - hosts: keepalived
   vars:
-    keepalived: "{{ glob_keepalived | combine(loc_keepalived) }}"
+    keepalived: "{{ glob_keepalived | default({}) | combine(loc_keepalived | default({})) }}"
   roles:
     - keepalived
+
+- hosts: keepalived
+  vars:
+    service: "{{ glob_service_keepalived | default({}) | combine(loc_service_keepalived | default({})) }}"
+  roles:
+    - service
diff --git a/plays/routeurs.yml b/plays/routeurs.yml
index 853ec82d..f9e42659 100755
--- a/plays/routeurs.yml
+++ b/plays/routeurs.yml
@@ -6,3 +6,4 @@
 - import_playbook: firewall.yml
 - import_playbook: dns-recursive.yml
 - import_playbook: prefix-delegation.yml
+- import_playbook: keepalived.yml
diff --git a/roles/isc-dhcp-server/handlers/main.yml b/roles/isc-dhcp-server/handlers/main.yml
index 51268e98..1922dc71 100644
--- a/roles/isc-dhcp-server/handlers/main.yml
+++ b/roles/isc-dhcp-server/handlers/main.yml
@@ -7,6 +7,5 @@
   systemd:
     name: isc-dhcp-server
     state: restarted
-    enabled: true
   listen: 'restart isc-dhcp-server'
   when: not ansible_check_mode and ansible_facts.services['isc-dhcp-server']['state'] == 'running'
diff --git a/roles/keepalived/tasks/main.yml b/roles/keepalived/tasks/main.yml
index 14fc00bd..008656e1 100644
--- a/roles/keepalived/tasks/main.yml
+++ b/roles/keepalived/tasks/main.yml
@@ -14,15 +14,8 @@
     mode: 0644
   notify: Reload keepalived.service
 
-- name: Create scripts directory
-  file:
-    path: /usr/scripts
-    state: directory
-
-- name: Deploy keepalived dhcp scripts
-  template:
-    src: bin/notify-dhcp
-    dest: /usr/scripts/notify-dhcp
-    mode: 0744
-  when: not ansible_check_mode
-  notify: Reload keepalived.service
+- name: Start and enable keepalived
+  service:
+    name: keepalived
+    state: started
+    enabled: yes
diff --git a/roles/keepalived/templates/bin/notify-dhcp b/roles/keepalived/templates/bin/notify-dhcp
deleted file mode 100755
index a62ad14c..00000000
--- a/roles/keepalived/templates/bin/notify-dhcp
+++ /dev/null
@@ -1,24 +0,0 @@
-#!/bin/bash
-
-TYPE=$1
-NAME=$2
-STATE=$3
-
-case $STATE in
-	"MASTER")
-		logger -s '[DHCP-NOTIFY] Entering state MASTER, starting isc-dhcp-server.service'
-		systemctl start isc-dhcp-server.service
-		exit 0;;
-	"BACKUP")
-		logger -s '[DHCP-NOTIFY] Entering state BACKUP, stopping isc-dhcp-server.service'
-		systemctl stop isc-dhcp-server.service
-		exit 0;;
-	"FAULT")
-		logger -s '[DHCP-NOTIFY] Entering state FAULT, stopping isc-dhcp-server.service'
-		systemctl stop isc-dhcp-server.service
-		exit 0;;
-	*)
-		logger -s '[DHCP-NOTIFY] Entering UNKNOWN state, doing nothing'
-		exit 1;;
-esac
-
diff --git a/roles/keepalived/templates/keepalived/keepalived.conf.j2 b/roles/keepalived/templates/keepalived/keepalived.conf.j2
index 35c954c7..f8645e47 100644
--- a/roles/keepalived/templates/keepalived/keepalived.conf.j2
+++ b/roles/keepalived/templates/keepalived/keepalived.conf.j2
@@ -7,7 +7,7 @@ global_defs {
 }
 
 {% for instance in keepalived.instances %}
-vrrp_instance {{ instance.tag }}4 {
+vrrp_instance {{ instance.name }} {
   state {{ instance.state }}
   priority {{ instance.priority }}
   smtp_alert
@@ -36,7 +36,7 @@ vrrp_instance {{ instance.tag }}4 {
 }
 
 {% if keepalived.pool[instance.name].ipv6 %}
-vrrp_instance {{ instance.tag }}6 {
+vrrp_instance {{ instance.name }}6 {
   state {{ instance.state }}
   priority {{ instance.priority }}
   smtp_alert
diff --git a/roles/radvd/handlers/main.yml b/roles/radvd/handlers/main.yml
index 39552d74..3ca4d567 100644
--- a/roles/radvd/handlers/main.yml
+++ b/roles/radvd/handlers/main.yml
@@ -1,5 +1,10 @@
 ---
+- name: check radvd status
+  service_facts:
+  listen: Restart radvd service
+
 - name: Restart radvd service
   service:
     name: radvd
     state: restarted
+  when: not ansible_check_mode and ansible_facts.services['bird']['state'] == 'running'
-- 
GitLab