From 8668f3574be9ddc253b88fb153907316bceae0a8 Mon Sep 17 00:00:00 2001 From: Jacob Callahan Date: Tue, 13 Jun 2023 14:06:51 -0400 Subject: [PATCH] Quick fix for AnsibleTower provider This change ensures that we don't send multiple "source_vm" parameters into the AnsibleTower release method. --- broker/providers/ansible_tower.py | 5 ++--- tests/data/ansible_tower/fake_workflows.json | 6 ++++++ tests/providers/test_ansible_tower.py | 16 ++++++++++++---- 3 files changed, 20 insertions(+), 7 deletions(-) diff --git a/broker/providers/ansible_tower.py b/broker/providers/ansible_tower.py index 250173cd..40d24f0b 100644 --- a/broker/providers/ansible_tower.py +++ b/broker/providers/ansible_tower.py @@ -180,9 +180,8 @@ def _host_release(self): if prov_inv: logger.debug(f"prov_inv: {prov_inv}") broker_args["inventory"] = prov_inv - caller_host._prov_inst.release( - broker_args.get("source_vm", caller_host.name), broker_args - ) + source_vm = broker_args.pop("source_vm", caller_host.name) + caller_host._prov_inst.release(source_vm, broker_args) def _set_attributes(self, host_inst, broker_args=None, misc_attrs=None): host_inst.__dict__.update( diff --git a/tests/data/ansible_tower/fake_workflows.json b/tests/data/ansible_tower/fake_workflows.json index 4c5b314d..6d8ea391 100644 --- a/tests/data/ansible_tower/fake_workflows.json +++ b/tests/data/ansible_tower/fake_workflows.json @@ -4,5 +4,11 @@ "type": "workflow_job_template", "url": "/api/v2/workflow_job_templates/34/", "name": "deploy-base-rhel" + }, + { + "id": 35, + "type": "workflow_job_template", + "url": "/api/v2/workflow_job_templates/35/", + "name": "remove-vm" } ] diff --git a/tests/providers/test_ansible_tower.py b/tests/providers/test_ansible_tower.py index 14143bc2..b50f6890 100644 --- a/tests/providers/test_ansible_tower.py +++ b/tests/providers/test_ansible_tower.py @@ -14,7 +14,6 @@ class AwxkitApiStub(MockStub): - v2.ping.get().version - v2.jobs.get(id=child_id).results.pop() - v2.workflow_job_templates.get(name=workflow).results.pop() - - v2.workflow_job_templates.get(name=workflow).results.pop() - wfjt.launch(payload={"extra_vars": str(kwargs).replace("--", "")}) - job.wait_until_completed() - merge_dicts(artifacts, at_object.artifacts) @@ -94,10 +93,10 @@ def test_execute(tower_stub): def test_host_creation(tower_stub): - vmb = Broker() + bx = Broker() job = tower_stub.execute(workflow="deploy-base-rhel") - host = tower_stub.construct_host(job, vmb.host_classes) - assert isinstance(host, vmb.host_classes["host"]) + host = tower_stub.construct_host(job, bx.host_classes) + assert isinstance(host, bx.host_classes["host"]) assert host.hostname == "fake.host.test.com" assert host._broker_args["os_distribution_version"] == "7.8" @@ -106,3 +105,12 @@ def test_workflow_lookup_failure(tower_stub): with pytest.raises(Broker.ProviderError) as err: tower_stub.execute(workflow="this-does-not-exist") assert "Workflow not found by name: this-does-not-exist" in err.value.message + + +def test_host_release_dual_params(tower_stub): + bx = Broker() + job = tower_stub.execute(workflow="deploy-base-rhel") + host = tower_stub.construct_host(job, bx.host_classes) + host._broker_args["source_vm"] = "fake-physical-host" + assert host._broker_args["source_vm"] == host.name + host.release()