Add rename_network_adapter

Needed in osutils for renaming network adapters based
on the metadata network configuration.

Partially-Implements: blueprint json-network-config
Change-Id: I0d3fb842b39388d2f04abe3e2c3adc988c3e4dbe
This commit is contained in:
Alessandro Pilotti 2018-08-24 00:00:52 +03:00
parent 01a501ff1d
commit ae3d80fd63
3 changed files with 45 additions and 0 deletions

View File

@ -78,6 +78,9 @@ class BaseOSUtils(object):
def get_network_adapters(self):
raise NotImplementedError()
def rename_network_adapter(self, old_name, new_name):
raise NotImplementedError()
def set_static_network_config(self, mac_address, address, netmask,
broadcast, gateway, dnsnameservers):
raise NotImplementedError()

View File

@ -762,6 +762,18 @@ class WindowsUtils(base.BaseOSUtils):
'value "%(mtu)s" failed' % {'mac_address': mac_address,
'mtu': mtu})
def rename_network_adapter(self, old_name, new_name):
base_dir = self._get_system_dir()
netsh_path = os.path.join(base_dir, 'netsh.exe')
args = [netsh_path, "interface", "set", "interface",
'name=%s' % old_name, 'newname=%s' % new_name]
(out, err, ret_val) = self.execute_process(args, shell=False)
if ret_val:
raise exception.CloudbaseInitException(
'Renaming interface "%(old_name)s" to "%(new_name)s" '
'failed' % {'old_name': old_name, 'new_name': new_name})
def set_static_network_config(self, mac_address, address, netmask,
broadcast, gateway, dnsnameservers):
conn = wmi.WMI(moniker='//./root/cimv2')

View File

@ -764,6 +764,30 @@ class TestWindowsUtils(testutils.CloudbaseInitTestBase):
def test_set_static_network_config_v6_error(self):
self._test_set_static_network_config_v6(v6error=True)
@mock.patch('cloudbaseinit.osutils.windows.WindowsUtils'
'.execute_process')
@mock.patch('cloudbaseinit.osutils.windows.WindowsUtils'
'._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"
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:
with self.assertRaises(exception.CloudbaseInitException):
self._winutils.rename_network_adapter(old_name, new_name)
else:
self._winutils.rename_network_adapter(old_name, new_name)
mock_get_system_dir.assert_called_once_with()
args = [os.path.join(base_dir, "netsh.exe"), "interface", "set",
"interface", 'name=%s' % old_name, 'newname=%s' % new_name]
mock_execute_process.assert_called_once_with(args, shell=False)
def _test_get_config_key_name(self, section):
response = self._winutils._get_config_key_name(section)
if section:
@ -778,6 +802,12 @@ class TestWindowsUtils(testutils.CloudbaseInitTestBase):
def test_get_config_key_name_no_section(self):
self._test_get_config_key_name(None)
def test_rename_network_adapter(self):
self._test_rename_network_adapter(False)
def test_rename_network_adapter_fail(self):
self._test_rename_network_adapter(True)
@mock.patch('cloudbaseinit.osutils.windows.WindowsUtils'
'._get_config_key_name')
def _test_set_config_value(self, value, mock_get_config_key_name):