From 2c8cce74ab8e1fb5ebc421bbe3dd0e9702b0b32d Mon Sep 17 00:00:00 2001 From: Jarrod Johnson Date: Fri, 13 Mar 2026 11:40:44 -0400 Subject: [PATCH] Fix some issues from async ansible running --- .../confluent/plugins/deployment/remoteconfig.py | 6 +++--- confluent_server/confluent/runansible.py | 6 +++--- confluent_server/confluent/selfservice.py | 4 ++-- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/confluent_server/confluent/plugins/deployment/remoteconfig.py b/confluent_server/confluent/plugins/deployment/remoteconfig.py index c9582095..92384c54 100644 --- a/confluent_server/confluent/plugins/deployment/remoteconfig.py +++ b/confluent_server/confluent/plugins/deployment/remoteconfig.py @@ -3,7 +3,7 @@ import confluent.messages as msg import confluent.runansible as runansible _user_initiated_runs = {} -def update(nodes, element, configmanager, inputdata): +async def update(nodes, element, configmanager, inputdata): if element[-1] != 'run': raise ValueError('Invalid element for remoteconfig plugin') for node in nodes: @@ -11,13 +11,13 @@ def update(nodes, element, configmanager, inputdata): playlist = selfservice.list_ansible_scripts(configmanager, node, category) if playlist: _user_initiated_runs[node] = True - runansible.run_playbooks(playlist, [node]) + await runansible.run_playbooks(playlist, [node]) yield msg.CreatedResource( '/nodes/{0}/deployment/remote_config/active/{0}'.format(node)) else: yield msg.ConfluentNodeError('No remote configuration for category "{0}"', node) -def retrieve(nodes, element, configmanager, inputdata): +async def retrieve(nodes, element, configmanager, inputdata): for node in nodes: if element[-1] == 'active': rst = runansible.running_status.get(node, None) diff --git a/confluent_server/confluent/runansible.py b/confluent_server/confluent/runansible.py index 95017883..8285ccab 100644 --- a/confluent_server/confluent/runansible.py +++ b/confluent_server/confluent/runansible.py @@ -96,7 +96,7 @@ class PlayRunner(object): if ansloc: with open(ansloc, 'r') as onsop: shebang = onsop.readline() - anspypath = shebang.strip().replace('#!', '') + anspypath = shebang.strip().replace('#!', '').strip() mypath = anspypath if not mypath: mypath = sys.executable @@ -119,8 +119,8 @@ class PlayRunner(object): self.complete = True -def run_playbooks(playfiles, nodes): - sshutil.prep_ssh_key('/etc/confluent/ssh/automation') +async def run_playbooks(playfiles, nodes): + await sshutil.prep_ssh_key('/etc/confluent/ssh/automation') runner = PlayRunner(playfiles, nodes) for node in nodes: running_status[node] = runner diff --git a/confluent_server/confluent/selfservice.py b/confluent_server/confluent/selfservice.py index d897bdd3..c6811da1 100644 --- a/confluent_server/confluent/selfservice.py +++ b/confluent_server/confluent/selfservice.py @@ -493,7 +493,7 @@ async def handle_request(req, make_response, mimetype): if filename.endswith('.yaml') or filename.endswith('.yml'): playlist.append(os.path.join(dirname, filename)) if playlist: - runansible.run_playbooks(playlist, [nodename]) + await runansible.run_playbooks(playlist, [nodename]) return await make_response(mimetype, 202, 'Queued', body='Queued') else: return await make_response(mimetype, 200, 'OK', body='OK') @@ -516,7 +516,7 @@ async def handle_request(req, make_response, mimetype): mrsp = await make_response(mimetype, 200, 'OK') if rst.complete: del runansible.running_status[nodename] - await mrsp.write(rst.dump_text()) + await mrsp.write(rst.dump_text().encode('utf8')) return mrsp elif reqpath.startswith('/self/scriptlist/'): scriptcat = reqpath.replace('/self/scriptlist/', '')