diff --git a/awx/api/serializers.py b/awx/api/serializers.py index b170199bdb..89fda89a55 100644 --- a/awx/api/serializers.py +++ b/awx/api/serializers.py @@ -2139,6 +2139,10 @@ class NotifierSerializer(BaseSerializer): incorrect_type_fields = [] if 'notification_configuration' not in attrs: return attrs + if self.context['view'].kwargs: + object_actual = self.context['view'].get_object() + else: + object_actual = None for field in notification_class.init_parameters: if field not in attrs['notification_configuration']: missing_fields.append(field) @@ -2149,8 +2153,8 @@ class NotifierSerializer(BaseSerializer): if not type(field_val) in expected_types: incorrect_type_fields.append((field, field_type)) continue - if field_type == "password" and field_val.startswith('$encrypted$'): - missing_fields.append(field) + if field_type == "password" and field_val == "$encrypted$" and object_actual is not None: + attrs['notification_configuration'][field] = object_actual.notification_configuration[field] error_list = [] if missing_fields: error_list.append("Missing required fields for Notification Configuration: {}".format(missing_fields)) diff --git a/awx/main/models/notifications.py b/awx/main/models/notifications.py index 29a51cf9ac..40dcba67ac 100644 --- a/awx/main/models/notifications.py +++ b/awx/main/models/notifications.py @@ -68,6 +68,8 @@ class Notifier(CommonModel): update_fields = kwargs.get('update_fields', []) for field in filter(lambda x: self.notification_class.init_parameters[x]['type'] == "password", self.notification_class.init_parameters): + if self.notification_configuration[field].startswith("$encrypted$"): + continue if new_instance: value = self.notification_configuration[field] setattr(self, '_saved_{}_{}'.format("config", field), value) @@ -84,7 +86,6 @@ class Notifier(CommonModel): self.notification_class.init_parameters): saved_value = getattr(self, '_saved_{}_{}'.format("config", field), '') self.notification_configuration[field] = saved_value - #setattr(self.notification_configuration, field, saved_value) if 'notification_configuration' not in update_fields: update_fields.append('notification_configuration') self.save(update_fields=update_fields)