From 212db4ee0e1941c7dd73569c5b7369c96f7a8752 Mon Sep 17 00:00:00 2001
From: Fatih Degirmenci <fatih.degirmenci@ericsson.com>
Date: Thu, 30 Mar 2017 14:11:59 +0200
Subject: [PATCH] xci: Networking fixes to introduce role and interface var

Network configuration task and accompanied handler put into a role
and handler is converted to task.

Distro specific var, interface, is introduced to ensure we do not
hardcode the interface which might not be available.

Update the templates accordingly.

Change-Id: I667620fe22c93a9b20a1d8c1b7b0051d7647b591
Signed-off-by: Fatih Degirmenci <fatih.degirmenci@ericsson.com>
---
 xci/playbooks/configure-opnfvhost.yml              | 13 ++--------
 .../roles/configure-network/tasks/main.yml         | 16 ++++++++++++
 xci/template/compute.interface.j2                  | 30 +++++++++++-----------
 xci/template/controller.interface.j2               | 30 +++++++++++-----------
 xci/template/opnfv.interface.j2                    | 30 +++++++++++-----------
 xci/var/Debian.yml                                 |  3 ++-
 6 files changed, 65 insertions(+), 57 deletions(-)
 create mode 100644 xci/playbooks/roles/configure-network/tasks/main.yml

diff --git a/xci/playbooks/configure-opnfvhost.yml b/xci/playbooks/configure-opnfvhost.yml
index 868052d4..abebd1d7 100644
--- a/xci/playbooks/configure-opnfvhost.yml
+++ b/xci/playbooks/configure-opnfvhost.yml
@@ -48,18 +48,9 @@
       shell: "/bin/cp -rf {{OPNFV_RELENG_PATH}}/prototypes/xci/file/setup-openstack.yml {{OPENSTACK_OSA_PATH}}/playbooks"
     - name: copy OPNFV role requirements
       shell: "/bin/cp -rf {{OPNFV_RELENG_PATH}}/prototypes/xci/file/ansible-role-requirements.yml {{OPENSTACK_OSA_PATH}}"
+  roles:
     # TODO: this only works for ubuntu/xenial and need to be adjusted for other distros
-    # TODO: convert this into a role
-    - name: configure network for ubuntu xenial
-      template:
-        src: ../template/opnfv.interface.j2
-        dest: /etc/network/interfaces
-      notify:
-        - restart ubuntu xenial network service
-      when: ansible_distribution_release == "xenial"
-  handlers:
-    - name: restart ubuntu xenial network service
-      shell: "/sbin/ifconfig ens3 0 &&/sbin/ifdown -a && /sbin/ifup -a"
+    - { role: configure-network, when: ansible_distribution_release == "xenial", src: "../template/opnfv.interface.j2", dest: "/etc/network/interfaces" }
 - hosts: localhost
   remote_user: root
   tasks:
diff --git a/xci/playbooks/roles/configure-network/tasks/main.yml b/xci/playbooks/roles/configure-network/tasks/main.yml
new file mode 100644
index 00000000..8bc84822
--- /dev/null
+++ b/xci/playbooks/roles/configure-network/tasks/main.yml
@@ -0,0 +1,16 @@
+---
+# SPDX-license-identifier: Apache-2.0
+##############################################################################
+# Copyright (c) 2017 Ericsson AB and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+##############################################################################
+# TODO: this role needs to be adjusted for different distros
+- name: configure network for {{ ansible_os_family }} on interface {{ interface }}
+  template:
+    src: "{{ src }}"
+    dest: "{{ dest }}"
+- name: restart ubuntu xenial network service
+  shell: "/sbin/ifconfig {{ interface }} 0 &&/sbin/ifdown -a && /sbin/ifup -a"
diff --git a/xci/template/compute.interface.j2 b/xci/template/compute.interface.j2
index 1719f6a0..0c5147c4 100644
--- a/xci/template/compute.interface.j2
+++ b/xci/template/compute.interface.j2
@@ -7,23 +7,23 @@ iface lo inet loopback
 
 
 # Physical interface
