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.
|
# under the License.
|
||||||
#
|
#
|
||||||
|
|
||||||
|
|
||||||
"""Hypervisor Stats action implementations"""
|
"""Hypervisor Stats action implementations"""
|
||||||
|
|
||||||
from osc_lib.command import command
|
from osc_lib.command import command
|
||||||
|
from osc_lib import utils
|
||||||
|
|
||||||
from openstackclient.i18n import _
|
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):
|
class ShowHypervisorStats(command.ShowOne):
|
||||||
_description = _("Display hypervisor stats details")
|
_description = _("Display hypervisor stats details")
|
||||||
|
|
||||||
def take_action(self, parsed_args):
|
def take_action(self, parsed_args):
|
||||||
compute_client = self.app.client_manager.compute
|
# The command is deprecated since it is being dropped in Nova.
|
||||||
hypervisor_stats = compute_client.hypervisors.statistics().to_dict()
|
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
|
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):
|
class FakeSecurityGroup(object):
|
||||||
"""Fake one or more security groups."""
|
"""Fake one or more security groups."""
|
||||||
|
|
||||||
|
@ -12,9 +12,11 @@
|
|||||||
# License for the specific language governing permissions and limitations
|
# License for the specific language governing permissions and limitations
|
||||||
# under the License.
|
# under the License.
|
||||||
#
|
#
|
||||||
|
from unittest import mock
|
||||||
|
|
||||||
from openstackclient.compute.v2 import hypervisor_stats
|
from openstackclient.compute.v2 import hypervisor_stats
|
||||||
from openstackclient.tests.unit.compute.v2 import fakes as compute_fakes
|
from openstackclient.tests.unit.compute.v2 import fakes as compute_fakes
|
||||||
|
from openstackclient.tests.unit import fakes
|
||||||
|
|
||||||
|
|
||||||
class TestHypervisorStats(compute_fakes.TestComputev2):
|
class TestHypervisorStats(compute_fakes.TestComputev2):
|
||||||
@ -23,20 +25,55 @@ class TestHypervisorStats(compute_fakes.TestComputev2):
|
|||||||
super(TestHypervisorStats, self).setUp()
|
super(TestHypervisorStats, self).setUp()
|
||||||
|
|
||||||
# Get a shortcut to the compute client hypervisors mock
|
# Get a shortcut to the compute client hypervisors mock
|
||||||
self.hypervisors_mock = self.app.client_manager.compute.hypervisors
|
self.app.client_manager.sdk_connection = mock.Mock()
|
||||||
self.hypervisors_mock.reset_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):
|
class TestHypervisorStatsShow(TestHypervisorStats):
|
||||||
|
|
||||||
|
_stats = create_one_hypervisor_stats()
|
||||||
|
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
super(TestHypervisorStatsShow, self).setUp()
|
super(TestHypervisorStatsShow, self).setUp()
|
||||||
|
|
||||||
self.hypervisor_stats = \
|
self.sdk_client.get.return_value = fakes.FakeResponse(
|
||||||
compute_fakes.FakeHypervisorStats.create_one_hypervisor_stats()
|
data={'hypervisor_statistics': self._stats})
|
||||||
|
|
||||||
self.hypervisors_mock.statistics.return_value =\
|
|
||||||
self.hypervisor_stats
|
|
||||||
|
|
||||||
self.cmd = hypervisor_stats.ShowHypervisorStats(self.app, None)
|
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