Alexsander de Souza has proposed merging ~alexsander-souza/maas:lp1997190_request_commissioning_results into maas:master.
Commit message: request_commissioning_results requires DB access ensure this method is called from the right context Fixes LP#1997190 Requested reviews: MAAS Maintainers (maas-maintainers) Related bugs: Bug #1997190 in MAAS: "Power parameters access attempt from non-db thread" https://bugs.launchpad.net/maas/+bug/1997190 For more details, see: https://code.launchpad.net/~alexsander-souza/maas/+git/maas/+merge/433378 -- Your team MAAS Maintainers is requested to review the proposed merge of ~alexsander-souza/maas:lp1997190_request_commissioning_results into maas:master.
diff --git a/src/maasserver/tests/test_vmhost.py b/src/maasserver/tests/test_vmhost.py index 3db3667..808a471 100644 --- a/src/maasserver/tests/test_vmhost.py +++ b/src/maasserver/tests/test_vmhost.py @@ -3,6 +3,8 @@ import random +from unittest.mock import Mock +from urllib.parse import urlparse from twisted.internet.defer import succeed @@ -18,12 +20,15 @@ from maasserver.testing.testcase import ( from maasserver.utils.orm import reload_object from maasserver.utils.threads import deferToDatabase from maastesting.crochet import wait_for +from maastesting.matchers import MockCalledOnceWith +from metadataserver.models.nodekey import NodeKey from provisioningserver.drivers.pod import ( DiscoveredCluster, DiscoveredPod, DiscoveredPodHints, DiscoveredPodStoragePool, ) +from provisioningserver.rpc.cluster import SendPodCommissioningResults def make_pod_info(): @@ -1052,3 +1057,40 @@ class TestSyncVMClusterAsync(MAASTransactionServerTestCase): self.assertEqual(len(vmhosts), new_len) self.assertEqual(updated_cluster.id, cluster.id) + + +class TestRequestCommissioningResults(MAASTransactionServerTestCase): + + wait_for_reactor = wait_for() + + @wait_for_reactor + async def test_request_commissioning_results_call(self): + client = Mock() + client.return_value = succeed(None) + self.patch( + vmhost_module, "getClientFromIdentifiers" + ).return_value = client + machine = await deferToDatabase(factory.make_Machine) + pod = await deferToDatabase(factory.make_Pod, host=machine) + power_params = await deferToDatabase(pod.get_power_parameters) + token = await deferToDatabase( + NodeKey.objects.get_token_for_node, machine + ) + await vmhost_module.request_commissioning_results(pod) + self.assertThat( + client, + MockCalledOnceWith( + SendPodCommissioningResults, + pod_id=pod.id, + name=pod.name, + type=pod.power_type, + system_id=machine.system_id, + context=power_params, + consumer_key=token.consumer.key, + token_key=token.key, + token_secret=token.secret, + metadata_url=urlparse( + "http://localhost:5240/MAAS/metadata/latest/" + ), + ), + ) diff --git a/src/maasserver/vmhost.py b/src/maasserver/vmhost.py index 05af032..f46660e 100644 --- a/src/maasserver/vmhost.py +++ b/src/maasserver/vmhost.py @@ -46,6 +46,10 @@ def request_commissioning_results(pod): client = yield getClientFromIdentifiers(client_identifiers) for node in nodes: token = yield deferToDatabase(NodeKey.objects.get_token_for_node, node) + power_params = yield deferToDatabase(pod.get_power_parameters) + url = yield deferToDatabase( + absolute_reverse, "metadata-version", args=["latest"] + ) try: yield send_pod_commissioning_results( client, @@ -53,13 +57,11 @@ def request_commissioning_results(pod): pod.name, pod.power_type, node.system_id, - pod.get_power_parameters(), + power_params, token.consumer.key, token.key, token.secret, - urlparse( - absolute_reverse("metadata-version", args=["latest"]) - ), + urlparse(url), ) except PodProblem as e: yield deferToDatabase(
-- Mailing list: https://launchpad.net/~sts-sponsors Post to : sts-sponsors@lists.launchpad.net Unsubscribe : https://launchpad.net/~sts-sponsors More help : https://help.launchpad.net/ListHelp