aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlexandru Avadanii <Alexandru.Avadanii@enea.com>2016-05-09 16:16:49 +0200
committerAlexandru Avadanii <Alexandru.Avadanii@enea.com>2016-05-10 08:37:25 +0000
commit197b61c0ba48d19256d5a6cfff4a34371308bfd3 (patch)
treef2ee93767006fe3aead4c5e3d98c9bc29bdbd58c
parent87c3637d0c28c0640114414cc378bfff24d500c3 (diff)
deploy/reap.py: Dump extra interfaces information.
Since on AArch64, Ubuntu local mirror lacks arm64 packages (see [1]), Fuel master requires internet connectivity during deploy, and hence a way to setup such a public (extra) interface automatically. Previous commit "transplant: Generate extra interfaces config file" introduced support for passing this information via DEA (override), which may define a IFCGF_<interface> section in its 'fuel:' section, containing the necessary keys to produce a ifcfg-<interface> file, like in this example: fuel: IFCFG_ETH1: device: eth1 ipaddress: 10.0.1.10 netmask: 255.255.255.0 gateway: 10.0.1.254 In order for Network Manager to use the newly added interfaces for outgoing traffic and honor their GATEWAY setting (e.g. if we just added one public interface), the default route on admin iface (most of the time called eth0) is disabled when extra interfaces are present. FIXME: Only supports lowercase interface names, but so does Fuel, see related bug report [2]. [1] https://jira.opnfv.org/browse/ARMBAND-35 [2] https://jira.opnfv.org/browse/FUEL-136 Change-Id: Idd6fe95a5a73ec172eca17cfd96f23b1a1bc2bee Signed-off-by: Alexandu Avadanii <alexandru.avadanii@enea.com> Signed-off-by: Josep Puigdemont <josep.puigdemont@enea.com> (cherry picked from commit 129e0808397100818df506d854d1b8186a023019)
-rw-r--r--patches/opnfv-fuel/0027-deploy-reap.py-Dump-extra-interfaces-information.patch90
1 files changed, 90 insertions, 0 deletions
diff --git a/patches/opnfv-fuel/0027-deploy-reap.py-Dump-extra-interfaces-information.patch b/patches/opnfv-fuel/0027-deploy-reap.py-Dump-extra-interfaces-information.patch
new file mode 100644
index 00000000..fba7e713
--- /dev/null
+++ b/patches/opnfv-fuel/0027-deploy-reap.py-Dump-extra-interfaces-information.patch
@@ -0,0 +1,90 @@
+From: Alexandru Avadanii <Alexandru.Avadanii@enea.com>
+Date: Wed, 4 May 2016 18:31:09 +0200
+Subject: [PATCH] deploy/reap.py: Dump extra interfaces information.
+
+Since on AArch64, Ubuntu local mirror lacks arm64 packages (see [1]),
+Fuel master requires internet connectivity during deploy, and hence
+a way to setup such a public (extra) interface automatically.
+
+Previous commit "transplant: Generate extra interfaces config file"
+introduced support for passing this information via DEA (override),
+which may define a IFCGF_<interface> section in its 'fuel:'
+section, containing the necessary keys to produce a ifcfg-<interface>
+file, like in this example:
+
+fuel:
+ IFCFG_ETH1:
+ device: eth1
+ ipaddress: 10.0.1.10
+ netmask: 255.255.255.0
+ gateway: 10.0.1.254
+
+In order for Network Manager to use the newly added interfaces
+for outgoing traffic and honor their GATEWAY setting (e.g. if we just
+added one public interface), the default route on admin iface (most of
+the time called eth0) is disabled when extra interfaces are present.
+
+FIXME: Only supports lowercase interface names, but so does Fuel,
+see related bug report [2].
+
+[1] https://jira.opnfv.org/browse/ARMBAND-35
+[2] https://jira.opnfv.org/browse/FUEL-136
+
+Signed-off-by: Alexandu Avadanii <alexandru.avadanii@enea.com>
+Signed-off-by: Josep Puigdemont <josep.puigdemont@enea.com>
+---
+ deploy/reap.py | 34 ++++++++++++++++++++++++++++++++++
+ 1 file changed, 34 insertions(+)
+
+diff --git a/deploy/reap.py b/deploy/reap.py
+index bf64d40..6feaf17 100755
+--- a/deploy/reap.py
++++ b/deploy/reap.py
+@@ -15,6 +15,8 @@ import yaml
+ import glob
+ import shutil
+ import tempfile
++import re
++import netaddr
+
+ from common import (
+ N,
+@@ -245,6 +247,38 @@ class Reap(object):
+ if key not in ['ipaddress', 'netmask',
+ 'dhcp_pool_start', 'dhcp_pool_end']:
+ del fuel['ADMIN_NETWORK'][key]
++
++ ## FIXME(armband): Factor in support for adding public/other interfaces.
++ ## TODO: Following block expects interface name(s) to be lowercase only
++ interfaces_list = exec_cmd('ip -o -4 a | grep -e "e[nt][hopsx].*"')
++ for interface in re.split('\n', interfaces_list):
++ # Sample output line from above cmd:
++ # 3: eth1 inet 10.0.2.10/24 scope global eth1 valid_lft forever ...
++ ifcfg = re.split(r'\s+', interface)
++ ifcfg_name = ifcfg[1]
++ ifcfg_ipaddr = ifcfg[3]
++
++ # Filter out admin interface (device name is not known, match IP)
++ current_network = netaddr.IPNetwork(ifcfg_ipaddr)
++ if str(current_network.ip) == fuel['ADMIN_NETWORK']['ipaddress']:
++ continue
++
++ # Read ifcfg-* network interface config file, write IFCFG_<IFNAME>
++ ifcfg_sec = 'IFCFG_%s' % ifcfg_name.upper()
++ fuel[ifcfg_sec] = {}
++ ifcfg_data = {}
++ ifcfg_f = ('/etc/sysconfig/network-scripts/ifcfg-%s' % ifcfg_name)
++ with open(ifcfg_f) as f:
++ for line in f:
++ (key, val) = line.split('=')
++ ifcfg_data[key.lower()] = val.rstrip()
++
++ # Keep only needed info (e.g. filter-out type=Ethernet).
++ fuel[ifcfg_sec]['ipaddress'] = ifcfg_data['ipaddr']
++ fuel[ifcfg_sec]['device'] = ifcfg_data['device']
++ fuel[ifcfg_sec]['netmask'] = str(current_network.netmask)
++ fuel[ifcfg_sec]['gateway'] = ifcfg_data['gateway']
++
+ self.write_yaml(self.dea_file, {'fuel': fuel})
+
+ def reap_network_settings(self):