correctly inherit extra_vars

* inherit extra_vars from job_template
* overwrite with extra vars survey default vars
* overwrite with job extra_vars
* bypass extra_vars inherit logic for job relaunch
* with tests
This commit is contained in:
Chris Meyers
2015-08-10 11:05:27 -04:00
parent e5bd721b4b
commit dfff6b218a
6 changed files with 100 additions and 26 deletions

View File

@@ -284,15 +284,35 @@ class JobTemplate(UnifiedJobTemplate, JobOptions):
return errors
def _update_unified_job_kwargs(self, **kwargs):
# Overwrite job extra_vars with job template extra vars
if 'launch_type' in kwargs and kwargs['launch_type'] == 'relaunch':
return kwargs
# Job Template extra_vars
extra_vars = self.extra_vars_dict
# Overwrite with job template survey default vars
# Overwrite with job template extra vars with survey default vars
if self.survey_enabled and 'spec' in self.survey_spec:
for survey_element in self.survey_spec.get("spec", []):
if survey_element['default']:
extra_vars[survey_element['variable']] = survey_element['default']
# transform to dict
if 'extra_vars' in kwargs:
kwargs_extra_vars = kwargs['extra_vars']
if not isinstance(kwargs_extra_vars, dict):
try:
kwargs_extra_vars = json.loads(kwargs_extra_vars)
except Exception:
try:
yaml.safe_load(kwargs_extra_vars)
except:
kwargs_extra_vars = {}
else:
kwargs_extra_vars = {}
# Overwrite job template extra vars with explicit job extra vars
# and add on job extra vars
extra_vars.update(kwargs_extra_vars)
kwargs['extra_vars'] = json.dumps(extra_vars)
return kwargs

View File

@@ -343,6 +343,7 @@ class UnifiedJob(PolymorphicModel, PasswordFieldsModel, CommonModelNameNotUnique
LAUNCH_TYPE_CHOICES = [
('manual', _('Manual')), # Job was started manually by a user.
('relaunch', _('Relaunch')), # Job was started via relaunch.
('callback', _('Callback')), # Job was started via host callback.
('scheduled', _('Scheduled')), # Job was started from a schedule.
('dependency', _('Dependency')), # Job was started as a dependency of another job.