diff --git a/awx/main/consumers.py b/awx/main/consumers.py index 1bcf1344f5..527081f912 100644 --- a/awx/main/consumers.py +++ b/awx/main/consumers.py @@ -7,7 +7,7 @@ from channels.sessions import channel_session from channels.handler import AsgiRequest from django.conf import settings -#from django.core.serializers.json import DjangoJSONEncoder +from django.core.serializers.json import DjangoJSONEncoder from django.contrib.auth.models import User from awx.main.models.organization import AuthToken @@ -24,7 +24,7 @@ def discard_groups(message): @channel_session def ws_connect(message): - connect_text = {'accept':False, 'user':None} + message.reply_channel.send({"accept": True}) message.content['method'] = 'FAKE' request = AsgiRequest(message) @@ -35,11 +35,12 @@ def ws_connect(message): auth_token = AuthToken.objects.get(key=token) if auth_token.in_valid_tokens: message.channel_session['user_id'] = auth_token.user_id - connect_text['accept'] = True - connect_text['user'] = auth_token.user_id + message.reply_channel.send({"text": json.dumps({"accept": True, "user": auth_token.user_id})}) + return None except AuthToken.DoesNotExist: logger.error("auth_token provided was invalid.") - message.reply_channel.send({"text": json.dumps(connect_text)}) + message.reply_channel.send({"close": True}) + return None @channel_session @@ -94,8 +95,6 @@ def ws_receive(message): def emit_channel_notification(group, payload): try: - # FIXME: Currently broken with asgi_rabbitmq as a ChannelLayer - #Group(group).send({"text": json.dumps(payload, cls=DjangoJSONEncoder)}) - logger.warning("Group sending is currently disabled. Would have sent the following message\nChannel: {0}, Payload: {1}".format(group, payload)) + Group(group).send({"text": json.dumps(payload, cls=DjangoJSONEncoder)}) except ValueError: logger.error("Invalid payload emitting channel {} on topic: {}".format(group, payload)) diff --git a/awx/settings/local_settings.py.docker_compose b/awx/settings/local_settings.py.docker_compose index 4bd0b9989f..ff0048e102 100644 --- a/awx/settings/local_settings.py.docker_compose +++ b/awx/settings/local_settings.py.docker_compose @@ -87,7 +87,7 @@ CELERY_BROKER_URL = "amqp://{}:{}@{}/{}".format(os.environ.get("RABBITMQ_USER"), urllib.quote(os.environ.get("RABBITMQ_VHOST", "/"), safe='')) CHANNEL_LAYERS = { - 'default': {'BACKEND': 'asgi_rabbitmq.RabbitmqChannelLayer', + 'default': {'BACKEND': 'asgi_amqp.AMQPChannelLayer', 'ROUTING': 'awx.main.routing.channel_routing', 'CONFIG': {'url': CELERY_BROKER_URL}} } diff --git a/installer/image_build/files/settings.py b/installer/image_build/files/settings.py index 632e828f1b..d9a56df2f1 100644 --- a/installer/image_build/files/settings.py +++ b/installer/image_build/files/settings.py @@ -96,7 +96,7 @@ CELERY_BROKER_URL = 'amqp://{}:{}@{}:{}/{}'.format( os.getenv("RABBITMQ_VHOST", "tower")) CHANNEL_LAYERS = { - 'default': {'BACKEND': 'asgi_rabbitmq.RabbitmqChannelLayer', + 'default': {'BACKEND': 'asgi_amqp.AMQPChannelLayer', 'ROUTING': 'awx.main.routing.channel_routing', 'CONFIG': {'url': CELERY_BROKER_URL}} } diff --git a/installer/openshift/templates/configmap.yml.j2 b/installer/openshift/templates/configmap.yml.j2 index 9b1cd04e6a..486c768797 100644 --- a/installer/openshift/templates/configmap.yml.j2 +++ b/installer/openshift/templates/configmap.yml.j2 @@ -80,7 +80,7 @@ data: "5672", "awx") CHANNEL_LAYERS = { - 'default': {'BACKEND': 'asgi_rabbitmq.RabbitmqChannelLayer', + 'default': {'BACKEND': 'asgi_amqp.AMQPChannelLayer', 'ROUTING': 'awx.main.routing.channel_routing', 'CONFIG': {'url': CELERY_BROKER_URL}} } diff --git a/requirements/requirements.in b/requirements/requirements.in index 417cc1dfd5..36216f0f55 100644 --- a/requirements/requirements.in +++ b/requirements/requirements.in @@ -1,6 +1,6 @@ apache-libcloud==2.0.0 appdirs==1.4.2 -asgi-rabbitmq==0.5.4 +asgi-amqp==1.0.1 asgiref==1.1.2 azure==2.0.0rc6 backports.ssl-match-hostname==3.5.0.1 diff --git a/requirements/requirements.txt b/requirements/requirements.txt index debab49615..5c94192df1 100644 --- a/requirements/requirements.txt +++ b/requirements/requirements.txt @@ -8,7 +8,7 @@ adal==0.4.5 # via msrestazure amqp==2.2.2 # via kombu apache-libcloud==2.0.0 appdirs==1.4.2 -asgi-rabbitmq==0.5.4 +asgi-amqp==1.0.1 asgiref==1.1.2 asn1crypto==0.22.0 # via cryptography attrs==17.2.0 # via automat, service-identity @@ -40,7 +40,6 @@ billiard==3.5.0.3 # via celery boto3==1.4.4 boto==2.46.1 botocore==1.5.72 # via boto3, s3transfer -cached-property==1.3.1 # via asgi-rabbitmq celery==4.1 #certifi==2017.11.5 # via msrest cffi==1.10.0 # via cryptography @@ -76,7 +75,7 @@ enum34==1.1.6 # via cryptography, msrest ephem==3.7.6.0 # via django-celery-beat funcsigs==1.0.2 # via debtcollector, oslo.utils functools32==3.2.3.post2 # via jsonschema -futures==3.1.1 # via asgi-rabbitmq, azure-storage, requests-futures, s3transfer, shade +futures==3.1.1 # via azure-storage, requests-futures, s3transfer, shade gevent-websocket==0.9.5 gevent==1.2.2 # via gevent-websocket greenlet==0.4.12 # via gevent @@ -97,6 +96,7 @@ jaraco.stream==1.1.2 # via irc jaraco.text==1.9.2 # via irc, jaraco.collections jmespath==0.9.3 # via boto3, botocore, shade jsonpatch==1.16 # via openstacksdk, shade, warlock +jsonpickle==0.9.5 # via asgi_amqp jsonpointer==1.10 # via jsonpatch jsonschema==2.6.0 keyring==10.3.3 # via msrestazure @@ -107,7 +107,7 @@ m2crypto==0.25.1 markdown==2.6.7 monotonic==1.3 # via oslo.utils more-itertools==3.2.0 # via irc, jaraco.functools, jaraco.itertools -msgpack-python==0.4.8 # via asgi-rabbitmq, oslo.serialization +msgpack-python==0.4.8 # via oslo.serialization msrest==0.4.10 # via azure-common, msrestazure msrestazure==0.4.9 # via azure-common munch==2.1.1 # via shade @@ -124,7 +124,6 @@ oslo.serialization==2.18.0 # via python-ironicclient, python-keystoneclient, py oslo.utils==3.26.0 # via osc-lib, oslo.serialization, python-cinderclient, python-designateclient, python-glanceclient, python-ironicclient, python-keystoneclient, python-neutronclient, python-novaclient, python-openstackclient pbr==3.1.1 # via cliff, debtcollector, keystoneauth1, openstacksdk, osc-lib, oslo.i18n, oslo.serialization, oslo.utils, positional, python-cinderclient, python-designateclient, python-glanceclient, python-ironicclient, python-keystoneclient, python-neutronclient, python-novaclient, python-openstackclient, requestsexceptions, shade, stevedore pexpect==4.2.1 -pika==0.11.0 # via asgi-rabbitmq positional==1.1.1 # via keystoneauth1, python-keystoneclient prettytable==0.7.2 # via cliff, python-cinderclient, python-glanceclient, python-ironicclient, python-novaclient psphere==0.5.2