-auto ens3
-iface ens3 inet manual
+auto {{ interface }}
+iface {{ interface }} inet manual
 
 # Container/Host management VLAN interface
-auto ens3.10
-iface ens3.10 inet manual
-    vlan-raw-device ens3
+auto {{ interface }}.10
+iface {{ interface }}.10 inet manual
+    vlan-raw-device {{ interface }}
 
 # OpenStack Networking VXLAN (tunnel/overlay) VLAN interface
-auto ens3.30
-iface ens3.30 inet manual
-    vlan-raw-device ens3
+auto {{ interface }}.30
+iface {{ interface }}.30 inet manual
+    vlan-raw-device {{ interface }}
 
 # Storage network VLAN interface (optional)
-auto ens3.20
-iface ens3.20 inet manual
-    vlan-raw-device ens3
+auto {{ interface }}.20
+iface {{ interface }}.20 inet manual
+    vlan-raw-device {{ interface }}
 
 # Container/Host management bridge
 auto br-mgmt
@@ -31,7 +31,7 @@ iface br-mgmt inet static
     bridge_stp off
     bridge_waitport 0
     bridge_fd 0
-    bridge_ports ens3.10
+    bridge_ports {{ interface }}.10
     address {{host_info[inventory_hostname].MGMT_IP}}
     netmask 255.255.252.0
 
@@ -41,7 +41,7 @@ iface br-vxlan inet static
     bridge_stp off
     bridge_waitport 0
     bridge_fd 0
-    bridge_ports ens3.30
+    bridge_ports {{ interface }}.30
     address {{host_info[inventory_hostname].VXLAN_IP}}
     netmask 255.255.252.0
 
@@ -51,7 +51,7 @@ iface br-vlan inet static
     bridge_stp off
     bridge_waitport 0
     bridge_fd 0
-    bridge_ports ens3
+    bridge_ports {{ interface }}
     address {{host_info[inventory_hostname].VLAN_IP}}
     netmask 255.255.255.0
     gateway 192.168.122.1
@@ -81,6 +81,6 @@ iface br-storage inet static
     bridge_stp off
     bridge_waitport 0
     bridge_fd 0
-    bridge_ports ens3.20
+    bridge_ports {{ interface }}.20
     address {{host_info[inventory_hostname].STORAGE_IP}}
     netmask 255.255.252.0
diff --git a/xci/template/controller.interface.j2 b/xci/template/controller.interface.j2
index 74aeea99..fbaa8b8d 100644
--- a/xci/template/controller.interface.j2
+++ b/xci/template/controller.interface.j2
@@ -6,23 +6,23 @@ auto lo
 iface lo inet loopback
 
 # Physical interface
-auto ens3
-iface ens3 inet manual
+auto {{ interface }}
+iface {{ interface }} inet manual
 
 # Container/Host management VLAN interface
-auto ens3.10
-iface ens3.10 inet manual
-    vlan-raw-device ens3
+auto {{ interface }}.10
+iface {{ interface }}.10 inet manual
+    vlan-raw-device {{ interface }}
 
 # OpenStack Networking VXLAN (tunnel/overlay) VLAN interface
-auto ens3.30
-iface ens3.30 inet manual
-    vlan-raw-device ens3
+auto {{ interface }}.30
+iface {{ interface }}.30 inet manual
+    vlan-raw-device {{ interface }}
 
 # Storage network VLAN interface (optional)
-auto ens3.20
-iface ens3.20 inet manual
-    vlan-raw-device ens3
+auto {{ interface }}.20
+iface {{ interface }}.20 inet manual
+    vlan-raw-device {{ interface }}
 
 # Container/Host management bridge
 auto br-mgmt
@@ -30,7 +30,7 @@ iface br-mgmt inet static
     bridge_stp off
     bridge_waitport 0
     bridge_fd 0
-    bridge_ports ens3.10
+    bridge_ports {{ interface }}.10
     address {{host_info[inventory_hostname].MGMT_IP}}
     netmask 255.255.252.0
 
@@ -46,7 +46,7 @@ iface br-vxlan inet manual
     bridge_stp off
     bridge_waitport 0
     bridge_fd 0
