Merge ~bjornt/maas:bug-1884720-2.8 into maas:2.8

Proposed by Björn Tillenius
Status: Merged
Approved by: Adam Collard
Approved revision: f0dfb8458632251a4a43b98ce27f462fcf940096
Merge reported by: MAAS Lander
Merged at revision: not available
Proposed branch: ~bjornt/maas:bug-1884720-2.8
Merge into: maas:2.8
Diff against target: 79 lines (+29/-4)
2 files modified
src/metadataserver/builtin_scripts/hooks.py (+3/-1)
src/metadataserver/builtin_scripts/tests/test_hooks.py (+26/-3)
Reviewer Review Type Date Requested Status
MAAS Lander Approve
Björn Tillenius Approve
Review via email: mp+386249@code.launchpad.net

Commit message

LP #1884720: Commissioning fails on ppc64 node

Store hardware UUID as None if there is no UUID for the machine.

(cherry picked from commit 94d87f8873e1331253d18b13145c1b015f765b1d)

To post a comment you must log in.
Revision history for this message
Björn Tillenius (bjornt) wrote :

Self-approve backport

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

UNIT TESTS
-b bug-1884720-2.8 lp:~bjornt/maas/+git/maas into -b 2.8 lp:~maas-committers/maas

STATUS: SUCCESS
COMMIT: f0dfb8458632251a4a43b98ce27f462fcf940096

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1diff --git a/src/metadataserver/builtin_scripts/hooks.py b/src/metadataserver/builtin_scripts/hooks.py
2index 96962b5..e07e6a0 100644
3--- a/src/metadataserver/builtin_scripts/hooks.py
4+++ b/src/metadataserver/builtin_scripts/hooks.py
5@@ -405,7 +405,9 @@ def _process_system_information(node, system_data):
6 else:
7 NodeMetadata.objects.filter(node=node, key=key).delete()
8
9- node.hardware_uuid = system_data.get("uuid")
10+ uuid = system_data.get("uuid")
11+ # Convert "" to None, so that the unique check isn't triggered.
12+ node.hardware_uuid = None if uuid == "" else uuid
13
14 # Gather system information. Custom built machines and some Supermicro
15 # servers do not provide this information.
16diff --git a/src/metadataserver/builtin_scripts/tests/test_hooks.py b/src/metadataserver/builtin_scripts/tests/test_hooks.py
17index 3805712..7da60fd 100644
18--- a/src/metadataserver/builtin_scripts/tests/test_hooks.py
19+++ b/src/metadataserver/builtin_scripts/tests/test_hooks.py
20@@ -95,11 +95,13 @@ lldp_output_interface_template = """
21 """
22
23
24-def make_lxd_system_info(virt_type=None):
25+def make_lxd_system_info(virt_type=None, uuid=None):
26 if not virt_type:
27 virt_type = random.choice(["physical", "container", "virtual-machine"])
28+ if uuid is None:
29+ uuid = factory.make_UUID()
30 return {
31- "uuid": factory.make_UUID(),
32+ "uuid": uuid,
33 "vendor": factory.make_name("system_vendor"),
34 "product": factory.make_name("system_product"),
35 "family": factory.make_name("system_family"),
36@@ -532,6 +534,7 @@ def make_lxd_output(
37 server_name=None,
38 virt_type=None,
39 with_xenial_network=False,
40+ uuid=None,
41 ):
42 if not resources:
43 resources = deepcopy(SAMPLE_LXD_RESOURCES)
44@@ -547,7 +550,7 @@ def make_lxd_output(
45 ),
46 "resources": resources,
47 }
48- ret["resources"]["system"] = make_lxd_system_info(virt_type)
49+ ret["resources"]["system"] = make_lxd_system_info(virt_type, uuid)
50 if with_xenial_network:
51 ret["resources"]["network"] = deepcopy(SAMPLE_LXD_XENIAL_NETWORK)
52 return ret
53@@ -1250,6 +1253,26 @@ class TestProcessLXDResults(MAASServerTestCase):
54 node = reload_object(node)
55 self.assertEquals(deb_arch, node.architecture)
56
57+ def test_sets_uuid(self):
58+ node = factory.make_Node()
59+ create_IPADDR_OUTPUT_NAME_script(node, IP_ADDR_OUTPUT)
60+ uuid = factory.make_UUID()
61+ process_lxd_results(node, make_lxd_output_json(uuid=uuid), 0)
62+ node = reload_object(node)
63+ self.assertEquals(uuid, node.hardware_uuid)
64+
65+ def test_sets_empty_uuid(self):
66+ node = factory.make_Node()
67+ create_IPADDR_OUTPUT_NAME_script(node, IP_ADDR_OUTPUT)
68+ # LXD reports the uuid as "" if the machine doesn't have one
69+ # set.
70+ uuid = ""
71+ process_lxd_results(node, make_lxd_output_json(uuid=uuid), 0)
72+ node = reload_object(node)
73+ # In the DB, we store the missing UUID as None, so that the
74+ # check for unique UUIDs isn't triggered.
75+ self.assertIsNone(node.hardware_uuid)
76+
77 def test_sets_os_hostname_for_controller(self):
78 rack = factory.make_RackController()
79 create_IPADDR_OUTPUT_NAME_script(rack, IP_ADDR_OUTPUT)

Subscribers

People subscribed via source and target branches