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

Reply via email to