summaryrefslogtreecommitdiffstats
path: root/roles/ands_network
diff options
context:
space:
mode:
Diffstat (limited to 'roles/ands_network')
-rw-r--r--roles/ands_network/defaults/main.yml1
-rw-r--r--roles/ands_network/tasks/nm_configure.yml39
-rw-r--r--roles/ands_network/tasks/nm_configure_connection.yml51
3 files changed, 91 insertions, 0 deletions
diff --git a/roles/ands_network/defaults/main.yml b/roles/ands_network/defaults/main.yml
new file mode 100644
index 0000000..139e8b3
--- /dev/null
+++ b/roles/ands_network/defaults/main.yml
@@ -0,0 +1 @@
+configure_network: "{{ ands_configure_network | default(false) }}"
diff --git a/roles/ands_network/tasks/nm_configure.yml b/roles/ands_network/tasks/nm_configure.yml
new file mode 100644
index 0000000..4482705
--- /dev/null
+++ b/roles/ands_network/tasks/nm_configure.yml
@@ -0,0 +1,39 @@
+
+- name: install needed network manager libs
+ yum: name='{{ item }}' state=installed
+ with_items:
+ - NetworkManager-glib
+ - nm-connection-editor
+ - libsemanage-python
+ - policycoreutils-python
+
+# Works in 2.4.3.0 with couple of upstream patches
+# Infiniband is not supported yet
+#- name: configure storage network interface
+# nmcli: type=inifinband conn_name=storage ifname="{{ ands_storage_interface }}" ip4="{{ ands_storage_cidr }}" state="present" autoconnect="yes"
+
+
+- name: configure storage nework
+ include_tasks: nm_configure_connection.yml
+ vars:
+ name: "storage"
+ iface: "{{ ands_storage_interface }}"
+ cidr: "{{ ands_storage_cidr }}"
+ force: true
+
+- name: configure openshift nework
+ include_tasks: nm_configure_connection.yml
+ vars:
+ name: "openshift"
+ iface: "{{ ands_inner_interface }}"
+ cidr: "{{ ands_openshift_cidr }}"
+ force: true
+
+- name: configure public nework
+ include_tasks: nm_configure_connection.yml
+ vars:
+ name: "storage"
+ iface: "{{ ands_public_interface }}"
+ cidr: "{{ ands_openshift_public_cidr }}"
+ alias: true
+
diff --git a/roles/ands_network/tasks/nm_configure_connection.yml b/roles/ands_network/tasks/nm_configure_connection.yml
new file mode 100644
index 0000000..18fc91e
--- /dev/null
+++ b/roles/ands_network/tasks/nm_configure_connection.yml
@@ -0,0 +1,51 @@
+- name: "detect nm connection corresponding to interface '{{ iface }}'"
+ shell: "nmcli d show {{ iface | quote }} | grep CONNECTION | cut -d ':' -f 2- | sed -E -e 's/^[[:space:]]+//' | grep '^[[:alpha:]]'"
+ register: conres
+ failed_when: false
+ changed_when: false
+
+
+- name: "check if the requested ip '{{ cidr }}' is present on the interface '{{ iface }}'"
+ set_fact:
+ ip_present: "{{ cidr | ipaddr('address') in ips }}"
+ vars:
+ eth: "{{ hostvars[inventory_hostname]['ansible_' + iface] | default({}) }}"
+ ipv4: "{{ eth['ipv4'] | default({}) }}"
+ q: "{{ eth | json_query('ipv4_secondaries[*].address') }}"
+ sec: "{{ ((q == ands_none) or (q == '')) | ternary([], q) }}"
+ ips: "{{ sec | union([ipv4.address]) }}"
+ when:
+ - conres.rc == 0
+# - eth.ipv4 is defined
+
+- name: "destroy connection '{{ conres.stdout }}' if ip does not match"
+ command: "nmcli connection delete {{ conres.stdout | quote }}"
+ register: delres
+ when:
+ - conres.rc == 0
+ - force | default(false)
+ - not (alias | default(false))
+ - not ip_present
+
+- name: "configure storage network interface '{{ iface }}' to '{{ cidr }}'"
+ command: "nmcli connection add type infiniband ifname {{ iface | quote }} con-name {{ name }} ip4 {{ cidr }}"
+ when:
+ - (conres.rc != 0) or (not (delres | skipped))
+ - (conres.rc != 0) or (not (alias | default(false)))
+
+- name: "add ip alias '{{ cidr }}' to connection '{{ conres.stdout }}' using interface '{{ iface }}'"
+ command: "nmcli connection modify {{ conres.stdout | quote }} +ipv4.address {{ cidr }}"
+ register: alres
+ when:
+ - alias | default(false)
+ - conres.rc == 0
+ - not ip_present
+
+
+- name: "add ip alias '{{ cidr }}' to network interface '{{ iface }}'"
+ command: "nmcli connection up {{ conres.stdout | quote }}"
+ register: alres
+ when:
+ - not(alres | skipped)
+ - alres | succeeded
+ - not ip_present