diff options
author | Steven Hardy <shardy@redhat.com> | 2015-01-26 21:09:59 +0000 |
---|---|---|
committer | Steven Hardy <shardy@redhat.com> | 2015-03-05 13:11:09 +0000 |
commit | 3f36600d1c7159f3ba00a2449e381cd32239af4e (patch) | |
tree | eb11dc1d0ed4ecbc4b99c4a81e167adec88f7270 | |
parent | 3304fa066d1dae93df0f597c1709c955e3857a5d (diff) |
Enable renaming of interfaces without reboot
When using persist_mapping to rename nics, you can either use
--no-activate then reboot, or with this patch, allow activation
and we'll take the device links down and rename on the fly avoiding
the need for a reboot.
Change-Id: Ife9486c9f5447e9c7a55f90ba075e22b6344ad67
-rw-r--r-- | os_net_config/__init__.py | 14 | ||||
-rw-r--r-- | os_net_config/impl_ifcfg.py | 9 | ||||
-rw-r--r-- | os_net_config/objects.py | 7 |
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: |