sts-sponsors team mailing list archive
-
sts-sponsors team
-
Mailing list archive
-
Message #03399
[Merge] ~alexsander-souza/maas:lp1997190_request_commissioning_results into maas:master
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(
Follow ups