Switch to using extra_vars for survey variables, fix up some unit tests

related to that and some issues with system jobs
This commit is contained in:
Matthew Jones
2014-12-17 16:04:25 -05:00
parent 6e3cd5bc54
commit d4879506c2
5 changed files with 44 additions and 36 deletions
+4 -1
View File
@@ -78,7 +78,10 @@ class VarsDictProperty(object):
def __get__(self, obj, type=None):
if obj is None:
return self
v = getattr(obj, self.field).encode('utf-8')
v = getattr(obj, self.field)
if hasattr(v, 'items'):
return v
v = v.encode('utf-8')
d = None
try:
d = json.loads(v.strip() or '{}')
+2 -2
View File
@@ -195,7 +195,7 @@ class JobTemplate(UnifiedJobTemplate, JobOptions):
def _get_unified_job_field_names(cls):
return ['name', 'description', 'job_type', 'inventory', 'project',
'playbook', 'credential', 'cloud_credential', 'forks', 'schedule',
'limit', 'verbosity', 'extra_vars', 'job_tags', 'launch_type',
'limit', 'verbosity', 'job_tags', 'extra_vars', 'launch_type',
'force_handlers', 'skip_tags', 'start_at_task']
def create_job(self, **kwargs):
@@ -949,7 +949,7 @@ class SystemJobTemplate(UnifiedJobTemplate, SystemJobOptions):
@classmethod
def _get_unified_job_field_names(cls):
return ['name', 'description', 'job_type']
return ['name', 'description', 'job_type', 'extra_vars']
def get_absolute_url(self):
return reverse('api:system_job_template_detail', args=(self.pk,))
+10 -7
View File
@@ -306,7 +306,10 @@ class UnifiedJobTemplate(PolymorphicModel, CommonModelNameNotUnique):
value = value.id
create_kwargs[id_field_name] = value
elif field_name in kwargs:
create_kwargs[field_name] = kwargs[field_name]
if field_name == 'extra_vars' and type(kwargs[field_name]) == dict:
create_kwargs[field_name] = json.dumps(kwargs['extra_vars'])
else:
create_kwargs[field_name] = kwargs[field_name]
elif hasattr(self, field_name):
create_kwargs[field_name] = getattr(self, field_name)
kwargs = self._update_unified_job_kwargs(**create_kwargs)
@@ -692,9 +695,10 @@ class UnifiedJob(PolymorphicModel, PasswordFieldsModel, CommonModelNameNotUnique
self.job_explanation = u'Missing needed fields: %s.' % missing_fields
self.save(update_fields=['job_explanation'])
return False
extra_data = dict([(field, kwargs[field]) for field in kwargs
if field not in needed])
self.handle_extra_data(extra_data)
#extra_data = dict([(field, kwargs[field]) for field in kwargs
# if field not in needed])
if 'extra_vars' in kwargs:
self.handle_extra_data(kwargs['extra_vars'])
task_class().apply_async((self.pk,), opts, link_error=error_callback)
return True
@@ -715,9 +719,8 @@ class UnifiedJob(PolymorphicModel, PasswordFieldsModel, CommonModelNameNotUnique
opts = dict([(field, kwargs.get(field, '')) for field in needed])
if not all(opts.values()):
return False
extra_data = dict([(field, kwargs[field]) for field in kwargs
if field not in needed])
self.handle_extra_data(extra_data)
if 'extra_vars' in kwargs:
self.handle_extra_data(kwargs['extra_vars'])
# Save the pending status, and inform the SocketIO listener.
self.update_fields(start_args=json.dumps(kwargs), status='pending')