aboutsummaryrefslogtreecommitdiffstats
path: root/patches/opnfv-fuel/0013-transplant-Generate-extra-interfaces-config-file.patch
blob: b6a351e4b56c6506b9c767dd73bebe576746f584 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
From: Josep Puigdemont <josep.puigdemont@enea.com>
Date: Wed, 4 May 2016 17:58:56 +0200
Subject: [PATCH] transplant: Generate extra interfaces config file

The DEA override may contain 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

FIXME: 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) should be disabled. For now, we assume the admin
interface is always "eth0".

Signed-off-by: Josep Puigdemont <josep.puigdemont@enea.com>
Signed-off-by: Alexandu Avadanii <alexandru.avadanii@enea.com>
---
 deploy/transplant_fuel_settings.py | 37 +++++++++++++++++++++++++++++++++++++
 1 file changed, 37 insertions(+)

diff --git a/deploy/transplant_fuel_settings.py b/deploy/transplant_fuel_settings.py
index e57a4fb..9a65cf6 100644
--- a/deploy/transplant_fuel_settings.py
+++ b/deploy/transplant_fuel_settings.py
@@ -11,10 +11,14 @@
 import sys
 import io
 import yaml
+import re
+import os
 from dea import DeploymentEnvironmentAdapter
 
 from common import (
     check_file_exists,
+    exec_cmd,
+    log,
 )
 
 ASTUTE_YAML = '/etc/fuel/astute.yaml'
@@ -35,15 +39,45 @@ def parse_arguments():
     check_file_exists(dea_file)
     return dea_file
 
+def write_ifcfg_file(key, fuel_conf):
+    config = ('BOOTPROTO=none\n'
+              'ONBOOT=yes\n'
+              'TYPE=Ethernet\n'
+              'NM_CONTROLLED=yes\n')
+    for skey in ('ipaddress', 'device', 'netmask', 'gateway'):
+        if not fuel_conf[key].get(skey):
+            log('Warning: missing key %s for %s' % (skey, key))
+            config += '%s=\n' % skey.upper()
+        elif skey == 'ipaddress':
+            config += 'IPADDR=%s\n' % fuel_conf[key][skey]
+        else:
+            config += '%s=%s\n' % (skey.upper(), fuel_conf[key][skey])
+
+    fname = os.path.join('/etc/sysconfig/network-scripts/',
+                         key.lower().replace('_','-'))
+    with open(fname, 'wc') as f:
+        f.write(config)
 
 def transplant(dea, astute):
     fuel_conf = dea.get_fuel_config()
+    require_network_restart = False
     for key in fuel_conf.iterkeys():
         if key == 'ADMIN_NETWORK':
             for skey in fuel_conf[key].iterkeys():
                 astute[key][skey] = fuel_conf[key][skey]
+        elif re.match('^IFCFG', key):
+            log('Adding interface configuration for: %s' % key.lower())
+            require_network_restart = True
+            write_ifcfg_file(key, fuel_conf)
+            if astute.has_key(key):
+                astute.pop(key, None)
         else:
             astute[key] = fuel_conf[key]
+    if require_network_restart:
+        admin_ifcfg = '/etc/sysconfig/network-scripts/ifcfg-eth0'
+        exec_cmd('echo "DEFROUTE=no" >> %s' % admin_ifcfg)
+        log('At least one interface was reconfigured, restart network manager')
+        exec_cmd('systemctl restart network')
     return astute
 
 
@@ -51,11 +85,14 @@ def main():
     dea_file = parse_arguments()
     check_file_exists(ASTUTE_YAML)
     dea = DeploymentEnvironmentAdapter(dea_file)
+    log('Reading astute file %s' % ASTUTE_YAML)
     with io.open(ASTUTE_YAML) as stream:
         astute = yaml.load(stream)
+    log('Initiating transplant')
     transplant(dea, astute)
     with io.open(ASTUTE_YAML, 'w') as stream:
         yaml.dump(astute, stream, default_flow_style=False)
+    log('Transplant done')
 
 
 if __name__ == '__main__':