diff options
Diffstat (limited to 'yardstick')
28 files changed, 105 insertions, 93 deletions
diff --git a/yardstick/__init__.py b/yardstick/__init__.py index 3ae915c18..1ad6eb0b1 100644 --- a/yardstick/__init__.py +++ b/yardstick/__init__.py @@ -13,12 +13,15 @@ import os import sys import yardstick.vTC.apexlake as apexlake +from yardstick.common import constants +from yardstick.common import utils as yardstick_utils # Hack to be able to run apexlake unit tests # without having to install apexlake. sys.path.append(os.path.dirname(apexlake.__file__)) -LOG_FILE = '/tmp/yardstick.log' +yardstick_utils.makedirs(constants.YARDSTICK_LOG_DIR) +LOG_FILE = os.path.join(constants.YARDSTICK_LOG_DIR, 'yardstick.log') LOG_FORMATTER = ('%(asctime)s ' '%(name)s %(filename)s:%(lineno)d ' '%(levelname)s %(message)s') @@ -36,6 +39,8 @@ def _init_logging(): # don't append to log file, clobber _LOG_FILE_HDLR.setFormatter(_LOG_FORMATTER) + # set log file to store debug info + _LOG_FILE_HDLR.setLevel(logging.DEBUG) del logging.root.handlers[:] logging.root.addHandler(_LOG_STREAM_HDLR) diff --git a/yardstick/benchmark/contexts/dummy.py b/yardstick/benchmark/contexts/dummy.py index f7530035c..0edc250f8 100644 --- a/yardstick/benchmark/contexts/dummy.py +++ b/yardstick/benchmark/contexts/dummy.py @@ -22,7 +22,7 @@ class DummyContext(Context): __context_type__ = "Dummy" def __init__(self): - super(self.__class__, self).__init__() + super(DummyContext, self).__init__() def init(self, attrs): pass diff --git a/yardstick/benchmark/contexts/heat.py b/yardstick/benchmark/contexts/heat.py index 0346efcf4..4c7f05236 100644 --- a/yardstick/benchmark/contexts/heat.py +++ b/yardstick/benchmark/contexts/heat.py @@ -55,7 +55,7 @@ class HeatContext(Context): self.key_filename = ''.join( [YARDSTICK_ROOT_PATH, 'yardstick/resources/files/yardstick_key-', get_short_key_uuid(self.key_uuid)]) - super(self.__class__, self).__init__() + super(HeatContext, self).__init__() def init(self, attrs): """initializes itself from the supplied arguments""" @@ -94,9 +94,10 @@ class HeatContext(Context): rsa_key = paramiko.RSAKey.generate(bits=2048, progress_func=None) rsa_key.write_private_key_file(self.key_filename) - open(self.key_filename + ".pub", "w").write("%s %s\n" % - (rsa_key.get_name(), - rsa_key.get_base64())) + print("Writing %s ..." % self.key_filename) + with open(self.key_filename + ".pub", "w") as pubkey_file: + pubkey_file.write( + "%s %s\n" % (rsa_key.get_name(), rsa_key.get_base64())) del rsa_key @property @@ -220,9 +221,9 @@ class HeatContext(Context): # copy some vital stack output into server objects for server in self.servers: - if len(server.ports) > 0: + if server.ports: # TODO(hafe) can only handle one internal network for now - port = list(server.ports.values())[0] + port = next(iter(server.ports.values())) server.private_ip = self.stack.outputs[port["stack_name"]] if server.floating_ip: diff --git a/yardstick/benchmark/contexts/model.py b/yardstick/benchmark/contexts/model.py index 636abfa35..c83a209cf 100644 --- a/yardstick/benchmark/contexts/model.py +++ b/yardstick/benchmark/contexts/model.py @@ -66,7 +66,7 @@ class Router(Object): """Class that represents a router in the logical model""" def __init__(self, name, network_name, context, external_gateway_info): - super(self.__class__, self).__init__(name, context) + super(Router, self).__init__(name, context) self.stack_name = context.name + "-" + network_name + "-" + self.name self.stack_if_name = self.stack_name + "-if0" @@ -78,7 +78,7 @@ class Network(Object): list = [] def __init__(self, name, context, attrs): - super(self.__class__, self).__init__(name, context) + super(Network, self).__init__(name, context) self.stack_name = context.name + "-" + self.name self.subnet_stack_name = self.stack_name + "-subnet" self.subnet_cidr = attrs.get('cidr', '10.0.1.0/24') @@ -118,7 +118,7 @@ class Server(Object): list = [] def __init__(self, name, context, attrs): - super(self.__class__, self).__init__(name, context) + super(Server, self).__init__(name, context) self.stack_name = self.name + "." + context.name self.keypair_name = context.keypair_name self.secgroup_name = context.secgroup_name diff --git a/yardstick/benchmark/contexts/node.py b/yardstick/benchmark/contexts/node.py index 9242e2727..c7ed3b3f1 100644 --- a/yardstick/benchmark/contexts/node.py +++ b/yardstick/benchmark/contexts/node.py @@ -32,7 +32,7 @@ class NodeContext(Context): self.controllers = [] self.computes = [] self.baremetals = [] - super(self.__class__, self).__init__() + super(NodeContext, self).__init__() def read_config_file(self): """Read from config file""" diff --git a/yardstick/benchmark/contexts/standalone.py b/yardstick/benchmark/contexts/standalone.py index c1d963f50..eff700974 100644 --- a/yardstick/benchmark/contexts/standalone.py +++ b/yardstick/benchmark/contexts/standalone.py @@ -37,7 +37,7 @@ class StandaloneContext(Context): self.file_path = None self.nodes = [] self.nfvi_node = [] - super(self.__class__, self).__init__() + super(StandaloneContext, self).__init__() def read_config_file(self): """Read from config file""" diff --git a/yardstick/benchmark/core/__init__.py b/yardstick/benchmark/core/__init__.py index 161e448cc..79ebc732f 100644 --- a/yardstick/benchmark/core/__init__.py +++ b/yardstick/benchmark/core/__init__.py @@ -33,6 +33,6 @@ class Param(object): def print_hbar(barlen): """print to stdout a horizontal bar""" - print("+"), - print("-" * barlen), + print("+") + print("-" * barlen) print("+") diff --git a/yardstick/benchmark/runners/arithmetic.py b/yardstick/benchmark/runners/arithmetic.py index d5605f755..65fdb9d66 100755 --- a/yardstick/benchmark/runners/arithmetic.py +++ b/yardstick/benchmark/runners/arithmetic.py @@ -139,7 +139,7 @@ def _worker_process(queue, cls, method_name, scenario_cfg, sequence += 1 - if (errors and sla_action is None): + if errors and sla_action is None: break benchmark.teardown() diff --git a/yardstick/benchmark/scenarios/availability/attacker/attacker_general.py b/yardstick/benchmark/scenarios/availability/attacker/attacker_general.py index 38a966803..24888af98 100644 --- a/yardstick/benchmark/scenarios/availability/attacker/attacker_general.py +++ b/yardstick/benchmark/scenarios/availability/attacker/attacker_general.py @@ -62,11 +62,11 @@ class GeneralAttacker(BaseAttacker): self.fault_cfg['recovery_script']) def inject_fault(self): - LOG.debug("{0} starting inject!".format(self.key)) - LOG.debug("the inject_script path:{0}".format(self.inject_script)) + LOG.debug("%s starting inject!", self.key) + LOG.debug("the inject_script path:%s", self.inject_script) if "action_parameter" in self._config: - LOG.debug("the shell command is: {0}".format(self.action_param)) + 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, @@ -88,7 +88,7 @@ class GeneralAttacker(BaseAttacker): def recover(self): if "rollback_parameter" in self._config: - LOG.debug("the shell command is: {0}".format(self.rollback_param)) + 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, 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 5c2d6d70e..38dbe0cee 100644 --- a/yardstick/benchmark/scenarios/availability/ha_tools/nova/create_flavor.bash +++ b/yardstick/benchmark/scenarios/availability/ha_tools/nova/create_flavor.bash @@ -16,4 +16,4 @@ set -e source /root/openrc -nova flavor-create $1 $2 $3 $4 $5 +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 67d0c902e..37d2cf6c0 100644 --- a/yardstick/benchmark/scenarios/availability/ha_tools/nova/delete_flavor.bash +++ b/yardstick/benchmark/scenarios/availability/ha_tools/nova/delete_flavor.bash @@ -16,4 +16,4 @@ set -e source /root/openrc -nova flavor-delete $1
\ No newline at end of file +openstack flavor delete $1 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 75c433a0e..8f987a647 100644 --- a/yardstick/benchmark/scenarios/availability/result_checker/result_checker_general.py +++ b/yardstick/benchmark/scenarios/availability/result_checker/result_checker_general.py @@ -61,28 +61,26 @@ class GeneralResultChecker(BaseResultChecker): exit_status, stdout, stderr = self.connection.execute( self.shell_cmd, stdin=stdin_file) - LOG.debug("action script of the operation is: {0}" - .format(self.verify_script)) - LOG.debug("action parameter the of operation is: {0}" - .format(self.shell_cmd)) + 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) - LOG.debug("action script of the operation is: {0}" - .format(self.verify_script)) + LOG.debug("action script of the operation is: %s", + self.verify_script) LOG.debug("exit_status ,stdout : %s ,%s", exit_status, stdout) if exit_status == 0 and stdout: self.actualResult = stdout - LOG.debug("verifying resultchecker: {0}".format(self.key)) - LOG.debug("verifying resultchecker,expected: {0}" - .format(self.expectedResult)) - LOG.debug("verifying resultchecker,actual: {0}" - .format(self.actualResult)) - LOG.debug("verifying resultchecker,condition: {0}" - .format(self.condition)) + LOG.debug("verifying resultchecker: %s", self.key) + LOG.debug("verifying resultchecker,expected: %s", + self.expectedResult) + LOG.debug("verifying resultchecker,actual: %s", self.actualResult) + LOG.debug("verifying resultchecker,condition: %s", self.condition) if (type(self.expectedResult) is int): self.actualResult = int(self.actualResult) if self.condition == Condition.EQUAL: @@ -100,13 +98,13 @@ class GeneralResultChecker(BaseResultChecker): else: self.success = False LOG.debug( - "error happened when resultchecker: {0} Invalid condition" - .format(self.key)) + "error happened when resultchecker: %s Invalid condition", + self.key) else: self.success = False LOG.debug( - "error happened when resultchecker: {0} verifying the result" - .format(self.key)) + "error happened when resultchecker: %s verifying the result", + self.key) LOG.error(stderr) LOG.debug( diff --git a/yardstick/benchmark/scenarios/availability/scenario_general.py b/yardstick/benchmark/scenarios/availability/scenario_general.py index 2d7ce664e..a950ef933 100644 --- a/yardstick/benchmark/scenarios/availability/scenario_general.py +++ b/yardstick/benchmark/scenarios/availability/scenario_general.py @@ -47,8 +47,8 @@ class ScenarioGeneral(base.Scenario): except Exception: LOG.exception("Exception") LOG.debug( - "\033[91m exception when running step: {0} .... \033[0m" - .format(orderedSteps.index(step))) + "\033[91m exception when running step: %s .... \033[0m", + orderedSteps.index(step)) break finally: pass diff --git a/yardstick/benchmark/scenarios/networking/sfc_openstack.py b/yardstick/benchmark/scenarios/networking/sfc_openstack.py index caaf10060..be24add32 100644 --- a/yardstick/benchmark/scenarios/networking/sfc_openstack.py +++ b/yardstick/benchmark/scenarios/networking/sfc_openstack.py @@ -81,7 +81,7 @@ def create_floating_ips(neutron_client): # pragma: no cover ips = [] props = {'floating_network_id': extnet_id} try: - while (len(ips) < 2): + while len(ips) < 2: ip_json = neutron_client.create_floatingip({'floatingip': props}) fip_addr = ip_json['floatingip']['floating_ip_address'] ips.append(fip_addr) diff --git a/yardstick/benchmark/scenarios/networking/vnf_generic.py b/yardstick/benchmark/scenarios/networking/vnf_generic.py index d7ba418c3..447c550ed 100644 --- a/yardstick/benchmark/scenarios/networking/vnf_generic.py +++ b/yardstick/benchmark/scenarios/networking/vnf_generic.py @@ -15,7 +15,6 @@ from __future__ import absolute_import import logging -from contextlib import contextmanager import yaml from yardstick.benchmark.scenarios import base @@ -49,31 +48,32 @@ class IncorrectSetup(Exception): pass -@contextmanager -def ssh_manager(node): - """ - args -> network device mappings - returns -> ssh connection ready to be used - """ - conn = None - try: - ssh_port = node.get("ssh_port", ssh.DEFAULT_PORT) - conn = ssh.SSH(user=node.get("user", ""), - host=node.get("ip", ""), - password=node.get("password", ""), - port=ssh_port) - conn.wait() - - except (SSHError) as error: - LOG.info("connect failed to %s, due to %s", node.get("ip", ""), error) - try: - if conn: - yield conn - else: - yield False - finally: - if conn: - conn.close() +class SshManager(object): + def __init__(self, node): + super(SshManager, self).__init__() + self.node = node + self.conn = None + + def __enter__(self): + """ + args -> network device mappings + returns -> ssh connection ready to be used + """ + try: + ssh_port = self.node.get("ssh_port", ssh.DEFAULT_PORT) + self.conn = ssh.SSH(user=self.node["user"], + host=self.node["ip"], + password=self.node["password"], + port=ssh_port) + self.conn.wait() + except (SSHError) as error: + LOG.info("connect failed to %s, due to %s", self.node["ip"], error) + # self.conn defaults to None + return self.conn + + def __exit__(self, exc_type, exc_val, exc_tb): + if self.conn: + self.conn.close() class NetworkServiceTestCase(base.Scenario): @@ -208,7 +208,7 @@ class NetworkServiceTestCase(base.Scenario): for node, node_dict in context_cfg["nodes"].items(): cmd = "PATH=$PATH:/sbin:/usr/sbin ip addr show" - with ssh_manager(node_dict) as conn: + with SshManager(node_dict) as conn: exit_status = conn.execute(cmd)[0] if exit_status != 0: raise IncorrectSetup("Node's %s lacks ip tool." % node) @@ -237,10 +237,10 @@ class NetworkServiceTestCase(base.Scenario): import_modules_from_package( "yardstick.network_services.vnf_generic.vnf") expected_name = vnf_model['id'] - impl = [c for c in itersubclasses(GenericVNF) - if c.__name__ == expected_name] + impl = (c for c in itersubclasses(GenericVNF) + if c.__name__ == expected_name) try: - return next(iter(impl)) + return next(impl) except StopIteration: raise IncorrectConfig("No implementation for %s", expected_name) diff --git a/yardstick/cmd/NSBperf.py b/yardstick/cmd/NSBperf.py index dd96b7fc8..c3730f834 100755 --- a/yardstick/cmd/NSBperf.py +++ b/yardstick/cmd/NSBperf.py @@ -115,7 +115,7 @@ class YardstickNSCli(object): def generate_final_report(self, test_case): """ Function will check if partial test results are available and generates final report in rst format. -""" + """ report_caption = '{}\n{} ({})\n{}\n\n'.format( '================================================================', diff --git a/yardstick/cmd/commands/task.py b/yardstick/cmd/commands/task.py index 20ab086e5..57c2b1526 100644 --- a/yardstick/cmd/commands/task.py +++ b/yardstick/cmd/commands/task.py @@ -48,7 +48,7 @@ class TaskCommands(object): self._init_result_file() try: - Task().start(param) + Task().start(param, **kwargs) except Exception as e: self._write_error_data(e) diff --git a/yardstick/common/constants.py b/yardstick/common/constants.py index e6faf6828..e068c0b98 100644 --- a/yardstick/common/constants.py +++ b/yardstick/common/constants.py @@ -35,6 +35,8 @@ TESTCASE_DIR = join(YARDSTICK_ROOT_PATH, 'tests/opnfv/test_cases/') YARDSTICK_REPOS_DIR = '/home/opnfv/repos/yardstick' +YARDSTICK_LOG_DIR = '/tmp/yardstick/' + YARDSTICK_CONFIG_DIR = '/etc/yardstick/' YARDSTICK_CONFIG_FILE = join(YARDSTICK_CONFIG_DIR, 'yardstick.conf') diff --git a/yardstick/common/openstack_utils.py b/yardstick/common/openstack_utils.py index e351d16d3..5026e819d 100644 --- a/yardstick/common/openstack_utils.py +++ b/yardstick/common/openstack_utils.py @@ -65,7 +65,7 @@ def get_credentials(): creds.update({"insecure": "True", "https_insecure": "True"}) if not os.path.isfile(cacert): log.info("WARNING: The 'OS_CACERT' environment variable is set\ - to %s but the file does not exist." % cacert) + to %s but the file does not exist.", cacert) return creds diff --git a/yardstick/common/task_template.py b/yardstick/common/task_template.py index bda8a1b13..9acc21336 100755 --- a/yardstick/common/task_template.py +++ b/yardstick/common/task_template.py @@ -45,11 +45,11 @@ def is_really_missing(mis, task_template): # Removing variables that have default values from # missing. Construction that won't be properly # check is {% set x = x or 1} - if re.search(mis.join(["{%\s*set\s+", "\s*=\s*", "[^\w]+"]), + if re.search(mis.join([r"{%\s*set\s+", "\s*=\s*", r"[^\w]+"]), task_template): return False # Also check for a default filter which can show up as # a missing variable - if re.search(mis + "\s*\|\s*default\(", task_template): + if re.search(mis + r"\s*\|\s*default\(", task_template): return False return True diff --git a/yardstick/common/utils.py b/yardstick/common/utils.py index 473bbf540..174ac0a5a 100644 --- a/yardstick/common/utils.py +++ b/yardstick/common/utils.py @@ -149,7 +149,8 @@ def get_neutron_client(): def write_json_to_file(path, data, mode='w'): - write_file(path, jsonutils.dump_as_bytes(data), mode) + with open(path, mode) as f: + jsonutils.dump(data, f) def write_file(path, data, mode='w'): diff --git a/yardstick/dispatcher/influxdb.py b/yardstick/dispatcher/influxdb.py index 427e669a2..d388d28a1 100644 --- a/yardstick/dispatcher/influxdb.py +++ b/yardstick/dispatcher/influxdb.py @@ -164,7 +164,7 @@ class InfluxdbDispatcher(DispatchBase): timeout=self.timeout) if res.status_code != 204: LOG.error('Test result posting finished with status code' - ' %d.' % res.status_code) + ' %d.', res.status_code) LOG.error(res.text) except Exception as err: diff --git a/yardstick/network_services/utils.py b/yardstick/network_services/utils.py index b75091326..cb71a6029 100644 --- a/yardstick/network_services/utils.py +++ b/yardstick/network_services/utils.py @@ -15,18 +15,21 @@ from __future__ import absolute_import import logging +import os from oslo_config import cfg from oslo_config.cfg import NoSuchOptError from oslo_utils import encodeutils +NSB_ROOT = "/opt/nsb_bin" + CONF = cfg.CONF OPTS = [ cfg.StrOpt('bin_path', - default='/opt/nsb_bin', + default=NSB_ROOT, help='bin_path for VNFs location.'), cfg.StrOpt('trex_path', - default='/opt/nsb_bin/trex/scripts', + default=os.path.join(NSB_ROOT, 'trex/scripts'), help='trex automation lib pathh.'), ] CONF.register_opts(OPTS, group="nsb") @@ -39,8 +42,7 @@ def get_nsb_option(option, default=None): return CONF.nsb.__getitem__(option) except NoSuchOptError: logging.debug("Invalid key %s", option) - else: - return default + return default def provision_tool(connection, tool_path): diff --git a/yardstick/network_services/vnf_generic/vnfdgen.py b/yardstick/network_services/vnf_generic/vnfdgen.py index 9a02050a2..64554cdaf 100644 --- a/yardstick/network_services/vnf_generic/vnfdgen.py +++ b/yardstick/network_services/vnf_generic/vnfdgen.py @@ -16,7 +16,6 @@ from __future__ import absolute_import import collections import yaml -import six from yardstick.common.task_template import TaskTemplate @@ -46,13 +45,14 @@ def dict_key_flatten(data): """ next_data = {} + # check for non-string iterables if not any((isinstance(v, collections.Iterable) and not isinstance(v, str)) for v in data.values()): return data - for key, val in six.iteritems(data): + for key, val in data.items(): if isinstance(val, collections.Mapping): - for n_k, n_v in six.iteritems(val): + for n_k, n_v in val.items(): next_data["%s.%s" % (key, n_k)] = n_v elif isinstance(val, collections.Iterable) and not isinstance(val, str): diff --git a/yardstick/orchestrator/heat.py b/yardstick/orchestrator/heat.py index c098de9e3..e39c4356c 100644 --- a/yardstick/orchestrator/heat.py +++ b/yardstick/orchestrator/heat.py @@ -179,7 +179,7 @@ class HeatTemplate(HeatObject): with open(template_file) as stream: print("Parsing external template:", template_file) template_str = stream.read() - self._template = template_format.parse(template_str) + self._template = template_format.parse(template_str) self._parameters = heat_parameters else: self._init_template() diff --git a/yardstick/vTC/apexlake/experimental_framework/heat_template_generation.py b/yardstick/vTC/apexlake/experimental_framework/heat_template_generation.py index 1904af20b..bbf55853d 100644 --- a/yardstick/vTC/apexlake/experimental_framework/heat_template_generation.py +++ b/yardstick/vTC/apexlake/experimental_framework/heat_template_generation.py @@ -18,9 +18,11 @@ Generation of the heat templates from the base template """ from __future__ import absolute_import -import json import os import shutil + +from oslo_serialization import jsonutils + from experimental_framework import common from experimental_framework.constants import framework_parameters as fp @@ -193,7 +195,7 @@ def generates_templates(base_heat_template, deployment_configuration): new_template += "_" + str(counter) + template_file_extension shutil.copy(base_template, new_template) - metadata = dict() + metadata = {} for var in heat_template_vars: if var.get_variable_name(): common.replace_in_file(new_template, "#" + @@ -203,7 +205,8 @@ def generates_templates(base_heat_template, deployment_configuration): # Save the metadata on a JSON file with open(new_template + ".json", 'w') as outfile: - json.dump(metadata, outfile) + # sort keys to maintain persistent order for git + jsonutils.dump(metadata, outfile, sort_keys=True) common.LOG.debug("Heat Templates and Metadata file " + str(counter) + " created") @@ -222,7 +225,7 @@ def get_all_heat_templates(template_dir, template_file_extension): (type: str) :return: type: list """ - template_files = list() + template_files = [] for dirname, dirnames, filenames in os.walk(template_dir): for filename in filenames: if template_file_extension in filename and \ diff --git a/yardstick/vTC/apexlake/tests/data/generated_templates/experiment_1.yaml.json b/yardstick/vTC/apexlake/tests/data/generated_templates/experiment_1.yaml.json index 3af9a1cc7..44a8aeb2e 100644 --- a/yardstick/vTC/apexlake/tests/data/generated_templates/experiment_1.yaml.json +++ b/yardstick/vTC/apexlake/tests/data/generated_templates/experiment_1.yaml.json @@ -1 +1 @@ -{"vnic_type": "normal", "ram": "1024", "vcpus": "2"}
\ No newline at end of file +{"ram": "1024", "vcpus": "2", "vnic_type": "normal"}
\ No newline at end of file diff --git a/yardstick/vTC/apexlake/tests/data/generated_templates/experiment_2.yaml.json b/yardstick/vTC/apexlake/tests/data/generated_templates/experiment_2.yaml.json index 9f246891d..0a66448b7 100644 --- a/yardstick/vTC/apexlake/tests/data/generated_templates/experiment_2.yaml.json +++ b/yardstick/vTC/apexlake/tests/data/generated_templates/experiment_2.yaml.json @@ -1 +1 @@ -{"vnic_type": "direct", "ram": "1024", "vcpus": "2"}
\ No newline at end of file +{"ram": "1024", "vcpus": "2", "vnic_type": "direct"}
\ No newline at end of file |