1
0
mirror of https://github.com/ansible/awx.git synced 2024-10-31 23:51:09 +03:00

properly handle AnsibleVaultEncryptedUnicode objects in the callback

This commit is contained in:
Ryan Petrello 2018-10-12 12:29:46 -04:00
parent 503a47c509
commit d4e3127fb4
No known key found for this signature in database
GPG Key ID: F2AA5F2122351777

View File

@ -2,6 +2,7 @@
# All Rights Reserved.
# Python
import json
import logging
import os
@ -12,10 +13,31 @@ from django.conf import settings
# Kombu
from kombu import Connection, Exchange, Producer
from kombu.serialization import registry
__all__ = ['CallbackQueueDispatcher']
# use a custom JSON serializer so we can properly handle !unsafe and !vault
# objects that may exist in events emitted by the callback plugin
# see: https://github.com/ansible/ansible/pull/38759
class AnsibleJSONEncoder(json.JSONEncoder):
def default(self, o):
if getattr(o, 'yaml_tag') == '!vault':
return o.data
return super(AnsibleJSONEncoder, self).default(o)
registry.register(
'json-ansible',
lambda obj: json.dumps(obj, cls=AnsibleJSONEncoder),
lambda obj: json.loads(obj),
content_type='application/json',
content_encoding='utf-8'
)
class CallbackQueueDispatcher(object):
def __init__(self):
@ -41,7 +63,7 @@ class CallbackQueueDispatcher(object):
producer = Producer(self.connection)
producer.publish(obj,
serializer='json',
serializer='json-ansible',
compression='bzip2',
exchange=self.exchange,
declare=[self.exchange],