Migrate hypervisor stats commands to SDK
Change-Id: I43b2071f5108c28f6881c8e99d4b06e87c83ddfa
This commit is contained in:
parent
29129a7715
commit
992cfdfb57
@ -11,19 +11,49 @@
|
||||
# under the License.
|
||||
#
|
||||
|
||||
|
||||
"""Hypervisor Stats action implementations"""
|
||||
|
||||
from osc_lib.command import command
|
||||
from osc_lib import utils
|
||||
|
||||
from openstackclient.i18n import _
|
||||
|
||||
|
||||
def _get_hypervisor_stat_columns(item):
|
||||
column_map = {
|
||||
# NOTE(gtema): If we decide to use SDK names - empty this
|
||||
'disk_available': 'disk_available_least',
|
||||
'local_disk_free': 'free_disk_gb',
|
||||
'local_disk_size': 'local_gb',
|
||||
'local_disk_used': 'local_gb_used',
|
||||
'memory_free': 'free_ram_mb',
|
||||
'memory_size': 'memory_mb',
|
||||
'memory_used': 'memory_mb_used',
|
||||
|
||||
}
|
||||
hidden_columns = ['id', 'links', 'location', 'name']
|
||||
return utils.get_osc_show_columns_for_sdk_resource(
|
||||
item, column_map, hidden_columns)
|
||||
|
||||
|
||||
class ShowHypervisorStats(command.ShowOne):
|
||||
_description = _("Display hypervisor stats details")
|
||||
|
||||
def take_action(self, parsed_args):
|
||||
compute_client = self.app.client_manager.compute
|
||||
hypervisor_stats = compute_client.hypervisors.statistics().to_dict()
|
||||
# The command is deprecated since it is being dropped in Nova.
|
||||
self.log.warning(
|
||||
_("This command is deprecated.")
|
||||
)
|
||||
compute_client = self.app.client_manager.sdk_connection.compute
|
||||
# We do API request directly cause this deprecated method is not and
|
||||
# will not be supported by OpenStackSDK.
|
||||
response = compute_client.get(
|
||||
'/os-hypervisors/statistics',
|
||||
microversion='2.1')
|
||||
hypervisor_stats = response.json().get('hypervisor_statistics')
|
||||
|
||||
return zip(*sorted(hypervisor_stats.items()))
|
||||
display_columns, columns = _get_hypervisor_stat_columns(
|
||||
hypervisor_stats)
|
||||
data = utils.get_dict_properties(
|
||||
hypervisor_stats, columns)
|
||||
return (display_columns, data)
|
||||
|
@ -341,67 +341,6 @@ class FakeExtension(object):
|
||||
return extension
|
||||
|
||||
|
||||
class FakeHypervisorStats(object):
|
||||
"""Fake one or more hypervisor stats."""
|
||||
|
||||
@staticmethod
|
||||
def create_one_hypervisor_stats(attrs=None):
|
||||
"""Create a fake hypervisor stats.
|
||||
|
||||
:param dict attrs:
|
||||
A dictionary with all attributes
|
||||
:return:
|
||||
A FakeResource object, with count, current_workload, and so on
|
||||
"""
|
||||
attrs = attrs or {}
|
||||
|
||||
# Set default attributes.
|
||||
stats_info = {
|
||||
'count': 2,
|
||||
'current_workload': 0,
|
||||
'disk_available_least': 50,
|
||||
'free_disk_gb': 100,
|
||||
'free_ram_mb': 23000,
|
||||
'local_gb': 100,
|
||||
'local_gb_used': 0,
|
||||
'memory_mb': 23800,
|
||||
'memory_mb_used': 1400,
|
||||
'running_vms': 3,
|
||||
'vcpus': 8,
|
||||
'vcpus_used': 3,
|
||||
}
|
||||
|
||||
# Overwrite default attributes.
|
||||
stats_info.update(attrs)
|
||||
|
||||
# Set default method.
|
||||
hypervisor_stats_method = {'to_dict': stats_info}
|
||||
|
||||
hypervisor_stats = fakes.FakeResource(
|
||||
info=copy.deepcopy(stats_info),
|
||||
methods=copy.deepcopy(hypervisor_stats_method),
|
||||
loaded=True)
|
||||
return hypervisor_stats
|
||||
|
||||
@staticmethod
|
||||
def create_hypervisors_stats(attrs=None, count=2):
|
||||
"""Create multiple fake hypervisors stats.
|
||||
|
||||
:param dict attrs:
|
||||
A dictionary with all attributes
|
||||
:param int count:
|
||||
The number of hypervisors to fake
|
||||
:return:
|
||||
A list of FakeResource objects faking the hypervisors
|
||||
"""
|
||||
hypervisors = []
|
||||
for i in range(0, count):
|
||||
hypervisors.append(
|
||||
FakeHypervisorStats.create_one_hypervisor_stats(attrs))
|
||||
|
||||
return hypervisors
|
||||
|
||||
|
||||
class FakeSecurityGroup(object):
|
||||
"""Fake one or more security groups."""
|
||||
|
||||
|
@ -12,9 +12,11 @@
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
#
|
||||
from unittest import mock
|
||||
|
||||
from openstackclient.compute.v2 import hypervisor_stats
|
||||
from openstackclient.tests.unit.compute.v2 import fakes as compute_fakes
|
||||
from openstackclient.tests.unit import fakes
|
||||
|
||||
|
||||
class TestHypervisorStats(compute_fakes.TestComputev2):
|
||||
@ -23,20 +25,55 @@ class TestHypervisorStats(compute_fakes.TestComputev2):
|
||||
super(TestHypervisorStats, self).setUp()
|
||||
|
||||
# Get a shortcut to the compute client hypervisors mock
|
||||
self.hypervisors_mock = self.app.client_manager.compute.hypervisors
|
||||
self.hypervisors_mock.reset_mock()
|
||||
self.app.client_manager.sdk_connection = mock.Mock()
|
||||
self.app.client_manager.sdk_connection.compute = mock.Mock()
|
||||
self.sdk_client = self.app.client_manager.sdk_connection.compute
|
||||
self.sdk_client.get = mock.Mock()
|
||||
|
||||
|
||||
# Not in fakes.py because hypervisor stats has been deprecated
|
||||
|
||||
def create_one_hypervisor_stats(attrs=None):
|
||||
"""Create a fake hypervisor stats.
|
||||
|
||||
:param dict attrs:
|
||||
A dictionary with all attributes
|
||||
:return:
|
||||
A dictionary that contains hypervisor stats information keys
|
||||
"""
|
||||
attrs = attrs or {}
|
||||
|
||||
# Set default attributes.
|
||||
stats_info = {
|
||||
'count': 2,
|
||||
'current_workload': 0,
|
||||
'disk_available_least': 50,
|
||||
'free_disk_gb': 100,
|
||||
'free_ram_mb': 23000,
|
||||
'local_gb': 100,
|
||||
'local_gb_used': 0,
|
||||
'memory_mb': 23800,
|
||||
'memory_mb_used': 1400,
|
||||
'running_vms': 3,
|
||||
'vcpus': 8,
|
||||
'vcpus_used': 3,
|
||||
}
|
||||
|
||||
# Overwrite default attributes.
|
||||
stats_info.update(attrs)
|
||||
|
||||
return stats_info
|
||||
|
||||
|
||||
class TestHypervisorStatsShow(TestHypervisorStats):
|
||||
|
||||
_stats = create_one_hypervisor_stats()
|
||||
|
||||
def setUp(self):
|
||||
super(TestHypervisorStatsShow, self).setUp()
|
||||
|
||||
self.hypervisor_stats = \
|
||||
compute_fakes.FakeHypervisorStats.create_one_hypervisor_stats()
|
||||
|
||||
self.hypervisors_mock.statistics.return_value =\
|
||||
self.hypervisor_stats
|
||||
self.sdk_client.get.return_value = fakes.FakeResponse(
|
||||
data={'hypervisor_statistics': self._stats})
|
||||
|
||||
self.cmd = hypervisor_stats.ShowHypervisorStats(self.app, None)
|
||||
|
||||
|
@ -0,0 +1,3 @@
|
||||
---
|
||||
features:
|
||||
- Switch hypervisor operations to consume OpenStackSDK
|
Loading…
x
Reference in New Issue
Block a user