aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--os_net_config/__init__.py14
-rw-r--r--os_net_config/impl_ifcfg.py9
-rw-r--r--os_net_config/objects.py7
3 files changed, 28 insertions, 2 deletions
diff --git a/os_net_config/__init__.py b/os_net_config/__init__.py
index 5e1d091..e1bee26 100644
--- a/os_net_config/__init__.py
+++ b/os_net_config/__init__.py
@@ -125,3 +125,17 @@ class NetConfig(object):
def ifup(self, interface, iftype='interface'):
msg = 'running ifup on %s: %s' % (iftype, interface)
self.execute(msg, '/sbin/ifup', interface)
+
+ def ifrename(self, oldname, newname):
+ msg = 'renaming %s to %s: ' % (oldname, newname)
+ # ifdown isn't enough when renaming, we need the link down
+ for name in (oldname, newname):
+ if utils._is_active_nic(name):
+ self.execute(msg, '/sbin/ip',
+ 'link', 'set', 'dev', name, 'down')
+ self.execute(msg, '/sbin/ip',
+ 'link', 'set', 'dev', name, 'link', 'down')
+ self.execute(msg, '/sbin/ip',
+ 'link', 'set', 'dev', oldname, 'name', newname)
+ self.execute(msg, '/sbin/ip',
+ 'link', 'set', 'dev', newname, 'up')
diff --git a/os_net_config/impl_ifcfg.py b/os_net_config/impl_ifcfg.py
index 78433d8..47f32a6 100644
--- a/os_net_config/impl_ifcfg.py
+++ b/os_net_config/impl_ifcfg.py
@@ -51,6 +51,7 @@ class IfcfgNetConfig(os_net_config.NetConfig):
self.route_data = {}
self.bridge_data = {}
self.member_names = {}
+ self.renamed_interfaces = {}
logger.info('Ifcfg net config provider created.')
def child_members(self, name):
@@ -172,6 +173,11 @@ class IfcfgNetConfig(os_net_config.NetConfig):
if interface.routes:
self._add_routes(interface.name, interface.routes)
+ if interface.renamed:
+ logger.info("Interface %s being renamed to %s"
+ % (interface.hwname, interface.name))
+ self.renamed_interfaces[interface.hwname] = interface.name
+
def add_vlan(self, vlan):
"""Add a Vlan object to the net config object.
@@ -275,6 +281,9 @@ class IfcfgNetConfig(os_net_config.NetConfig):
for bridge in restart_bridges:
self.ifdown(bridge, iftype='bridge')
+ for oldname, newname in self.renamed_interfaces.iteritems():
+ self.ifrename(oldname, newname)
+
for location, data in update_files.iteritems():
self.write_config(location, data)
diff --git a/os_net_config/objects.py b/os_net_config/objects.py
index 8115b38..bb50f18 100644
--- a/os_net_config/objects.py
+++ b/os_net_config/objects.py
@@ -133,11 +133,14 @@ class _BaseOpts(object):
persist_mapping=False):
numbered_nic_names = _numbered_nics(nic_mapping)
self.hwaddr = None
+ self.hwname = None
+ self.renamed = False
if name in numbered_nic_names:
if persist_mapping:
self.name = name
- hwname = numbered_nic_names[name]
- self.hwaddr = utils.interface_mac(hwname)
+ self.hwname = numbered_nic_names[name]
+ self.hwaddr = utils.interface_mac(self.hwname)
+ self.renamed = True
else:
self.name = numbered_nic_names[name]
else: