summaryrefslogtreecommitdiff
path: root/openstackclient
diff options
context:
space:
mode:
Diffstat (limited to 'openstackclient')
-rw-r--r--openstackclient/compute/v2/hypervisor.py29
-rw-r--r--openstackclient/tests/unit/compute/v2/test_hypervisor.py70
2 files changed, 87 insertions, 12 deletions
diff --git a/openstackclient/compute/v2/hypervisor.py b/openstackclient/compute/v2/hypervisor.py
index f9051919..0222e899 100644
--- a/openstackclient/compute/v2/hypervisor.py
+++ b/openstackclient/compute/v2/hypervisor.py
@@ -17,6 +17,7 @@
import re
+from novaclient import exceptions as nova_exceptions
from osc_lib.command import command
from osc_lib import utils
import six
@@ -94,18 +95,22 @@ class ShowHypervisor(command.ShowOne):
if service_host in aggregate.hosts]
hypervisor["aggregates"] = member_of
- uptime = compute_client.hypervisors.uptime(hypervisor['id'])._info
- # Extract data from uptime value
- # format: 0 up 0, 0 users, load average: 0, 0, 0
- # example: 17:37:14 up 2:33, 3 users, load average: 0.33, 0.36, 0.34
- m = re.match(
- "\s*(.+)\sup\s+(.+),\s+(.+)\susers?,\s+load average:\s(.+)",
- uptime['uptime'])
- if m:
- hypervisor["host_time"] = m.group(1)
- hypervisor["uptime"] = m.group(2)
- hypervisor["users"] = m.group(3)
- hypervisor["load_average"] = m.group(4)
+ try:
+ uptime = compute_client.hypervisors.uptime(hypervisor['id'])._info
+ # Extract data from uptime value
+ # format: 0 up 0, 0 users, load average: 0, 0, 0
+ # example: 17:37:14 up 2:33, 3 users,
+ # load average: 0.33, 0.36, 0.34
+ m = re.match(
+ "\s*(.+)\sup\s+(.+),\s+(.+)\susers?,\s+load average:\s(.+)",
+ uptime['uptime'])
+ if m:
+ hypervisor["host_time"] = m.group(1)
+ hypervisor["uptime"] = m.group(2)
+ hypervisor["users"] = m.group(3)
+ hypervisor["load_average"] = m.group(4)
+ except nova_exceptions.HTTPNotImplemented:
+ pass
hypervisor["service_id"] = hypervisor["service"]["id"]
hypervisor["service_host"] = hypervisor["service"]["host"]
diff --git a/openstackclient/tests/unit/compute/v2/test_hypervisor.py b/openstackclient/tests/unit/compute/v2/test_hypervisor.py
index 02ac6ba3..e39570af 100644
--- a/openstackclient/tests/unit/compute/v2/test_hypervisor.py
+++ b/openstackclient/tests/unit/compute/v2/test_hypervisor.py
@@ -15,6 +15,7 @@
import copy
+from novaclient import exceptions as nova_exceptions
from osc_lib import exceptions
from openstackclient.compute.v2 import hypervisor
@@ -227,3 +228,72 @@ class TestHypervisorShow(TestHypervisor):
self.assertEqual(self.columns, columns)
self.assertEqual(self.data, data)
+
+ def test_hyprvisor_show_uptime_not_implemented(self):
+ arglist = [
+ self.hypervisor.hypervisor_hostname,
+ ]
+ verifylist = [
+ ('hypervisor', self.hypervisor.hypervisor_hostname),
+ ]
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+
+ self.hypervisors_mock.uptime.side_effect = (
+ nova_exceptions.HTTPNotImplemented(501))
+
+ # In base command class ShowOne in cliff, abstract method take_action()
+ # returns a two-part tuple with a tuple of column names and a tuple of
+ # data to be shown.
+ columns, data = self.cmd.take_action(parsed_args)
+
+ expected_columns = (
+ 'aggregates',
+ 'cpu_info',
+ 'current_workload',
+ 'disk_available_least',
+ 'free_disk_gb',
+ 'free_ram_mb',
+ 'host_ip',
+ 'hypervisor_hostname',
+ 'hypervisor_type',
+ 'hypervisor_version',
+ 'id',
+ 'local_gb',
+ 'local_gb_used',
+ 'memory_mb',
+ 'memory_mb_used',
+ 'running_vms',
+ 'service_host',
+ 'service_id',
+ 'state',
+ 'status',
+ 'vcpus',
+ 'vcpus_used',
+ )
+ expected_data = (
+ [],
+ {'aaa': 'aaa'},
+ 0,
+ 50,
+ 50,
+ 1024,
+ '192.168.0.10',
+ self.hypervisor.hypervisor_hostname,
+ 'QEMU',
+ 2004001,
+ self.hypervisor.id,
+ 50,
+ 0,
+ 1024,
+ 512,
+ 0,
+ 'aaa',
+ 1,
+ 'up',
+ 'enabled',
+ 4,
+ 0,
+ )
+
+ self.assertEqual(expected_columns, columns)
+ self.assertEqual(expected_data, data)