Merge ~ltrager/maas:lp1883333_2.8 into maas:2.8

Proposed by Lee Trager
Status: Merged
Approved by: Lee Trager
Approved revision: faeed681dbda5102ae6e04c0049643d1b23d0e54
Merge reported by: MAAS Lander
Merged at revision: not available
Proposed branch: ~ltrager/maas:lp1883333_2.8
Merge into: maas:2.8
Diff against target: 218 lines (+30/-108)
2 files modified
src/metadataserver/models/scriptset.py (+14/-22)
src/metadataserver/models/tests/test_scriptset.py (+16/-86)
Reviewer Review Type Date Requested Status
Lee Trager (community) Approve
Review via email: mp+386278@code.launchpad.net

Commit message

Backport of 30f4fb7 LP: #1883333 - Allow any field from LXD system information to be used in for_hardware.

To post a comment you must log in.
Revision history for this message
Lee Trager (ltrager) :
review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1diff --git a/src/metadataserver/models/scriptset.py b/src/metadataserver/models/scriptset.py
2index d7dca6d..1f1bf65 100644
3--- a/src/metadataserver/models/scriptset.py
4+++ b/src/metadataserver/models/scriptset.py
5@@ -230,17 +230,13 @@ class ScriptSetManager(Manager):
6 )
7 modaliases = script_set.node.modaliases
8 regexes = []
9- for nmd in script_set.node.nodemetadata_set.all():
10- if nmd.key in [
11- "system_vendor",
12- "system_product",
13- "system_version",
14- "mainboard_vendor",
15- "mainboard_product",
16- ]:
17- regexes.append(
18- "%s:%s" % (nmd.key, fnmatch.translate(nmd.value))
19- )
20+ for nmd in script_set.node.nodemetadata_set.filter(
21+ Q(key__startswith="system_")
22+ | Q(key__startswith="mainboard_")
23+ | Q(key__startswith="firmware_")
24+ | Q(key__startswith="chassis_")
25+ ):
26+ regexes.append("%s:%s" % (nmd.key, fnmatch.translate(nmd.value)))
27 if len(regexes) > 0:
28 node_hw_regex = re.compile("^%s$" % "|".join(regexes), re.I)
29 else:
30@@ -474,17 +470,13 @@ class ScriptSet(CleanSave, Model):
31 modaliases = self.node.modaliases
32
33 regexes = []
34- for nmd in self.node.nodemetadata_set.all():
35- if nmd.key in [
36- "system_vendor",
37- "system_product",
38- "system_version",
39- "mainboard_vendor",
40- "mainboard_product",
41- ]:
42- regexes.append(
43- "%s:%s" % (nmd.key, fnmatch.translate(nmd.value))
44- )
45+ for nmd in self.node.nodemetadata_set.filter(
46+ Q(key__startswith="system_")
47+ | Q(key__startswith="mainboard_")
48+ | Q(key__startswith="firmware_")
49+ | Q(key__startswith="chassis_")
50+ ):
51+ regexes.append("%s:%s" % (nmd.key, fnmatch.translate(nmd.value)))
52 if len(regexes) > 0:
53 node_hw_regex = re.compile("^%s$" % "|".join(regexes), re.I)
54 else:
55diff --git a/src/metadataserver/models/tests/test_scriptset.py b/src/metadataserver/models/tests/test_scriptset.py
56index 79bd5dd..d3597cb 100644
57--- a/src/metadataserver/models/tests/test_scriptset.py
58+++ b/src/metadataserver/models/tests/test_scriptset.py
59@@ -31,6 +31,14 @@ from provisioningserver.events import EVENT_TYPES
60 from provisioningserver.refresh.node_info_scripts import NODE_INFO_SCRIPTS
61
62
63+def make_SystemNodeMetadata(node):
64+ # Any of these prefixes should work
65+ prefix = random.choice(["system", "mainboard", "firmware", "chassis"])
66+ key = factory.make_name(f"{prefix}_")
67+ nmd = factory.make_NodeMetadata(node=node, key=key)
68+ return f"{key}:{nmd.value}"
69+
70+
71 class TestTranslateResultType(MAASServerTestCase):
72 """Test translate_result_type."""
73
74@@ -221,21 +229,7 @@ class TestScriptSetManager(MAASServerTestCase):
75 self,
76 ):
77 node = factory.make_Node()
78- system_vendor = factory.make_NodeMetadata(
79- node=node, key="system_vendor"
80- )
81- system_product = factory.make_NodeMetadata(
82- node=node, key="system_product"
83- )
84- system_version = factory.make_NodeMetadata(
85- node=node, key="system_version"
86- )
87- mainboard_vendor = factory.make_NodeMetadata(
88- node=node, key="mainboard_vendor"
89- )
90- mainboard_product = factory.make_NodeMetadata(
91- node=node, key="mainboard_product"
92- )
93+ for_hardware_key = make_SystemNodeMetadata(node)
94 script = factory.make_Script(
95 script_type=SCRIPT_TYPE.COMMISSIONING,
96 for_hardware=[
97@@ -244,11 +238,7 @@ class TestScriptSetManager(MAASServerTestCase):
98 "usb:174c:07d1",
99 "pci:8086:1918",
100 "modalias:pci:v00001A03d00001150sv000015D9*",
101- "system_vendor:%s" % system_vendor.value,
102- "system_product:%s" % system_product.value,
103- "system_version:%s" % system_version.value,
104- "mainboard_vendor:%s" % mainboard_vendor.value,
105- "mainboard_product:%s" % mainboard_product.value,
106+ for_hardware_key,
107 ]
108 )
109 ],
110@@ -284,21 +274,7 @@ class TestScriptSetManager(MAASServerTestCase):
111 self,
112 ):
113 node = factory.make_Node()
114- system_vendor = factory.make_NodeMetadata(
115- node=node, key="system_vendor"
116- )
117- system_product = factory.make_NodeMetadata(
118- node=node, key="system_product"
119- )
120- system_version = factory.make_NodeMetadata(
121- node=node, key="system_version"
122- )
123- mainboard_vendor = factory.make_NodeMetadata(
124- node=node, key="mainboard_vendor"
125- )
126- mainboard_product = factory.make_NodeMetadata(
127- node=node, key="mainboard_product"
128- )
129+ for_hardware_key = make_SystemNodeMetadata(node)
130 factory.make_Script(
131 script_type=SCRIPT_TYPE.COMMISSIONING,
132 for_hardware=[
133@@ -307,11 +283,7 @@ class TestScriptSetManager(MAASServerTestCase):
134 "usb:174c:07d1",
135 "pci:8086:1918",
136 "modalias:pci:v00001A03d00001150sv000015D9*",
137- "system_vendor:%s" % system_vendor.value,
138- "system_product:%s" % system_product.value,
139- "system_version:%s" % system_version.value,
140- "mainboard_vendor:%s" % mainboard_vendor.value,
141- "mainboard_product:%s" % mainboard_product.value,
142+ for_hardware_key,
143 ]
144 )
145 ],
146@@ -1177,21 +1149,7 @@ class TestScriptSet(MAASServerTestCase):
147
148 def test_select_for_hardware_scripts_adds_modalias(self):
149 node = factory.make_Node()
150- system_vendor = factory.make_NodeMetadata(
151- node=node, key="system_vendor"
152- )
153- system_product = factory.make_NodeMetadata(
154- node=node, key="system_product"
155- )
156- system_version = factory.make_NodeMetadata(
157- node=node, key="system_version"
158- )
159- mainboard_vendor = factory.make_NodeMetadata(
160- node=node, key="mainboard_vendor"
161- )
162- mainboard_product = factory.make_NodeMetadata(
163- node=node, key="mainboard_product"
164- )
165+ for_hardware_key = make_SystemNodeMetadata(node)
166 script = factory.make_Script(
167 script_type=SCRIPT_TYPE.COMMISSIONING,
168 for_hardware=[
169@@ -1200,11 +1158,7 @@ class TestScriptSet(MAASServerTestCase):
170 "usb:174c:07d1",
171 "pci:8086:1918",
172 "modalias:pci:v00001A03d00001150sv000015D9*",
173- "system_vendor:%s" % system_vendor.value,
174- "system_product:%s" % system_product.value,
175- "system_version:%s" % system_version.value,
176- "mainboard_vendor:%s" % mainboard_vendor.value,
177- "mainboard_product:%s" % mainboard_product.value,
178+ for_hardware_key,
179 ]
180 )
181 ],
182@@ -1231,34 +1185,10 @@ class TestScriptSet(MAASServerTestCase):
183
184 def test_select_for_hardware_scripts_adds_system_mainboard(self):
185 node = factory.make_Node()
186- system_vendor = factory.make_NodeMetadata(
187- node=node, key="system_vendor"
188- )
189- system_product = factory.make_NodeMetadata(
190- node=node, key="system_product"
191- )
192- system_version = factory.make_NodeMetadata(
193- node=node, key="system_version"
194- )
195- mainboard_vendor = factory.make_NodeMetadata(
196- node=node, key="mainboard_vendor"
197- )
198- mainboard_product = factory.make_NodeMetadata(
199- node=node, key="mainboard_product"
200- )
201+ for_hardware_key = make_SystemNodeMetadata(node)
202 script = factory.make_Script(
203 script_type=SCRIPT_TYPE.COMMISSIONING,
204- for_hardware=[
205- random.choice(
206- [
207- "system_vendor:%s" % system_vendor.value,
208- "system_product:%s" % system_product.value,
209- "system_version:%s" % system_version.value,
210- "mainboard_vendor:%s" % mainboard_vendor.value,
211- "mainboard_product:%s" % mainboard_product.value,
212- ]
213- )
214- ],
215+ for_hardware=[for_hardware_key],
216 )
217 script_set = ScriptSet.objects.create_commissioning_script_set(
218 node, [random.choice(script.tags)]

Subscribers

People subscribed via source and target branches