Merge ~r00ta/maas:lp-2027625 into maas:master

Proposed by Jacopo Rota
Status: Merged
Approved by: Jacopo Rota
Approved revision: f38086dc23297346337cb7b84aede2887f01014e
Merge reported by: MAAS Lander
Merged at revision: not available
Proposed branch: ~r00ta/maas:lp-2027625
Merge into: maas:master
Diff against target: 63 lines (+13/-14)
2 files modified
src/maasserver/models/bootresource.py (+11/-13)
src/maasserver/websockets/handlers/tests/test_bootresource.py (+2/-1)
Reviewer Review Type Date Requested Status
MAAS Lander Approve
Jack Lloyd-Walters Approve
Review via email: mp+446762@code.launchpad.net

Commit message

fix bootresource last_deployed property

Description of the change

This MP aims to fix https://bugs.launchpad.net/maas/+bug/2027625. See that bug report for the entire explanation of the problem and the fix.

To post a comment you must log in.
Revision history for this message
MAAS Lander (maas-lander) wrote :

UNIT TESTS
-b lp-2027625 lp:~r00ta/maas/+git/maas into -b master lp:~maas-committers/maas

STATUS: FAILED
LOG: http://maas-ci.internal:8080/job/maas-tester/3020/console
COMMIT: b9bc3e01ec39ef3c8e9238223b922691c0b7477e

review: Needs Fixing
Revision history for this message
Jacopo Rota (r00ta) wrote :

jenkins: !test

Revision history for this message
MAAS Lander (maas-lander) wrote :

UNIT TESTS
-b lp-2027625 lp:~r00ta/maas/+git/maas into -b master lp:~maas-committers/maas

STATUS: SUCCESS
COMMIT: b9bc3e01ec39ef3c8e9238223b922691c0b7477e

review: Approve
Revision history for this message
Jack Lloyd-Walters (lloydwaltersj) wrote :

+1, nice! optional suggestion inline to remove the `try ... except`.

review: Approve
~r00ta/maas:lp-2027625 updated
f38086d... by Jacopo Rota

refactoring

Revision history for this message
MAAS Lander (maas-lander) wrote :

UNIT TESTS
-b lp-2027625 lp:~r00ta/maas/+git/maas into -b master lp:~maas-committers/maas

STATUS: SUCCESS
COMMIT: f38086dc23297346337cb7b84aede2887f01014e

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1diff --git a/src/maasserver/models/bootresource.py b/src/maasserver/models/bootresource.py
2index 04fb36d..a843d5f 100644
3--- a/src/maasserver/models/bootresource.py
4+++ b/src/maasserver/models/bootresource.py
5@@ -5,6 +5,7 @@
6
7 from datetime import datetime
8 from operator import attrgetter
9+from typing import Optional
10
11 from django.core.exceptions import ValidationError
12 from django.db.models import (
13@@ -671,22 +672,19 @@ class BootResource(CleanSave, TimestampedModel):
14 return resource_set
15 return None
16
17- def get_last_deploy(self) -> datetime:
18+ def get_last_deploy(self) -> Optional[datetime]:
19 from maasserver.models.event import Event
20 from provisioningserver.events import EVENT_TYPES
21
22- deploy_msg = f"deployed {self.name}/{self.architecture}"
23- try:
24- return (
25- Event.objects.filter(
26- type__name=EVENT_TYPES.IMAGE_DEPLOYED,
27- description=deploy_msg,
28- )
29- .latest("created")
30- .created
31- )
32- except Event.DoesNotExist:
33- pass
34+ # Ignore subarch/platform/supported_platforms
35+ arch, _ = self.split_arch()
36+ deploy_msg_prefix = f"deployed {self.name}/{arch}/"
37+ if event := Event.objects.filter(
38+ type__name=EVENT_TYPES.IMAGE_DEPLOYED,
39+ description__startswith=deploy_msg_prefix,
40+ ):
41+ return event.latest("created").created
42+ return None
43
44 def split_arch(self):
45 return self.architecture.split("/")
46diff --git a/src/maasserver/websockets/handlers/tests/test_bootresource.py b/src/maasserver/websockets/handlers/tests/test_bootresource.py
47index 01bda2c..a6c898f 100644
48--- a/src/maasserver/websockets/handlers/tests/test_bootresource.py
49+++ b/src/maasserver/websockets/handlers/tests/test_bootresource.py
50@@ -373,11 +373,12 @@ class TestBootResourcePoll(MAASServerTestCase, PatchOSInfoMixin):
51 os_name, series = resource.name.split("/")
52 # The polled datetime only has granularity of order seconds
53 start_time = datetime.datetime.now().replace(microsecond=0)
54+ architecture = BootResource.objects.get_usable_architectures()[0]
55 node = factory.make_Node(
56 status=NODE_STATUS.DEPLOYED,
57 osystem=os_name,
58 distro_series=series,
59- architecture=resource.architecture,
60+ architecture=architecture,
61 )
62 node.end_deployment()
63 response = handler.poll({})

Subscribers

People subscribed via source and target branches