diff options
38 files changed, 389 insertions, 169 deletions
diff --git a/api/resources/env_action.py b/api/resources/env_action.py index f6f43e5ac..7bfaf27a7 100644 --- a/api/resources/env_action.py +++ b/api/resources/env_action.py @@ -199,30 +199,25 @@ def prepareYardstickEnv(args): def _already_source_openrc(): """Check if openrc is sourced already""" return all(os.environ.get(k) for k in ['OS_AUTH_URL', 'OS_USERNAME', - 'OS_PASSWORD', 'OS_TENANT_NAME', - 'EXTERNAL_NETWORK']) + 'OS_PASSWORD', 'EXTERNAL_NETWORK']) def _prepare_env_daemon(task_id): _create_task(task_id) - installer_ip = os.environ.get('INSTALLER_IP', 'undefined') - installer_type = os.environ.get('INSTALLER_TYPE', 'undefined') - try: - _check_variables(installer_ip, installer_type) - _create_directories() rc_file = consts.OPENRC if not _already_source_openrc(): - _get_remote_rc_file(rc_file, installer_ip, installer_type) + if not os.path.exists(rc_file): + installer_ip = os.environ.get('INSTALLER_IP', '192.168.200.2') + installer_type = os.environ.get('INSTALLER_TYPE', 'compass') + _get_remote_rc_file(rc_file, installer_ip, installer_type) + _source_file(rc_file) + _append_external_network(rc_file) _source_file(rc_file) - _append_external_network(rc_file) - - # update the external_network - _source_file(rc_file) _clean_images() @@ -234,17 +229,6 @@ def _prepare_env_daemon(task_id): logger.debug('Error: %s', e) -def _check_variables(installer_ip, installer_type): - - if installer_ip == 'undefined': - raise SystemExit('Missing INSTALLER_IP') - - if installer_type == 'undefined': - raise SystemExit('Missing INSTALLER_TYPE') - elif installer_type not in consts.INSTALLERS: - raise SystemExit('INSTALLER_TYPE is not correct') - - def _create_directories(): yardstick_utils.makedirs(consts.CONF_DIR) diff --git a/docs/release/release-notes/release-notes.rst b/docs/release/release-notes/release-notes.rst index 669cbf3ab..d89f9ed24 100644 --- a/docs/release/release-notes/release-notes.rst +++ b/docs/release/release-notes/release-notes.rst @@ -41,7 +41,7 @@ Version History | | 3.0 | Yardstick for Danube release | | | | | +----------------+--------------------+---------------------------------+ -| | 2.0 | Yardstick for Danube release | +| May 4th, 2017 | 2.0 | Yardstick for Danube release | | | | | +----------------+--------------------+---------------------------------+ | Mar 31st, 2017 | 1.0 | Yardstick for Danube release | @@ -139,19 +139,19 @@ Release Data | **Project** | Yardstick | | | | +--------------------------------------+--------------------------------------+ -| **Repo/tag** | yardstick/Danube.1.0 | +| **Repo/tag** | yardstick/Danube.2.0 | | | | +--------------------------------------+--------------------------------------+ -| **Yardstick Docker image tag** | Danube.1.0 | +| **Yardstick Docker image tag** | Danube.2.0 | | | | +--------------------------------------+--------------------------------------+ | **Release designation** | Danube | | | | +--------------------------------------+--------------------------------------+ -| **Release date** | March 31st, 2017 | +| **Release date** | May 4th, 2017 | | | | +--------------------------------------+--------------------------------------+ -| **Purpose of the delivery** | OPNFV Danube release 1.0 | +| **Purpose of the delivery** | OPNFV Danube release 2.0 | | | | +--------------------------------------+--------------------------------------+ @@ -170,27 +170,8 @@ Documents Software Deliverables --------------------- -**Yardstick framework source code <Danube.1.0>** -+--------------------------------------+--------------------------------------+ -| **Project** | Yardstick | -| | | -+--------------------------------------+--------------------------------------+ -| **Repo/tag** | yardstick/Danube.1.0 | -| | | -+--------------------------------------+--------------------------------------+ -| **Yardstick Docker image tag** | Danube.1.0 | -| | | -+--------------------------------------+--------------------------------------+ -| **Release designation** | Danube | -| | | -+--------------------------------------+--------------------------------------+ -| **Release date** | March 31st, 2017 | -| | | -+--------------------------------------+--------------------------------------+ -| **Purpose of the delivery** | OPNFV Danube release | -| | | -+--------------------------------------+--------------------------------------+ + - The Yardstick Docker image: https://hub.docker.com/r/opnfv/yardstick (tag: danube.2.0) **Contexts** @@ -534,7 +515,7 @@ Feature additions Scenario Matrix =============== -For Danube 1.0, Yardstick was tested on the following scenarios: +For Danube 2.0, Yardstick was tested on the following scenarios: +-------------------------+---------+---------+---------+---------+ | Scenario | Apex | Compass | Fuel | Joid | @@ -598,7 +579,9 @@ For Danube 1.0, Yardstick was tested on the following scenarios: | os-nosdn-kvm_ovs_dpdk | | | X | | | _bar-noha | | | | | +-------------------------+---------+---------+---------+---------+ - +| opnfv_os-ovn-nofeature- | X | | | | +| noha_daily | | | | | ++-------------------------+---------+---------+---------+---------+ Test results ============ @@ -630,6 +613,52 @@ Known Issues/Faults Corrected Faults ---------------- +Danube.2.0: + ++----------------------------+------------------------------------------------+ +| **JIRA REFERENCE** | **SLOGAN** | +| | | ++----------------------------+------------------------------------------------+ +| JIRA: YARDSTICK-608 | Set work directory in Yardstick container | +| | | ++----------------------------+------------------------------------------------+ +| JIRA: YARDSTICK-616 | Bugfix: https support should adapt insecure | +| | situation | ++----------------------------+------------------------------------------------+ +| JIRA: YARDSTICK-620 | Yardstick virtualenv support | +| | | ++----------------------------+------------------------------------------------+ +| JIRA: YARDSTICK-621 | Bugfix: fix query job status in TC074 | +| | | ++----------------------------+------------------------------------------------+ +| JIRA: YARDSTICK-622 | Bugfix: take test case modification into | +| | effect in load_images.sh | ++----------------------------+------------------------------------------------+ +| JIRA: YARDSTICK-623 | change openrc file path to | +| | /etc/yardstick/openstack.creds | ++----------------------------+------------------------------------------------+ +| JIRA: YARDSTICK-624 | Add opnfv_os-ovn-nofeature-noha_daily test | +| | suite | ++----------------------------+------------------------------------------------+ +| JIRA: YARDSTICK-628 | Bugfix: Make tc019 and tc025 accept | +| | --task-args options | ++----------------------------+------------------------------------------------+ +| JIRA: YARDSTICK-629 | Bugfix: yardstick env prepare cmd do not | +| | support other installer | ++----------------------------+------------------------------------------------+ +| JIRA: YARDSTICK-632 | Bugfix: KeyError when using http dispatcher | +| | | ++----------------------------+------------------------------------------------+ +| JIRA: YARDSTICK-633 | Bugfix: Environment Compatibility Issues in HA | +| | Test Cases | ++----------------------------+------------------------------------------------+ +| JIRA: YARDSTICK-634 | fix ha issue when run tc050~tc054 in ci | +| | | ++----------------------------+------------------------------------------------+ +| JIRA: YARDSTICK-635 | Bugfix: Local Openstack Operation in HA test | +| | frameworks | ++----------------------------+------------------------------------------------+ + Danube.1.0: +----------------------------+------------------------------------------------+ @@ -644,7 +673,7 @@ Danube.1.0: +----------------------------+------------------------------------------------+ -Danube 1.0 known restrictions/issues +Danube 2.0 known restrictions/issues ==================================== +-----------+-----------+----------------------------------------------+ | Installer | Scenario | Issue | @@ -662,7 +691,6 @@ Danube 1.0 known restrictions/issues +-----------+-----------+----------------------------------------------+ - Open JIRA tickets ================= @@ -670,6 +698,9 @@ Open JIRA tickets | **JIRA REFERENCE** | **SLOGAN** | | | | +----------------------------+------------------------------------------------+ +| JIRA: YARDSTICK-626 | Fio and Lmbench don't work in Ubuntu-arm64 | +| | image | ++----------------------------+------------------------------------------------+ | JIRA: YARDSTICK-603 | Timeout waiting for floating ip | | | (which actually pingable) | +----------------------------+------------------------------------------------+ diff --git a/docs/testing/user/userguide/04-installation.rst b/docs/testing/user/userguide/04-installation.rst index c1325cab5..0c2bb58cf 100644 --- a/docs/testing/user/userguide/04-installation.rst +++ b/docs/testing/user/userguide/04-installation.rst @@ -63,6 +63,10 @@ Prepare the Yardstick container .. _dockerhub: https://hub.docker.com/r/opnfv/yardstick/ +Install docker on your guest system with the following command, if not done yet:: + + wget -qO- https://get.docker.com/ | sh + Pull the Yardstick Docker image (``opnfv/yardstick``) from the public dockerhub registry under the OPNFV account: dockerhub_, with the following docker command:: @@ -146,6 +150,12 @@ In the Yardstick container, the Yardstick repository is located in the ``/home/o yardstick env prepare **NOTE**: The above command just works for four OPNFV installers -- **Apex**, **Compass**, **Fuel** and **Joid**. +The env prepare command may take up to 6-8 minutes to finish building +yardstick-image and other environment preparation. Meanwhile if you wish to +monitor the env prepare process, you can enter the Yardstick container in a new +terminal window and execute the following command:: + + tail -f /var/log/yardstick/uwsgi.log The second way @@ -267,14 +277,23 @@ Docker image from Docker hub:: Install Yardstick ^^^^^^^^^^^^^^^^^^^^^ +Prerequisite preparation:: + + apt-get update && apt-get install -y git python-setuptools python-pip + easy_install -U setuptools==30.0.0 + pip install appdirs==1.4.0 + pip install virtualenv + Create a virtual environment:: virtualenv ~/yardstick_venv + export YARDSTICK_VENV=~/yardstick_venv source ~/yardstick_venv/bin/activate Download the source code and install Yardstick from it:: git clone https://gerrit.opnfv.org/gerrit/yardstick + export YARDSTICK_REPO_DIR=~/yardstick cd yardstick ./install.sh @@ -487,4 +506,3 @@ yaml file and add test cases, constraint or task arguments if necessary. Proxy Support (**Todo**) --------------------------- - diff --git a/nsb_setup.sh b/nsb_setup.sh index 332c0345c..05d1fd6db 100755 --- a/nsb_setup.sh +++ b/nsb_setup.sh @@ -241,5 +241,5 @@ else clear echo "Installation completed..." echo "Virtual Environment : $INSTALL_BIN_PATH/yardstick_venv" -echo "Please Refer README.NSB.rst document on how to get started on VNF testing." +echo "Please refer to Chapter 13 of the Yardstick User Guide for how to get started with VNF testing." fi diff --git a/tests/opnfv/test_cases/opnfv_yardstick_tc019.yaml b/tests/opnfv/test_cases/opnfv_yardstick_tc019.yaml index ea36b7b38..9b720e17e 100644 --- a/tests/opnfv/test_cases/opnfv_yardstick_tc019.yaml +++ b/tests/opnfv/test_cases/opnfv_yardstick_tc019.yaml @@ -12,6 +12,8 @@ schema: "yardstick:task:0.1" description: > Sample test case for the HA of controller node Openstack service. +{% set file = file or 'etc/yardstick/nodes/fuel_baremetal/pod.yaml' %} + scenarios: - type: ServiceHA @@ -50,4 +52,4 @@ scenarios: context: type: Node name: LF - file: etc/yardstick/nodes/fuel_virtual/pod.yaml + file: {{file}} diff --git a/tests/opnfv/test_cases/opnfv_yardstick_tc025.yaml b/tests/opnfv/test_cases/opnfv_yardstick_tc025.yaml index 4a995fd5a..ec3d1c8d1 100644 --- a/tests/opnfv/test_cases/opnfv_yardstick_tc025.yaml +++ b/tests/opnfv/test_cases/opnfv_yardstick_tc025.yaml @@ -12,6 +12,8 @@ schema: "yardstick:task:0.1" description: > Sample test case for the HA of OpenStack Controll Node abnormally shutdown. +{% set file = file or 'etc/yardstick/nodes/fuel_virtual/pod.yaml' %} + scenarios: - type: ServiceHA @@ -49,4 +51,4 @@ scenarios: context: type: Node name: LF - file: etc/yardstick/nodes/fuel_virtual/pod.yaml + file: {{file}} diff --git a/tests/opnfv/test_cases/opnfv_yardstick_tc050.yaml b/tests/opnfv/test_cases/opnfv_yardstick_tc050.yaml index b1dc31e90..1296c0592 100644 --- a/tests/opnfv/test_cases/opnfv_yardstick_tc050.yaml +++ b/tests/opnfv/test_cases/opnfv_yardstick_tc050.yaml @@ -14,6 +14,10 @@ description: > This test case is written by new scenario-based HA testing framework. {% set file = file or 'etc/yardstick/nodes/fuel_baremetal/pod.yaml' %} +{% set external_net = external_net or 'br-ex' %} +{% set management_net = management_net or 'br-mgmt' %} +{% set storage_net = storage_net or 'br-storage' %} +{% set internal_net = internal_net or 'br-mesh' %} scenarios: - @@ -26,9 +30,9 @@ scenarios: key: "close-br-public" attack_key: "close-interface" action_parameter: - interface: "br-ex" + interface: {{external_net}} rollback_parameter: - interface: "br-ex" + interface: {{external_net}} - fault_type: "general-attacker" @@ -36,9 +40,9 @@ scenarios: key: "close-br-mgmt" attack_key: "close-interface" action_parameter: - interface: "br-mgmt" + interface: {{management_net}} rollback_parameter: - interface: "br-mgmt" + interface: {{management_net}} - fault_type: "general-attacker" @@ -46,9 +50,9 @@ scenarios: key: "close-br-storage" attack_key: "close-interface" action_parameter: - interface: "br-storage" + interface: {{storage_net}} rollback_parameter: - interface: "br-storage" + interface: {{storage_net}} - fault_type: "general-attacker" @@ -56,9 +60,9 @@ scenarios: key: "close-br-private" attack_key: "close-interface" action_parameter: - interface: "br-mesh" + interface: {{internal_net}} rollback_parameter: - interface: "br-mesh" + interface: {{internal_net}} monitors: - diff --git a/tests/opnfv/test_cases/opnfv_yardstick_tc052.yaml b/tests/opnfv/test_cases/opnfv_yardstick_tc052.yaml index 6e060b15d..4254e79b6 100644 --- a/tests/opnfv/test_cases/opnfv_yardstick_tc052.yaml +++ b/tests/opnfv/test_cases/opnfv_yardstick_tc052.yaml @@ -40,7 +40,6 @@ scenarios: operation_type: "general-operation" key: "create-flavor" operation_key: "nova-create-flavor" - host: node1 action_parameter: flavorconfig: "test-001 test-001 100 1 1" rollback_parameter: @@ -50,7 +49,6 @@ scenarios: - checker_type: "general-result-checker" key: "check-flavor" - host: node1 checker_key: "nova-flavor-checker" expectedValue: "test-001" condition: "in" diff --git a/tests/opnfv/test_cases/opnfv_yardstick_tc053.yaml b/tests/opnfv/test_cases/opnfv_yardstick_tc053.yaml index b6bbb8966..cc5b5cd3e 100644 --- a/tests/opnfv/test_cases/opnfv_yardstick_tc053.yaml +++ b/tests/opnfv/test_cases/opnfv_yardstick_tc053.yaml @@ -34,7 +34,7 @@ scenarios: host: node1 monitor_time: 20 sla: - max_recover_time: 30 + max_recover_time: 20 - monitor_type: "openstack-cmd" diff --git a/tests/opnfv/test_cases/opnfv_yardstick_tc054.yaml b/tests/opnfv/test_cases/opnfv_yardstick_tc054.yaml index 2d51a96cc..b9bb889a1 100644 --- a/tests/opnfv/test_cases/opnfv_yardstick_tc054.yaml +++ b/tests/opnfv/test_cases/opnfv_yardstick_tc054.yaml @@ -14,6 +14,10 @@ description: > This test case is written by new scenario-based HA testing framework. {% set file = file or 'etc/yardstick/nodes/fuel_baremetal/pod.yaml' %} +{% set vip_management = vip_management or '192.168.0.2' %} +{% set vip_public = vip_public or '172.16.0.3' %} +{% set vip_router_management = vip_router_management or '192.168.0.1' %} +{% set vip_router_public = vip_router_public or '172.16.0.2' %} scenarios: - @@ -43,7 +47,7 @@ scenarios: sla: max_outage_time: 5 parameter: - ip_address: "192.168.0.2" + ip_address: {{vip_management}} - monitor_type: "general-monitor" @@ -54,7 +58,7 @@ scenarios: sla: max_outage_time: 5 parameter: - ip_address: "172.16.0.2" + ip_address: {{vip_router_public}} - monitor_type: "general-monitor" @@ -65,7 +69,7 @@ scenarios: sla: max_outage_time: 5 parameter: - ip_address: "192.168.0.1" + ip_address: {{vip_router_management}} - monitor_type: "general-monitor" @@ -76,7 +80,7 @@ scenarios: sla: max_outage_time: 5 parameter: - ip_address: "172.16.0.3" + ip_address: {{vip_public}} steps: diff --git a/tests/opnfv/test_suites/opnfv_os-nosdn-nofeature-ha_daily.yaml b/tests/opnfv/test_suites/opnfv_os-nosdn-nofeature-ha_daily.yaml index 97c234e45..d18a4e6d5 100644 --- a/tests/opnfv/test_suites/opnfv_os-nosdn-nofeature-ha_daily.yaml +++ b/tests/opnfv/test_suites/opnfv_os-nosdn-nofeature-ha_daily.yaml @@ -37,9 +37,21 @@ test_cases: huawei-pod1: '{"pod_info": "etc/yardstick/nodes/compass_sclab_physical/pod.yaml", "host": "node4.LF","target": "node5.LF"}' - + file_name: opnfv_yardstick_tc019.yaml + constraint: + installer: compass,fuel + pod: huawei-pod2,ericsson-pod1 + task_args: + huawei-pod2: '{"file": "etc/yardstick/nodes/compass_sclab_physical/pod.yaml"}' + ericsson-pod1: '{"file": "etc/yardstick/nodes/fuel_baremetal/pod.yaml"}' +- file_name: opnfv_yardstick_tc045.yaml constraint: - installer: fuel + installer: compass,fuel + pod: huawei-pod2,ericsson-pod1 + task_args: + huawei-pod2: '{"file": "etc/yardstick/nodes/compass_sclab_physical/pod.yaml"}' + ericsson-pod1: '{"file": "etc/yardstick/nodes/fuel_baremetal/pod.yaml"}' - file_name: opnfv_yardstick_tc046.yaml constraint: @@ -47,11 +59,19 @@ test_cases: - file_name: opnfv_yardstick_tc047.yaml constraint: - installer: fuel + installer: compass,fuel + pod: huawei-pod2,ericsson-pod1 + task_args: + huawei-pod2: '{"file": "etc/yardstick/nodes/compass_sclab_physical/pod.yaml"}' + ericsson-pod1: '{"file": "etc/yardstick/nodes/fuel_baremetal/pod.yaml"}' - file_name: opnfv_yardstick_tc048.yaml constraint: - installer: fuel + installer: compass,fuel + pod: huawei-pod2,ericsson-pod1 + task_args: + huawei-pod2: '{"file": "etc/yardstick/nodes/compass_sclab_physical/pod.yaml"}' + ericsson-pod1: '{"file": "etc/yardstick/nodes/fuel_baremetal/pod.yaml"}' - file_name: opnfv_yardstick_tc049.yaml constraint: @@ -63,7 +83,11 @@ test_cases: - file_name: opnfv_yardstick_tc051.yaml constraint: - installer: fuel + installer: compass,fuel + pod: huawei-pod2,ericsson-pod1 + task_args: + huawei-pod2: '{"file": "etc/yardstick/nodes/compass_sclab_physical/pod.yaml"}' + ericsson-pod1: '{"file": "etc/yardstick/nodes/fuel_baremetal/pod.yaml"}' - file_name: opnfv_yardstick_tc052.yaml constraint: diff --git a/tests/unit/benchmark/contexts/test_model.py b/tests/unit/benchmark/contexts/test_model.py index 4a10761f7..122f100de 100644 --- a/tests/unit/benchmark/contexts/test_model.py +++ b/tests/unit/benchmark/contexts/test_model.py @@ -251,4 +251,25 @@ class ServerTestCase(unittest.TestCase): ports=['some-server-some-network-port'], user=self.mock_context.user, key_name=self.mock_context.keypair_name, + user_data='', + scheduler_hints='hints') + + @mock.patch('yardstick.benchmark.contexts.heat.HeatTemplate') + def test__add_instance_with_user_data(self, mock_template): + user_data = "USER_DATA" + attrs = { + 'image': 'some-image', 'flavor': 'some-flavor', + 'user_data': user_data, + } + test_server = model.Server('foo', self.mock_context, attrs) + + test_server._add_instance(mock_template, 'some-server', + [], 'hints') + + mock_template.add_server.assert_called_with( + 'some-server', 'some-image', 'some-flavor', + ports=[], + user=self.mock_context.user, + key_name=self.mock_context.keypair_name, + user_data=user_data, scheduler_hints='hints') diff --git a/tests/unit/benchmark/scenarios/availability/test_scenario_general.py b/tests/unit/benchmark/scenarios/availability/test_scenario_general.py index 593fc77b3..ea54fbb9b 100644 --- a/tests/unit/benchmark/scenarios/availability/test_scenario_general.py +++ b/tests/unit/benchmark/scenarios/availability/test_scenario_general.py @@ -48,7 +48,7 @@ class ScenarioGeneralTestCase(unittest.TestCase): def test_scenario_general_all_successful(self, mock_director): ins = ScenarioGeneral(self.scenario_cfg, None) ins.setup() - ins.run(None) + ins.run({}) ins.teardown() def test_scenario_general_exception(self, mock_director): @@ -56,7 +56,7 @@ class ScenarioGeneralTestCase(unittest.TestCase): mock_obj = mock.Mock() mock_obj.createActionPlayer.side_effect = KeyError('Wrong') ins.director = mock_obj - ins.run(None) + ins.run({}) ins.teardown() def test_scenario_general_case_fail(self, mock_director): @@ -64,5 +64,5 @@ class ScenarioGeneralTestCase(unittest.TestCase): mock_obj = mock.Mock() mock_obj.verify.return_value = False ins.director = mock_obj - ins.run(None) + ins.run({}) ins.teardown() diff --git a/tests/unit/benchmark/scenarios/availability/test_util.py b/tests/unit/benchmark/scenarios/availability/test_util.py new file mode 100644 index 000000000..bb0e6bc79 --- /dev/null +++ b/tests/unit/benchmark/scenarios/availability/test_util.py @@ -0,0 +1,32 @@ +#!/usr/bin/env python + +############################################################################## +# Copyright (c) 2016 Kanglin Yin and others +# 14_ykl@tongji.edu.cn +# All rights reserved. This program and the accompanying materials +# are made available under the terms of the Apache License, Version 2.0 +# which accompanies this distribution, and is available at +# http://www.apache.org/licenses/LICENSE-2.0 +############################################################################## + +# Unittest for yardstick.benchmark.scenarios.availability.utils + +import mock +import unittest + +from yardstick.benchmark.scenarios.availability import util + +@mock.patch('yardstick.benchmark.scenarios.availability.util.subprocess') +class ExecuteShellTestCase(unittest.TestCase): + + def test__fun_execute_shell_command_successful(self, mock_subprocess): + cmd = "env" + mock_subprocess.check_output.return_value = (0, 'unittest') + exitcode, output = util.execute_shell_command(cmd) + self.assertEqual(exitcode, 0) + + def test__fun_execute_shell_command_fail_cmd_exception(self, mock_subprocess): + cmd = "env" + mock_subprocess.check_output.side_effect = RuntimeError + exitcode, output = util.execute_shell_command(cmd) + self.assertEqual(exitcode, -1) diff --git a/yardstick/benchmark/contexts/model.py b/yardstick/benchmark/contexts/model.py index 71ee1f3c2..816ec7972 100644 --- a/yardstick/benchmark/contexts/model.py +++ b/yardstick/benchmark/contexts/model.py @@ -150,6 +150,7 @@ class Server(Object): # pragma: no cover self.context = context self.public_ip = None self.private_ip = None + self.user_data = '' if attrs is None: attrs = {} @@ -202,6 +203,8 @@ class Server(Object): # pragma: no cover if "flavor" in attrs: self._flavor = attrs["flavor"] + self.user_data = attrs.get('user_data', '') + Server.list.append(self) @property @@ -252,6 +255,7 @@ class Server(Object): # pragma: no cover ports=port_name_list, user=self.user, key_name=self.keypair_name, + user_data=self.user_data, scheduler_hints=scheduler_hints) def add_to_template(self, template, networks, scheduler_hints=None): diff --git a/yardstick/benchmark/runners/base.py b/yardstick/benchmark/runners/base.py index 7c76e42df..b48ed973a 100755 --- a/yardstick/benchmark/runners/base.py +++ b/yardstick/benchmark/runners/base.py @@ -22,6 +22,7 @@ import logging import multiprocessing import subprocess import time +import os import traceback from oslo_config import cfg @@ -40,7 +41,11 @@ def _output_serializer_main(filename, queue, config): Use of this process enables multiple instances of a scenario without messing up the output file. """ - out_type = config['yardstick'].get('DEFAULT', {}).get('dispatcher', 'file') + try: + out_type = config['yardstick'].get('DEFAULT', {})['dispatcher'] + except KeyError: + out_type = os.environ.get('DISPATCHER', 'file') + conf = { 'type': out_type.capitalize(), 'file_path': filename diff --git a/yardstick/benchmark/scenarios/availability/attacker/attacker_baremetal.py b/yardstick/benchmark/scenarios/availability/attacker/attacker_baremetal.py index f7683fd84..22de0b645 100644 --- a/yardstick/benchmark/scenarios/availability/attacker/attacker_baremetal.py +++ b/yardstick/benchmark/scenarios/availability/attacker/attacker_baremetal.py @@ -61,7 +61,7 @@ class BaremetalAttacker(BaseAttacker): def check(self): with open(self.check_script, "r") as stdin_file: exit_status, stdout, stderr = self.connection.execute( - "/bin/sh -s {0} -W 10".format(self.host_ip), + "sudo /bin/sh -s {0} -W 10".format(self.host_ip), stdin=stdin_file) LOG.debug("check ret: %s out:%s err:%s", @@ -74,7 +74,7 @@ class BaremetalAttacker(BaseAttacker): def inject_fault(self): exit_status, stdout, stderr = self.connection.execute( - "shutdown -h now") + "sudo shutdown -h now") LOG.debug("inject fault ret: %s out:%s err:%s", exit_status, stdout, stderr) if not exit_status: @@ -98,12 +98,12 @@ class BaremetalAttacker(BaseAttacker): if self.jump_connection is not None: with open(self.recovery_script, "r") as stdin_file: self.jump_connection.execute( - "/bin/bash -s {0} {1} {2} {3}".format( + "sudo /bin/bash -s {0} {1} {2} {3}".format( self.ipmi_ip, self.ipmi_user, self.ipmi_pwd, "on"), stdin=stdin_file) else: _execute_shell_command( - "/bin/bash -s {0} {1} {2} {3}".format( + "sudo /bin/bash -s {0} {1} {2} {3}".format( self.ipmi_ip, self.ipmi_user, self.ipmi_pwd, "on"), stdin=open(self.recovery_script, "r")) diff --git a/yardstick/benchmark/scenarios/availability/attacker/attacker_general.py b/yardstick/benchmark/scenarios/availability/attacker/attacker_general.py index 35cbccd6e..48863af93 100644 --- a/yardstick/benchmark/scenarios/availability/attacker/attacker_general.py +++ b/yardstick/benchmark/scenarios/availability/attacker/attacker_general.py @@ -64,12 +64,12 @@ class GeneralAttacker(BaseAttacker): LOG.debug("the shell command is: %s", self.action_param) with open(self.inject_script, "r") as stdin_file: exit_status, stdout, stderr = self.connection.execute( - self.action_param, + "sudo {}".format(self.action_param), stdin=stdin_file) else: with open(self.inject_script, "r") as stdin_file: exit_status, stdout, stderr = self.connection.execute( - "/bin/bash -s ", + "sudo /bin/bash -s ", stdin=stdin_file) LOG.debug("the inject_fault's exit status is: %s", exit_status) @@ -85,10 +85,10 @@ class GeneralAttacker(BaseAttacker): LOG.debug("the shell command is: %s", self.rollback_param) with open(self.recovery_script, "r") as stdin_file: exit_status, stdout, stderr = self.connection.execute( - self.rollback_param, + "sudo {}".format(self.rollback_param), stdin=stdin_file) else: with open(self.recovery_script, "r") as stdin_file: exit_status, stdout, stderr = self.connection.execute( - "/bin/bash -s ", + "sudo /bin/bash -s ", stdin=stdin_file) diff --git a/yardstick/benchmark/scenarios/availability/attacker/attacker_process.py b/yardstick/benchmark/scenarios/availability/attacker/attacker_process.py index dc94a0b17..bff4a6dc3 100644 --- a/yardstick/benchmark/scenarios/availability/attacker/attacker_process.py +++ b/yardstick/benchmark/scenarios/availability/attacker/attacker_process.py @@ -44,10 +44,10 @@ class ProcessAttacker(BaseAttacker): def check(self): with open(self.check_script, "r") as stdin_file: exit_status, stdout, stderr = self.connection.execute( - "/bin/sh -s {0}".format(self.service_name), + "sudo /bin/sh -s {0}".format(self.service_name), stdin=stdin_file) - if stdout and "running" in stdout: + if stdout: LOG.info("check the envrioment success!") return True else: @@ -59,11 +59,11 @@ class ProcessAttacker(BaseAttacker): def inject_fault(self): with open(self.inject_script, "r") as stdin_file: exit_status, stdout, stderr = self.connection.execute( - "/bin/sh -s {0}".format(self.service_name), + "sudo /bin/sh -s {0}".format(self.service_name), stdin=stdin_file) def recover(self): with open(self.recovery_script, "r") as stdin_file: exit_status, stdout, stderr = self.connection.execute( - "/bin/sh -s {0} ".format(self.service_name), + "sudo /bin/bash -s {0} ".format(self.service_name), stdin=stdin_file) diff --git a/yardstick/benchmark/scenarios/availability/ha_tools/check_process_python.bash b/yardstick/benchmark/scenarios/availability/ha_tools/check_process_python.bash index 88baed7d9..96257804f 100755 --- a/yardstick/benchmark/scenarios/availability/ha_tools/check_process_python.bash +++ b/yardstick/benchmark/scenarios/availability/ha_tools/check_process_python.bash @@ -15,4 +15,4 @@ set -e process_name=$1 -ps aux | grep -e .*python.*$process_name.* | grep -v grep | wc -l +ps aux | grep -e $process_name | grep -v grep | grep -v /bin/sh | wc -l diff --git a/yardstick/benchmark/scenarios/availability/ha_tools/fault_process_kill.bash b/yardstick/benchmark/scenarios/availability/ha_tools/fault_process_kill.bash index d0e2f1683..e0491b0d5 100755 --- a/yardstick/benchmark/scenarios/availability/ha_tools/fault_process_kill.bash +++ b/yardstick/benchmark/scenarios/availability/ha_tools/fault_process_kill.bash @@ -15,4 +15,8 @@ set -e process_name=$1 -killall -9 $process_name +if [ "$process_name" = "keystone" ]; then + killall -9 -u $process_name +else + killall -9 $process_name +fi diff --git a/yardstick/benchmark/scenarios/availability/ha_tools/nova/create_flavor.bash b/yardstick/benchmark/scenarios/availability/ha_tools/nova/create_flavor.bash index 38dbe0cee..941563e7c 100644 --- a/yardstick/benchmark/scenarios/availability/ha_tools/nova/create_flavor.bash +++ b/yardstick/benchmark/scenarios/availability/ha_tools/nova/create_flavor.bash @@ -14,6 +14,4 @@ set -e -source /root/openrc - openstack flavor create $1 --id $2 --ram $3 --disk $4 --vcpus $5 diff --git a/yardstick/benchmark/scenarios/availability/ha_tools/nova/delete_flavor.bash b/yardstick/benchmark/scenarios/availability/ha_tools/nova/delete_flavor.bash index 37d2cf6c0..e998464c7 100644 --- a/yardstick/benchmark/scenarios/availability/ha_tools/nova/delete_flavor.bash +++ b/yardstick/benchmark/scenarios/availability/ha_tools/nova/delete_flavor.bash @@ -14,6 +14,4 @@ set -e -source /root/openrc - openstack flavor delete $1 diff --git a/yardstick/benchmark/scenarios/availability/ha_tools/nova/show_flavors.bash b/yardstick/benchmark/scenarios/availability/ha_tools/nova/show_flavors.bash index 0b1a9f056..1b0739602 100644 --- a/yardstick/benchmark/scenarios/availability/ha_tools/nova/show_flavors.bash +++ b/yardstick/benchmark/scenarios/availability/ha_tools/nova/show_flavors.bash @@ -13,6 +13,4 @@ set -e -source /root/openrc - nova flavor-list
\ No newline at end of file diff --git a/yardstick/benchmark/scenarios/availability/ha_tools/start_service.bash b/yardstick/benchmark/scenarios/availability/ha_tools/start_service.bash index c1bf8b7eb..858d86ca0 100755 --- a/yardstick/benchmark/scenarios/availability/ha_tools/start_service.bash +++ b/yardstick/benchmark/scenarios/availability/ha_tools/start_service.bash @@ -15,4 +15,18 @@ set -e service_name=$1 -service $service_name start +Distributor=$(lsb_release -a | grep "Distributor ID" | awk '{print $3}') + +if [ "$Distributor" != "Ubuntu" -a "$service_name" != "keystone" -a "$service_name" != "neutron-server" -a "$service_name" != "haproxy" ]; then + service_name="openstack-"${service_name} +elif [ "$Distributor" = "Ubuntu" -a "$service_name" = "keystone" ]; then + service_name="apache2" +elif [ "$service_name" = "keystone" ]; then + service_name="httpd" +fi + +if which systemctl 2>/dev/null; then + systemctl start $service_name +else + service $service_name start +fi diff --git a/yardstick/benchmark/scenarios/availability/ha_tools/stop_service.bash b/yardstick/benchmark/scenarios/availability/ha_tools/stop_service.bash index a8901784e..fd8534e24 100755 --- a/yardstick/benchmark/scenarios/availability/ha_tools/stop_service.bash +++ b/yardstick/benchmark/scenarios/availability/ha_tools/stop_service.bash @@ -15,7 +15,22 @@ set -e service_name=$1 -service $service_name stop +Distributor=$(lsb_release -a | grep "Distributor ID" | awk '{print $3}') + +if [ "$Distributor" != "Ubuntu" -a "$service_name" != "keystone" -a "$service_name" != "neutron-server" -a "$service_name" != "haproxy" ]; then + service_name="openstack-"${service_name} +elif [ "$Distributor" = "Ubuntu" -a "$service_name" = "keystone" ]; then + service_name="apache2" +elif [ "$service_name" = "keystone" ]; then + service_name="httpd" +fi + +if which systemctl 2>/dev/null; then + systemctl stop $service_name +else + service $service_name stop +fi + # TODO # check the service status diff --git a/yardstick/benchmark/scenarios/availability/monitor/monitor_command.py b/yardstick/benchmark/scenarios/availability/monitor/monitor_command.py index ef07d947d..033a2d721 100644 --- a/yardstick/benchmark/scenarios/availability/monitor/monitor_command.py +++ b/yardstick/benchmark/scenarios/availability/monitor/monitor_command.py @@ -55,16 +55,7 @@ class MonitorOpenstackCmd(basemonitor.BaseMonitor): def monitor_func(self): exit_status = 0 - if self.connection: - with open(self.check_script, "r") as stdin_file: - exit_status, stdout, stderr = self.connection.execute( - "/bin/bash -s '{0}'".format(self.cmd), - stdin=stdin_file) - - LOG.debug("the ret stats: %s stdout: %s stderr: %s", - exit_status, stdout, stderr) - else: - exit_status, stdout = _execute_shell_command(self.cmd) + exit_status, stdout = _execute_shell_command(self.cmd) if exit_status: return False return True diff --git a/yardstick/benchmark/scenarios/availability/monitor/monitor_general.py b/yardstick/benchmark/scenarios/availability/monitor/monitor_general.py index c6c5a75a1..c16765fe0 100644 --- a/yardstick/benchmark/scenarios/availability/monitor/monitor_general.py +++ b/yardstick/benchmark/scenarios/availability/monitor/monitor_general.py @@ -46,12 +46,12 @@ class GeneralMonitor(basemonitor.BaseMonitor): if "parameter" in self._config: with open(self.monitor_script, "r") as stdin_file: exit_status, stdout, stderr = self.connection.execute( - self.cmd_param, + "sudo {}".format(self.cmd_param), stdin=stdin_file) else: with open(self.monitor_script, "r") as stdin_file: exit_status, stdout, stderr = self.connection.execute( - "/bin/bash -s ", + "sudo /bin/bash -s ", stdin=stdin_file) if exit_status: diff --git a/yardstick/benchmark/scenarios/availability/monitor/monitor_process.py b/yardstick/benchmark/scenarios/availability/monitor/monitor_process.py index d2020e31c..31526b011 100644 --- a/yardstick/benchmark/scenarios/availability/monitor/monitor_process.py +++ b/yardstick/benchmark/scenarios/availability/monitor/monitor_process.py @@ -33,7 +33,7 @@ class MonitorProcess(basemonitor.BaseMonitor): def monitor_func(self): with open(self.check_script, "r") as stdin_file: exit_status, stdout, stderr = self.connection.execute( - "/bin/sh -s {0}".format(self.process_name), + "sudo /bin/sh -s {0}".format(self.process_name), stdin=stdin_file) if not stdout or int(stdout) <= 0: LOG.info("the process (%s) is not running!", self.process_name) @@ -49,6 +49,7 @@ class MonitorProcess(basemonitor.BaseMonitor): LOG.error("SLA failure: %f > %f", outage_time, max_outage_time) return False else: + LOG.info("the sla is passed") return True diff --git a/yardstick/benchmark/scenarios/availability/operation/operation_general.py b/yardstick/benchmark/scenarios/availability/operation/operation_general.py index 49c63cc75..8fd387e47 100644 --- a/yardstick/benchmark/scenarios/availability/operation/operation_general.py +++ b/yardstick/benchmark/scenarios/availability/operation/operation_general.py @@ -14,7 +14,8 @@ from yardstick.benchmark.scenarios.availability.operation.baseoperation \ BaseOperation import yardstick.ssh as ssh -from yardstick.benchmark.scenarios.availability.util import buildshellparams +from yardstick.benchmark.scenarios.availability.util \ + import buildshellparams, execute_shell_command LOG = logging.getLogger(__name__) @@ -25,24 +26,29 @@ class GeneralOperaion(BaseOperation): def setup(self): LOG.debug("config:%s context:%s", self._config, self._context) - host = self._context.get(self._config['host'], None) + host = self._context.get(self._config.get('host', None), None) - self.connection = ssh.SSH.from_node(host, defaults={"user": "root"}) - self.connection.wait(timeout=600) - LOG.debug("ssh host success!") + self.connection = None + if host: + self.connection = ssh.SSH.from_node( + host, defaults={"user": "root"}) + self.connection.wait(timeout=600) + LOG.debug("ssh host success!") self.key = self._config['key'] self.operation_key = self._config['operation_key'] if "action_parameter" in self._config: actionParameter = self._config['action_parameter'] - str = buildshellparams(actionParameter) + str = buildshellparams( + actionParameter, True if self.connection else False) l = list(item for item in actionParameter.values()) self.action_param = str.format(*l) if "rollback_parameter" in self._config: rollbackParameter = self._config['rollback_parameter'] - str = buildshellparams(rollbackParameter) + str = buildshellparams( + rollbackParameter, True if self.connection else False) l = list(item for item in rollbackParameter.values()) self.rollback_param = str.format(*l) @@ -55,15 +61,25 @@ class GeneralOperaion(BaseOperation): def run(self): if "action_parameter" in self._config: - with open(self.action_script, "r") as stdin_file: - exit_status, stdout, stderr = self.connection.execute( - self.action_param, - stdin=stdin_file) + if self.connection: + with open(self.action_script, "r") as stdin_file: + exit_status, stdout, stderr = self.connection.execute( + "sudo {}".format(self.action_param), + stdin=stdin_file) + else: + exit_status, stdout = \ + execute_shell_command( + "/bin/bash {0} {1}".format( + self.action_script, self.action_param)) else: - with open(self.action_script, "r") as stdin_file: - exit_status, stdout, stderr = self.connection.execute( - "/bin/sh -s ", - stdin=stdin_file) + if self.connection: + with open(self.action_script, "r") as stdin_file: + exit_status, stdout, stderr = self.connection.execute( + "sudo /bin/sh -s ", + stdin=stdin_file) + else: + exit_status, stdout = execute_shell_command( + "/bin/bash {0}".format(self.action_script)) if exit_status == 0: LOG.debug("success,the operation's output is: %s", stdout) @@ -74,12 +90,22 @@ class GeneralOperaion(BaseOperation): def rollback(self): if "rollback_parameter" in self._config: - with open(self.rollback_script, "r") as stdin_file: - exit_status, stdout, stderr = self.connection.execute( - self.rollback_param, - stdin=stdin_file) + if self.connection: + with open(self.rollback_script, "r") as stdin_file: + exit_status, stdout, stderr = self.connection.execute( + "sudo {}".format(self.rollback_param), + stdin=stdin_file) + else: + exit_status, stdout = \ + execute_shell_command( + "/bin/bash {0} {1}".format( + self.rollback_script, self.rollback_param)) else: - with open(self.rollback_script, "r") as stdin_file: - exit_status, stdout, stderr = self.connection.execute( - "/bin/sh -s ", - stdin=stdin_file) + if self.connection: + with open(self.rollback_script, "r") as stdin_file: + exit_status, stdout, stderr = self.connection.execute( + "sudo /bin/sh -s ", + stdin=stdin_file) + else: + exit_status, stdout = execute_shell_command( + "/bin/bash {0}".format(self.rollback_script)) diff --git a/yardstick/benchmark/scenarios/availability/result_checker/result_checker_general.py b/yardstick/benchmark/scenarios/availability/result_checker/result_checker_general.py index ff6017b88..454338175 100644 --- a/yardstick/benchmark/scenarios/availability/result_checker/result_checker_general.py +++ b/yardstick/benchmark/scenarios/availability/result_checker/result_checker_general.py @@ -9,13 +9,13 @@ from __future__ import absolute_import import logging - from yardstick.benchmark.scenarios.availability.result_checker \ .baseresultchecker import \ BaseResultChecker from yardstick.benchmark.scenarios.availability import Condition import yardstick.ssh as ssh -from yardstick.benchmark.scenarios.availability.util import buildshellparams +from yardstick.benchmark.scenarios.availability.util \ + import buildshellparams, execute_shell_command LOG = logging.getLogger(__name__) @@ -25,11 +25,14 @@ class GeneralResultChecker(BaseResultChecker): def setup(self): LOG.debug("config:%s context:%s", self._config, self._context) - host = self._context.get(self._config['host'], None) + host = self._context.get(self._config.get('host', None), None) - self.connection = ssh.SSH.from_node(host, defaults={"user": "root"}) - self.connection.wait(timeout=600) - LOG.debug("ssh host success!") + self.connection = None + if host: + self.connection = ssh.SSH.from_node( + host, defaults={"user": "root"}) + self.connection.wait(timeout=600) + LOG.debug("ssh host success!") self.key = self._config['key'] self.resultchecker_key = self._config['checker_key'] @@ -41,7 +44,8 @@ class GeneralResultChecker(BaseResultChecker): self.key = self._config['key'] if "parameter" in self._config: parameter = self._config['parameter'] - str = buildshellparams(parameter) + str = buildshellparams( + parameter, True if self.connection else False) l = list(item for item in parameter.values()) self.shell_cmd = str.format(*l) @@ -52,19 +56,32 @@ class GeneralResultChecker(BaseResultChecker): def verify(self): if "parameter" in self._config: - with open(self.verify_script, "r") as stdin_file: - exit_status, stdout, stderr = self.connection.execute( - self.shell_cmd, - stdin=stdin_file) + if self.connection: + with open(self.verify_script, "r") as stdin_file: + exit_status, stdout, stderr = self.connection.execute( + "sudo {}".format(self.shell_cmd), + stdin=stdin_file) + else: + exit_status, stdout = \ + execute_shell_command( + "/bin/bash {0} {1}".format( + self.verify_script, + self.rollback_param)) + LOG.debug("action script of the operation is: %s", self.verify_script) LOG.debug("action parameter the of operation is: %s", self.shell_cmd) else: - with open(self.verify_script, "r") as stdin_file: - exit_status, stdout, stderr = self.connection.execute( - "/bin/bash -s ", - stdin=stdin_file) + if self.connection: + with open(self.verify_script, "r") as stdin_file: + exit_status, stdout, stderr = self.connection.execute( + "sudo /bin/bash -s ", + stdin=stdin_file) + else: + exit_status, stdout = execute_shell_command( + "/bin/bash {0}".format(self.verify_script)) + LOG.debug("action script of the operation is: %s", self.verify_script) diff --git a/yardstick/benchmark/scenarios/availability/scenario_general.py b/yardstick/benchmark/scenarios/availability/scenario_general.py index a950ef933..689d33a34 100644 --- a/yardstick/benchmark/scenarios/availability/scenario_general.py +++ b/yardstick/benchmark/scenarios/availability/scenario_general.py @@ -29,7 +29,7 @@ class ScenarioGeneral(base.Scenario): def setup(self): self.director = Director(self.scenario_cfg, self.context_cfg) - def run(self, args): + def run(self, result): steps = self.scenario_cfg["options"]["steps"] orderedSteps = sorted(steps, key=lambda x: x['index']) for step in orderedSteps: @@ -55,12 +55,14 @@ class ScenarioGeneral(base.Scenario): self.director.stopMonitors() if self.director.verify(): - LOG.debug( - "\033[92m congratulations, " - "the test cases scenario is pass! \033[0m") + result['sla_pass'] = 1 + LOG.info( + "\033[92m Congratulations, " + "the HA test case PASS! \033[0m") else: - LOG.debug( - "\033[91m aoh,the test cases scenario failed," + result['sla_pass'] = 0 + LOG.info( + "\033[91m Aoh, the HA test case FAIL," "please check the detail debug information! \033[0m") def teardown(self): diff --git a/yardstick/benchmark/scenarios/availability/serviceha.py b/yardstick/benchmark/scenarios/availability/serviceha.py index e82e69b7d..69727de2b 100755 --- a/yardstick/benchmark/scenarios/availability/serviceha.py +++ b/yardstick/benchmark/scenarios/availability/serviceha.py @@ -59,20 +59,21 @@ class ServiceHA(base.Scenario): return self.monitorMgr.start_monitors() - LOG.info("monitor start!") + LOG.info("HA monitor start!") for attacker in self.attackers: attacker.inject_fault() self.monitorMgr.wait_monitors() - LOG.info("monitor stop!") + LOG.info("HA monitor stop!") sla_pass = self.monitorMgr.verify_SLA() if sla_pass: result['sla_pass'] = 1 + LOG.info("The HA test case PASS the SLA") else: result['sla_pass'] = 0 - assert sla_pass is True, "the test cases is not pass the SLA" + assert sla_pass is True, "The HA test case NOT pass the SLA" return diff --git a/yardstick/benchmark/scenarios/availability/util.py b/yardstick/benchmark/scenarios/availability/util.py index 2addef8ef..eadbfa53b 100644 --- a/yardstick/benchmark/scenarios/availability/util.py +++ b/yardstick/benchmark/scenarios/availability/util.py @@ -6,14 +6,35 @@ # which accompanies this distribution, and is available at # http://www.apache.org/licenses/LICENSE-2.0 ############################################################################## +import logging +import subprocess +import traceback +LOG = logging.getLogger(__name__) -def buildshellparams(param): + +def buildshellparams(param, remote=True): i = 0 values = [] - result = '/bin/bash -s' + result = '/bin/bash -s' if remote else '' for key in param.keys(): values.append(param[key]) result += " {%d}" % i i = i + 1 return result + + +def execute_shell_command(command): + """execute shell script with error handling""" + exitcode = 0 + output = [] + try: + LOG.debug("the command is: %s", command) + output = subprocess.check_output(command, shell=True) + except Exception: + exitcode = -1 + output = traceback.format_exc() + LOG.error("exec command '%s' error:\n ", command) + LOG.error(traceback.format_exc()) + + return exitcode, output diff --git a/yardstick/benchmark/scenarios/compute/cachestat.py b/yardstick/benchmark/scenarios/compute/cachestat.py index a365968c7..40f6ed773 100644 --- a/yardstick/benchmark/scenarios/compute/cachestat.py +++ b/yardstick/benchmark/scenarios/compute/cachestat.py @@ -97,7 +97,7 @@ class CACHEstat(base.Scenario): def _filtrate_result(self, result): fields = [] cachestat = {} - data_marker = re.compile("\d+") + data_marker = re.compile(r"\d+") ite = 0 average = {'HITS': 0, 'MISSES': 0, 'DIRTIES': 0, 'RATIO': 0, 'BUFFERS_MB': 0, 'CACHE_MB': 0} diff --git a/yardstick/benchmark/scenarios/compute/cyclictest.py b/yardstick/benchmark/scenarios/compute/cyclictest.py index 594c6091e..998463ef6 100644 --- a/yardstick/benchmark/scenarios/compute/cyclictest.py +++ b/yardstick/benchmark/scenarios/compute/cyclictest.py @@ -158,7 +158,7 @@ class Cyclictest(base.Scenario): def run(self, result): """execute the benchmark""" - default_args = "-m -n -q" + default_args = "-m -n -q --notrace" if not self.setup_done: self.setup() diff --git a/yardstick/common/openstack_utils.py b/yardstick/common/openstack_utils.py index 788de0de4..1f08344e4 100644 --- a/yardstick/common/openstack_utils.py +++ b/yardstick/common/openstack_utils.py @@ -85,9 +85,13 @@ def get_session(): def get_endpoint(service_type, endpoint_type='publicURL'): auth = get_session_auth() + # for multi-region, we need to specify region + # when finding the endpoint return get_session().get_endpoint(auth=auth, service_type=service_type, - endpoint_type=endpoint_type) + endpoint_type=endpoint_type, + region_name=os.environ.get( + "OS_REGION_NAME")) # ********************************************* diff --git a/yardstick/dispatcher/http.py b/yardstick/dispatcher/http.py index e3bcbc89b..0d8d2a346 100644 --- a/yardstick/dispatcher/http.py +++ b/yardstick/dispatcher/http.py @@ -32,7 +32,7 @@ LOG = logging.getLogger(__name__) CONF = cfg.CONF http_dispatcher_opts = [ cfg.StrOpt('target', - default='http://127.0.0.1:8000/results', + default=os.getenv('TARGET', 'http://127.0.0.1:8000/results'), help='The target where the http request will be sent. ' 'If this is not set, no data will be posted. For ' 'example: target = http://hostname:1234/path'), @@ -62,7 +62,8 @@ class HttpDispatcher(DispatchBase): "description": "yardstick test cases result", "pod_name": os.environ.get('NODE_NAME', 'unknown'), "installer": os.environ.get('INSTALLER_TYPE', 'unknown'), - "version": os.environ.get('YARDSTICK_VERSION', 'unknown') + "version": os.environ.get('YARDSTICK_VERSION', 'unknown'), + "build_tag": os.environ.get('BUILD_TAG') } def record_result_data(self, data): @@ -75,7 +76,7 @@ class HttpDispatcher(DispatchBase): 'be posted.') return - self.result["details"] = self.raw_result + self.result["details"] = {'results': self.raw_result} case_name = "" for v in self.raw_result: |