Merge ~ltrager/maas:lp1891027 into maas:master

Proposed by Lee Trager
Status: Rejected
Rejected by: Adam Collard
Proposed branch: ~ltrager/maas:lp1891027
Merge into: maas:master
Diff against target: 64 lines (+25/-3)
2 files modified
src/metadataserver/models/scriptset.py (+2/-3)
src/metadataserver/models/tests/test_scriptset.py (+23/-0)
Reviewer Review Type Date Requested Status
Adam Collard (community) Disapprove
Dougal Matthews (community) Approve
MAAS Lander Approve
Review via email: mp+389137@code.launchpad.net

Commit message

LP: #1891027 - Escape NodeMetadata information before constructing the regex.

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

UNIT TESTS
-b lp1891027 lp:~ltrager/maas/+git/maas into -b master lp:~maas-committers/maas

STATUS: SUCCESS
COMMIT: fa8017803fb8f42ea987f396ec94fc797c093f53

review: Approve
Revision history for this message
Dougal Matthews (d0ugal) wrote :

LGTM. One question inline about fnmatch.translate

review: Approve
Revision history for this message
Adam Collard (adam-collard) wrote :

Discussed this morning and we think this can be much simpler (see https://code.launchpad.net/~d0ugal/maas/+git/maas/+merge/389147 )

review: Disapprove

Unmerged commits

fa80178... by Lee Trager

LP: #1891027 - Escape NodeMetadata information before constructing the regex.

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 6b4889b..9223de9 100644
3--- a/src/metadataserver/models/scriptset.py
4+++ b/src/metadataserver/models/scriptset.py
5@@ -5,7 +5,6 @@ __all__ = ["ScriptSet", "get_status_from_qs", "translate_result_type"]
6
7 from contextlib import suppress
8 from datetime import timedelta
9-import fnmatch
10 import re
11
12 from django.contrib.postgres.fields import ArrayField
13@@ -238,7 +237,7 @@ class ScriptSetManager(Manager):
14 | Q(key__startswith="firmware_")
15 | Q(key__startswith="chassis_")
16 ):
17- regexes.append("%s:%s" % (nmd.key, fnmatch.translate(nmd.value)))
18+ regexes.append(re.escape("%s:%s" % (nmd.key, nmd.value)))
19 if len(regexes) > 0:
20 node_hw_regex = re.compile("^%s$" % "|".join(regexes), re.I)
21 else:
22@@ -481,7 +480,7 @@ class ScriptSet(CleanSave, Model):
23 | Q(key__startswith="firmware_")
24 | Q(key__startswith="chassis_")
25 ):
26- regexes.append("%s:%s" % (nmd.key, fnmatch.translate(nmd.value)))
27+ regexes.append(re.escape("%s:%s" % (nmd.key, nmd.value)))
28 if len(regexes) > 0:
29 node_hw_regex = re.compile("^%s$" % "|".join(regexes), re.I)
30 else:
31diff --git a/src/metadataserver/models/tests/test_scriptset.py b/src/metadataserver/models/tests/test_scriptset.py
32index d3597cb..5085090 100644
33--- a/src/metadataserver/models/tests/test_scriptset.py
34+++ b/src/metadataserver/models/tests/test_scriptset.py
35@@ -1201,6 +1201,29 @@ class TestScriptSet(MAASServerTestCase):
36 [script_result.name for script_result in script_set],
37 )
38
39+ def test_select_for_hardware_scripts_with_bracket_in_firmware(self):
40+ # Regression test for LP:1891213
41+ node = factory.make_Node()
42+ factory.make_NodeMetadata(
43+ node=node,
44+ key="mainboard_firmware_version",
45+ value="-[IVE156L-2.61]-",
46+ )
47+ script = factory.make_Script(
48+ script_type=SCRIPT_TYPE.COMMISSIONING,
49+ for_hardware=["mainboard_firmware_version:-[IVE156L-2.61]-"],
50+ )
51+ script_set = ScriptSet.objects.create_commissioning_script_set(
52+ node, [random.choice(script.tags)]
53+ )
54+
55+ script_set.select_for_hardware_scripts()
56+
57+ self.assertItemsEqual(
58+ list(NODE_INFO_SCRIPTS) + [script.name],
59+ [script_result.name for script_result in script_set],
60+ )
61+
62 def test_regenerate_storage(self):
63 node = factory.make_Node(interface=True)
64 script_set = factory.make_ScriptSet(node=node)

Subscribers

People subscribed via source and target branches