Update API/admin to accept either JSON or YAML for inventory/host/group variables.

This commit is contained in:
Chris Church
2013-06-19 01:39:34 -04:00
parent 9c6a20d4c7
commit 85a483a6fb
9 changed files with 210 additions and 57 deletions

View File

@@ -1,10 +1,17 @@
# Copyright (c) 2013 AnsibleWorks, Inc.
# All Rights Reserved.
# Python
import json
# PyYAML
import yaml
# Django
from django import forms
from django.utils.translation import ugettext_lazy as _
from jsonfield.fields import JSONFormField
# AnsibleWorks
from ansibleworks.main.models import *
EMPTY_CHOICE = ('', '---------')
@@ -29,6 +36,38 @@ class PlaybookSelect(forms.Select):
opt = opt.replace('">', '" class="project-%s">' % obj.project.pk)
return opt
class ModelFormWithVariables(forms.ModelForm):
'''Custom model form to validate variable data.'''
def clean_variables(self):
value = self.cleaned_data.get('variables', '')
try:
json.loads(value.strip() or '{}')
except ValueError:
try:
yaml.safe_load(value)
except yaml.YAMLError:
raise forms.ValidationError('Must be valid JSON or YAML')
return value
class InventoryAdminForm(ModelFormWithVariables):
'''Custom model form for Inventory.'''
class Meta:
model = Inventory
class HostAdminForm(ModelFormWithVariables):
'''Custom model form for Hosts.'''
class Meta:
model = Host
class GroupAdminForm(ModelFormWithVariables):
'''Custom model form for Groups.'''
class Meta:
model = Group
class ProjectAdminForm(forms.ModelForm):
'''Custom admin form for Projects.'''