Improve Elasticsearch scenario
1. Use NovaScenario parent for Elasticserch scenario and use _boot_server method for creating server instead of client method. 2. Add server_boot_kwargs args for custom server boot, for example for defining custom nic. 3. Add action to check server indexed. 4. Add variability flag - search elasticsearch by id or name. 5. Add additional_query arg for better and clarified query results. Change-Id: Ic889def63bb6e8f535ac9e1aeed9b4f19e6f8823
This commit is contained in:
parent
430cf06d3f
commit
a596a89457
@ -18,12 +18,13 @@ import requests
|
||||
from rally.common import cfg
|
||||
from rally.common import logging
|
||||
from rally.common import utils as commonutils
|
||||
from rally.task import atomic
|
||||
from rally.task import types
|
||||
from rally.task import utils
|
||||
from rally.task import validation
|
||||
|
||||
from rally_openstack import consts
|
||||
from rally_openstack import scenario
|
||||
from rally_openstack.scenarios.nova import utils as nova_utils
|
||||
|
||||
CONF = cfg.CONF
|
||||
LOG = logging.getLogger(__name__)
|
||||
@ -38,7 +39,7 @@ LOG = logging.getLogger(__name__)
|
||||
@scenario.configure(context={"cleanup@openstack": ["nova"]},
|
||||
name="ElasticsearchLogging.log_instance",
|
||||
platform="openstack")
|
||||
class ElasticsearchLogInstanceName(scenario.OpenStackScenario):
|
||||
class ElasticsearchLogInstanceName(nova_utils.NovaScenario):
|
||||
"""Test logging instance in conjunction with Elasticsearch system.
|
||||
|
||||
Let OpenStack platform already has logging agent (for example, Filebeat),
|
||||
@ -48,27 +49,20 @@ class ElasticsearchLogInstanceName(scenario.OpenStackScenario):
|
||||
becomes available, checks it's name in Elasticsearch indices by querying.
|
||||
"""
|
||||
|
||||
def _create_server(self, image, flavor, seed):
|
||||
server = self.clients("nova").servers.create(seed, image, flavor)
|
||||
LOG.info("Server %s create started" % seed)
|
||||
self.sleep_between(CONF.openstack.nova_server_boot_prepoll_delay)
|
||||
utils.wait_for_status(
|
||||
server,
|
||||
ready_statuses=["ACTIVE"],
|
||||
update_resource=utils.get_from_manager(),
|
||||
timeout=CONF.openstack.nova_server_boot_timeout,
|
||||
check_interval=CONF.openstack.nova_server_boot_poll_interval
|
||||
)
|
||||
LOG.info("Server %s is active" % seed)
|
||||
@atomic.action_timer("elasticsearch.check_server_log_indexed")
|
||||
def _check_server_name(self, server_id, logging_vip, elasticsearch_port,
|
||||
sleep_time, retries_total, additional_query=None):
|
||||
request_data = {
|
||||
"query": {
|
||||
"bool": {
|
||||
"must": [{"match_phrase": {"Payload": server_id}}]
|
||||
}
|
||||
}
|
||||
}
|
||||
if additional_query:
|
||||
request_data["query"]["bool"].update(additional_query)
|
||||
|
||||
def _check_server_name(self, name, logging_vip, elasticsearch_port,
|
||||
sleep_time, retries_total):
|
||||
request_data = {"query": {
|
||||
"bool": {"must": [{"match_phrase": {"Payload": name}}],
|
||||
"should": [{"range": {"Timestamp": {"gte": "now-2m",
|
||||
"lte": "now"}}}],
|
||||
"minimum_should_match": 1}}}
|
||||
LOG.info("Check server name %s in elasticsearch" % name)
|
||||
LOG.info("Check server ID %s in elasticsearch" % server_id)
|
||||
i = 0
|
||||
while i < retries_total:
|
||||
LOG.debug("Attempt number %s" % (i + 1))
|
||||
@ -87,20 +81,31 @@ class ElasticsearchLogInstanceName(scenario.OpenStackScenario):
|
||||
self.assertGreater(result["hits"]["total"], 0)
|
||||
break
|
||||
|
||||
def run(self, image, flavor, logging_vip, elasticsearch_port,
|
||||
sleep_time=5, retries_total=30):
|
||||
def run(self, image, flavor, logging_vip, elasticsearch_port, sleep_time=5,
|
||||
retries_total=30, boot_server_kwargs=None, force_delete=False,
|
||||
query_by_name=False, additional_query=None):
|
||||
"""Create nova instance and check it indexed in elasticsearch.
|
||||
|
||||
:param image: image for server
|
||||
:param flavor: flavor for server
|
||||
:param logging_vip: logging system IP to check server name in
|
||||
elasticsearch index
|
||||
:param boot_server_kwargs: special server kwargs for boot
|
||||
:param force_delete: force delete server or not
|
||||
:param elasticsearch_port: elasticsearch port to use for check server
|
||||
:param additional_query: map of additional arguments for scenario
|
||||
elasticsearch query to check nova info in els index.
|
||||
:param query_by_name: query nova server by name if True otherwise by id
|
||||
:param sleep_time: sleep time in seconds between elasticsearch request
|
||||
:param retries_total: total number of retries to check server name in
|
||||
elasticsearch
|
||||
"""
|
||||
seed = self.generate_random_name()
|
||||
self._create_server(image, flavor, seed)
|
||||
self._check_server_name(seed, logging_vip, elasticsearch_port,
|
||||
sleep_time, retries_total)
|
||||
server = self._boot_server(image, flavor, **(boot_server_kwargs or {}))
|
||||
if query_by_name:
|
||||
server_id = server.name
|
||||
else:
|
||||
server_id = server.id
|
||||
self._check_server_name(server_id, logging_vip, elasticsearch_port,
|
||||
sleep_time, retries_total,
|
||||
additional_query=additional_query)
|
||||
self._delete_server(server, force=force_delete)
|
||||
|
@ -13,7 +13,32 @@
|
||||
"logging_vip": "10.0.0.5",
|
||||
"elasticsearch_port": 5601,
|
||||
"sleep_time": 5,
|
||||
"retries_total": 30
|
||||
"retries_total": 30,
|
||||
"additional_query": {
|
||||
"must_not": [
|
||||
{
|
||||
"match_phrase": {
|
||||
"Payload": "GET"
|
||||
}
|
||||
},
|
||||
{
|
||||
"match_phrase": {
|
||||
"http_method": "GET"
|
||||
}
|
||||
}
|
||||
],
|
||||
"should": [
|
||||
{
|
||||
"range": {
|
||||
"Timestamp": {
|
||||
"gte": "now-2m",
|
||||
"lte": "now"
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
"minimum_should_match": 1
|
||||
}
|
||||
},
|
||||
"runner": {
|
||||
"type": "constant",
|
||||
|
@ -12,6 +12,18 @@
|
||||
elasticsearch_port: 5601
|
||||
sleep_time: 5
|
||||
retries_total: 30
|
||||
additional_query:
|
||||
must_not:
|
||||
- match_phrase:
|
||||
Payload: GET
|
||||
- match_phrase:
|
||||
http_method: GET
|
||||
should:
|
||||
- range:
|
||||
Timestamp:
|
||||
gte: now-2m
|
||||
lte: now
|
||||
minimum_should_match: 1
|
||||
runner:
|
||||
type: "constant"
|
||||
times: 10
|
||||
|
Loading…
x
Reference in New Issue
Block a user