diff --git a/SOURCES/0001-fix-Execute-playbook-asynchronously.patch b/SOURCES/0001-fix-Execute-playbook-asynchronously.patch
new file mode 100644
index 0000000..ef50446
--- /dev/null
+++ b/SOURCES/0001-fix-Execute-playbook-asynchronously.patch
@@ -0,0 +1,51 @@
+From 701885f0f7173f2b0ae113618d15c9f73e9522d2 Mon Sep 17 00:00:00 2001
+From: Link Dupont
+Date: Wed, 5 May 2021 14:10:49 -0400
+Subject: [PATCH] fix: Execute playbook asynchronously
+
+Run the playbook code in a coroutine that's scheduled onto a new event loop. Return a protobuf.Receipt message in the WorkerService Send implementation.
+
+Resolves: rhbz#2020426
+
+(cherry picked from commit 332d28d1bb636a5dc8ff5ddf3da8359a9a78b297)
+Signed-off-by: Gael Chamoulaud (Strider)
+---
+ rhc_worker_playbook/server.py | 10 +++++++---
+ 1 file changed, 7 insertions(+), 3 deletions(-)
+
+diff --git a/rhc_worker_playbook/server.py b/rhc_worker_playbook/server.py
+index 985ea98..8fa393f 100644
+--- a/rhc_worker_playbook/server.py
++++ b/rhc_worker_playbook/server.py
+@@ -16,6 +16,7 @@ import time
+ import json
+ import uuid
+ import atexit
++import asyncio
+ from subprocess import Popen, PIPE
+ from requests import Request
+ from concurrent import futures
+@@ -135,9 +136,13 @@ class WorkerService(yggdrasil_pb2_grpc.WorkerServicer):
+ '''
+ Act on messages sent to the WorkerService
+ '''
+- # we have received it
+- yggdrasil_pb2.Receipt()
+
++ loop = asyncio.new_event_loop()
++ loop.run_until_complete(self._run_data(request))
++
++ return yggdrasil_pb2.Receipt()
++
++ async def _run_data(self, request):
+ # load configuration
+ config = _loadConfig()
+
+@@ -256,7 +261,6 @@ class WorkerService(yggdrasil_pb2_grpc.WorkerServicer):
+ _log("Posting events...")
+ response = self.dispatcher.Send(returnedEvents)
+ _log("Post complete.")
+- return
+
+ def serve():
+ # load config to get directive
diff --git a/SOURCES/0002-Do-not-busy-wait-when-playbook-is-running.patch b/SOURCES/0002-Do-not-busy-wait-when-playbook-is-running.patch
new file mode 100644
index 0000000..e36c880
--- /dev/null
+++ b/SOURCES/0002-Do-not-busy-wait-when-playbook-is-running.patch
@@ -0,0 +1,24 @@
+From dba168bf7e00de5b534603019efa513cfa053716 Mon Sep 17 00:00:00 2001
+From: Jeremy Audet
+Date: Thu, 4 Aug 2022 17:38:51 -0400
+Subject: [PATCH] Do not busy-wait when playbook is running
+
+Resolves: rhbz#2104199
+
+(cherry picked from commit 579a67fba5ea60543a72b118e5644206c6ba720b)
+---
+ rhc_worker_playbook/server.py | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/rhc_worker_playbook/server.py b/rhc_worker_playbook/server.py
+index 8fa393f..8e9826f 100644
+--- a/rhc_worker_playbook/server.py
++++ b/rhc_worker_playbook/server.py
+@@ -235,6 +235,7 @@ class WorkerService(yggdrasil_pb2_grpc.WorkerServicer):
+ elapsedTime = 0
+ startTime = time.time()
+ while runnerThread.is_alive():
++ time.sleep(1)
+ elapsedTime = time.time() - startTime
+ if elapsedTime >= response_interval:
+ # hit the interval, post events
diff --git a/SPECS/rhc-worker-playbook.spec b/SPECS/rhc-worker-playbook.spec
index 08c22e7..7091899 100644
--- a/SPECS/rhc-worker-playbook.spec
+++ b/SPECS/rhc-worker-playbook.spec
@@ -5,12 +5,18 @@
Name: rhc-worker-playbook
Summary: Red Hat connect worker for launching Ansible Runner
Version: 0.1.8
-Release: 0%{?dist}
+Release: 3%{?dist}
License: GPLv2+
Source: rhc-worker-playbook-0.1.8.tar.gz
Source1: https://github.com/ansible-collections/community.general/archive/%{community_general_version}/ansible-collection-community-general-%{community_general_version}.tar.gz
Source2: https://github.com/ansible-collections/ansible.posix/archive/%{ansible_posix_version}/ansible-collection-ansible-posix-%{ansible_posix_version}.tar.gz
+#
+# patches_ignore=DROP-IN-RPM
+# patches_base=8ddc5ccfc97290a021b4c4de673b92fedc38cbfb
+Patch0001: 0001-fix-Execute-playbook-asynchronously.patch
+Patch0002: 0002-Do-not-busy-wait-when-playbook-is-running.patch
+
ExclusiveArch: %{go_arches}
%{?__python3:Requires: %{__python3}}
@@ -31,7 +37,11 @@ BuildRequires: python3dist(cython)
Python-based worker for Red Hat connect, used to launch Ansible playbooks via Ansible Runner.
%prep
-%setup -q -a1 -a2
+%setup -q -a1 -a2 -n %{name}-%{version}
+
+%patch0001 -p1
+%patch0002 -p1
+
pushd community.general-%{community_general_version}
rm -vr .github .azure-pipelines
rm -rvf tests/
@@ -93,10 +103,21 @@ mkdir -p %{buildroot}%{_localstatedir}/log/rhc-worker-playbook/ansible
%{_datadir}/rhc-worker-playbook/ansible/collections/ansible_collections/
%{_localstatedir}/log/rhc-worker-playbook/ansible/
%config %{_sysconfdir}/rhc/workers/rhc-worker-playbook.toml
+%exclude %{_libdir}/.build-id/
%doc
%changelog
+* Fri Aug 05 2022 Gael Chamoulaud 0.1.8-3
+- Do not busy-wait when playbook is running (rhbz#2104199)
+
+* Mon Mar 14 2022 Gaël Chamoulaud - 0.1.8-2
+- Update patches
+- Add DROP-IN-RPM patches_ignore rule for rdopkg
+
+* Mon Feb 21 2022 Gaël Chamoulaud - 0.1.8-1
+- Patch to fix Execute Playbook Asynchronously (RHBZ#2020426)
+
* Thu Feb 03 2022 Gaël Chamoulaud - 0.1.8-0
- Fix: Bump ansible-runner to 2.1.1 and dependencies in vendor (RHBZ#2053207)
- Upload new rhc-worker-playbook-0.1.8.tar.gz source