From 195c0bdfe4b81d1eb043a13818740b99c83ba3eb Mon Sep 17 00:00:00 2001 From: Aaron Tan Date: Wed, 2 Aug 2017 17:22:15 -0400 Subject: [PATCH] Prevent setting SCM fields for non-SCM inventory sources --- awx/api/serializers.py | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/awx/api/serializers.py b/awx/api/serializers.py index 36767e3a56..1ceea086ac 100644 --- a/awx/api/serializers.py +++ b/awx/api/serializers.py @@ -1411,7 +1411,7 @@ class GroupSerializer(BaseSerializerWithVariables): if value in ('all', '_meta'): raise serializers.ValidationError(_('Invalid group name.')) return value - + def validate_inventory(self, value): if value.kind == 'smart': raise serializers.ValidationError({"detail": _("Cannot create Group for Smart Inventory")}) @@ -1675,6 +1675,22 @@ class InventorySourceSerializer(UnifiedJobTemplateSerializer, InventorySourceOpt raise serializers.ValidationError({"detail": _("Cannot create Inventory Source for Smart Inventory")}) return value + def validate(self, attrs): + def get_field_from_model_or_attrs(fd): + return attrs.get(fd, self.instance and getattr(self.instance, fd) or None) + + if get_field_from_model_or_attrs('source') != 'scm': + redundant_scm_fields = filter( + lambda x: attrs.get(x, None), + ['source_project', 'source_path', 'update_on_project_update'] + ) + if redundant_scm_fields: + raise serializers.ValidationError( + {"detail": _("Cannot set %s if not SCM type." % ' '.join(redundant_scm_fields))} + ) + + return super(InventorySourceSerializer, self).validate(attrs) + class InventorySourceUpdateSerializer(InventorySourceSerializer):