Add nova.ListAndSearchHypervisors scenario
List all servers belonging to specific hypervisor. The scenario first list all hypervisors,then find its hostname, then list all servers belonging to the hypervisor Measure the "nova hypervisor-servers <hostname>" command performance. Change-Id: I8511a9790037ee5f3bab003309f2debe31b00590
This commit is contained in:
parent
4905885391
commit
d7ccc1c113
@ -709,6 +709,22 @@
|
||||
failure_rate:
|
||||
max: 0
|
||||
|
||||
NovaHypervisors.list_and_search_hypervisors:
|
||||
-
|
||||
args:
|
||||
detailed: True
|
||||
runner:
|
||||
type: "constant"
|
||||
times: 5
|
||||
concurrency: 2
|
||||
context:
|
||||
users:
|
||||
tenants: 2
|
||||
users_per_tenant: 2
|
||||
sla:
|
||||
failure_rate:
|
||||
max: 0
|
||||
|
||||
NovaImages.list_images:
|
||||
-
|
||||
args:
|
||||
|
@ -59,7 +59,7 @@ class ListAndGetHypervisors(utils.NovaScenario):
|
||||
|
||||
with atomic.ActionTimer(self, "nova.get_hypervisor"):
|
||||
for hypervisor in hypervisors:
|
||||
self._get_hypervisor(hypervisor)
|
||||
self._get_hypervisor(hypervisor, atomic_action=False)
|
||||
|
||||
|
||||
@validation.required_services(consts.Service.NOVA)
|
||||
@ -95,3 +95,28 @@ class ListAndGetUptimeHypervisors(utils.NovaScenario):
|
||||
with atomic.ActionTimer(self, "nova.uptime_hypervisor"):
|
||||
for hypervisor in hypervisors:
|
||||
self._uptime_hypervisor(hypervisor, atomic_action=False)
|
||||
|
||||
|
||||
@validation.required_services(consts.Service.NOVA)
|
||||
@validation.required_openstack(admin=True)
|
||||
@scenario.configure(name="NovaHypervisors.list_and_search_hypervisors")
|
||||
class ListAndSearchHypervisors(utils.NovaScenario):
|
||||
def run(self, detailed=True):
|
||||
"""List all servers belonging to specific hypervisor.
|
||||
|
||||
The scenario first list all hypervisors,then find its hostname,
|
||||
then list all servers belonging to the hypervisor
|
||||
|
||||
Measure the "nova hypervisor-servers <hostname>" command performance.
|
||||
|
||||
:param detailed: True if the hypervisor listing should contain
|
||||
detailed information about all of them
|
||||
"""
|
||||
hypervisors = self._list_hypervisors(detailed)
|
||||
|
||||
with atomic.ActionTimer(self,
|
||||
"nova.search_%s_hypervisors" % len(hypervisors)
|
||||
):
|
||||
for hypervisor in hypervisors:
|
||||
self._search_hypervisors(hypervisor.hypervisor_hostname,
|
||||
atomic_action=False)
|
||||
|
@ -898,6 +898,20 @@ class NovaScenario(scenario.OpenStackScenario):
|
||||
"""
|
||||
return self.admin_clients("nova").hypervisors.get(hypervisor)
|
||||
|
||||
@atomic.optional_action_timer("nova.search_hypervisors")
|
||||
def _search_hypervisors(self, hypervisor_match, servers=False):
|
||||
"""List all servers belonging to specific hypervisor.
|
||||
|
||||
:param hypervisor_match: Hypervisor's host name.
|
||||
:param servers: If True, server information is also retrieved.
|
||||
:param atomic_action: True if this is atomic action. added and
|
||||
handled by the optional_action_timer()
|
||||
decorator.
|
||||
:returns: Hypervisor object
|
||||
"""
|
||||
return self.admin_clients("nova").hypervisors.search(hypervisor_match,
|
||||
servers=servers)
|
||||
|
||||
@atomic.action_timer("nova.lock_server")
|
||||
def _lock_server(self, server):
|
||||
"""Lock the given server.
|
||||
|
25
samples/tasks/scenarios/nova/list-and-search-hypervisor.json
Normal file
25
samples/tasks/scenarios/nova/list-and-search-hypervisor.json
Normal file
@ -0,0 +1,25 @@
|
||||
{
|
||||
"NovaHypervisors.list_and_search_hypervisors": [
|
||||
{
|
||||
"args": {
|
||||
"detailed": true
|
||||
},
|
||||
"runner": {
|
||||
"type": "constant",
|
||||
"concurrency": 2,
|
||||
"times": 2
|
||||
},
|
||||
"context": {
|
||||
"users": {
|
||||
"tenants": 3,
|
||||
"users_per_tenant": 2
|
||||
}
|
||||
},
|
||||
"sla": {
|
||||
"failure_rate": {
|
||||
"max": 0
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
16
samples/tasks/scenarios/nova/list-and-search-hypervisor.yaml
Normal file
16
samples/tasks/scenarios/nova/list-and-search-hypervisor.yaml
Normal file
@ -0,0 +1,16 @@
|
||||
---
|
||||
NovaHypervisors.list_and_search_hypervisors:
|
||||
-
|
||||
args:
|
||||
detailed: True
|
||||
runner:
|
||||
type: "constant"
|
||||
times: 2
|
||||
concurrency: 2
|
||||
context:
|
||||
users:
|
||||
tenants: 3
|
||||
users_per_tenant: 2
|
||||
sla:
|
||||
failure_rate:
|
||||
max: 0
|
@ -55,3 +55,17 @@ class NovaHypervisorsTestCase(test.ScenarioTestCase):
|
||||
scenario._uptime_hypervisor.assert_called_once_with(hypervisor)
|
||||
self._test_atomic_action_timer(scenario.atomic_actions(),
|
||||
"nova.uptime_hypervisor")
|
||||
|
||||
def test_list_and_search_hypervisors(self):
|
||||
fake_hypervisors = [mock.Mock(hypervisor_hostname="fake_hostname")]
|
||||
scenario = hypervisors.ListAndSearchHypervisors(self.context)
|
||||
scenario._list_hypervisors = mock.MagicMock(
|
||||
return_value=fake_hypervisors)
|
||||
scenario._search_hypervisors = mock.MagicMock()
|
||||
scenario.run(detailed=False)
|
||||
|
||||
scenario._list_hypervisors.assert_called_once_with(False)
|
||||
scenario._search_hypervisors.assert_called_once_with(
|
||||
"fake_hostname", atomic_action=False)
|
||||
self._test_atomic_action_timer(scenario.atomic_actions(),
|
||||
"nova.search_1_hypervisors")
|
||||
|
@ -880,6 +880,15 @@ class NovaScenarioTestCase(test.ScenarioTestCase):
|
||||
self._test_atomic_action_timer(nova_scenario.atomic_actions(),
|
||||
"nova.get_hypervisor")
|
||||
|
||||
def test__search_hypervisors(self):
|
||||
nova_scenario = utils.NovaScenario()
|
||||
nova_scenario._search_hypervisors("fake_hostname", servers=False)
|
||||
|
||||
self.admin_clients("nova").hypervisors.search.assert_called_once_with(
|
||||
"fake_hostname", servers=False)
|
||||
self._test_atomic_action_timer(nova_scenario.atomic_actions(),
|
||||
"nova.search_hypervisors")
|
||||
|
||||
def test__list_images(self):
|
||||
nova_scenario = utils.NovaScenario()
|
||||
result = nova_scenario._list_images(detailed=False, fakearg="fakearg")
|
||||
|
Loading…
x
Reference in New Issue
Block a user