mirror of
https://github.com/ansible/awx.git
synced 2026-05-07 17:37:37 -02:30
move vars validation method into validators.py
This commit is contained in:
@@ -40,6 +40,7 @@ from awx.main.models import * # noqa
|
|||||||
from awx.main.access import get_user_capabilities
|
from awx.main.access import get_user_capabilities
|
||||||
from awx.main.fields import ImplicitRoleField
|
from awx.main.fields import ImplicitRoleField
|
||||||
from awx.main.utils import get_type_for_model, get_model_for_type, build_url, timestamp_apiformat, camelcase_to_underscore, getattrd
|
from awx.main.utils import get_type_for_model, get_model_for_type, build_url, timestamp_apiformat, camelcase_to_underscore, getattrd
|
||||||
|
from awx.main.validators import vars_validate_or_raise
|
||||||
|
|
||||||
from awx.conf.license import feature_enabled
|
from awx.conf.license import feature_enabled
|
||||||
from awx.api.fields import BooleanNullField, CharNullField, ChoiceNullField, EncryptedPasswordField, VerbatimField
|
from awx.api.fields import BooleanNullField, CharNullField, ChoiceNullField, EncryptedPasswordField, VerbatimField
|
||||||
@@ -110,20 +111,6 @@ def reverse_gfk(content_object):
|
|||||||
camelcase_to_underscore(content_object.__class__.__name__): content_object.get_absolute_url()
|
camelcase_to_underscore(content_object.__class__.__name__): content_object.get_absolute_url()
|
||||||
}
|
}
|
||||||
|
|
||||||
def vars_validate_or_raise(vars_str):
|
|
||||||
# vars must be blank, a valid JSON or YAML dict, or ...
|
|
||||||
try:
|
|
||||||
json.loads((vars_str or '').strip() or '{}')
|
|
||||||
return vars_str
|
|
||||||
except ValueError:
|
|
||||||
pass
|
|
||||||
try:
|
|
||||||
yaml.safe_load(vars_str)
|
|
||||||
return vars_str
|
|
||||||
except yaml.YAMLError:
|
|
||||||
pass
|
|
||||||
raise serializers.ValidationError('Must be valid JSON or YAML.')
|
|
||||||
|
|
||||||
|
|
||||||
class BaseSerializerMetaclass(serializers.SerializerMetaclass):
|
class BaseSerializerMetaclass(serializers.SerializerMetaclass):
|
||||||
'''
|
'''
|
||||||
|
|||||||
@@ -4,11 +4,16 @@
|
|||||||
# Python
|
# Python
|
||||||
import base64
|
import base64
|
||||||
import re
|
import re
|
||||||
|
import yaml
|
||||||
|
import json
|
||||||
|
|
||||||
# Django
|
# Django
|
||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import ugettext_lazy as _
|
||||||
from django.core.exceptions import ValidationError
|
from django.core.exceptions import ValidationError
|
||||||
|
|
||||||
|
# REST framework
|
||||||
|
from rest_framework.serializers import ValidationError as RestValidationError
|
||||||
|
|
||||||
|
|
||||||
def validate_pem(data, min_keys=0, max_keys=None, min_certs=0, max_certs=None):
|
def validate_pem(data, min_keys=0, max_keys=None, min_certs=0, max_certs=None):
|
||||||
"""
|
"""
|
||||||
@@ -166,3 +171,21 @@ def validate_ssh_private_key(data):
|
|||||||
credential.
|
credential.
|
||||||
"""
|
"""
|
||||||
return validate_pem(data, min_keys=1)
|
return validate_pem(data, min_keys=1)
|
||||||
|
|
||||||
|
def vars_validate_or_raise(vars_str):
|
||||||
|
"""
|
||||||
|
Validate that fields like extra_vars or variables on resources like
|
||||||
|
job templates, inventories, or hosts are either an acceptable
|
||||||
|
blank string, or are valid JSON or YAML dict
|
||||||
|
"""
|
||||||
|
try:
|
||||||
|
json.loads((vars_str or '').strip() or '{}')
|
||||||
|
return vars_str
|
||||||
|
except ValueError:
|
||||||
|
pass
|
||||||
|
try:
|
||||||
|
yaml.safe_load(vars_str)
|
||||||
|
return vars_str
|
||||||
|
except yaml.YAMLError:
|
||||||
|
pass
|
||||||
|
raise RestValidationError('Must be valid JSON or YAML.')
|
||||||
|
|||||||
Reference in New Issue
Block a user