Use WMI to rename adapter
Currently renaming the adapter on windows 22 core does not cause an error but also has no effect INFO cloudbaseinit.plugins.common.networkconfig [-] Renaming network adapter "Ethernet" to "some-adapter-name" ... ERROR cloudbaseinit.init cloudbaseinit.exception.ItemNotFoundException: Network interface with name "some-adapter-name" not found Change-Id: I6b05b313742dd6ff2553dd67b374a8aa4fefd0a7
This commit is contained in:
parent
036aa1641b
commit
69cf347961
|
@ -858,13 +858,12 @@ class WindowsUtils(base.BaseOSUtils):
|
||||||
'value "%(mtu)s" failed' % {'name': name, 'mtu': mtu})
|
'value "%(mtu)s" failed' % {'name': name, 'mtu': mtu})
|
||||||
|
|
||||||
def rename_network_adapter(self, old_name, new_name):
|
def rename_network_adapter(self, old_name, new_name):
|
||||||
base_dir = self._get_system_dir()
|
net_adapter = self._get_network_adapter(old_name)
|
||||||
netsh_path = os.path.join(base_dir, 'netsh.exe')
|
net_adapter.NetConnectionID = new_name
|
||||||
|
try:
|
||||||
args = [netsh_path, "interface", "set", "interface",
|
net_adapter.put()
|
||||||
'name=%s' % old_name, 'newname=%s' % new_name]
|
self._get_network_adapter(new_name)
|
||||||
(out, err, ret_val) = self.execute_process(args, shell=False)
|
except Exception:
|
||||||
if ret_val:
|
|
||||||
raise exception.CloudbaseInitException(
|
raise exception.CloudbaseInitException(
|
||||||
'Renaming interface "%(old_name)s" to "%(new_name)s" '
|
'Renaming interface "%(old_name)s" to "%(new_name)s" '
|
||||||
'failed' % {'old_name': old_name, 'new_name': new_name})
|
'failed' % {'old_name': old_name, 'new_name': new_name})
|
||||||
|
|
|
@ -839,28 +839,23 @@ class TestWindowsUtils(testutils.CloudbaseInitTestBase):
|
||||||
self._test_set_static_network_config(ipv6=True)
|
self._test_set_static_network_config(ipv6=True)
|
||||||
|
|
||||||
@mock.patch('cloudbaseinit.osutils.windows.WindowsUtils'
|
@mock.patch('cloudbaseinit.osutils.windows.WindowsUtils'
|
||||||
'.execute_process')
|
'._get_network_adapter')
|
||||||
@mock.patch('cloudbaseinit.osutils.windows.WindowsUtils'
|
def _test_rename_network_adapter(self, mock_get_network_adapter):
|
||||||
'._get_system_dir')
|
|
||||||
def _test_rename_network_adapter(self, should_fail, mock_get_system_dir,
|
|
||||||
mock_execute_process):
|
|
||||||
base_dir = "fake path"
|
|
||||||
old_name = "fake_old"
|
old_name = "fake_old"
|
||||||
new_name = "fake_new"
|
new_name = "fake_new"
|
||||||
mock_get_system_dir.return_value = base_dir
|
|
||||||
ret_val = 1 if should_fail else 0
|
|
||||||
mock_execute_process.return_value = (None, None, ret_val)
|
|
||||||
|
|
||||||
if should_fail:
|
conn = self._wmi_mock.WMI
|
||||||
with self.assertRaises(exception.CloudbaseInitException):
|
adapter = mock.Mock()
|
||||||
self._winutils.rename_network_adapter(old_name, new_name)
|
adapter.Name = mock.sentinel.old_name
|
||||||
else:
|
mock_get_network_adapter.return_value = adapter
|
||||||
self._winutils.rename_network_adapter(old_name, new_name)
|
|
||||||
|
|
||||||
mock_get_system_dir.assert_called_once_with()
|
self._winutils.rename_network_adapter(old_name, new_name)
|
||||||
args = [os.path.join(base_dir, "netsh.exe"), "interface", "set",
|
adapter.put.assert_called()
|
||||||
"interface", 'name=%s' % old_name, 'newname=%s' % new_name]
|
self.assertEqual(new_name, adapter.NetConnectionID)
|
||||||
mock_execute_process.assert_called_once_with(args, shell=False)
|
|
||||||
|
mock_get_network_adapter.assert_called_once_with(old_name)
|
||||||
|
|
||||||
|
conn.Win32_NetworkAdapter.called_with(old_name)
|
||||||
|
|
||||||
def _test_get_config_key_name(self, section):
|
def _test_get_config_key_name(self, section):
|
||||||
response = self._winutils._get_config_key_name(section)
|
response = self._winutils._get_config_key_name(section)
|
||||||
|
@ -877,10 +872,7 @@ class TestWindowsUtils(testutils.CloudbaseInitTestBase):
|
||||||
self._test_get_config_key_name(None)
|
self._test_get_config_key_name(None)
|
||||||
|
|
||||||
def test_rename_network_adapter(self):
|
def test_rename_network_adapter(self):
|
||||||
self._test_rename_network_adapter(False)
|
self._test_rename_network_adapter()
|
||||||
|
|
||||||
def test_rename_network_adapter_fail(self):
|
|
||||||
self._test_rename_network_adapter(True)
|
|
||||||
|
|
||||||
@mock.patch('cloudbaseinit.osutils.windows.WindowsUtils'
|
@mock.patch('cloudbaseinit.osutils.windows.WindowsUtils'
|
||||||
'._get_config_key_name')
|
'._get_config_key_name')
|
||||||
|
|
Loading…
Reference in New Issue