-    bridge_ports ens3.30
+    bridge_ports {{ interface }}.30
 
 # OpenStack Networking VLAN bridge
 auto br-vlan
@@ -54,7 +54,7 @@ iface br-vlan inet static
     bridge_stp off
     bridge_waitport 0
     bridge_fd 0
-    bridge_ports ens3
+    bridge_ports {{ interface }}
     address {{host_info[inventory_hostname].VLAN_IP}}
     netmask 255.255.255.0
     gateway 192.168.122.1
@@ -66,6 +66,6 @@ iface br-storage inet static
     bridge_stp off
     bridge_waitport 0
     bridge_fd 0
-    bridge_ports ens3.20
+    bridge_ports {{ interface }}.20
     address {{host_info[inventory_hostname].STORAGE_IP}}
     netmask 255.255.252.0
diff --git a/xci/template/opnfv.interface.j2 b/xci/template/opnfv.interface.j2
index 74aeea99..fbaa8b8d 100644
--- a/xci/template/opnfv.interface.j2
+++ b/xci/template/opnfv.interface.j2
@@ -6,23 +6,23 @@ auto lo
 iface lo inet loopback
 
 # Physical interface
-auto ens3
-iface ens3 inet manual
+auto {{ interface }}
+iface {{ interface }} inet manual
 
 # Container/Host management VLAN interface
-auto ens3.10
-iface ens3.10 inet manual
-    vlan-raw-device ens3
+auto {{ interface }}.10
+iface {{ interface }}.10 inet manual
+    vlan-raw-device {{ interface }}
 
 # OpenStack Networking VXLAN (tunnel/overlay) VLAN interface
-auto ens3.30
-iface ens3.30 inet manual
-    vlan-raw-device ens3
+auto {{ interface }}.30
+iface {{ interface }}.30 inet manual
+    vlan-raw-device {{ interface }}
 
 # Storage network VLAN interface (optional)
-auto ens3.20
-iface ens3.20 inet manual
-    vlan-raw-device ens3
+auto {{ interface }}.20
+iface {{ interface }}.20 inet manual
+    vlan-raw-device {{ interface }}
 
 # Container/Host management bridge
 auto br-mgmt
@@ -30,7 +30,7 @@ iface br-mgmt inet static
     bridge_stp off
     bridge_waitport 0
     bridge_fd 0
-    bridge_ports ens3.10
+    bridge_ports {{ interface }}.10
     address {{host_info[inventory_hostname].MGMT_IP}}
     netmask 255.255.252.0
 
@@ -46,7 +46,7 @@ iface br-vxlan inet manual
     bridge_stp off
     bridge_waitport 0
     bridge_fd 0
-    bridge_ports ens3.30
+    bridge_ports {{ interface }}.30
 
 # OpenStack Networking VLAN bridge
 auto br-vlan
@@ -54,7 +54,7 @@ iface br-vlan inet static
     bridge_stp off
     bridge_waitport 0
     bridge_fd 0
-    bridge_ports ens3
+    bridge_ports {{ interface }}
     address {{host_info[inventory_hostname].VLAN_IP}}
     netmask 255.255.255.0
     gateway 192.168.122.1
@@ -66,6 +66,6 @@ iface br-storage inet static
     bridge_stp off
     bridge_waitport 0
     bridge_fd 0
-    bridge_ports ens3.20
+    bridge_ports {{ interface }}.20
     address {{host_info[inventory_hostname].STORAGE_IP}}
     netmask 255.255.252.0
diff --git a/xci/var/Debian.yml b/xci/var/Debian.yml
index 6d03e0f3..d13d0809 100644
--- a/xci/var/Debian.yml
+++ b/xci/var/Debian.yml
@@ -7,4 +7,5 @@
 # which accompanies this distribution, and is available at
 # http://www.apache.org/licenses/LICENSE-2.0
 ##############################################################################
-# this is placeholder and left blank intentionally to complete later on
+# this is the interface the VM nodes are connected to libvirt network "default"
+interface: "ens3"
-- 
2.16.6