From 9355bba247915db7c78385604a8a1fb03103e561 Mon Sep 17 00:00:00 2001 From: MSVSphere Packaging Team Date: Thu, 21 Nov 2024 18:45:04 +0300 Subject: [PATCH] import pcs-0.12.0~b1-1.el10 --- .gitignore | 23 +- .pcs.metadata | 23 +- SOURCES/fix-tests-for-missing-webui.patch | 444 ---------------------- SPECS/pcs.spec | 169 ++++---- 4 files changed, 107 insertions(+), 552 deletions(-) delete mode 100644 SOURCES/fix-tests-for-missing-webui.patch diff --git a/.gitignore b/.gitignore index 38785f3..434f6ea 100644 --- a/.gitignore +++ b/.gitignore @@ -3,22 +3,19 @@ SOURCES/base64-0.2.0.gem SOURCES/childprocess-5.0.0.gem SOURCES/dacite-1.8.1.tar.gz SOURCES/ethon-0.16.0.gem -SOURCES/ffi-1.16.3.gem -SOURCES/mustermann-3.0.0.gem -SOURCES/nio4r-2.7.3.gem -SOURCES/pcs-0.12.0a1.tar.gz -SOURCES/pcs-web-ui-0.1.20.tar.gz -SOURCES/pcs-web-ui-node-modules-0.1.20.tar.xz -SOURCES/puma-6.4.2.gem +SOURCES/ffi-1.17.0.gem +SOURCES/mustermann-3.0.3.gem +SOURCES/nio4r-2.7.4.gem +SOURCES/pcs-0.12.0b1.tar.gz +SOURCES/pcs-web-ui-0.1.21.tar.gz +SOURCES/pcs-web-ui-node-modules-0.1.21.tar.xz +SOURCES/puma-6.4.3.gem SOURCES/pyagentx-0.4.pcs.2.tar.gz SOURCES/pycurl-7.45.3.tar.gz -SOURCES/rack-3.0.11.gem +SOURCES/rack-3.1.8.gem SOURCES/rack-protection-4.0.0.gem SOURCES/rack-session-2.0.0.gem SOURCES/rack-test-2.1.0.gem -SOURCES/rackup-2.1.0.gem -SOURCES/ruby2_keywords-0.0.5.gem +SOURCES/rackup-2.2.1.gem SOURCES/sinatra-4.0.0.gem -SOURCES/tilt-2.3.0.gem -SOURCES/tornado-6.4.0.tar.gz -SOURCES/webrick-1.8.1.gem +SOURCES/tilt-2.4.0.gem diff --git a/.pcs.metadata b/.pcs.metadata index 702a9a2..51dedd3 100644 --- a/.pcs.metadata +++ b/.pcs.metadata @@ -3,22 +3,19 @@ ea3a591bdfa93655d8eec9d7bdd7fb87ecb5616a SOURCES/base64-0.2.0.gem 8f910640f84d085707138aa70d6eedb7df10ca73 SOURCES/childprocess-5.0.0.gem 07b26abbf7ff0dcba5c7f9e814ff7eebafefb058 SOURCES/dacite-1.8.1.tar.gz 5b56a68268708c474bef04550639ded3add5e946 SOURCES/ethon-0.16.0.gem -10e4cf0e11ef4581ec4ad5fe2cdf3c78b6077d39 SOURCES/ffi-1.16.3.gem -e892678aaf02ccb27f3a6cd58482cda00aea6ce8 SOURCES/mustermann-3.0.0.gem -632c455f6e27a5f568e9d24761b8a4246cfcc603 SOURCES/nio4r-2.7.3.gem -85dccd75ffe486aff1c3c5ce4448b3da7bae6919 SOURCES/pcs-0.12.0a1.tar.gz -c75288254b282cb8aed7307fd18dbdd8dda9252d SOURCES/pcs-web-ui-0.1.20.tar.gz -1dbe81ac08cfe60da25cc8650292cdc7c33cdb89 SOURCES/pcs-web-ui-node-modules-0.1.20.tar.xz -623cb3ebec75de449cad3c9f50d5d370edf9e2f9 SOURCES/puma-6.4.2.gem +8edfdd7cc314b5dc84851ea05b6fceedadf386a1 SOURCES/ffi-1.17.0.gem +249a573022dde130372f0ebbeaf2430f36c2b664 SOURCES/mustermann-3.0.3.gem +34b5b1cb50f18d6ec6c5d5cbcb823e7f81f54290 SOURCES/nio4r-2.7.4.gem +188cea0a72ea4804e277c8a7fdbed02a9d28808e SOURCES/pcs-0.12.0b1.tar.gz +a0d519196474b8768129569ba14b459cf4732945 SOURCES/pcs-web-ui-0.1.21.tar.gz +73838169577c2ec6c1dae9bf6b0c371cc7c12020 SOURCES/pcs-web-ui-node-modules-0.1.21.tar.xz +f72357acbdcfd68b4b41a999ed47926c0e54ea5e SOURCES/puma-6.4.3.gem 3176b2f2b332c2b6bf79fe882e83feecf3d3f011 SOURCES/pyagentx-0.4.pcs.2.tar.gz d36e54b3d6d36460dae0c7a2b9971d72d16d8225 SOURCES/pycurl-7.45.3.tar.gz -a156440aaee17f60b83f2f681ec60fce2329a480 SOURCES/rack-3.0.11.gem +a7f73594003243ebf00f8cb2716665a054b378b4 SOURCES/rack-3.1.8.gem f91158b296882aa5b3798ff6c24f01cdf233ef48 SOURCES/rack-protection-4.0.0.gem 9e7935696af0b64cc5f5ce2dfeabdb7e0d3a84f0 SOURCES/rack-session-2.0.0.gem ae09ea83748b55875edc3708fffba90db180cb8e SOURCES/rack-test-2.1.0.gem -657a2dc63695e1bf9eb5feae4d9d65a7c6b900ad SOURCES/rackup-2.1.0.gem -d017b9e4d1978e0b3ccc3e2a31493809e4693cd3 SOURCES/ruby2_keywords-0.0.5.gem +efa414fe946ccc1f70e64337d206e98807baa717 SOURCES/rackup-2.2.1.gem 28c671c6d061475ed2bfd3e6a4a17970a0a12d8a SOURCES/sinatra-4.0.0.gem -4a38a9a55887b2882182a2c5771e592efe514e5e SOURCES/tilt-2.3.0.gem -ee95560139af1bb8d0d49d4acf0518deb04877d2 SOURCES/tornado-6.4.0.tar.gz -0696afa9cc0b56f541aacb7483aecdb385a5bd37 SOURCES/webrick-1.8.1.gem +ad6225a8c3b4b66f88ae878d76ef6dec1d0c2f9e SOURCES/tilt-2.4.0.gem diff --git a/SOURCES/fix-tests-for-missing-webui.patch b/SOURCES/fix-tests-for-missing-webui.patch deleted file mode 100644 index d88f9ea..0000000 --- a/SOURCES/fix-tests-for-missing-webui.patch +++ /dev/null @@ -1,444 +0,0 @@ -From 525b102bd053a6653dff663845c98683fa78bbab Mon Sep 17 00:00:00 2001 -From: Ivan Devat -Date: Mon, 24 Jun 2024 17:19:58 +0200 -Subject: [PATCH] fix tests for missing webui - ---- - pcs_test/Makefile.am | 1 + - pcs_test/smoke.sh.in | 23 ++++++-- - pcs_test/tier0/daemon/app/fixtures_app.py | 53 +++---------------- - .../tier0/daemon/app/fixtures_app_webui.py | 28 ++++++++++ - pcs_test/tier0/daemon/app/test_app_gui.py | 37 ++++++++++--- - pcs_test/tier0/daemon/app/test_app_spa.py | 26 +++++++-- - pcs_test/tier0/daemon/test_env.py | 6 ++- - pcs_test/tier0/daemon/test_session.py | 25 ++++++--- - pcs_test/tools/misc.py | 9 ++++ - 9 files changed, 138 insertions(+), 70 deletions(-) - create mode 100644 pcs_test/tier0/daemon/app/fixtures_app_webui.py - -diff --git a/pcs_test/Makefile.am b/pcs_test/Makefile.am -index 4e71fcda..6c5932b3 100644 ---- a/pcs_test/Makefile.am -+++ b/pcs_test/Makefile.am -@@ -134,6 +134,7 @@ EXTRA_DIST = \ - tier0/common/test_tools.py \ - tier0/common/test_tools_xml_fromstring.py \ - tier0/daemon/app/fixtures_app.py \ -+ tier0/daemon/app/fixtures_app_webui.py \ - tier0/daemon/app/__init__.py \ - tier0/daemon/app/test_api_v0.py \ - tier0/daemon/app/test_api_v1.py \ -diff --git a/pcs_test/smoke.sh.in b/pcs_test/smoke.sh.in -index a4b3ac71..37eac345 100755 ---- a/pcs_test/smoke.sh.in -+++ b/pcs_test/smoke.sh.in -@@ -66,10 +66,25 @@ cat < ${pcsd_settings_conf_path} - EOF - cat ${pcsd_settings_conf_path} - pcs cluster start --all --wait --curl --insecure --data "username=${cluster_user}&password=${cluster_user_password}" --cookie-jar ${cookie_file} https://localhost:2224/ui/login --curl --insecure --cookie ${cookie_file} --header "X-Requested-With: XMLHttpRequest" --data "hidden[hidden_input]=&config[stonith-enabled]=false" https://localhost:2224/managec/${cluster_name}/update_cluster_settings > "${output_file}" --cat "${output_file}"; echo "" --[ "$(cat ${output_file})" = "Update Successful" ] -+ -+webui_http_code_response=$( -+ curl --insecure --silent --output /dev/null --write-out "%{http_code}" \ -+ https://localhost:2224/ui/ -+) -+if [ "$webui_http_code_response" = "200" ]; then -+ # Webui backend check -+ curl --insecure --data "username=${cluster_user}&password=${cluster_user_password}" --cookie-jar ${cookie_file} https://localhost:2224/ui/login -+ curl --insecure --cookie ${cookie_file} --header "X-Requested-With: XMLHttpRequest" --data "hidden[hidden_input]=&config[stonith-enabled]=false" https://localhost:2224/managec/${cluster_name}/update_cluster_settings > "${output_file}" -+ cat "${output_file}"; echo "" -+ [ "$(cat ${output_file})" = "Update Successful" ] -+elif [ "$webui_http_code_response" = "401" ]; then -+ curl --insecure https://localhost:2224/ui/ > "${output_file}" -+ cat "${output_file}"; echo "" -+ [ "$(cat "${output_file}")" = '{"notauthorized":"true"}' ] -+else -+ echo "Unexpected response from https://localhost:2224/ui/ - http code: '${webui_http_code_response}'" -+ exit 1 -+fi - - # Sanity check of API V1 - curl -kb "token=${token}" https://localhost:2224/api/v1/resource-agent-get-agents-list/v1 --data '{}' > "${output_file}" -diff --git a/pcs_test/tier0/daemon/app/fixtures_app.py b/pcs_test/tier0/daemon/app/fixtures_app.py -index 3c0d6a4f..56acf473 100644 ---- a/pcs_test/tier0/daemon/app/fixtures_app.py -+++ b/pcs_test/tier0/daemon/app/fixtures_app.py -@@ -1,16 +1,11 @@ - from pprint import pformat - from urllib.parse import urlencode - --from tornado.httputil import ( -- HTTPHeaders, -- parse_cookie, --) -+from tornado.httputil import HTTPHeaders - from tornado.testing import AsyncHTTPTestCase - from tornado.web import Application - - from pcs.daemon import ruby_pcsd --from pcs.daemon.app.webui import session --from pcs.daemon.app.webui.auth import PCSD_SESSION - - USER = "user" - GROUPS = ["group1", "group2"] -@@ -56,6 +51,13 @@ class AppTest(AsyncHTTPTestCase): - def fetch(self, path, raise_error=False, **kwargs): - if "follow_redirects" not in kwargs: - kwargs["follow_redirects"] = False -+ -+ if "is_ajax" in kwargs: -+ if "headers" not in kwargs: -+ kwargs["headers"] = {} -+ kwargs["headers"]["X-Requested-With"] = "XMLHttpRequest" -+ del kwargs["is_ajax"] -+ - response = super().fetch(path, raise_error=raise_error, **kwargs) - # "Strict-Transport-Security" header is expected in every response - self.assertTrue( -@@ -91,45 +93,6 @@ class AppTest(AsyncHTTPTestCase): - self.assert_headers_contains(response.headers, self.wrapper.headers) - self.assertEqual(response.body, self.wrapper.body) - -- --class AppUiTestMixin(AppTest): -- def setUp(self): -- self.session_storage = session.Storage(lifetime_seconds=10) -- super().setUp() -- -- def assert_session_in_response(self, response, sid=None): -- self.assertTrue("Set-Cookie" in response.headers) -- cookie = parse_cookie(response.headers["Set-Cookie"]) -- self.assertTrue(PCSD_SESSION, cookie) -- if sid: -- self.assertEqual(cookie[PCSD_SESSION], sid) -- return cookie[PCSD_SESSION] -- -- def fetch(self, path, raise_error=False, **kwargs): -- if "sid" in kwargs: -- if "headers" not in kwargs: -- kwargs["headers"] = {} -- kwargs["headers"]["Cookie"] = f"{PCSD_SESSION}={kwargs['sid']}" -- del kwargs["sid"] -- -- if "is_ajax" in kwargs: -- if "headers" not in kwargs: -- kwargs["headers"] = {} -- kwargs["headers"]["X-Requested-With"] = "XMLHttpRequest" -- del kwargs["is_ajax"] -- -- if "follow_redirects" not in kwargs: -- kwargs["follow_redirects"] = False -- -- return super().fetch(path, raise_error=raise_error, **kwargs) -- -- def create_login_session(self): -- return self.session_storage.login(USER) -- -- def assert_success_response(self, response, expected_body): -- self.assertEqual(response.code, 200) -- self.assertEqual(response.body.decode(), expected_body) -- - def assert_unauth_ajax(self, response): - self.assertEqual(response.code, 401) - self.assertEqual(response.body, b'{"notauthorized":"true"}') -diff --git a/pcs_test/tier0/daemon/app/fixtures_app_webui.py b/pcs_test/tier0/daemon/app/fixtures_app_webui.py -new file mode 100644 -index 00000000..e38ca3e7 ---- /dev/null -+++ b/pcs_test/tier0/daemon/app/fixtures_app_webui.py -@@ -0,0 +1,28 @@ -+try: -+ from pcs.daemon.app import webui -+except ImportError: -+ # You need to skip tests in tests that uses AppTest in the case webui -+ # is not there. -+ webui = None -+ -+from pcs_test.tier0.daemon.app import fixtures_app -+ -+ -+class AppTest(fixtures_app.AppTest): -+ def setUp(self): -+ self.session_storage = webui.session.Storage(lifetime_seconds=10) -+ super().setUp() -+ -+ def fetch(self, path, raise_error=False, **kwargs): -+ if "sid" in kwargs: -+ if "headers" not in kwargs: -+ kwargs["headers"] = {} -+ kwargs["headers"][ -+ "Cookie" -+ ] = f"{webui.auth.PCSD_SESSION}={kwargs['sid']}" -+ del kwargs["sid"] -+ -+ return super().fetch(path, raise_error=raise_error, **kwargs) -+ -+ def create_login_session(self): -+ return self.session_storage.login(fixtures_app.USER) -diff --git a/pcs_test/tier0/daemon/app/test_app_gui.py b/pcs_test/tier0/daemon/app/test_app_gui.py -index b3446fdb..2317eea5 100644 ---- a/pcs_test/tier0/daemon/app/test_app_gui.py -+++ b/pcs_test/tier0/daemon/app/test_app_gui.py -@@ -1,14 +1,24 @@ - import logging - from unittest import mock - -+from tornado.httputil import parse_cookie -+ - from pcs.daemon import ruby_pcsd - from pcs.daemon.app import sinatra_ui - from pcs.daemon.app.auth import UnixSocketAuthProvider --from pcs.daemon.app.webui import sinatra_ui as sinatra_ui_webui -+ -+try: -+ from pcs.daemon.app import webui -+except ImportError: -+ webui = None - from pcs.lib.auth.provider import AuthProvider - from pcs.lib.auth.types import AuthUser - --from pcs_test.tier0.daemon.app import fixtures_app -+from pcs_test.tier0.daemon.app import ( -+ fixtures_app, -+ fixtures_app_webui, -+) -+from pcs_test.tools.misc import skip_unless_webui_installed - - # Don't write errors to test output. - logging.getLogger("tornado.access").setLevel(logging.CRITICAL) -@@ -33,21 +43,28 @@ def patch_get_unix_socket_user(user): - auth_provider = AuthProvider(logging.getLogger("test logger")) - - --class AppTest(fixtures_app.AppUiTestMixin): -+@skip_unless_webui_installed() -+@patch_login_user() -+class SinatraAjaxProtectedSession(fixtures_app_webui.AppTest): - def setUp(self): - self.wrapper = fixtures_app.RubyPcsdWrapper(ruby_pcsd.SINATRA) - super().setUp() - -- --@patch_login_user() --class SinatraAjaxProtectedSession(AppTest): - def get_routes(self): -- return sinatra_ui_webui.get_routes( -+ return webui.sinatra_ui.get_routes( - self.session_storage, - auth_provider, - self.wrapper, - ) - -+ def assert_session_in_response(self, response, sid=None): -+ self.assertTrue("Set-Cookie" in response.headers) -+ cookie = parse_cookie(response.headers["Set-Cookie"]) -+ self.assertTrue(webui.auth.PCSD_SESSION, cookie) -+ if sid: -+ self.assertEqual(cookie[webui.auth.PCSD_SESSION], sid) -+ return cookie[webui.auth.PCSD_SESSION] -+ - def test_deal_without_authentication(self): - self.assert_unauth_ajax(self.get("/some-ajax", is_ajax=True)) - -@@ -63,7 +80,11 @@ class SinatraAjaxProtectedSession(AppTest): - - - @patch_login_user() --class SinatraAjaxProtectedUnixSocket(AppTest): -+class SinatraAjaxProtectedUnixSocket(fixtures_app.AppTest): -+ def setUp(self): -+ self.wrapper = fixtures_app.RubyPcsdWrapper(ruby_pcsd.SINATRA) -+ super().setUp() -+ - def get_routes(self): - return sinatra_ui.get_routes(auth_provider, self.wrapper) - -diff --git a/pcs_test/tier0/daemon/app/test_app_spa.py b/pcs_test/tier0/daemon/app/test_app_spa.py -index 89a5ab0e..6acf3c7d 100644 ---- a/pcs_test/tier0/daemon/app/test_app_spa.py -+++ b/pcs_test/tier0/daemon/app/test_app_spa.py -@@ -2,12 +2,22 @@ import logging - import os - from unittest import mock - --from pcs.daemon.app import webui -+try: -+ from pcs.daemon.app import webui -+except ImportError: -+ webui = None -+ - from pcs.lib.auth.provider import AuthProvider - from pcs.lib.auth.types import AuthUser - --from pcs_test.tier0.daemon.app import fixtures_app --from pcs_test.tools.misc import get_tmp_dir -+from pcs_test.tier0.daemon.app import ( -+ fixtures_app, -+ fixtures_app_webui, -+) -+from pcs_test.tools.misc import ( -+ get_tmp_dir, -+ skip_unless_webui_installed, -+) - - LOGIN_BODY = {"username": fixtures_app.USER, "password": fixtures_app.PASSWORD} - PREFIX = "/ui/" -@@ -16,7 +26,7 @@ PREFIX = "/ui/" - logging.getLogger("tornado.access").setLevel(logging.CRITICAL) - - --class AppTest(fixtures_app.AppUiTestMixin): -+class AppTest(fixtures_app_webui.AppTest): - def setUp(self): - self.public_dir = get_tmp_dir("tier0_daemon_app_spa") - self.spa_dir_path = os.path.join(self.public_dir.name, "ui") -@@ -41,7 +51,12 @@ class AppTest(fixtures_app.AppUiTestMixin): - auth_provider=AuthProvider(logging.Logger("test logger")), - ) - -+ def assert_success_response(self, response, expected_body): -+ self.assertEqual(response.code, 200) -+ self.assertEqual(response.body.decode(), expected_body) -+ - -+@skip_unless_webui_installed() - class Static(AppTest): - def test_index(self): - self.assert_success_response( -@@ -50,6 +65,7 @@ class Static(AppTest): - ) - - -+@skip_unless_webui_installed() - class Fallback(AppTest): - def setUp(self): - super().setUp() -@@ -65,6 +81,7 @@ class Fallback(AppTest): - ) - - -+@skip_unless_webui_installed() - class Login(AppTest): - def setUp(self): - super().setUp() -@@ -94,6 +111,7 @@ class Login(AppTest): - ) - - -+@skip_unless_webui_installed() - class Logout(AppTest): - def test_can_logout(self): - session1 = self.create_login_session() -diff --git a/pcs_test/tier0/daemon/test_env.py b/pcs_test/tier0/daemon/test_env.py -index 40f0c402..0eff3660 100644 ---- a/pcs_test/tier0/daemon/test_env.py -+++ b/pcs_test/tier0/daemon/test_env.py -@@ -8,7 +8,10 @@ from unittest import ( - from pcs import settings - from pcs.daemon import env - --from pcs_test.tools.misc import create_setup_patch_mixin -+from pcs_test.tools.misc import ( -+ create_setup_patch_mixin, -+ skip_unless_webui_installed, -+) - - - def webui_fallback(public_dir): -@@ -177,6 +180,7 @@ class Prepare(TestCase, create_setup_patch_mixin(env)): - {env.PCSD_DEBUG: "false"} - ) - -+ @skip_unless_webui_installed() - def test_errors_on_missing_paths(self): - self.path_exists.return_value = False - self.assert_environ_produces_modified_pcsd_env( -diff --git a/pcs_test/tier0/daemon/test_session.py b/pcs_test/tier0/daemon/test_session.py -index a893c01d..e8eff4cd 100644 ---- a/pcs_test/tier0/daemon/test_session.py -+++ b/pcs_test/tier0/daemon/test_session.py -@@ -1,23 +1,31 @@ - from contextlib import contextmanager - from unittest import TestCase - --from pcs.daemon.app.webui import session --from pcs.daemon.app.webui.session import Session -+try: -+ from pcs.daemon.app import webui -+except ImportError: -+ webui = None - --from pcs_test.tools.misc import create_setup_patch_mixin -+from pcs_test.tools.misc import ( -+ create_setup_patch_mixin, -+ skip_unless_webui_installed, -+) - - SID = "abc" - USER = "user" - GROUPS = ["group1", "group2"] - - --PatchSessionMixin = create_setup_patch_mixin(session) -+# If webui is None, the tests in this file using these mixins are skipped, -+# passing a dummy object instead to make this executable -+PatchSessionMixin = create_setup_patch_mixin(webui) if webui else object - - -+@skip_unless_webui_installed() - class SessionTest(TestCase, PatchSessionMixin): - def setUp(self): -- self.now = self.setup_patch("now", return_value=0) -- self.session = Session(SID, USER) -+ self.now = self.setup_patch("session.now", return_value=0) -+ self.session = webui.session.Session(SID, USER) - - def test_session_grows_older(self): - self.now.return_value = 10.1 -@@ -42,10 +50,11 @@ class SessionTest(TestCase, PatchSessionMixin): - session1.sid - - -+@skip_unless_webui_installed() - class StorageTest(TestCase, PatchSessionMixin): - def setUp(self): -- self.now = self.setup_patch("now", return_value=0) -- self.storage = session.Storage(lifetime_seconds=10) -+ self.now = self.setup_patch("session.now", return_value=0) -+ self.storage = webui.session.Storage(lifetime_seconds=10) - - def test_does_not_accept_foreign_sid(self): - self.assertIsNone(self.storage.get("unknown_sid")) -diff --git a/pcs_test/tools/misc.py b/pcs_test/tools/misc.py -index 28e03411..7a048a4d 100644 ---- a/pcs_test/tools/misc.py -+++ b/pcs_test/tools/misc.py -@@ -15,6 +15,11 @@ from pcs.cli.common.parse_args import InputModifiers - from pcs.common import str_tools - from pcs.lib.external import CommandRunner - -+try: -+ from pcs.daemon.app import webui -+except ImportError: -+ webui = None # type: ignore -+ - from pcs_test import TEST_ROOT - from pcs_test import settings as tests_settings - from pcs_test.tools.custom_mock import MockLibraryReportProcessor -@@ -292,6 +297,10 @@ def skip_unless_booth_resource_agent_installed(): - ) - - -+def skip_unless_webui_installed(): -+ return skipUnless(webui, "test requires webui which is not installed") -+ -+ - def create_patcher(target_prefix_or_module): - """ - Return function for patching tests with preconfigured target prefix --- -2.45.2 - diff --git a/SPECS/pcs.spec b/SPECS/pcs.spec index 691055a..e82a597 100644 --- a/SPECS/pcs.spec +++ b/SPECS/pcs.spec @@ -1,18 +1,17 @@ Name: pcs -Version: 0.12.0~a1 -Release: 4%{?dist} +Version: 0.12.0~b1 +Release: 1%{?dist} # https://docs.fedoraproject.org/en-US/packaging-guidelines/LicensingGuidelines/ # https://fedoraproject.org/wiki/Licensing:Main?rd=Licensing#Good_Licenses # GPL-2.0-only: pcs -# Apache-2.0: tornado # MIT: backports, childprocess, dacite, ethon, mustermann, rack, # rack-protection, rack-session, rack-test, rackup, sinatra, tilt # MIT and (BSD-2-Clause or GPL-2.0-or-later): nio4r -# BSD-2-Clause or Ruby: base64, ruby2_keywords, webrick +# BSD-2-Clause or Ruby: base64 # BSD-3-Clause: puma # BSD-3-Clause and MIT: ffi # curl OR LGPL-2.1-or-later: python-pycurl -License: GPL-2.0-only AND Apache-2.0 AND MIT AND BSD-3-Clause AND (BSD-2-Clause OR Ruby) AND (BSD-2-Clause OR GPL-2.0-or-later) AND (curl OR LGPL-2.1-or-later) +License: GPL-2.0-only AND MIT AND BSD-3-Clause AND (BSD-2-Clause OR Ruby) AND (BSD-2-Clause OR GPL-2.0-or-later) AND (curl OR LGPL-2.1-or-later) URL: https://github.com/ClusterLabs/pcs Group: System Environment/Base Summary: Pacemaker/Corosync Configuration System @@ -27,13 +26,12 @@ ExclusiveArch: x86_64 s390x ppc64le aarch64 %global pcs_source_name %{name}-%{version_or_commit} # ui_commit can be determined by hash, tag or branch -%global ui_commit 0.1.20 -%global ui_modules_version 0.1.20 +%global ui_commit 0.1.21 +%global ui_modules_version 0.1.21 %global ui_src_name pcs-web-ui-%{ui_commit} %global dacite_version 1.8.1 %global pyagentx_version 0.4.pcs.2 -%global tornado_version 6.4.0 %global pycurl_version 7.45.3 # During its initialization, PycURL checks that the actual libcurl version @@ -49,21 +47,19 @@ ExclusiveArch: x86_64 s390x ppc64le aarch64 %global version_rubygem_base64 0.2.0 %global version_rubygem_childprocess 5.0.0 %global version_rubygem_ethon 0.16.0 -%global version_rubygem_ffi 1.16.3 -%global version_rubygem_mustermann 3.0.0 -%global version_rubygem_nio4r 2.7.3 -%global version_rubygem_puma 6.4.2 -%global version_rubygem_rack 3.0.11 -%global version_rubygem_rack_protection 4.0.0 +%global version_rubygem_ffi 1.17.0 +%global version_rubygem_mustermann 3.0.3 +%global version_rubygem_nio4r 2.7.4 +%global version_rubygem_puma 6.4.3 +%global version_rubygem_rack 3.1.8 +%global version_rubygem_rack_protection 4.0.0 %global version_rubygem_rack_session 2.0.0 %global version_rubygem_rack_test 2.1.0 -%global version_rubygem_rackup 2.1.0 -%global version_rubygem_ruby2_keywords 0.0.5 +%global version_rubygem_rackup 2.2.1 %global version_rubygem_sinatra 4.0.0 -%global version_rubygem_tilt 2.3.0 -%global version_rubygem_webrick 1.8.1 +%global version_rubygem_tilt 2.4.0 -%global required_pacemaker_version 2.1.0 +%global required_pacemaker_version 3.0.0 %global pcs_bundled_dir pcs_bundled %global pcsd_public_dir pcsd/public @@ -71,9 +67,7 @@ ExclusiveArch: x86_64 s390x ppc64le aarch64 %global rubygem_bundle_dir pcsd/vendor/bundle %global rubygem_cache_dir %{rubygem_bundle_dir}/cache -%global ui_build_dir_standalone build_standalone -%global ui_build_dir_cockpit build_cockpit -%global ui_cockpit_dest ha-cluster +%global cockpit_dir %{_datadir}/cockpit/ %global ui_appstream_metainfo org.clusterlabs.cockpit_pcs_web_ui.metainfo.xml %global pkg_pcs_snmp pcs-snmp @@ -90,7 +84,6 @@ Source0: %{url}/archive/%{?v_prefix}%{version_or_commit}/%{pcs_source_name}.tar. Source21: https://github.com/konradhalas/dacite/archive/v%{dacite_version}/dacite-%{dacite_version}.tar.gz Source22: https://github.com/ondrejmular/pyagentx/archive/v%{pyagentx_version}/pyagentx-%{pyagentx_version}.tar.gz Source23: https://pypi.python.org/packages/source/p/pycurl/pycurl-%{pycurl_version}.tar.gz -Source24: https://github.com/tornadoweb/tornado/archive/v%{tornado_version}/tornado-%{tornado_version}.tar.gz Source61: https://rubygems.org/downloads/backports-%{version_rubygem_backports}.gem Source62: https://rubygems.org/downloads/base64-%{version_rubygem_base64}.gem @@ -105,10 +98,8 @@ Source70: https://rubygems.org/downloads/rack-protection-%{version_rubygem_rack_ Source71: https://rubygems.org/downloads/rack-session-%{version_rubygem_rack_session}.gem Source72: https://rubygems.org/downloads/rack-test-%{version_rubygem_rack_test}.gem Source73: https://rubygems.org/downloads/rackup-%{version_rubygem_rackup}.gem -Source74: https://rubygems.org/downloads/ruby2_keywords-%{version_rubygem_ruby2_keywords}.gem Source75: https://rubygems.org/downloads/sinatra-%{version_rubygem_sinatra}.gem Source76: https://rubygems.org/downloads/tilt-%{version_rubygem_tilt}.gem -Source77: https://rubygems.org/downloads/webrick-%{version_rubygem_webrick}.gem Source100: https://github.com/ClusterLabs/pcs-web-ui/archive/%{ui_commit}/%{ui_src_name}.tar.gz Source101: https://github.com/ClusterLabs/pcs-web-ui/releases/download/%{ui_commit}/pcs-web-ui-node-modules-%{ui_modules_version}.tar.xz @@ -117,7 +108,6 @@ Source101: https://github.com/ClusterLabs/pcs-web-ui/releases/download/%{ui_comm # pcs patches: <= 200 # Patch1: name.patch Patch1: do-not-support-cluster-setup-with-udp-u-transport.patch -Patch2: fix-tests-for-missing-webui.patch # ui patches: >200 # Patch201: name-web-ui.patch @@ -131,6 +121,8 @@ BuildRequires: automake BuildRequires: make # printf from coreutils is used in makefile, head is used in spec BuildRequires: coreutils +# find is used in Makefile and also somewhere else +BuildRequires: findutils # python for pcs BuildRequires: python3 >= 3.12 BuildRequires: python3-cryptography @@ -141,6 +133,7 @@ BuildRequires: python3-pip BuildRequires: python3-pyparsing # pcs build backend is setuptools BuildRequires: python3-setuptools +Buildrequires: python3-tornado # for building bundled python packages BuildRequires: python3-wheel # gcc for compiling custom rubygems and python extensions @@ -188,7 +181,7 @@ Requires: python3-cryptography Requires: python3-dateutil >= 2.7.0 Requires: python3-lxml Requires: python3-pyparsing -Requires: python3-setuptools +Requires: python3-tornado # ruby and gems for pcsd Requires: ruby >= 3.3.0 Requires: rubygems @@ -220,7 +213,6 @@ Requires: nss-tools Provides: bundled(dacite) = %{dacite_version} Provides: bundled(pycurl) = %{pycurl_version} -Provides: bundled(tornado) = %{tornado_version} Provides: bundled(backports) = %{version_rubygem_backports} Provides: bundled(base64) = %{version_rubygem_base64} @@ -235,10 +227,8 @@ Provides: bundled(rack_protection) = %{version_rubygem_rack_protection} Provides: bundled(rack_session) = %{version_rubygem_rack_session} Provides: bundled(rack_test) = %{version_rubygem_rack_test} Provides: bundled(rackup) = %{version_rubygem_rackup} -Provides: bundled(ruby2_keywords) = %{version_rubygem_ruby2_keywords} Provides: bundled(sinatra) = %{version_rubygem_sinatra} Provides: bundled(tilt) = %{version_rubygem_tilt} -Provides: bundled(webrick) = %{version_rubygem_webrick} # pcs-snmp subpackage definition @@ -332,8 +322,22 @@ update_times_patch(){ # * http://ftp.rpm.org/max-rpm/s1-rpm-inside-macros.html # * https://rpm-software-management.github.io/rpm/manual/autosetup.html # patch web-ui sources -%autosetup -D -T -b 100 -a 101 -S git -n %{ui_src_name} -N -%autopatch -p1 -m 201 +# -q limits verbosity of %setup macro. Only tar -xof is executed instead of tar +# -xvvof. This option has to be used as first. +# This option is used to suppress a listing of all node_modules files that is +# too long and exceeds capacity of CI log +# -n — Set Name of Build Directory +# -T — Do Not Perform Default Archive Unpacking +# -b — Unpack The nth Sources Before Changing Directory +# -a — Unpack The nth Sources After Changing Directory +# +# 1. unpack sources (-b 0) +# 2. then cd into sources tree (the setup macro itself) +# 3. then unpack node_modules into sources tree (-a 1). +%setup -q -T -b 100 -a 101 -n %{ui_src_name} +# patching is handled by applying the individual patches +# %%patch -P201 + # update_times_patch %%{PATCH201} # patch pcs sources @@ -341,7 +345,6 @@ update_times_patch(){ %autopatch -p1 -M 200 # update_times_patch %%{PATCH1} update_times_patch %{PATCH1} -update_times_patch %{PATCH2} # generate .tarball-version if building from an untagged commit, not a released version # autogen uses git-version-gen which uses .tarball-version for generating version number @@ -367,10 +370,8 @@ cp -f %SOURCE70 %{rubygem_cache_dir} cp -f %SOURCE71 %{rubygem_cache_dir} cp -f %SOURCE72 %{rubygem_cache_dir} cp -f %SOURCE73 %{rubygem_cache_dir} -cp -f %SOURCE74 %{rubygem_cache_dir} cp -f %SOURCE75 %{rubygem_cache_dir} cp -f %SOURCE76 %{rubygem_cache_dir} -cp -f %SOURCE77 %{rubygem_cache_dir} # 2) prepare python bundles @@ -378,12 +379,13 @@ mkdir -p %{pcs_bundled_dir}/src cp -f %SOURCE21 rpm/ cp -f %SOURCE22 rpm/ cp -f %SOURCE23 rpm/ -cp -f %SOURCE24 rpm/ + %build %define debug_package %{nil} +# We left off by setting up pcs, so we are in its directory now ./autogen.sh %{configure} --enable-local-build --enable-use-local-cache-only \ --enable-individual-bundling --enable-booth-enable-authfile-unset \ @@ -391,41 +393,36 @@ cp -f %SOURCE24 rpm/ PYTHON=%{__python3} ruby_CFLAGS="%{optflags}" ruby_LIBS="%{build_ldflags}" make all -# build pcs-web-ui -export BUILD_USE_CURRENT_NODE_MODULES=true - -## standalone -export BUILD_DIR=%{_builddir}/%{ui_src_name}/%{ui_build_dir_standalone} -make -C %{_builddir}/%{ui_src_name} build +# Web UI installation +# Switch to web ui folder first +cd ../%{ui_src_name} +./autogen.sh +%{configure} \ + --disable-standalone \ + --with-cockpit-dir=%{cockpit_dir} +make all -## cockpit -export BUILD_DIR=%{_builddir}/%{ui_src_name}/%{ui_build_dir_cockpit} -export BUILD_FOR_COCKPIT=true -make -C %{_builddir}/%{ui_src_name} build %install -rm -rf $RPM_BUILD_ROOT +rm -rf %{buildroot} pwd +# Install cockpit pcs-web-ui +cd ../%{ui_src_name} +%make_install +# Workaround - metainfo should be installed by make install +mkdir -p %{buildroot}%{_datadir}/metainfo +cp -r %{_builddir}/%{ui_src_name}/packages/app/%{ui_appstream_metainfo} \ + %{buildroot}%{_datadir}/metainfo/ + +# Install pcs +cd ../%{pcs_source_name} %make_install # RHEL-7716 - fix rubygem permissions - remove write access for owner's group # and other users -chmod --recursive g-w,o-w ${RPM_BUILD_ROOT}%{_libdir}/%{rubygem_bundle_dir} - -# install standalone pcs-web-ui -cp -r %{_builddir}/%{ui_src_name}/%{ui_build_dir_standalone} \ - ${RPM_BUILD_ROOT}%{_libdir}/%{pcsd_public_dir}/ui - -# install cockpit pcs-web-ui -mkdir -p ${RPM_BUILD_ROOT}%{_datadir}/cockpit/%{ui_cockpit_dest} -mkdir -p ${RPM_BUILD_ROOT}%{_datadir}/metainfo -cp -r %{_builddir}/%{ui_src_name}/%{ui_build_dir_cockpit}/* \ - ${RPM_BUILD_ROOT}%{_datadir}/cockpit/%{ui_cockpit_dest} - -cp -r %{_builddir}/%{ui_src_name}/packages/app/%{ui_appstream_metainfo} \ - ${RPM_BUILD_ROOT}%{_datadir}/metainfo/ +chmod --recursive g-w,o-w %{buildroot}%{_libdir}/%{rubygem_bundle_dir} # prepare license files mv %{rubygem_bundle_dir}/gems/backports-%{version_rubygem_backports}/LICENSE.txt backports_LICENSE.txt @@ -444,10 +441,8 @@ mv %{rubygem_bundle_dir}/gems/rack-protection-%{version_rubygem_rack_protection} mv %{rubygem_bundle_dir}/gems/rack-session-%{version_rubygem_rack_session}/license.md rack-session_license.md mv %{rubygem_bundle_dir}/gems/rack-test-%{version_rubygem_rack_test}/MIT-LICENSE.txt rack-test_MIT-LICENSE.txt mv %{rubygem_bundle_dir}/gems/rackup-%{version_rubygem_rackup}/license.md rackup_license.md -mv %{rubygem_bundle_dir}/gems/ruby2_keywords-%{version_rubygem_ruby2_keywords}/LICENSE ruby2_keywords_LICENSE mv %{rubygem_bundle_dir}/gems/sinatra-%{version_rubygem_sinatra}/LICENSE sinatra_LICENSE mv %{rubygem_bundle_dir}/gems/tilt-%{version_rubygem_tilt}/COPYING tilt_COPYING -mv %{rubygem_bundle_dir}/gems/webrick-%{version_rubygem_webrick}/LICENSE.txt webrick_LICENSE.txt cp %{pcs_bundled_dir}/src/dacite-*/LICENSE dacite_LICENSE cp %{pcs_bundled_dir}/src/dacite-*/README.md dacite_README.md @@ -460,9 +455,6 @@ cp %{pcs_bundled_dir}/src/pycurl-*/COPYING-LGPL pycurl_COPYING-LGPL cp %{pcs_bundled_dir}/src/pycurl-*/COPYING-MIT pycurl_COPYING-MIT cp %{pcs_bundled_dir}/src/pycurl-*/README.rst pycurl_README.rst -cp %{pcs_bundled_dir}/src/tornado-*/LICENSE tornado_LICENSE -cp %{pcs_bundled_dir}/src/tornado-*/README.rst tornado_README.rst - # We are not building debug package for pcs but we need to add MiniDebuginfo # to the bundled shared libraries from rubygem extensions in order to satisfy # rpminspect's binary stripping checker. @@ -471,24 +463,32 @@ cp %{pcs_bundled_dir}/src/tornado-*/README.rst tornado_README.rst find-debuginfo -j2 -m -i -S debugsourcefiles.list # find-debuginfo generated some files into /usr/lib/debug and # /usr/src/debug/ that we don't want in the package -rm -rf $RPM_BUILD_ROOT%{_libdir}/debug -rm -rf $RPM_BUILD_ROOT/usr/lib/debug -rm -rf $RPM_BUILD_ROOT%{_prefix}/src/debug +rm -rf %{buildroot}%{_libdir}/debug +rm -rf %{buildroot}/usr/lib/debug +rm -rf %{buildroot}%{_prefix}/src/debug # We can remove files required for gem compilation -rm -rf $RPM_BUILD_ROOT%{_libdir}/%{rubygem_bundle_dir}/gems/ffi-%{version_rubygem_ffi}/ext -rm -rf $RPM_BUILD_ROOT%{_libdir}/%{rubygem_bundle_dir}/gems/nio4r-%{version_rubygem_nio4r}/ext -rm -rf $RPM_BUILD_ROOT%{_libdir}/%{rubygem_bundle_dir}/gems/puma-%{version_rubygem_puma}/ext +rm -rf %{buildroot}%{_libdir}/%{rubygem_bundle_dir}/gems/ffi-%{version_rubygem_ffi}/ext +rm -rf %{buildroot}%{_libdir}/%{rubygem_bundle_dir}/gems/nio4r-%{version_rubygem_nio4r}/ext +rm -rf %{buildroot}%{_libdir}/%{rubygem_bundle_dir}/gems/puma-%{version_rubygem_puma}/ext # Sinatra contains example applications which are unnecessary (discovered by brp_mangle_shebangs) -rm -rf $RPM_BUILD_ROOT%{_libdir}/%{rubygem_bundle_dir}/gems/sinatra-%{version_rubygem_sinatra}/examples +rm -rf %{buildroot}%{_libdir}/%{rubygem_bundle_dir}/gems/sinatra-%{version_rubygem_sinatra}/examples # Puma contains an unnecessary rc init script (discovered by brp_mangle_shebangs) -rm -rf $RPM_BUILD_ROOT%{_libdir}/%{rubygem_bundle_dir}/gems/puma-%{version_rubygem_puma}/docs/jungle/rc.d +rm -rf %{buildroot}%{_libdir}/%{rubygem_bundle_dir}/gems/puma-%{version_rubygem_puma}/docs/jungle/rc.d + +# Remove unused rubygem executables with wrong shebangs (discovered by brp_mangle_shebangs) +rm -fv %{buildroot}/%{_libdir}/pcsd/vendor/bundle/gems/puma-*/bin/puma +rm -fv %{buildroot}/%{_libdir}/pcsd/vendor/bundle/gems/puma-*/bin/pumactl +rm -fv %{buildroot}/%{_libdir}/pcsd/vendor/bundle/gems/rackup-*/bin/rackup +rm -fv %{buildroot}/%{_libdir}/pcsd/vendor/bundle/gems/tilt-*/bin/tilt + + %check # Run validation of cockpit metainfo -appstream-util validate-relax --nonet ${RPM_BUILD_ROOT}%{_datadir}/metainfo/%{ui_appstream_metainfo} +appstream-util validate-relax --nonet %{buildroot}%{_datadir}/metainfo/%{ui_appstream_metainfo} # In the building environment LC_CTYPE is set to C which causes tests to fail # due to python prints a warning about it to stderr. The following environment @@ -514,8 +514,8 @@ run_all_tests(){ test_result_python=$? #run pcsd tests and remove them - GEM_HOME=$RPM_BUILD_ROOT%{_libdir}/%{rubygem_bundle_dir} ruby \ - -I$RPM_BUILD_ROOT%{_libdir}/pcsd \ + GEM_HOME=%{buildroot}%{_libdir}/%{rubygem_bundle_dir} ruby \ + -I%{buildroot}%{_libdir}/pcsd \ -Ipcsd/test \ pcsd/test/test_all_suite.rb test_result_ruby=$? @@ -562,12 +562,10 @@ run_all_tests %doc CHANGELOG.md %doc README.md %doc dacite_README.md -%doc tornado_README.rst %doc pycurl_README.rst %license COPYING # python dependency licenses %license dacite_LICENSE -%license tornado_LICENSE %license pycurl_COPYING-LGPL %license pycurl_COPYING-MIT # rubygem licenses @@ -587,10 +585,8 @@ run_all_tests %license rack-session_license.md %license rack-test_MIT-LICENSE.txt %license rackup_license.md -%license ruby2_keywords_LICENSE %license sinatra_LICENSE %license tilt_COPYING -%license webrick_LICENSE.txt %{python3_sitelib}/* %{_sbindir}/pcs %{_sbindir}/pcsd @@ -633,11 +629,20 @@ run_all_tests %license pyagentx_LICENSE.txt %files -n %{pkg_cockpit_ha_cluster} -%{_datadir}/cockpit/%{ui_cockpit_dest} +%{cockpit_dir} %{_datadir}/metainfo/%{ui_appstream_metainfo} %changelog +* Wed Nov 13 2024 Michal Pospíšil - 0.12.0~b1-1 +- Rebased to the latest sources (see CHANGELOG.md) + Resolves: RHEL-21047, RHEL-33386, RHEL-38483, RHEL-44432, RHEL-48220, RHEL-49520, RHEL-49521, RHEL-49524, RHEL-49527, RHEL-55723, RHEL-61747, RHEL-61889, RHEL-62719 +- Updated pcs-web-ui in cockpit-ha-cluster to 0.1.21 + Resolves: RHEL-30688, RHEL-30691, RHEL-30693, RHEL-30701, RHEL-47158, RHEL-52846, RHEL-53363 +- Updated bundled rubygems: ffi, mustermann, puma, rack, rackup, tilt +- Removed bundled rubygem webrick, ruby2_keywords +- New runtime dependency python3-tornado which has been bundled in previous versions + * Tue Oct 29 2024 Troy Dawson - 0.12.0~a1-4 - Bump release for October 2024 mass rebuild: Resolves: RHEL-64018