Merge ~ltrager/maas:preserve_other_param_value_on_regeneration into maas:master

Proposed by Lee Trager
Status: Merged
Approved by: Lee Trager
Approved revision: 0533dd2938065f6629d2182c53654f152280fff4
Merge reported by: MAAS Lander
Merged at revision: not available
Proposed branch: ~ltrager/maas:preserve_other_param_value_on_regeneration
Merge into: maas:master
Diff against target: 113 lines (+70/-5)
3 files modified
src/maasserver/forms/ephemeral.py (+3/-3)
src/metadataserver/models/scriptset.py (+6/-2)
src/metadataserver/models/tests/test_scriptset.py (+61/-0)
Reviewer Review Type Date Requested Status
MAAS Lander Approve
Blake Rouse (community) Approve
Review via email: mp+371280@code.launchpad.net

Commit message

On regeneration preserve only the value of non interface or storage parameters.

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

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

STATUS: SUCCESS
COMMIT: 2fb21f536a0085278f1ce1c385f04b04583e26be

review: Approve
Revision history for this message
Blake Rouse (blake-rouse) :
review: Approve
4ed6a84... by Lee Trager

Add comment

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

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

STATUS: SUCCESS
COMMIT: 4ed6a846bfcd040a62348f3ee0b741f54aaa5f9b

review: Approve
0533dd2... by Lee Trager

Drive by fix

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
diff --git a/src/maasserver/forms/ephemeral.py b/src/maasserver/forms/ephemeral.py
index 17aaae5..dc1ffce 100644
--- a/src/maasserver/forms/ephemeral.py
+++ b/src/maasserver/forms/ephemeral.py
@@ -163,14 +163,14 @@ class TestForm(Form):
163 def _get_script_param_dict(self, scripts):163 def _get_script_param_dict(self, scripts):
164 params = {}164 params = {}
165 script_names = []165 script_names = []
166 script_ids = []166 ids = []
167 for script in scripts:167 for script in scripts:
168 if script.isdigit():168 if script.isdigit():
169 script_ids.append(int(script))169 ids.append(int(script))
170 else:170 else:
171 script_names.append(script)171 script_names.append(script)
172 qs = Script.objects.filter(172 qs = Script.objects.filter(
173 Q(id__in=script_ids) | Q(name__in=script_names))173 Q(name__in=scripts) | Q(tags__overlap=scripts) | Q(id__in=ids))
174 for name, value in self.cleaned_data.items():174 for name, value in self.cleaned_data.items():
175 if name in [175 if name in [
176 "enable_ssh", "testing_scripts", "commissioning_scripts",176 "enable_ssh", "testing_scripts", "commissioning_scripts",
diff --git a/src/metadataserver/models/scriptset.py b/src/metadataserver/models/scriptset.py
index 32df7ba..ced57d2 100644
--- a/src/metadataserver/models/scriptset.py
+++ b/src/metadataserver/models/scriptset.py
@@ -532,8 +532,12 @@ class ScriptSet(CleanSave, Model):
532 # device or interface may no longer exist. The532 # device or interface may no longer exist. The
533 # ParametersForm will set the default value(all).533 # ParametersForm will set the default value(all).
534 script_result.parameters.pop(param_name)534 script_result.parameters.pop(param_name)
535 regenerate_scripts[535 # Only preserve the value of the parameter as that is what
536 script_result.script] = script_result.parameters536 # the form will validate.
537 regenerate_scripts[script_result.script] = {
538 key: value['value']
539 for key, value in script_result.parameters.items()
540 }
537 script_result.delete()541 script_result.delete()
538 break542 break
539543
diff --git a/src/metadataserver/models/tests/test_scriptset.py b/src/metadataserver/models/tests/test_scriptset.py
index a622a22..873a1ac 100644
--- a/src/metadataserver/models/tests/test_scriptset.py
+++ b/src/metadataserver/models/tests/test_scriptset.py
@@ -1199,6 +1199,67 @@ class TestScriptSet(MAASServerTestCase):
1199 'value': 'all',1199 'value': 'all',
1200 }}, new_storage_script_result.parameters)1200 }}, new_storage_script_result.parameters)
12011201
1202 def test_regenerate_network_with_url_param(self):
1203 node = factory.make_Node()
1204 interface = factory.make_Interface(node=node)
1205 interface.ip_addresses.all().delete()
1206 interface.ip_addresses.add(factory.make_StaticIPAddress())
1207 url = factory.make_url(scheme='http')
1208 default_url = factory.make_url(scheme='http')
1209 script_set = factory.make_ScriptSet(node=node)
1210
1211 pending_network_script = factory.make_Script(parameters={
1212 'interface': {
1213 'type': 'interface',
1214 },
1215 'url': {
1216 'type': 'url',
1217 'required': True,
1218 'default': default_url,
1219 },
1220 })
1221 factory.make_ScriptResult(
1222 script_set=script_set, status=SCRIPT_STATUS.PENDING,
1223 script=pending_network_script, parameters={
1224 'interface': {
1225 'type': 'interface',
1226 'value': {
1227 'name': factory.make_name('name'),
1228 'mac_address': factory.make_mac_address(),
1229 'vendor': factory.make_name('vendor'),
1230 'product': factory.make_name('product'),
1231 },
1232 },
1233 'url': {
1234 'type': 'url',
1235 'required': True,
1236 'default': default_url,
1237 'value': url,
1238 },
1239 })
1240
1241 script_set.regenerate(storage=False, network=True)
1242
1243 new_network_script_result = script_set.scriptresult_set.get(
1244 script=pending_network_script)
1245 self.assertDictEqual({
1246 'interface': {
1247 'type': 'interface',
1248 'value': {
1249 'name': interface.name,
1250 'mac_address': str(interface.mac_address),
1251 'vendor': interface.vendor,
1252 'product': interface.product,
1253 'interface_id': interface.id,
1254 },
1255 },
1256 'url': {
1257 'type': 'url',
1258 'required': True,
1259 'default': default_url,
1260 'value': url,
1261 }}, new_network_script_result.parameters)
1262
1202 def test_regenerate_logs_failure(self):1263 def test_regenerate_logs_failure(self):
1203 mock_logger = self.patch(scriptset_module.logger, 'error')1264 mock_logger = self.patch(scriptset_module.logger, 'error')
1204 node = factory.make_Node()1265 node = factory.make_Node()

Subscribers

People subscribed via source and target branches