From 6bc3a3ac71e11fb6459df715536fec373c123a97 Mon Sep 17 00:00:00 2001
From: "Suren A. Chilingaryan" <csa@suren.me>
Date: Wed, 7 Mar 2018 07:03:57 +0100
Subject: Streamlined networking, OpenShift recovery, Ganesha

---
 roles/ands_network/README                 |  8 +++++
 roles/ands_network/tasks/common.yml       | 49 +++++++++++++++++++++++++++++++
 roles/ands_network/tasks/install_post.yml |  9 ++++++
 roles/ands_network/tasks/install_pre.yml  | 15 ++++++++++
 roles/ands_network/tasks/main.yml         |  3 ++
 roles/ands_network/tasks/maintain.yml     |  9 ++++++
 6 files changed, 93 insertions(+)
 create mode 100644 roles/ands_network/README
 create mode 100644 roles/ands_network/tasks/common.yml
 create mode 100644 roles/ands_network/tasks/install_post.yml
 create mode 100644 roles/ands_network/tasks/install_pre.yml
 create mode 100644 roles/ands_network/tasks/main.yml
 create mode 100644 roles/ands_network/tasks/maintain.yml

(limited to 'roles/ands_network')

diff --git a/roles/ands_network/README b/roles/ands_network/README
new file mode 100644
index 0000000..dfd029a
--- /dev/null
+++ b/roles/ands_network/README
@@ -0,0 +1,8 @@
+ We need to stop keepalived before provisioning OpenShift and scalling the cluster. This will, however, will
+ prevent nodes from communicating with masters. Therefore, we add IP of the first configure master node in 
+ /etc/hosts.
+ 
+ We do the same if for some reason the routing is currently off, but we still want to provision OpenShift 
+ projects. Of course, we don't need to turn off keepalived in this case, just temporarily add an ip of the
+ first master.
+ 
diff --git a/roles/ands_network/tasks/common.yml b/roles/ands_network/tasks/common.yml
new file mode 100644
index 0000000..384029f
--- /dev/null
+++ b/roles/ands_network/tasks/common.yml
@@ -0,0 +1,49 @@
+#- name: Remove obsolte hostnames from /etc/hosts
+#  lineinfile: dest="/etc/hosts" regexp="{{ hostvars[item]['openshift_hostname'] }}" state="absent"
+#  when: 
+#    - hostvars[item]['openshift_hostname'] | default(ands_none) != ands_none
+#    - hostvars[item]['ands_facts_configured'] is defined
+#  with_inventory_hostnames:
+#    - nodes
+#    - new_nodes
+
+
+# This will not work properly unless 'ands_facts' are executed on all nodes.... This is checked by evaluating if 'ands_openshift_fqdn' is defined
+- name: Configure all cluster hostnames in /etc/hosts
+  lineinfile: dest="/etc/hosts" line="{{ ip }} {{ fqdn }} {{ hostname }}" regexp="{{ fqdn }}" state="present"
+  when: 
+    - hostvars[item]['ands_openshift_fqdn'] | default(ands_none) != ands_none
+    - hostvars[item]['ands_facts_configured'] is defined
+  vars:
+    ip: "{{ hostvars[item]['ands_openshift_ip'] }}"
+    fqdn: "{{ hostvars[item]['ands_openshift_fqdn'] }}"
+    hostname: "{{ fqdn.split('.')[0] }}"
+  with_inventory_hostnames:
+    - nodes
+    - new_nodes
+
+- name: Configure all storage ips in /etc/hosts
+  lineinfile: dest="/etc/hosts" line="{{ ip }} {{ hostname }}" regexp="{{ hostname }}" state="present"
+  when: 
+    - hostvars[item]['ands_storage_network'] | default(ands_none) != ands_none
+    - hostvars[item]['ands_facts_configured'] is defined
+  vars:
+    ip: "{{ hostvars[item]['ands_storage_ip'] }}"
+    hostname: "{{ hostvars[item]['ands_hostname_storage'] }}"
+  with_inventory_hostnames:
+    - storage_nodes
+    - new_storage_nodes
+
+
+- name: Provision /etc/hosts to ensure that all masters servers are accessing Master API on loopback device
+  lineinfile: dest="/etc/hosts" line="127.0.0.1 {{ openshift_master_cluster_hostname }}" regexp=".*{{ openshift_master_cluster_hostname }}$" state="present"
+  when: ('masters' in group_names or 'new_masters' in group_names)
+  register: result
+
+- name: Provision /etc/hosts to ensure that all masters servers are accessing Master API on loopback device
+  lineinfile: dest="/etc/hosts" line="{{ ands_inner_lb_ip }} {{ openshift_master_cluster_hostname }}" regexp=".*{{ openshift_master_cluster_hostname }}$" state="present"
+  when: (result | skipped) and (ands_inner_lb | default(false))
+
+- name: Register openshift_dns_ip in /etc/hosts
+  lineinfile: dest="/etc/hosts" line="{{ openshift_dns_ip }} openshift_dns_ip" regexp="openshift_dns_ip$" state="present"
+
diff --git a/roles/ands_network/tasks/install_post.yml b/roles/ands_network/tasks/install_post.yml
new file mode 100644
index 0000000..0bfef34
--- /dev/null
+++ b/roles/ands_network/tasks/install_post.yml
@@ -0,0 +1,9 @@
+- name: Start keepalived
+  service: name=keepalived state=started enabled=yes
+  when: ('masters' in group_names) or ('new_masters' in group_names)
+
+- name: Provision /etc/hosts to ensure that all hosts accessing masters servers appropriately
+  lineinfile: dest="/etc/hosts" line="{{ ands_inner_lb_ip | default('') }} {{ openshift_master_cluster_hostname }}" regexp=".*{{ openshift_master_cluster_hostname }}$" state="{{ state }}"
+  when: ('masters' not in group_names and 'new_masters' not in group_names)
+  vars:
+    state: "{{ ands_inner_lb | default(false) | ternary('present', 'absent') }}"
diff --git a/roles/ands_network/tasks/install_pre.yml b/roles/ands_network/tasks/install_pre.yml
new file mode 100644
index 0000000..f555d1b
--- /dev/null
+++ b/roles/ands_network/tasks/install_pre.yml
@@ -0,0 +1,15 @@
+- name: Temporary provision /etc/hosts with Masters IP.
+  lineinfile: dest="/etc/hosts" line="{{ ands_openshift_network | ipaddr(node_id) | ipaddr('address') }} {{ openshift_master_cluster_hostname }}" regexp=".*{{ openshift_master_cluster_hostname }}$" state="present"
+  when: ('masters' not in group_names)
+  vars:
+    node_id: "{{ hostvars[groups['masters'][0]]['ands_host_id'] }}"
+
+- name: Check if keepalived is installed
+  stat: path="/etc/sysconfig/keepalived"
+  register: keepalived_result
+
+- name: Stop keepalived
+  service: name=keepalived state=stopped
+  when: 
+    - keepalived_result.stat.exists
+    - ('masters' in group_names) or ('new_masters' in group_names)
diff --git a/roles/ands_network/tasks/main.yml b/roles/ands_network/tasks/main.yml
new file mode 100644
index 0000000..0bc913a
--- /dev/null
+++ b/roles/ands_network/tasks/main.yml
@@ -0,0 +1,3 @@
+---
+- name: "Configuring network"
+  include_tasks: "{{ action | default('common') }}.yml"
diff --git a/roles/ands_network/tasks/maintain.yml b/roles/ands_network/tasks/maintain.yml
new file mode 100644
index 0000000..a7af597
--- /dev/null
+++ b/roles/ands_network/tasks/maintain.yml
@@ -0,0 +1,9 @@
+- name: Ensure keepalived is running on master nodes
+  service: name=keepalived state=started enabled=yes
+  when: ('masters' in group_names)
+
+- name: Provision /etc/hosts to ensure that all hosts accessing masters servers appropriately
+  lineinfile: dest="/etc/hosts" line="{{ ands_inner_lb_ip | default('') }} {{ openshift_master_cluster_hostname }}" regexp=".*{{ openshift_master_cluster_hostname }}$" state="{{ state }}"
+  when: ('masters' not in group_names and 'new_masters' not in group_names)
+  vars:
+    state: "{{ ands_inner_lb | default(false) | ternary('present', 'absent') }}"
-- 
cgit v1.2.3