From 67106eea76bef7b38d64081a051e82c236e3aeff Mon Sep 17 00:00:00 2001 From: CentOS Sources Date: Tue, 28 Mar 2023 11:55:36 +0000 Subject: [PATCH] import rhc-worker-playbook-0.1.8-4.el9 --- .gitignore | 3 + .rhc-worker-playbook.metadata | 3 + ...-fix-Execute-playbook-asynchronously.patch | 51 ++++++ ...t-busy-wait-when-playbook-is-running.patch | 25 +++ ...timeout-to-avoid-busy-waiting-and-si.patch | 41 +++++ SPECS/rhc-worker-playbook.spec | 163 ++++++++++++++++++ 6 files changed, 286 insertions(+) create mode 100644 .gitignore create mode 100644 .rhc-worker-playbook.metadata create mode 100644 SOURCES/0001-fix-Execute-playbook-asynchronously.patch create mode 100644 SOURCES/0002-Do-not-busy-wait-when-playbook-is-running.patch create mode 100644 SOURCES/0003-Use-thread.join-timeout-to-avoid-busy-waiting-and-si.patch create mode 100644 SPECS/rhc-worker-playbook.spec diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..efda5ae --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +SOURCES/ansible-collection-ansible-posix-1.3.0.tar.gz +SOURCES/ansible-collection-community-general-4.4.0.tar.gz +SOURCES/rhc-worker-playbook-0.1.8.tar.gz diff --git a/.rhc-worker-playbook.metadata b/.rhc-worker-playbook.metadata new file mode 100644 index 0000000..be9935f --- /dev/null +++ b/.rhc-worker-playbook.metadata @@ -0,0 +1,3 @@ +7027d309191f35d3dafb3fc37d9fe25b195ef769 SOURCES/ansible-collection-ansible-posix-1.3.0.tar.gz +1f333c73866dd59f120a3576ab701555d0e9bdf5 SOURCES/ansible-collection-community-general-4.4.0.tar.gz +e1db71388a14032b902941426a0ab0dda71b2f43 SOURCES/rhc-worker-playbook-0.1.8.tar.gz 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..679cbac --- /dev/null +++ b/SOURCES/0002-Do-not-busy-wait-when-playbook-is-running.patch @@ -0,0 +1,25 @@ +From 1f417d0241af6fd15697da55ed3f44c655567f7e 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 + +JIRA: RHELPLAN-130334 +Resolves: rhbz#2115848 + +(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/SOURCES/0003-Use-thread.join-timeout-to-avoid-busy-waiting-and-si.patch b/SOURCES/0003-Use-thread.join-timeout-to-avoid-busy-waiting-and-si.patch new file mode 100644 index 0000000..b5154fc --- /dev/null +++ b/SOURCES/0003-Use-thread.join-timeout-to-avoid-busy-waiting-and-si.patch @@ -0,0 +1,41 @@ +From cd4ceb514130328a0365688ce9ace7bf8cde0103 Mon Sep 17 00:00:00 2001 +From: Derek Horton +Date: Fri, 5 Aug 2022 15:02:37 -0500 +Subject: [PATCH] Use thread.join(timeout) to avoid busy waiting and simplify + interval event posting logic + +Resolves: rhbz#2115848 + +(cherry picked from commit 478930cca7a8d4acf21aef0715e42052315cb24e) +--- + rhc_worker_playbook/server.py | 12 +++--------- + 1 file changed, 3 insertions(+), 9 deletions(-) + +diff --git a/rhc_worker_playbook/server.py b/rhc_worker_playbook/server.py +index 8e9826f..e41482d 100644 +--- a/rhc_worker_playbook/server.py ++++ b/rhc_worker_playbook/server.py +@@ -231,20 +231,14 @@ class WorkerService(yggdrasil_pb2_grpc.WorkerServicer): + artifact_dir=RUNNER_ARTIFACTS_DIR, + rotate_artifacts=RUNNER_ROTATE_ARTIFACTS) + +- # initialize elapsed counter +- elapsedTime = 0 +- startTime = time.time() ++ # wait for the thread to finish + while runnerThread.is_alive(): +- time.sleep(1) +- elapsedTime = time.time() - startTime +- if elapsedTime >= response_interval: ++ runnerThread.join(response_interval) ++ if runnerThread.is_alive(): + # hit the interval, post events + _log("Hit the response interval. Posting current status...") + returnedEvents = _composeDispatcherMessage(events, return_url, response_to) + response = self.dispatcher.Send(returnedEvents) +- # reset interval timer +- elapsedTime = 0 +- startTime = time.time() + + if runner.status == 'failed': + # last event sould be the failure, find the reason diff --git a/SPECS/rhc-worker-playbook.spec b/SPECS/rhc-worker-playbook.spec new file mode 100644 index 0000000..63252ce --- /dev/null +++ b/SPECS/rhc-worker-playbook.spec @@ -0,0 +1,163 @@ +%define debug_package %{nil} +%define community_general_version 4.4.0 +%define ansible_posix_version 1.3.0 + +Name: rhc-worker-playbook +Version: 0.1.8 +Release: 4%{?dist} +Summary: Python worker for Red Hat connector that launches Ansible Runner +License: GPLv2+ +URL: https://github.com/redhatinsights/rhc-worker-playbook +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 +Patch0003: 0003-Use-thread.join-timeout-to-avoid-busy-waiting-and-si.patch + +%{?__python3:Requires: %{__python3}} +Requires: insights-client +Requires: python3dist(requests) +Requires: python3dist(pyyaml) +Requires: ansible-core +BuildRequires: rhc +BuildRequires: pkgconfig +BuildRequires: python3-devel +BuildRequires: python3dist(pip) +BuildRequires: python3dist(wheel) +BuildRequires: python3dist(setuptools) +BuildRequires: openssl-devel +BuildRequires: c-ares-devel +BuildRequires: zlib-devel +BuildRequires: python3dist(cython) +BuildRequires: gcc +BuildRequires: gcc-c++ + +ExclusiveArch: x86_64 s390x ppc64 ppc64le + +%description +Python-based worker for Red Hat connect, used to launch Ansible playbooks via Ansible Runner. + +%prep +%setup -q -a1 -a2 -n %{name}-%{version} + +%patch0001 -p1 +%patch0002 -p1 +%patch0003 -p1 + +pushd community.general-%{community_general_version} +rm -vr .github .azure-pipelines +rm -rvf tests/ hacking/ +find -type f ! -executable -name '*.py' -print -exec sed -i -e '1{\@^#!.*@d}' '{}' + +find -type f -name '.gitignore' -print -delete +popd + +pushd ansible.posix-%{ansible_posix_version} +rm -vr tests/{integration,utils} .github changelogs/fragments/.keep {test-,}requirements.txt shippable.yml +rm -vr .azure-pipelines +rm -rvf tests/ +find -type f ! -executable -name '*.py' -print -exec sed -i -e '1{\@^#!.*@d}' '{}' + +find -type f -name '.gitignore' -print -delete +popd + +%build +export GRPC_PYTHON_BUILD_WITH_CYTHON=True +export GRPC_PYTHON_BUILD_SYSTEM_OPENSSL=True +export GRPC_PYTHON_BUILD_SYSTEM_ZLIB=True +export GRPC_PYTHON_BUILD_SYSTEM_CARES=True +export GRPC_PYTHON_DISABLE_LIBC_COMPATIBILITY=True +# TODO(gchamoul): Remove workaround +# once https://bugzilla.redhat.com/show_bug.cgi?id=2056959 is fixed +#%define rhc_config_dir $(pkg-config rhc --variable workerconfdir) +%define rhc_config_dir /etc/rhc/workers + +%define _lto_cflags %{nil} +%set_build_flags +%{__make} PREFIX=%{_prefix} LIBDIR=%{_libdir} CONFIG_DIR=%{rhc_config_dir} PYTHON_PKGDIR=%{python3_sitelib} installed-lib-dir +%{make_build} build + +# Building the Ansible Collections +pushd community.general-%{community_general_version} +tar -cf %{_tmppath}/community-general-%{community_general_version}.tar.gz . +popd + +pushd ansible.posix-%{ansible_posix_version} +tar -cf %{_tmppath}/ansible-posix-%{ansible_posix_version}.tar.gz . +popd + +%install +%{make_install} PREFIX=%{_prefix} LIBDIR=%{_libdir} CONFIG_DIR=%{rhc_config_dir} PYTHON_PKGDIR=%{python3_sitelib} + +# Installing the Ansible Collections +mkdir -p %{buildroot}%{_datadir}/rhc-worker-playbook/ansible/collections/ansible_collections/community/general +mkdir -p %{buildroot}%{_datadir}/rhc-worker-playbook/ansible/collections/ansible_collections/ansible/posix + +pushd %{buildroot}%{_datadir}/rhc-worker-playbook/ansible/collections/ansible_collections/community/general +tar -xf %{_tmppath}/community-general-%{community_general_version}.tar.gz +popd + +pushd %{buildroot}%{_datadir}/rhc-worker-playbook/ansible/collections/ansible_collections/ansible/posix +tar -xf %{_tmppath}/ansible-posix-%{ansible_posix_version}.tar.gz +popd + +# Creating the logs directory for ansible-runner +mkdir -p %{buildroot}%{_localstatedir}/log/rhc-worker-playbook/ansible/ + + +%files +%{_libexecdir}/rhc/rhc-worker-playbook.worker +%{python3_sitelib}/rhc_worker_playbook/ +%{python3_sitelib}/rhc_worker_playbook*.egg-info/ +%{_libdir}/rhc-worker-playbook/ +%{_datadir}/rhc-worker-playbook/ansible/collections/ansible_collections/ +%{_localstatedir}/log/rhc-worker-playbook/ansible/ +%config(noreplace) %{_sysconfdir}/rhc/workers/rhc-worker-playbook.toml + +%doc + +%changelog +* Thu Oct 20 2022 Gael Chamoulaud 0.1.8-4 +- Use thread.join(timeout) to avoid busy waiting and simplify interval event posting logic (rhbz#2115848) + +* Fri Aug 05 2022 Gael Chamoulaud 0.1.8-3 +- Do not busy-wait when playbook is running (rhbz#2115848) + +* Mon Mar 14 2022 Gaël Chamoulaud - 0.1.8-2 +- Add DROP-IN-RPM patches_ignore rule for rdopkg + +* Mon Feb 20 2022 Gaël Chamoulaud - 0.1.8-1 +- Patch to fix Execute Playbook Asynchronously (RHBZ#2056861) + +* Thu Feb 16 2022 Alba Hita - 0.1.8-0 +- Fix: Bump ansible-runner to 1.1.1 and dependencies in vendor (RHBZ#2053212) +- Upload new rhc-worker-playbook-1.1.8.tar.gz source + +* Thu Feb 03 2022 Gaël Chamoulaud - 0.1.7-0 +- Add Ansible community general and ansible.posix Collections +- New Upstream Version + +* Mon Nov 1 2021 Link Dupont - 0.1.6-3 +- Disable LTO due to RHBZ#1893533 + +* Thu Sep 23 2021 Link Dupont - 0.1.6-2 +- Ensure build flags are exported to the build environment + +* Thu Aug 26 2021 Link Dupont - 0.1.6-1 +- New upstream version + +* Fri Aug 6 2021 Link Dupont - 0.1.5^0.9ef03b90.wtree.0663ne +- New upstream version + +* Mon Apr 19 2021 Jeremy Crafts - 0.1.5-1 +- Changes to playbook validation logic +- Enhancements for logging to rhcd +- Fix for subprocess environment + +* Thu Mar 25 2021 Jeremy Crafts - 0.1.4-1 +- Enhancements to playbook validation +- Fixes for regular execution status updates +- Configuration fixes