Merge "Remove dead NovaHelper methods"
This commit is contained in:
@@ -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.
|
||||||
|
|
||||||
@@ -130,32 +130,15 @@ class NovaHelper:
|
|||||||
self.nova.servers.list(search_opts={"all_tenants": True,
|
self.nova.servers.list(search_opts={"all_tenants": True,
|
||||||
"uuid": instance_uuid})]
|
"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):
|
def get_flavor_list(self):
|
||||||
return self.nova.flavors.list(**{'is_public': None})
|
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):
|
def get_aggregate_list(self):
|
||||||
return self.nova.aggregates.list()
|
return self.nova.aggregates.list()
|
||||||
|
|
||||||
def get_aggregate_detail(self, aggregate_id):
|
def get_aggregate_detail(self, aggregate_id):
|
||||||
return self.nova.aggregates.get(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):
|
def get_service_list(self):
|
||||||
return self.nova.services.list(binary='nova-compute')
|
return self.nova.services.list(binary='nova-compute')
|
||||||
|
|
||||||
@@ -461,23 +444,6 @@ class NovaHelper:
|
|||||||
|
|
||||||
return status
|
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):
|
def stop_instance(self, instance_id):
|
||||||
"""This method stops a given instance.
|
"""This method stops a given instance.
|
||||||
|
|
||||||
@@ -546,60 +512,12 @@ class NovaHelper:
|
|||||||
retry -= 1
|
retry -= 1
|
||||||
return getattr(server, 'OS-EXT-STS:vm_state') == state
|
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):
|
def get_hostname(self, instance):
|
||||||
return str(getattr(instance, 'OS-EXT-SRV-ATTR:host'))
|
return str(getattr(instance, 'OS-EXT-SRV-ATTR:host'))
|
||||||
|
|
||||||
def get_running_migration(self, instance_id):
|
def get_running_migration(self, instance_id):
|
||||||
return self.nova.server_migrations.list(server=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):
|
def _check_nova_api_version(self, client, version):
|
||||||
api_version = api_versions.APIVersion(version_str=version)
|
api_version = api_versions.APIVersion(version_str=version)
|
||||||
try:
|
try:
|
||||||
|
|||||||
@@ -278,23 +278,6 @@ class TestNovaHelper(base.TestCase):
|
|||||||
result = nova_util.start_instance(instance_id)
|
result = nova_util.start_instance(instance_id)
|
||||||
self.assertFalse(result)
|
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())
|
@mock.patch.object(time, 'sleep', mock.Mock())
|
||||||
def test_resize_instance(self, mock_cinder, mock_nova):
|
def test_resize_instance(self, mock_cinder, mock_nova):
|
||||||
nova_util = nova_helper.NovaHelper()
|
nova_util = nova_helper.NovaHelper()
|
||||||
@@ -522,27 +505,6 @@ class TestNovaHelper(base.TestCase):
|
|||||||
volume.availability_zone = kwargs.get('availability_zone', 'nova')
|
volume.availability_zone = kwargs.get('availability_zone', 'nova')
|
||||||
return volume
|
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())
|
@mock.patch.object(time, 'sleep', mock.Mock())
|
||||||
def test_wait_for_volume_status(self, mock_cinder, mock_nova):
|
def test_wait_for_volume_status(self, mock_cinder, mock_nova):
|
||||||
nova_util = nova_helper.NovaHelper()
|
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")
|
result = nova_util._check_nova_api_version(nova_util.nova, "2.56")
|
||||||
self.assertFalse(result)
|
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())
|
@mock.patch.object(time, 'sleep', mock.Mock())
|
||||||
def test_confirm_resize(self, mock_cinder, mock_nova):
|
def test_confirm_resize(self, mock_cinder, mock_nova):
|
||||||
nova_util = nova_helper.NovaHelper()
|
nova_util = nova_helper.NovaHelper()
|
||||||
|
|||||||
Reference in New Issue
Block a user