From e0c9013d9c57f6c6db937558a23360ef03154ec4 Mon Sep 17 00:00:00 2001 From: Seth Foster Date: Tue, 13 Sep 2022 23:53:58 -0400 Subject: [PATCH] Prevent altering certain fields on Instance - Prevents changing hostname, listener_port, or node_type for instances that already exist - API default node_type is execution - API default node_state is installed --- awx/api/serializers.py | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/awx/api/serializers.py b/awx/api/serializers.py index f17d5af1b041..a41b8cb47ed5 100644 --- a/awx/api/serializers.py +++ b/awx/api/serializers.py @@ -4884,12 +4884,12 @@ class Meta: read_only_fields = ('ip_address', 'uuid', 'version') fields = ( 'id', + 'hostname', 'type', 'url', 'related', 'summary_fields', 'uuid', - 'hostname', 'created', 'modified', 'last_seen', @@ -4913,6 +4913,7 @@ class Meta: 'ip_address', 'listener_port', ) + extra_kwargs = {'node_type': {'default': 'execution'}, 'node_state': {'default': 'installed'}} def get_related(self, obj): res = super(InstanceSerializer, self).get_related(obj) @@ -4974,6 +4975,18 @@ def validate_node_state(self, value): return value + def validate_hostname(self, value): + if self.instance and self.instance.hostname != value: + raise serializers.ValidationError("Cannot change hostname.") + + return value + + def validate_listener_port(self, value): + if self.instance and self.instance.listener_port != value: + raise serializers.ValidationError("Cannot change listener port.") + + return value + class InstanceHealthCheckSerializer(BaseSerializer): class Meta: