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
diff --git a/src/metadataserver/models/scriptset.py b/src/metadataserver/models/scriptset.py
index d7dca6d..1f1bf65 100644
--- a/src/metadataserver/models/scriptset.py
+++ b/src/metadataserver/models/scriptset.py
@@ -230,17 +230,13 @@ class ScriptSetManager(Manager):
230 )230 )
231 modaliases = script_set.node.modaliases231 modaliases = script_set.node.modaliases
232 regexes = []232 regexes = []
233 for nmd in script_set.node.nodemetadata_set.all():233 for nmd in script_set.node.nodemetadata_set.filter(
234 if nmd.key in [234 Q(key__startswith="system_")
235 "system_vendor",235 | Q(key__startswith="mainboard_")
236 "system_product",236 | Q(key__startswith="firmware_")
237 "system_version",237 | Q(key__startswith="chassis_")
238 "mainboard_vendor",238 ):
239 "mainboard_product",239 regexes.append("%s:%s" % (nmd.key, fnmatch.translate(nmd.value)))
240 ]:
241 regexes.append(
242 "%s:%s" % (nmd.key, fnmatch.translate(nmd.value))
243 )
244 if len(regexes) > 0:240 if len(regexes) > 0:
245 node_hw_regex = re.compile("^%s$" % "|".join(regexes), re.I)241 node_hw_regex = re.compile("^%s$" % "|".join(regexes), re.I)
246 else:242 else:
@@ -474,17 +470,13 @@ class ScriptSet(CleanSave, Model):
474 modaliases = self.node.modaliases470 modaliases = self.node.modaliases
475471
476 regexes = []472 regexes = []
477 for nmd in self.node.nodemetadata_set.all():473 for nmd in self.node.nodemetadata_set.filter(
478 if nmd.key in [474 Q(key__startswith="system_")
479 "system_vendor",475 | Q(key__startswith="mainboard_")
480 "system_product",476 | Q(key__startswith="firmware_")
481 "system_version",477 | Q(key__startswith="chassis_")
482 "mainboard_vendor",478 ):
483 "mainboard_product",479 regexes.append("%s:%s" % (nmd.key, fnmatch.translate(nmd.value)))
484 ]:
485 regexes.append(
486 "%s:%s" % (nmd.key, fnmatch.translate(nmd.value))
487 )
488 if len(regexes) > 0:480 if len(regexes) > 0:
489 node_hw_regex = re.compile("^%s$" % "|".join(regexes), re.I)481 node_hw_regex = re.compile("^%s$" % "|".join(regexes), re.I)
490 else:482 else:
diff --git a/src/metadataserver/models/tests/test_scriptset.py b/src/metadataserver/models/tests/test_scriptset.py
index 79bd5dd..d3597cb 100644
--- a/src/metadataserver/models/tests/test_scriptset.py
+++ b/src/metadataserver/models/tests/test_scriptset.py
@@ -31,6 +31,14 @@ from provisioningserver.events import EVENT_TYPES
31from provisioningserver.refresh.node_info_scripts import NODE_INFO_SCRIPTS31from provisioningserver.refresh.node_info_scripts import NODE_INFO_SCRIPTS
3232
3333
34def make_SystemNodeMetadata(node):
35 # Any of these prefixes should work
36 prefix = random.choice(["system", "mainboard", "firmware", "chassis"])
37 key = factory.make_name(f"{prefix}_")
38 nmd = factory.make_NodeMetadata(node=node, key=key)
39 return f"{key}:{nmd.value}"
40
41
34class TestTranslateResultType(MAASServerTestCase):42class TestTranslateResultType(MAASServerTestCase):
35 """Test translate_result_type."""43 """Test translate_result_type."""
3644
@@ -221,21 +229,7 @@ class TestScriptSetManager(MAASServerTestCase):
221 self,229 self,
222 ):230 ):
223 node = factory.make_Node()231 node = factory.make_Node()
224 system_vendor = factory.make_NodeMetadata(232 for_hardware_key = make_SystemNodeMetadata(node)
225 node=node, key="system_vendor"
226 )
227 system_product = factory.make_NodeMetadata(
228 node=node, key="system_product"
229 )
230 system_version = factory.make_NodeMetadata(
231 node=node, key="system_version"
232 )
233 mainboard_vendor = factory.make_NodeMetadata(
234 node=node, key="mainboard_vendor"
235 )
236 mainboard_product = factory.make_NodeMetadata(
237 node=node, key="mainboard_product"
238 )
239 script = factory.make_Script(233 script = factory.make_Script(
240 script_type=SCRIPT_TYPE.COMMISSIONING,234 script_type=SCRIPT_TYPE.COMMISSIONING,
241 for_hardware=[235 for_hardware=[
@@ -244,11 +238,7 @@ class TestScriptSetManager(MAASServerTestCase):
244 "usb:174c:07d1",238 "usb:174c:07d1",
245 "pci:8086:1918",239 "pci:8086:1918",
246 "modalias:pci:v00001A03d00001150sv000015D9*",240 "modalias:pci:v00001A03d00001150sv000015D9*",
247 "system_vendor:%s" % system_vendor.value,241 for_hardware_key,
248 "system_product:%s" % system_product.value,
249 "system_version:%s" % system_version.value,
250 "mainboard_vendor:%s" % mainboard_vendor.value,
251 "mainboard_product:%s" % mainboard_product.value,
252 ]242 ]
253 )243 )
254 ],244 ],
@@ -284,21 +274,7 @@ class TestScriptSetManager(MAASServerTestCase):
284 self,274 self,
285 ):275 ):
286 node = factory.make_Node()276 node = factory.make_Node()
287 system_vendor = factory.make_NodeMetadata(277 for_hardware_key = make_SystemNodeMetadata(node)
288 node=node, key="system_vendor"
289 )
290 system_product = factory.make_NodeMetadata(
291 node=node, key="system_product"
292 )
293 system_version = factory.make_NodeMetadata(
294 node=node, key="system_version"
295 )
296 mainboard_vendor = factory.make_NodeMetadata(
297 node=node, key="mainboard_vendor"
298 )
299 mainboard_product = factory.make_NodeMetadata(
300 node=node, key="mainboard_product"
301 )
302 factory.make_Script(278 factory.make_Script(
303 script_type=SCRIPT_TYPE.COMMISSIONING,279 script_type=SCRIPT_TYPE.COMMISSIONING,
304 for_hardware=[280 for_hardware=[
@@ -307,11 +283,7 @@ class TestScriptSetManager(MAASServerTestCase):
307 "usb:174c:07d1",283 "usb:174c:07d1",
308 "pci:8086:1918",284 "pci:8086:1918",
309 "modalias:pci:v00001A03d00001150sv000015D9*",285 "modalias:pci:v00001A03d00001150sv000015D9*",
310 "system_vendor:%s" % system_vendor.value,286 for_hardware_key,
311 "system_product:%s" % system_product.value,
312 "system_version:%s" % system_version.value,
313 "mainboard_vendor:%s" % mainboard_vendor.value,
314 "mainboard_product:%s" % mainboard_product.value,
315 ]287 ]
316 )288 )
317 ],289 ],
@@ -1177,21 +1149,7 @@ class TestScriptSet(MAASServerTestCase):
11771149
1178 def test_select_for_hardware_scripts_adds_modalias(self):1150 def test_select_for_hardware_scripts_adds_modalias(self):
1179 node = factory.make_Node()1151 node = factory.make_Node()
1180 system_vendor = factory.make_NodeMetadata(1152 for_hardware_key = make_SystemNodeMetadata(node)
1181 node=node, key="system_vendor"
1182 )
1183 system_product = factory.make_NodeMetadata(
1184 node=node, key="system_product"
1185 )
1186 system_version = factory.make_NodeMetadata(
1187 node=node, key="system_version"
1188 )
1189 mainboard_vendor = factory.make_NodeMetadata(
1190 node=node, key="mainboard_vendor"
1191 )
1192 mainboard_product = factory.make_NodeMetadata(
1193 node=node, key="mainboard_product"
1194 )
1195 script = factory.make_Script(1153 script = factory.make_Script(
1196 script_type=SCRIPT_TYPE.COMMISSIONING,1154 script_type=SCRIPT_TYPE.COMMISSIONING,
1197 for_hardware=[1155 for_hardware=[
@@ -1200,11 +1158,7 @@ class TestScriptSet(MAASServerTestCase):
1200 "usb:174c:07d1",1158 "usb:174c:07d1",
1201 "pci:8086:1918",1159 "pci:8086:1918",
1202 "modalias:pci:v00001A03d00001150sv000015D9*",1160 "modalias:pci:v00001A03d00001150sv000015D9*",
1203 "system_vendor:%s" % system_vendor.value,1161 for_hardware_key,
1204 "system_product:%s" % system_product.value,
1205 "system_version:%s" % system_version.value,
1206 "mainboard_vendor:%s" % mainboard_vendor.value,
1207 "mainboard_product:%s" % mainboard_product.value,
1208 ]1162 ]
1209 )1163 )
1210 ],1164 ],
@@ -1231,34 +1185,10 @@ class TestScriptSet(MAASServerTestCase):
12311185
1232 def test_select_for_hardware_scripts_adds_system_mainboard(self):1186 def test_select_for_hardware_scripts_adds_system_mainboard(self):
1233 node = factory.make_Node()1187 node = factory.make_Node()
1234 system_vendor = factory.make_NodeMetadata(1188 for_hardware_key = make_SystemNodeMetadata(node)
1235 node=node, key="system_vendor"
1236 )
1237 system_product = factory.make_NodeMetadata(
1238 node=node, key="system_product"
1239 )
1240 system_version = factory.make_NodeMetadata(
1241 node=node, key="system_version"
1242 )
1243 mainboard_vendor = factory.make_NodeMetadata(
1244 node=node, key="mainboard_vendor"
1245 )
1246 mainboard_product = factory.make_NodeMetadata(
1247 node=node, key="mainboard_product"
1248 )
1249 script = factory.make_Script(1189 script = factory.make_Script(
1250 script_type=SCRIPT_TYPE.COMMISSIONING,1190 script_type=SCRIPT_TYPE.COMMISSIONING,
1251 for_hardware=[1191 for_hardware=[for_hardware_key],
1252 random.choice(
1253 [
1254 "system_vendor:%s" % system_vendor.value,
1255 "system_product:%s" % system_product.value,
1256 "system_version:%s" % system_version.value,
1257 "mainboard_vendor:%s" % mainboard_vendor.value,
1258 "mainboard_product:%s" % mainboard_product.value,
1259 ]
1260 )
1261 ],
1262 )1192 )
1263 script_set = ScriptSet.objects.create_commissioning_script_set(1193 script_set = ScriptSet.objects.create_commissioning_script_set(
1264 node, [random.choice(script.tags)]1194 node, [random.choice(script.tags)]

Subscribers

People subscribed via source and target branches