import shutil from rally.common import objects from rally.common import utils from rally import consts from rally.plugins.openstack import scenario from rally.task import context from rally.verification import context as vcontext @context.configure("existing_ports", order=100, namespace="openstack") class ExistingPorts(context.Context): CONFIG_SCHEMA = { "type": "array", "items": {"type": "string"} } def setup(self): self.context["ports"] = self.config @scenario.configure("Verification.run_single_test") class VerifierScenario(scenario.OpenStackScenario): def run(self, test_name, verifier_id, deployment_id): verifier = objects.Verifier.get(verifier_id) verifier.set_deployment(deployment_id) new_config = utils.generate_random_path() shutil.copyfile(verifier.manager.configfile, new_config) verifier.manager.configfile = new_config iteration = self.context["iteration"] - 1 port_index = int(iteration) % len(self.context["ports"]) port_to_use = self.context["ports"][port_index] # TODO: use configparser to change port property run_args = {"pattern": test_name} verification = objects.Verification.create( verifier_id=verifier_id, deployment_id=deployment_id, run_args=run_args) verification.update_status(consts.VerificationStatus.RUNNING) context = {"config": verifier.manager._meta_get("context"), "run_args": run_args, "verification": verification, "verifier": verifier} try: with vcontext.ContextManager(context): results = verifier.manager.run(context) except Exception as e: verification.set_error(e) raise verification.finish(results.totals, results.tests)