aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlexandru Avadanii <Alexandru.Avadanii@enea.com>2016-05-04 18:31:09 +0200
committerAlexandru Avadanii <Alexandru.Avadanii@enea.com>2016-09-01 14:13:31 +0000
commitd6f49d16237333c1793d4296c43ad83892534db2 (patch)
treea05c933d8b7bdfe7b6f575ad96d1380e4b298d3c
parent00c404ef7066e31adfc409a15d9e0e118e0b491a (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: I14b023b2b9b4c7d9b9f390d4f86f693c176efde0 Signed-off-by: Josep Puigdemont <josep.puigdemont@enea.com> Signed-off-by: Alexandru Avadanii <Alexandru.Avadanii@enea.com> (cherry picked from commit 888c45b1ab7f70f226e3dc2c81725f1c6397afff)
-rw-r--r--deploy/reap.py36
1 files changed, 36 insertions, 0 deletions
diff --git a/deploy/reap.py b/deploy/reap.py
index 7d996314b..eb02fe25d 100644
--- a/deploy/reap.py
+++ b/deploy/reap.py
@@ -16,6 +16,8 @@ import yaml
import glob
import shutil
import tempfile
+import re
+import netaddr
from common import (
N,
@@ -253,6 +255,40 @@ class Reap(object):
if key not in ['ipaddress', 'netmask',
'dhcp_pool_start', 'dhcp_pool_end', 'ssh_network']:
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:
+ if line.startswith('#'):
+ continue
+ (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):