Merge "Remove dead NovaHelper methods"

This commit is contained in:
Zuul
2025-10-23 14:45:02 +00:00
committed by Gerrit Code Review
3 changed files with 14 additions and 152 deletions

View File

@@ -0,0 +1,14 @@
---
other:
- |
Seven unused methods have been removed from the NovaHelper class.
These methods had zero production usage and were either remnants from
old workflows or never integrated into production code. The removed
methods include delete_instance() (dead since the 2018 workflow
refactor in commit 4179c352), swap_volume() (removed in 2025 due to
security concerns), wait_for_instance_status() (unused since 2015),
get_availability_zone_list(), get_instance_by_name(),
get_instances_by_node(), and get_service(). This removal eliminates
approximately 139 lines of dead code and reduces maintenance burden
with no user-facing impact.

View File

@@ -130,32 +130,15 @@ class NovaHelper:
self.nova.servers.list(search_opts={"all_tenants": True,
"uuid": instance_uuid})]
def get_instance_by_name(self, instance_name):
return [instance for instance in
self.nova.servers.list(search_opts={"all_tenants": True,
"name": instance_name})]
def get_instances_by_node(self, host):
return [instance for instance in
self.nova.servers.list(search_opts={"all_tenants": True,
"host": host},
limit=-1)]
def get_flavor_list(self):
return self.nova.flavors.list(**{'is_public': None})
def get_service(self, service_id):
return self.nova.services.find(id=service_id)
def get_aggregate_list(self):
return self.nova.aggregates.list()
def get_aggregate_detail(self, aggregate_id):
return self.nova.aggregates.get(aggregate_id)
def get_availability_zone_list(self):
return self.nova.availability_zones.list(detailed=True)
def get_service_list(self):
return self.nova.services.list(binary='nova-compute')
@@ -461,23 +444,6 @@ class NovaHelper:
return status
def delete_instance(self, instance_id):
"""This method deletes a given instance.
:param instance_id: the unique id of the instance to delete.
"""
LOG.debug("Trying to remove instance %s ...", instance_id)
instance = self.find_instance(instance_id)
if not instance:
LOG.debug("Instance not found: %s", instance_id)
return False
else:
self.nova.servers.delete(instance_id)
LOG.debug("Instance %s removed.", instance_id)
return True
def stop_instance(self, instance_id):
"""This method stops a given instance.
@@ -546,60 +512,12 @@ class NovaHelper:
retry -= 1
return getattr(server, 'OS-EXT-STS:vm_state') == state
def wait_for_instance_status(self, instance, status_list, retry, sleep):
"""Waits for instance to be in a specific status
The status can be one of the following
: BUILD, ACTIVE, ERROR, VERIFY_RESIZE, SHUTOFF
:param instance: instance object.
:param status_list: tuple containing the list of
status we are waiting for
:param retry: how many times to retry
:param sleep: seconds to sleep between the retries
"""
if not instance:
return False
while instance.status not in status_list and retry:
LOG.debug("Current instance status: %s", instance.status)
time.sleep(sleep)
instance = self.nova.servers.get(instance.id)
retry -= 1
LOG.debug("Current instance status: %s", instance.status)
return instance.status in status_list
def get_hostname(self, instance):
return str(getattr(instance, 'OS-EXT-SRV-ATTR:host'))
def get_running_migration(self, instance_id):
return self.nova.server_migrations.list(server=instance_id)
def swap_volume(self, old_volume, new_volume,
retry=120, retry_interval=10):
"""Swap old_volume for new_volume"""
attachments = old_volume.attachments
instance_id = attachments[0]['server_id']
# do volume update
self.nova.volumes.update_server_volume(
instance_id, old_volume.id, new_volume.id)
while getattr(new_volume, 'status') != 'in-use' and retry:
new_volume = self.cinder.volumes.get(new_volume.id)
LOG.debug('Waiting volume update to %s', new_volume)
time.sleep(retry_interval)
retry -= 1
LOG.debug("retry count: %s", retry)
if getattr(new_volume, 'status') != "in-use":
LOG.error("Volume update retry timeout or error")
return False
host_name = getattr(new_volume, "os-vol-host-attr:host")
LOG.debug(
"Volume update succeeded : "
"Volume %(volume)s is now on host '%(host)s'.",
{'volume': new_volume.id, 'host': host_name})
return True
def _check_nova_api_version(self, client, version):
api_version = api_versions.APIVersion(version_str=version)
try:

View File

@@ -278,23 +278,6 @@ class TestNovaHelper(base.TestCase):
result = nova_util.start_instance(instance_id)
self.assertFalse(result)
@mock.patch.object(time, 'sleep', mock.Mock())
def test_delete_instance(self, mock_cinder, mock_nova):
nova_util = nova_helper.NovaHelper()
instance_id = utils.generate_uuid()
# verify that the method will return False when the instance does
# not exist.
self.fake_nova_find_list(nova_util, fake_find=None, fake_list=None)
result = nova_util.delete_instance(instance_id)
self.assertFalse(result)
# verify that the method will return True when the instance exists.
server = self.fake_server(instance_id)
self.fake_nova_find_list(nova_util, fake_find=server, fake_list=None)
result = nova_util.delete_instance(instance_id)
self.assertTrue(result)
@mock.patch.object(time, 'sleep', mock.Mock())
def test_resize_instance(self, mock_cinder, mock_nova):
nova_util = nova_helper.NovaHelper()
@@ -522,27 +505,6 @@ class TestNovaHelper(base.TestCase):
volume.availability_zone = kwargs.get('availability_zone', 'nova')
return volume
@mock.patch.object(time, 'sleep', mock.Mock())
def test_swap_volume(self, mock_cinder, mock_nova):
nova_util = nova_helper.NovaHelper()
server = self.fake_server(self.instance_uuid)
self.fake_nova_find_list(nova_util, fake_find=server, fake_list=server)
old_volume = self.fake_volume(
status='in-use', attachments=[{'server_id': self.instance_uuid}])
new_volume = self.fake_volume(
id=utils.generate_uuid(), status='in-use')
result = nova_util.swap_volume(old_volume, new_volume)
self.assertTrue(result)
# verify that the method will return False when the status of
# new_volume is 'fake-use'.
new_volume = self.fake_volume(
id=utils.generate_uuid(), status='fake-use')
result = nova_util.swap_volume(old_volume, new_volume)
self.assertFalse(result)
@mock.patch.object(time, 'sleep', mock.Mock())
def test_wait_for_volume_status(self, mock_cinder, mock_nova):
nova_util = nova_helper.NovaHelper()
@@ -585,38 +547,6 @@ class TestNovaHelper(base.TestCase):
result = nova_util._check_nova_api_version(nova_util.nova, "2.56")
self.assertFalse(result)
@mock.patch.object(time, 'sleep', mock.Mock())
def test_wait_for_instance_status(self, mock_cinder, mock_nova):
nova_util = nova_helper.NovaHelper()
instance = self.fake_server(self.instance_uuid)
# verify that the method will return True when the status of instance
# is in the expected status.
result = nova_util.wait_for_instance_status(
instance,
('ACTIVE', 'ERROR'),
5,
10)
self.assertTrue(result)
# verify that the method will return False when the instance is None.
result = nova_util.wait_for_instance_status(
None,
('ACTIVE', 'ERROR'),
5,
10)
self.assertFalse(result)
# verify that the method will return False when the status of instance
# is not in the expected status.
self.fake_nova_find_list(nova_util, fake_find=instance, fake_list=None)
result = nova_util.wait_for_instance_status(
instance,
('ERROR'),
5,
10)
self.assertFalse(result)
@mock.patch.object(time, 'sleep', mock.Mock())
def test_confirm_resize(self, mock_cinder, mock_nova):
nova_util = nova_helper.NovaHelper()