def from_yaml_str(yaml_str, vars=None, *args, **kwargs): """Construct a Scenario from a YAML string. Args: yaml_str (basestring): YAML-formatted scenario description. *args: Arguments passed to Scenario __init__. **kwargs: Arguments passed to Scenario __init__. Returns: Scenario: A new scenario instance. """ data = load_with_variables(yaml_str, variables=vars) scenario = Scenario(*args, **kwargs) scenario.yaml_str = yaml.dump(data, Dumper=yaml.CSafeDumper) if data.get("id"): scenario.id = data.get("id") scenario.name = _get(data, "name").strip() scenario.display_name = _get(data, "display_name").strip() scenario.summary = _get(data, "summary").strip() scenario.description = _get(data, "description").strip() scenario.estimated_runtime = _get(data, "estimated_runtime") scenario.tags = _get(data, "tags", []) scenario.vm_groups = _parse_section(scenario, data, "vms", VMGroup) scenario.workloads = _parse_section(scenario, data, "workloads", Workload) scenario.results_map = _parse_section(scenario, data, "results", BaseResult) scenario.vars = _get(data, "vars", {}) for step, phase in _parse_steps(scenario, data): scenario.add_step(step, phase) return scenario
def test_scenario_target_config(self): scenario = Scenario(name="Fake Scenario") scenario.cluster = mock_cluster() scenario.cluster.name.return_value = "fake_cluster" vm_group = VMGroup(scenario, "nasty\nvg?nm /\t#$\\") mock_vms = [mock.Mock(spec=Vm) for _ in xrange(3)] mock_vms[0].vm_name.return_value = "mock_vm_0" mock_vms[1].vm_name.return_value = "mock_vm_1" mock_vms[2].vm_name.return_value = "mock_vm_2" mock_vms[0].vm_ip.return_value = "fake_addr_0" mock_vms[1].vm_ip.return_value = "fake_addr_1" mock_vms[2].vm_ip.return_value = None scenario.vm_groups = {"fake_vm_group": vm_group} with mock.patch.object(vm_group, "get_vms") as mock_get_vms: mock_get_vms.return_value = mock_vms ret = prometheus.scenario_target_config(scenario) expected = [ { "labels": { "cluster_name": "fake_cluster", "instance": "mock_vm_0", "job": "xray", "scenario_display_name": "Fake Scenario", "scenario_id": str(scenario.id), "scenario_name": "Fake Scenario", "vm_group": "nasty\nvg?nm /\t#$\\", }, "targets": [ "fake_addr_0:9100", ], }, { "labels": { "cluster_name": "fake_cluster", "instance": "mock_vm_1", "job": "xray", "scenario_display_name": "Fake Scenario", "scenario_id": str(scenario.id), "scenario_name": "Fake Scenario", "vm_group": "nasty\nvg?nm /\t#$\\", }, "targets": [ "fake_addr_1:9100", ], } ] self.assertEqual(ret, expected)
def test_power_on_with_cluster_using_only_a_subset_of_nodes(self): with open(gflags.FLAGS.cluster_config_path) as f: config = json.load(f) config["nodes"] = config["nodes"][:1] # Keep only the first node. cluster = util.cluster_from_metis_config(config) cluster.update_metadata(False) scenario = Scenario( cluster=cluster, output_directory=environment.test_output_dir(self), goldimages_directory=gflags.FLAGS.curie_vmdk_goldimages_dir) scenario.vm_groups = { self.group_name: VMGroup(scenario, self.group_name, template="ubuntu1604", template_type="DISK", count_per_cluster=1)} vms = steps.vm_group.CloneFromTemplate(scenario, self.group_name)() steps.vm_group.PowerOn(scenario, self.group_name)() for vm in self.cluster.find_vms([vm.vm_name() for vm in vms]): self.assertTrue(vm.is_powered_on()) self.assertTrue(vm.is_accessible())