Compare commits

...
Sign in to create a new pull request.

20 commits

Author SHA1 Message Date
Python Maint
97846a528f Rebuilt for Python 3.14.0rc3 bytecode 2025-09-19 12:36:02 +02:00
Python Maint
267ae8ba0c Rebuilt for Python 3.14.0rc2 bytecode 2025-08-15 13:05:31 +02:00
Michal Pospíšil
2e5063b78a bump release
Forgotten to bump release in previous commit (096aab9).
2025-07-30 18:11:15 +02:00
Michal Pospíšil
096aab967f pcs-0.12.1-3
- Remove BuildRequires: python3-wheel when using setuptools 71+
2025-07-30 12:47:35 +02:00
Fedora Release Engineering
5830580f12 Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild 2025-07-25 00:03:19 +00:00
Michal Pospíšil
8cd0772e80 pcs-0.12.1-1
- Rebased pcs to the newest major version (see CHANGELOG.md)
  Resolves: rhbz#2371770
- Updated standalone web UI and HA Cluster Management Cockpit application to pcs-web-ui 0.1.23 (see CHANGELOG_WUI.md)
- There is now a changelog for the HA Cluster Management Cockpit application and the standalone web UI in both packages
- Updated bundled Python dependency dacite
2025-07-22 17:56:27 +02:00
Michal Pospíšil
1351fa3026 report pcs-web-ui version and simplify version macros
The original goal was to report the pcs-web-ui upstream version through
rpm to simplify reporting bugs upstream because subpackages inherit the
pcs version from the main package.

When pcs-web-ui is built from unreleased version, I needed a mechanism
to include the git revision in the version string. This mechanism
already existed for generating .tarball-version. I didn't want to
duplicate the code so I moved it to a macro. With this approach I was
also able to simplify conditions for generating .tarball-version file.

On top of that, as I was adding the new tarball_version macro, I noticed
that the if conditions could be simplified by updating the existing
variables instead of using the else branch.
2025-07-22 17:56:27 +02:00
Michal Pospíšil
2f443108e0 add --enable-webui switch to tests
The switch alters the test suite behavior - we want it enabled since we
want pcsd to support webui in standalone mode if the user chooses to
install pcs-web-ui package.
2025-07-22 17:56:27 +02:00
Michal Pospíšil
2cc50341f9 package licenses and docs for pcs-web-ui
Pcs-web-ui added a changelog upstream, so I'm adding it downstream as
well. It turns out that I forgot to package the readme and license
before, so adding them too. In Fedora, I have to copy the files to the
cockpit package and pcs-web-ui package since they both include the
pcs-web-ui upstream code.

For pcs, readme and changelog are installed via automake variable
`dist_doc_DATA` [1] which gets automatically converted to its own target
ran during `make install`. The target installs it to %docdir/%TARNAME
(automake variables). This happens to align with RPM default of
%_docdir/%name (spec macros). This is rendered completely useless as
these later get replaced by RPM anyway. The path is therefore
/usr/share/doc/pcs.

RPM %doc directive has two modes. If there is a relative path, the %doc
directive runs a script that goes into builddir/BUILD/<Source0> and
copies the file to %_docdir. If there is an absolute path, the file is
only marked as a doc file in the RPM database. The same goes for
%license directive, except for it getting copied to %_defaultlicensedir.
[2][3]

The problem arises for pcs-web-ui files as they neither come from the
pcs tarball nor are to be owned by the pcs package. Additionally, the
package name changes for different downstreams. Because the package name
changes, it is not desirable to install the files in the upstream
Makefile which is not aware of RPM package names. I made a decision to
handle file copying entirely in the specfile for these reasons. It seems
like for relative paths, RPM searches the Source0 tarball, but ours are
located in Source100. Therefore, I explicitly used %_docdir and
%_defaultlicensedir in %install and %files.

[1]: https://www.gnu.org/software/automake/manual/html_node/amhello_0027s-Makefile_002eam-Setup-Explained.html
[2]: https://docs.fedoraproject.org/en-US/packaging-guidelines/LicensingGuidelines/
[3]: https://web.archive.org/web/20160927094629/https://docs.fedoraproject.org/en-US/Fedora_Draft_Documentation/0.1/html/RPM_Guide/ch09s05s03.html
2025-07-22 17:56:27 +02:00
Michal Pospíšil
959addae3b use virtual provides for rack and rackup
This fixes commit 825b175. Dnf5 cannot resolve the rpm name for some
reason. Switching to virtual provides rubygem(rack) instead of
rubygem-rack solves the issue. As a troubleshooting attempt, I also
tried a different approach to declaring the dependency with "and" and
"or". This provides a more complete picture and is less hacky than the
if boolean dependency [1].

This might have something to do with how provides are defined:
rpm -qP -p ./rubygem-rack-3.1.16-1.fc43.noarch.rpm
rubygem(rack) = 3.1.16
rubygem-rack = 1:3.1.16-1.fc43

[1] https://rpm-software-management.github.io/rpm/manual/boolean_dependencies.html
2025-07-22 17:51:40 +02:00
Michal Pospíšil
825b1756ac depend on rackup with rack 3+
Since rack 3, rack handlers were moved to a new gem called rackup. As
a part of update to rack 3 in Fedora, a new package rubygem-rackup is
included [1]. No upstream changes are needed, we already have a
mechanism to require rackup when rack >= 3.

Resolves: rhbz#2372462

[1] https://bugzilla.redhat.com/show_bug.cgi?id=2338474
2025-07-18 19:08:01 +02:00
Michal Pospíšil
db939b8274 fix URL of pcs-web-ui package 2025-07-18 17:19:31 +02:00
Python Maint
0ab16a578c Rebuilt for Python 3.14 2025-06-03 23:35:19 +02:00
Michal Pospíšil
c3de7d7354 - Rebased pcs to the newest major version (see CHANGELOG.md)
Resolves: rhbz#2341012
- New subpackage pcs-web-ui - enables standalone web UI when the subpackage is installed on the system (default), uninstall the subpackage to disable the web UI
- Updated standalone web UI and HA Cluster Management Cockpit application to pcs-web-ui 0.1.22
- Fixes for compatibility with Ruby 3.4
  Resolves: rhbz#2331005

- Support tilde in version - for correct sorting of prerelease upstream version by RPM - %{version} expands with the tilde, use %{clean_version} to get upstream version
- Added pkgconfig file for pcs
- Added previously omitted autotools as build dependencies
- Changed BuildRequires for cluster stack components to use pkgconfig virtual provides to prevent breakage if pkgconfig is ever moved to a different package
- Removed BuildRequires: nodejs-npm from main package and fixed the name in cockpit-ha-cluster subpackage - the idea is that BuildRequires become Requires of the srpm which are then used during the main build phase when subpackages are built (so BuildRequires are effectively inherited by this logic)
- Removed Requires: python3-setuptools. With overhauled setup, new setuptools create entrypoints that do not import setuptools.
- Removed Requires: rubygem-rack-test - this is a build requirement.
- Improved BuildRequires for systemd scriptlet macros according to packaging guidelines
- Replaced ${RPM_BUILD_ROOT} in favor of %buildroot to match the upstream spec
- Revamped and unified tarball version management between pcs and pcs-web-ui - version numbers are needed for untagged releases, as git-version-gen takes the version from a git tag present in official released tarballs. To build an unreleased version of pcs, a commit hash is declared in a macro and .tarball-version is generated from rpm version and the hash. For tagged releases, .tarball-version is not generated but rpm version is used for file names and such. Pcs-web-ui uses a different version than pcs, so the rpm version cannot be used. Instead, pcs-web-ui version always has to be declared in the spec file anyway, so it will now serve as the fallback version for generating the .tarball-version for pcs-web-ui.
- Added BuildRequires: pkgconf as autotools need to process pc files from cluster packages
- Removal of all %post macros for all subpackages, because these are run automatically by systemd via %filetriggerin [1]. The need to restart is from now on indicated by running %posttrans systemd macros which set restart markers, see systemd 248 release notes [2]. This is implementation of a Fedora change proposal [3]. There are %posttrans and %postun macros for pcs-web-ui subpackage since pcsd needs to be restarted to start/stop providing webui or update webui on its installation/update/uninstall.
- The path to webui_public_dir passed to pcs-web-ui autotools is hardcoded. The pcs.pc file is not available since pcs is built in the same SRPM. It is not possible to get the path from compiled pc file after running configure from pcs because the %files section is not shell interpreted. It only accepts RPM macros which are replaced by the preprocessor before pcs is compiled. Technically, %files accept a file with paths and pkg-config could be run manually after pcs is compiled outputiing the directory to a temporary file. This hack is too ugly. Another solution would be to hardcode the paths both to pcs and ps-web-ui via autotools. This however doesn;t change the structure of the pcs tarball and is not safe either.
- Stopped using sbindir macro due to: https://fedoraproject.org/wiki/Changes/Unify_bin_and_sbin

[1] 1ffa7bf7c7/f/triggers.systemd
[2] https://github.com/systemd/systemd/blob/v248-rc1/NEWS#L360
[3] https://fedoraproject.org/wiki/Changes/Restart_services_at_end_of_rpm_transaction
2025-02-03 22:21:46 +01:00
Fedora Release Engineering
a62e4a77c3 Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild 2025-01-17 22:35:25 +00:00
Michal Pospisil
dd5c28916c rpm induced gating changes
Changes to builddir structure in RPM 4.20 broke the old script for
patching sources. Luckily, we can now patch sources with tmt.
Gone is also list of packages needed for testing,
build dependencies will be installed by tmt instead.

Name of the gating plan was changed to remove confusion with
gating.yaml. The prepare script was also renamed to better reflect what
it does.

The prepare script should be run in prepare, but TMT_SOURCE_DIR doesn't
exist in that step yet. The workaround is to run the prepre script
before every test to allow for running all tests by itself. However, the
script can only run once because it removes pcs folder which breaks
autotools. This is done by creating a stamp file that prevents the
script from running if it already ran.
2024-08-06 17:46:08 +02:00
Michal Pospisil
9fee6b2969 pcs-0.11.8-1
- Rebased to the latest sources (see CHANGELOG.md)
- Updated pcs-web-ui to 0.1.20

- Removed extraneous Requires and BuildRequires
2024-08-06 17:40:30 +02:00
Fedora Release Engineering
234d9718a9 Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild 2024-07-18 21:39:00 +00:00
Yaakov Selkowitz
232b9c52ef Drop eln macro usage
The %eln macro should only be used where absolutely necessary and with
approval from ELN SIG.  ELN builds also define the %rhel macro, set to the
next version to be branched, which covers almost all cases. Fedora 38 is
EOL, so there is no further need to conditionalize for it.
2024-06-23 22:34:41 -04:00
Python Maint
43ad532686 Rebuilt for Python 3.13 2024-06-09 03:06:50 +02:00
12 changed files with 566 additions and 301 deletions

10
.gitignore vendored
View file

@ -115,3 +115,13 @@
/pcs-0.11.7.tar.gz
/pcs-web-ui-0.1.18.tar.gz
/pcs-web-ui-node-modules-0.1.18.tar.xz
/pcs-0.11.8.tar.gz
/pcs-web-ui-0.1.20.tar.gz
/pcs-web-ui-node-modules-0.1.20.tar.xz
/pcs-0.12.0.tar.gz
/pcs-web-ui-0.1.22.tar.gz
/pcs-web-ui-node-modules-0.1.22.tar.xz
/dacite-1.9.2.tar.gz
/pcs-0.12.1.tar.gz
/pcs-web-ui-0.1.23.tar.gz
/pcs-web-ui-node-modules-0.1.23.tar.xz

View file

@ -0,0 +1,63 @@
From 72588f150e89b6f06810321245a13157b7e00b09 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Miro=20Hron=C4=8Dok?= <miro@hroncok.cz>
Date: Tue, 29 Jul 2025 23:42:00 +0200
Subject: [PATCH] Do not require wheel when setuptools is new enough
Current version of setuptools creates wheels on its own.
---
README.md | 2 +-
configure.ac | 7 +++++--
rpm/pcs.spec.in | 2 +-
3 files changed, 7 insertions(+), 4 deletions(-)
diff --git a/README.md b/README.md
index a06143eba..636485be6 100644
--- a/README.md
+++ b/README.md
@@ -47,7 +47,7 @@ Apart from the dependencies listed above, these are also required for
installation:
* python development files (packages python3-devel, python3-setuptools 66.1+,
- python3-pip, python3-wheel)
+ python3-pip, python3-wheel if python3-setuptools < 71)
* ruby development files (package ruby-devel)
* rubygems
* rubygem bundler (package rubygem-bundler or ruby-bundler or bundler)
diff --git a/configure.ac b/configure.ac
index 4e7d36599..0a782bfa7 100644
--- a/configure.ac
+++ b/configure.ac
@@ -347,12 +347,15 @@ AC_SUBST([PYAGENTX_VERSION])
# pip 19.0 required for PEP517 support
PCS_CHECK_PYMOD([pip], [>= 23.0])
-# pip builds a wheel first
-PCS_CHECK_PYMOD([wheel])
if test "x$tests_only" != "xyes"; then
# setuptools 61.0.0 required for PEP621 support
PCS_CHECK_PYMOD([setuptools], [>= 66.1])
+ # wheel is required if setuptools < 71
+ AC_PIP_MODULE([setuptools], [>= 71], [], [], [need_wheel=yes])
+ if test "x$need_wheel" = "xyes"; then
+ PCS_CHECK_PYMOD([wheel])
+ fi
PCS_CHECK_PYMOD([cryptography])
PCS_CHECK_PYMOD([lxml])
PCS_CHECK_PYMOD([pyparsing], [>= 3.0.0])
diff --git a/rpm/pcs.spec.in b/rpm/pcs.spec.in
index 55881a398..639a3e974 100644
--- a/rpm/pcs.spec.in
+++ b/rpm/pcs.spec.in
@@ -86,7 +86,7 @@ BuildRequires: python%{python3_version}-pip >= 23
BuildRequires: python%{python3_version}-setuptools >= 66.1
# for building wheel during make install
-BuildRequires: python%{python3_version}-wheel
+BuildRequires: (python%{python3_version}-wheel if python%{python3_version}-setuptools < 71)
# for bundling dateutil
%if "@cirpmworkarounds@" != "yes"
--
2.50.1

View file

@ -0,0 +1,32 @@
From a2899ef0e20bb638f47e74077281e73f4f18faf3 Mon Sep 17 00:00:00 2001
From: Miroslav Lisik <mlisik@redhat.com>
Date: Thu, 10 Jul 2025 19:48:28 +0200
Subject: [PATCH 2/2] fix ruby NameError exception in pcsd/pcsd.rb occuring
with older rack
---
pcsd/pcsd.rb | 8 +++++---
1 file changed, 5 insertions(+), 3 deletions(-)
diff --git a/pcsd/pcsd.rb b/pcsd/pcsd.rb
index e8ae9f106..c9f668851 100644
--- a/pcsd/pcsd.rb
+++ b/pcsd/pcsd.rb
@@ -74,9 +74,11 @@ configure do
CAPABILITIES_PCSD = capabilities_pcsd.freeze
end
-error Rack::QueryParser::QueryLimitError do
- $logger.warn(env['sinatra.error'].message)
- return 400, env['sinatra.error'].message
+if Rack.const_defined?(:QueryParser) and Rack::QueryParser.const_defined?(:QueryLimitError)
+ error Rack::QueryParser::QueryLimitError do
+ $logger.warn(env['sinatra.error'].message)
+ return 400, env['sinatra.error'].message
+ end
end
get '/remote/?:command?' do
--
2.50.1

View file

@ -1,48 +0,0 @@
summary: PCS gating test plan
description: Runs upstream tier0, tier1 and smoke tests
discover:
how: shell
dist-git-source: true
tests:
# Workaround until tmt supports patching sources
- name: Patch sources and run autotools
test: ./prepare-env.sh
duration: 30m
- name: Tier 0 tests
test: ./builddir/pcs-*/pcs_test/suite --tier0 -v --vanilla --installed
duration: 10m
- name: Tier 1 tests
test: ./builddir/pcs-*/pcs_test/suite --tier1 -v --vanilla --installed
duration: 2h
- name: Smoke tests
test: |
systemctl start pcsd
./builddir/pcs-*/pcs_test/smoke.sh
duration: 10m
prepare:
- name: Install packages
how: install
package:
- autoconf
- automake
- make
- rpm-build
- ruby-devel
- git-core
- booth-site
- fence-agents-apc
- fence-agents-ipmilan
- fence-agents-scsi
- fence-virt
- openssl
- pcs
- pcs-snmp
- python3-pip
- python3-setuptools_scm
- python3-wheel
- rubygem-json
- rubygem-test-unit
- wget
execute:
how: tmt

View file

@ -1,82 +0,0 @@
From 9923d48095ac7a1376b108a0a3e722d3090fcea6 Mon Sep 17 00:00:00 2001
From: Michal Pospisil <mpospisi@redhat.com>
Date: Thu, 18 Jan 2024 16:52:59 +0100
Subject: [PATCH] make AppStream metainfo more descriptive
---
...g.clusterlabs.cockpit_pcs_web_ui.metainfo.xml | 16 ++++++++++++++++
.../app/org.clusterlabs.pcs_web_ui.metainfo.xml | 16 ----------------
packages/app/package-lock.json | 4 ++--
3 files changed, 18 insertions(+), 18 deletions(-)
create mode 100644 packages/app/org.clusterlabs.cockpit_pcs_web_ui.metainfo.xml
delete mode 100644 packages/app/org.clusterlabs.pcs_web_ui.metainfo.xml
diff --git a/packages/app/org.clusterlabs.cockpit_pcs_web_ui.metainfo.xml b/packages/app/org.clusterlabs.cockpit_pcs_web_ui.metainfo.xml
new file mode 100644
index 00000000..a27525a9
--- /dev/null
+++ b/packages/app/org.clusterlabs.cockpit_pcs_web_ui.metainfo.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<component type="addon">
+ <id>org.clusterlabs.cockpit_pcs_web_ui</id>
+ <metadata_license>CC0-1.0</metadata_license>
+ <name>HA Cluster Management</name>
+ <summary>Manage Pacemaker based clusters</summary>
+ <description>
+ <p>
+ Application for managing Pacemaker based clusters. Uses Pacemaker/Corosync
+ Configuration System (pcs) in the background.
+ </p>
+ </description>
+ <extends>cockpit.desktop</extends>
+ <launchable type="cockpit-manifest">ha-cluster</launchable>
+ <url type="homepage">https://github.com/ClusterLabs/pcs-web-ui</url>
+</component>
diff --git a/packages/app/org.clusterlabs.pcs_web_ui.metainfo.xml b/packages/app/org.clusterlabs.pcs_web_ui.metainfo.xml
deleted file mode 100644
index 83add879..00000000
--- a/packages/app/org.clusterlabs.pcs_web_ui.metainfo.xml
+++ /dev/null
@@ -1,16 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<component type="addon">
- <id>org.clusterlabs.pcs_web_ui</id>
- <metadata_license>CC0-1.0</metadata_license>
- <name>Pcs Web UI</name>
- <summary>Manage pacemaker based clusters.</summary>
- <description>
- <p>
- Pcs Web UI is an application that allows you to easily view, modify and
- create pacemaker based clusters.
- </p>
- </description>
- <extends>cockpit.desktop</extends>
- <launchable type="cockpit-manifest">ha-cluster</launchable>
-</component>
-
diff --git a/packages/app/package-lock.json b/packages/app/package-lock.json
index 4bf1e89e..2f4049a5 100644
--- a/packages/app/package-lock.json
+++ b/packages/app/package-lock.json
@@ -3830,7 +3830,7 @@
},
"node_modules/caniuse-lite": {
"version": "1.0.30001563",
- "resolved": "https://repository.engineering.redhat.com/nexus/repository/registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001563.tgz",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001563.tgz",
"integrity": "sha512-na2WUmOxnwIZtwnFI2CZ/3er0wdNzU7hN+cPYz/z2ajHThnkWjNBOpEPP4n+4r2WPM847JaMotaJE3bnfzjyKw==",
"dev": true,
"funding": [
@@ -12590,7 +12590,7 @@
},
"caniuse-lite": {
"version": "1.0.30001563",
- "resolved": "https://repository.engineering.redhat.com/nexus/repository/registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001563.tgz",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001563.tgz",
"integrity": "sha512-na2WUmOxnwIZtwnFI2CZ/3er0wdNzU7hN+cPYz/z2ajHThnkWjNBOpEPP4n+4r2WPM847JaMotaJE3bnfzjyKw==",
"dev": true
},
--
2.43.0

View file

@ -1,25 +0,0 @@
From c55cac8220da78b87b7c84c4049280bc05bf1753 Mon Sep 17 00:00:00 2001
From: Michal Pospisil <mpospisi@redhat.com>
Date: Fri, 2 Feb 2024 18:47:54 +0100
Subject: [PATCH] metainfo: fix outdated extends id
---
packages/app/org.clusterlabs.cockpit_pcs_web_ui.metainfo.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/packages/app/org.clusterlabs.cockpit_pcs_web_ui.metainfo.xml b/packages/app/org.clusterlabs.cockpit_pcs_web_ui.metainfo.xml
index a27525a9..0924545c 100644
--- a/packages/app/org.clusterlabs.cockpit_pcs_web_ui.metainfo.xml
+++ b/packages/app/org.clusterlabs.cockpit_pcs_web_ui.metainfo.xml
@@ -10,7 +10,7 @@
Configuration System (pcs) in the background.
</p>
</description>
- <extends>cockpit.desktop</extends>
+ <extends>org.cockpit_project.cockpit</extends>
<launchable type="cockpit-manifest">ha-cluster</launchable>
<url type="homepage">https://github.com/ClusterLabs/pcs-web-ui</url>
</component>
--
2.43.0

379
pcs.spec
View file

@ -1,6 +1,6 @@
Name: pcs
Version: 0.11.7
Release: 3%{?dist}
Version: 0.12.1
Release: 5%{?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
@ -11,33 +11,52 @@ Group: System Environment/Base
Summary: Pacemaker/Corosync Configuration System
BuildArch: noarch
# When specifying a commit, use its long hash
%global version_or_commit %{version}
# %%global version_or_commit 10069ca47e5c9f4ac1abd8bc4cd99281ead047b7
# Remove a tilde used by RPM to get the correct upstream version
%global clean_version %(echo %{version} | sed 's/~//')
# To build an official pcs release, comment out branch_or_commit
# Use long commit hash or branch name to build an unreleased version
# %%global branch_or_commit 1353dfbb3af82d77f4de17a3fa4cbde185bb2b2d
%global version_or_commit %{clean_version}
%if 0%{?branch_or_commit:1}
%global version_or_commit %{branch_or_commit}
%global tarball_version %{clean_version}+%(echo %{branch_or_commit} | head -c 8)
%endif
%global pcs_source_name %{name}-%{version_or_commit}
# ui_commit can be determined by hash, tag or branch
%global ui_commit 0.1.18
%global ui_modules_version 0.1.18
%global ui_src_name pcs-web-ui-%{ui_commit}
# To build an official pcs-web-ui release, comment out ui_branch_or_commit
# Last tagged version, also used as fallback version for untagged tarballs
%global ui_version 0.1.23
%global ui_modules_version 0.1.23
# Use long commit hash or branch name to build an unreleased version
# %%global ui_branch_or_commit 34372d1268f065ed186546f55216aaa2d7e76b54
%global ui_version_or_commit %{ui_version}
%if 0%{?ui_branch_or_commit:1}
%global ui_version_or_commit %{ui_branch_or_commit}
%global ui_tarball_version %{ui_version}-%(echo %{ui_branch_or_commit} | head -c 8)
%endif
%global ui_src_name pcs-web-ui-%{ui_version_or_commit}
%global pyagentx_version 0.4.pcs.2
%global dacite_version 1.8.1
%global dacite_version 1.9.2
%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
%global ui_build_dir_standalone build_standalone
%global ui_build_dir_cockpit build_cockpit
%global ui_cockpit_dest ha-cluster
%global ui_appstream_metainfo org.clusterlabs.cockpit_pcs_web_ui.metainfo.xml
%global pcsd_webui_dir %{_prefix}/lib/pcsd/public/ui
%global cockpit_dir %{_datadir}/cockpit/
%global metainfo_dir %{_datadir}/metainfo
%global ui_metainfo_name org.clusterlabs.cockpit_pcs_web_ui.metainfo.xml
%global ui_metainfo %{metainfo_dir}/%{ui_metainfo_name}
%global pkg_pcs_snmp pcs-snmp
%global pkg_pcs_web_ui pcs-web-ui
%global pkg_cockpit_ha_cluster cockpit-ha-cluster
# prepend v for folder in GitHub link when using tagged tarball
%if "%{version}" == "%{version_or_commit}"
%if "%{clean_version}" == "%{version_or_commit}"
%global v_prefix v
%endif
@ -47,24 +66,42 @@ Source0: %{url}/archive/%{?v_prefix}%{version_or_commit}/%{pcs_source_name}.tar.
Source41: https://github.com/ondrejmular/pyagentx/archive/v%{pyagentx_version}/pyagentx-%{pyagentx_version}.tar.gz
Source42: https://github.com/konradhalas/dacite/archive/v%{dacite_version}/dacite-%{dacite_version}.tar.gz
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
Source100: https://github.com/ClusterLabs/pcs-web-ui/archive/%{ui_version_or_commit}/%{ui_src_name}.tar.gz
Source101: https://github.com/ClusterLabs/pcs-web-ui/releases/download/%{ui_version_or_commit}/pcs-web-ui-node-modules-%{ui_modules_version}.tar.xz
# pcs patches: <= 200
# Patch0: name.patch
# Patch1: name.patch
Patch1: show-info-page-instead-of-webui.patch
Patch2: fix-pcsd-not-starting-with-older-rack.patch
Patch3: do-not-require-wheel.patch
# ui patches: >200
# Patch201: name-web-ui.patch
Patch201: make-AppStream-metainfo-more-descriptive.patch
Patch202: metainfo-fix-outdated-extends-id.patch
# Split pcs to pcs and pcs-web-ui, all packages that replace pcs must obsolete
# the old monolithic package
# https://docs.fedoraproject.org/en-US/packaging-guidelines/#_one_to_many_replacement
Obsoletes: pcs < 0.12.0
# Web UI is an add-on that doesn't need to be installed for pcs to function.
# Upgrades from before 0.12 will install it thanks to Obsoletes. But it will
# be possible to uninstall web UI to disable it and then it will not be
# installed during upgrades because it is a weak dependency.
Recommends: %{pkg_pcs_web_ui} == %{version}-%{release}
# git for patches
BuildRequires: git-core
# for building pcs tarballs
BuildRequires: autoconf
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.9
BuildRequires: python3-dateutil >= 2.7.0
BuildRequires: python3-devel
BuildRequires: python3-setuptools
@ -75,10 +112,8 @@ BuildRequires: python3-tornado
BuildRequires: python3-cryptography
BuildRequires: python3-lxml
# for building bundled python packages
BuildRequires: python3-wheel
# for bundled python dateutil
# dateutil was unbundled in Fedora but our autotools still check for it
BuildRequires: python3-setuptools_scm
# setuptools 71+ builds wheels by itself
BuildRequires: (python3-wheel if python3-setuptools < 71)
# ruby and gems for pcsd
BuildRequires: ruby >= 2.5.0
BuildRequires: ruby-devel
@ -89,53 +124,52 @@ BuildRequires: rubygem-ffi
BuildRequires: rubygem-json
BuildRequires: rubygem-mustermann
BuildRequires: rubygem-puma
BuildRequires: rubygem-rack
BuildRequires: (rubygem(rack) < 3 or (rubygem(rack) >= 3 and rubygem(rackup)))
BuildRequires: rubygem-rack-protection
BuildRequires: rubygem-rack-test
BuildRequires: rubygem-sinatra
BuildRequires: rubygem-tilt
%if 0%{?fedora} || 0%{?eln} || 0%{?rhel} >= 9
%if 0%{?fedora} || 0%{?rhel} >= 9
BuildRequires: rubygem(rexml)
%endif
# ruby libraries for tests
BuildRequires: rubygem-test-unit
# for touching patch files (sanitization function)
BuildRequires: diffstat
# for post, preun and postun macros
BuildRequires: systemd
# for systemd scriptlet macros
BuildRequires: systemd-rpm-macros
# pam is used for authentication inside daemon (python ctypes)
# needed for tier0 tests during build
BuildRequires: pam
# for working with qdevice certificates (certutil) - used in configure.ac
BuildRequires: nss-tools
# pcs now provides a pc file
BuildRequires: pkgconfig
# for building web ui
BuildRequires: nodejs-npm
# cluster stack packages for pkg-config
BuildRequires: booth
BuildRequires: corosync-qdevice-devel
BuildRequires: corosynclib-devel >= 3.0
BuildRequires: fence-agents-common
# corosync has different package names on distributions but all provide
# corosync-devel
# corosync and pacemaker need versions and it's not working in virtual provides
BuildRequires: corosync-devel >= 3.0
BuildRequires: pacemaker-libs-devel >= %{required_pacemaker_version}
BuildRequires: resource-agents
BuildRequires: sbd
BuildRequires: pkgconfig(booth)
BuildRequires: pkgconfig(corosync-qdevice)
BuildRequires: pkgconfig(sbd)
# for validating cockpit-ha-cluster metainfo
BuildRequires: libappstream-glib
# python and libraries for pcs, setuptools for pcs entrypoint
Requires: python3 >= 3.9
Requires: python3-cryptography
Requires: python3-dateutil >= 2.7.0
Requires: python3-lxml
Requires: python3-setuptools
Requires: python3-pycurl
Requires: python3-pyparsing
Requires: python3-tornado
# ruby and gems for pcsd
Requires: ruby >= 2.5.0
Requires: ruby >= 3.3.0
Requires: rubygem-backports
Requires: rubygem-childprocess
Requires: rubygem-ethon
@ -143,12 +177,11 @@ Requires: rubygem-ffi
Requires: rubygem-json
Requires: rubygem-mustermann
Requires: rubygem-puma
Requires: rubygem-rack
Requires: (rubygem(rack) < 3 or (rubygem(rack) >= 3 and rubygem(rackup)))
Requires: rubygem-rack-protection
Requires: rubygem-rack-test
Requires: rubygem-sinatra
Requires: rubygem-tilt
%if 0%{?fedora} || 0%{?eln} || 0%{?rhel} >= 9
%if 0%{?fedora} || 0%{?rhel} >= 9
Requires: rubygem(rexml)
%endif
# for killall
@ -160,10 +193,6 @@ Requires: (corosync >= 3.0 if pacemaker)
# pcs enables corosync encryption by default so we require libknet1-plugins-all
Requires: (libknet1-plugins-all if corosync)
Requires: pacemaker-cli >= %{required_pacemaker_version}
# for post, preun and postun macros
Requires(post): systemd
Requires(preun): systemd
Requires(postun): systemd
# pam is used for authentication inside daemon (python ctypes)
# more details: https://bugzilla.redhat.com/show_bug.cgi?id=1717113
Requires: pam
@ -175,7 +204,6 @@ Requires: nss-tools
Provides: bundled(dacite) = %{dacite_version}
# pcs-snmp subpackage definition
%package -n %{pkg_pcs_snmp}
Group: System Environment/Base
@ -196,6 +224,24 @@ Requires: net-snmp
Provides: bundled(pyagentx) = %{pyagentx_version}
# pcs-web-ui subpackage definition
%package -n %{pkg_pcs_web_ui}
Summary: Standalone web UI for Pacemaker/Corosync Configuration System
# https://docs.fedoraproject.org/en-US/packaging-guidelines/LicensingGuidelines/
# https://fedoraproject.org/wiki/Licensing:Main?rd=Licensing#Good_Licenses
# GPL-2.0-only: pcs
License: GPL-2.0-only
URL: https://github.com/ClusterLabs/pcs-web-ui
# Split pcs to pcs and pcs-web-ui, all packages that replace pcs must obsolete
# the old monolithic package
# https://docs.fedoraproject.org/en-US/packaging-guidelines/#_one_to_many_replacement
Obsoletes: pcs < 0.12.0
Requires: pcs = %{version}-%{release}
Provides: bundled(pcs-web-ui) = %{!?ui_tarball_version:%{ui_version}}%{?ui_tarball_version}
# cockpit-ha-cluster subpackage definition
%package -n %{pkg_cockpit_ha_cluster}
Group: System Environment/Base
@ -204,26 +250,34 @@ License: GPL-2.0-only AND CC0-1.0
URL: https://github.com/ClusterLabs/pcs-web-ui
BuildRequires: make
BuildRequires: npm
BuildRequires: nodejs-npm
Requires: pcs = %{version}-%{release}
Requires: cockpit-bridge
Provides: bundled(pcs-web-ui) = %{!?ui_tarball_version:%{ui_version}}%{?ui_tarball_version}
%description
pcs is a corosync and pacemaker configuration tool. It permits users to
easily view, modify and create pacemaker based clusters.
pcs is a configuration tool for Corosync and Pacemaker. It permits users to
easily view, modify and create high availability clusters based on Pacemaker.
This package contains the pcs command-line utility and its server pcsd.
%description -n %{pkg_pcs_web_ui}
Provides standalone web UI for Pacemaker/Corosync Configuration System (pcs).
%description -n %{pkg_pcs_snmp}
SNMP agent that provides information about pacemaker cluster to the master agent
SNMP agent that provides information about Pacemaker cluster to the main agent
(snmpd).
%description -n %{pkg_cockpit_ha_cluster}
Cockpit application for managing Pacemaker based clusters. Uses
Pacemaker/Corosync Configuration System (pcs) in the background.
%prep
%prep
# -- following is inspired by python-simplejon.el5 --
# Update timestamps on the files touched by a patch, to avoid non-equal
# .pyc/.pyo files across the multilib peers within a build
@ -267,21 +321,35 @@ 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
# -n <name> — Set Name of Build Directory
# -T — Do Not Perform Default Archive Unpacking
# -b <n> — Unpack The nth Sources Before Changing Directory
# -a <n> — Unpack The nth Sources After Changing Directory
# -N — disables automatic patch application, use autopatch to apply patches
#
# 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).
%autosetup -T -b 100 -a 101 -N -n %{ui_src_name}
%autopatch -p1 -m 201
# update_times_patch %%{PATCH201}
update_times_patch %%{PATCH201}
update_times_patch %%{PATCH202}
# patch pcs sources
%autosetup -S git -n %{pcs_source_name} -N
%autopatch -p1 -M 200
# update_times_patch %%{PATCH0}
# update_times_patch %%{PATCH1}
update_times_patch %{PATCH1}
update_times_patch %{PATCH2}
update_times_patch %{PATCH3}
# 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
%if "%{version}" != "%{version_or_commit}"
echo "%version+$(echo "%{version_or_commit}" | head -c 8)" > %{_builddir}/%{pcs_source_name}/.tarball-version
%if 0%{?tarball_version:1}
echo %{tarball_version} > %{_builddir}/%{pcs_source_name}/.tarball-version
%endif
%if 0%{?ui_tarball_version:1}
echo %{ui_tarball_version} > %{_builddir}/%{ui_src_name}/.tarball-version
%endif
# prepare dirs/files necessary for building python bundles
@ -290,54 +358,57 @@ cp -f %SOURCE41 rpm/
cp -f %SOURCE42 rpm/
%build
%define debug_package %{nil}
# Booth authfile fix support
# Fedora 37, 38, ELN = RHEL10: unset only
# Fedora 39+: no booth build options
%if 0%{?fedora} <= 38 || 0%{?eln}
%define booth_build_options --enable-booth-enable-authfile-unset
%endif
# 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 %{?booth_build_options} \
--enable-individual-bundling --enable-webui \
--with-pcsd-default-cipherlist='PROFILE=SYSTEM' \
--with-pcs-lib-dir="%{_prefix}/lib" PYTHON=%{__python3}
make all
# build pcs-web-ui
export BUILD_USE_CURRENT_NODE_MODULES=true
# Web UI installation
# Switch to web ui folder first
cd ../%{ui_src_name}
./autogen.sh
%{configure} \
--with-pcsd-webui-dir=%{pcsd_webui_dir} \
--with-cockpit-dir=%{cockpit_dir} \
--with-metainfo-dir=%{metainfo_dir}
make all
## standalone
export BUILD_DIR=%{_builddir}/%{ui_src_name}/%{ui_build_dir_standalone}
make -C %{_builddir}/%{ui_src_name} build
## 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
# install standalone pcs-web-ui
cp -r %{_builddir}/%{ui_src_name}/%{ui_build_dir_standalone} \
${RPM_BUILD_ROOT}%{_prefix}/lib/%{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}
# prepare pcs-web-ui files (not needed for pcs as pcs installs them in Makefile)
mkdir -p %{buildroot}/%{_defaultlicensedir}/%{pkg_cockpit_ha_cluster}
mkdir -p %{buildroot}/%{_defaultlicensedir}/%{pkg_pcs_web_ui}
cp -r %{_builddir}/%{ui_src_name}/packages/app/%{ui_appstream_metainfo} \
${RPM_BUILD_ROOT}%{_datadir}/metainfo/
cp COPYING %{buildroot}/%{_defaultlicensedir}/%{pkg_cockpit_ha_cluster}/COPYING_WUI.md
mv COPYING %{buildroot}/%{_defaultlicensedir}/%{pkg_pcs_web_ui}/COPYING_WUI.md
mkdir -p %{buildroot}/%{_docdir}/%{pkg_cockpit_ha_cluster}
mkdir -p %{buildroot}/%{_docdir}/%{pkg_pcs_web_ui}
cp CHANGELOG.md %{buildroot}/%{_docdir}/%{pkg_cockpit_ha_cluster}/CHANGELOG_WUI.md
mv CHANGELOG.md %{buildroot}/%{_docdir}/%{pkg_pcs_web_ui}/CHANGELOG_WUI.md
cp README.md %{buildroot}/%{_docdir}/%{pkg_cockpit_ha_cluster}/README_WUI.md
mv README.md %{buildroot}/%{_docdir}/%{pkg_pcs_web_ui}/README_WUI.md
# Install pcs
cd ../%{pcs_source_name}
%make_install
# prepare license files
cp %{pcs_bundled_dir}/src/pyagentx-*/LICENSE.txt pyagentx_LICENSE.txt
@ -348,9 +419,10 @@ cp %{pcs_bundled_dir}/src/dacite-*/LICENSE dacite_LICENSE
cp %{pcs_bundled_dir}/src/dacite-*/README.md dacite_README.md
%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_metainfo_name}
# 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
@ -375,7 +447,7 @@ run_all_tests(){
#run pcsd tests and remove them
ruby \
-I$RPM_BUILD_ROOT%{_prefix}/lib/pcsd \
-I%{buildroot}%{_prefix}/lib/pcsd \
-Ipcsd/test \
pcsd/test/test_all_suite.rb
test_result_ruby=$?
@ -388,34 +460,31 @@ run_all_tests(){
run_all_tests
# Mark pcsd and pcs_snmp_agent for restart after upgrade
%posttrans
# Make sure the new version of the daemon is running.
# Also, make sure to start pcsd-ruby if it hasn't been started or even
# installed before. This is done by restarting pcsd.service.
%{_bindir}/systemctl daemon-reload
%{_bindir}/systemctl try-restart pcsd.service
%systemd_posttrans_with_restart pcsd.service
%posttrans -n %{pkg_pcs_snmp}
%systemd_posttrans_with_restart pcs_snmp_agent.service
# Restart pcsd if it is running to reload the Tornado app so it detects
# presence or absence of the webui backend handler on install/update
# of pcs-web-ui that contains it
# Systemd will not pick-up on this change because pcs-web-ui doesn't contain
# a unit file that would mark it for restart
# https://fedoraproject.org/wiki/Changes/Restart_services_at_end_of_rpm_transaction
%posttrans -n %{pkg_pcs_web_ui}
systemctl try-restart pcsd.service
# Runs only on pcs-web-ui uninstall
# https://docs.fedoraproject.org/en-US/packaging-guidelines/Scriptlets/
%postun -n %{pkg_pcs_web_ui}
if [ $1 -eq 0 ] ; then
systemctl try-restart pcsd.service
fi
%post
%systemd_post pcsd.service
%systemd_post pcsd-ruby.service
%post -n %{pkg_pcs_snmp}
%systemd_post pcs_snmp_agent.service
%preun
%systemd_preun pcsd.service
%systemd_preun pcsd-ruby.service
%preun -n %{pkg_pcs_snmp}
%systemd_preun pcs_snmp_agent.service
%postun
%systemd_postun_with_restart pcsd.service
%systemd_postun_with_restart pcsd-ruby.service
%postun -n %{pkg_pcs_snmp}
%systemd_postun_with_restart pcs_snmp_agent.service
%files
%doc CHANGELOG.md
@ -424,9 +493,10 @@ run_all_tests
%license dacite_LICENSE
%license COPYING
%{python3_sitelib}/*
%{_sbindir}/pcs
%{_sbindir}/pcsd
%{_bindir}/pcs
%{_bindir}/pcsd
%{_prefix}/lib/pcs/*
%{_prefix}/lib/pkgconfig/pcs.pc
%{_prefix}/lib/pcsd/*
%{_unitdir}/pcsd.service
%{_unitdir}/pcsd-ruby.service
@ -447,8 +517,19 @@ run_all_tests
%{_mandir}/man8/pcsd.*
%exclude %{_prefix}/lib/pcs/pcs_snmp_agent
%exclude %{_prefix}/lib/pcs/%{pcs_bundled_dir}/packages/pyagentx*
%exclude %{_datadir}/cockpit
%exclude %{_datadir}/metainfo/%{ui_appstream_metainfo}
%exclude %{cockpit_dir}
%exclude %{ui_metainfo}
%exclude %{python3_sitelib}/pcs/daemon/app/webui
%exclude %{pcsd_webui_dir}
%files -n %{pkg_pcs_web_ui}
%doc CHANGELOG.md
%doc %{_docdir}/%{pkg_pcs_web_ui}/CHANGELOG_WUI.md
%doc %{_docdir}/%{pkg_pcs_web_ui}/README_WUI.md
%license COPYING
%license %{_defaultlicensedir}/%{pkg_pcs_web_ui}/COPYING_WUI.md
%{python3_sitelib}/pcs/daemon/app/webui
%{pcsd_webui_dir}
%files -n %{pkg_pcs_snmp}
%{_prefix}/lib/pcs/pcs_snmp_agent
@ -464,11 +545,61 @@ run_all_tests
%license pyagentx_LICENSE.txt
%files -n %{pkg_cockpit_ha_cluster}
%{_datadir}/cockpit/%{ui_cockpit_dest}
%{_datadir}/metainfo/%{ui_appstream_metainfo}
%doc %{_docdir}/%{pkg_cockpit_ha_cluster}/CHANGELOG_WUI.md
%doc %{_docdir}/%{pkg_cockpit_ha_cluster}/README_WUI.md
%license %{_defaultlicensedir}/%{pkg_cockpit_ha_cluster}/COPYING_WUI.md
%{cockpit_dir}
%{ui_metainfo}
%changelog
* Fri Sep 19 2025 Python Maint <python-maint@redhat.com> - 0.12.1-5
- Rebuilt for Python 3.14.0rc3 bytecode
* Fri Aug 15 2025 Python Maint <python-maint@redhat.com> - 0.12.1-4
- Rebuilt for Python 3.14.0rc2 bytecode
* Wed Jul 30 2025 Michal Pospíšil <mpospisi@redhat.com> - 0.12.1-3
- Remove BuildRequires: python3-wheel when using setuptools 71+
* Fri Jul 25 2025 Fedora Release Engineering <releng@fedoraproject.org> - 0.12.1-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild
* Fri Jul 18 2025 Michal Pospíšil <mpospisi@redhat.com> - 0.12.1-1
- Rebased pcs to the newest major version (see CHANGELOG.md)
Resolves: rhbz#2371770
- Updated standalone web UI and HA Cluster Management Cockpit application to pcs-web-ui 0.1.23 (see CHANGELOG_WUI.md)
- There is now a changelog for the HA Cluster Management Cockpit application and the standalone web UI in both packages
- The upstream version of pcs-web-ui can now be queried through RPM in both packages - see bundled(pcs-web-ui)
- Updated bundled Python dependency dacite
- Compatibility with rubygem-rack >= 3
Resolves: rhbz#2372462
* Tue Jun 03 2025 Python Maint <python-maint@redhat.com> - 0.12.0-2
- Rebuilt for Python 3.14
* Mon Jan 27 2025 Michal Pospíšil <mpospisi@redhat.com> - 0.12.0-1
- Rebased pcs to the newest major version (see CHANGELOG.md)
Resolves: rhbz#2341012
- New subpackage pcs-web-ui - enables standalone web UI when the subpackage is installed on the system (default), uninstall the subpackage to disable the web UI
- Updated standalone web UI and HA Cluster Management Cockpit application to pcs-web-ui 0.1.22
- Fixes for compatibility with Ruby 3.4
Resolves: rhbz#2331005
* Fri Jan 17 2025 Fedora Release Engineering <releng@fedoraproject.org> - 0.11.8-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild
* Tue Aug 6 2024 Michal Pospíšil <mpospisi@redhat.com> - 0.11.8-1
- Rebased to the latest sources (see CHANGELOG.md)
- Updated pcs-web-ui to 0.1.20
* Thu Jul 18 2024 Fedora Release Engineering <releng@fedoraproject.org> - 0.11.7-5
- Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild
* Sun Jun 09 2024 Python Maint <python-maint@redhat.com> - 0.11.7-4
- Rebuilt for Python 3.13
* Mon Feb 5 2024 Michal Pospisil <mpospisi@redhat.com> - 0.11.7-3
- Fixed a bug preventing the Cockpit Application from being installed from Cockpit

32
plan-gating.fmf Normal file
View file

@ -0,0 +1,32 @@
summary: PCS gating test plan
description: Runs upstream tier0, tier1 and smoke tests
discover:
dist-git-source: true
dist-git-install-builddeps: true
how: shell
tests:
- name: tier0
test: |
./prepare-tests.sh
$TMT_SOURCE_DIR/pcs-*/pcs_test/suite --tier0 -v --vanilla --installed
duration: 10m
tier: 0
tag: fast
- name: tier1
test: |
./prepare-tests.sh
$TMT_SOURCE_DIR/pcs-*/pcs_test/suite --tier1 -v --vanilla --installed
duration: 2h
tier: 1
- name: smoke
test: |
systemctl start pcsd
./prepare-tests.sh
$TMT_SOURCE_DIR/pcs-*/pcs_test/smoke.sh
duration: 10m
tier: smoke
tag: fast
execute:
how: tmt

View file

@ -1,18 +0,0 @@
set -eo xtrace
# Rpmbuild expects patches in the _sourcedir
find *.patch &> /dev/null && mv *.patch $TMT_SOURCE_DIR
mkdir builddir
rpmbuild -bp pcs.spec --nodeps --define "_sourcedir $TMT_SOURCE_DIR" \
--define "_builddir $(pwd)/builddir"
# Remove *SPECPARTS folders generated by rpmbuild
rm -rfv builddir/*SPECPARTS
# Remove pcs-web-ui in builddir for "cd pcs-*" to have exactly one match
rm -rf builddir/pcs-web-ui-*
cd builddir/pcs-*
# Run autotools, use bundled dependencies from the system
export PYTHONPATH=/usr/lib/pcs/pcs_bundled/packages/
export GEM_HOME=/usr/lib/pcsd/vendor/bundle/
./autogen.sh
./configure --with-pcs-lib-dir=/usr/lib --with-distro=fedora
# Remove pcs sources to make sure tests are not using any of those files
rm -rf pcs

22
prepare-tests.sh Executable file
View file

@ -0,0 +1,22 @@
#!/bin/sh
set -eo xtrace
cd $TMT_SOURCE_DIR
# Use stamp file to abort if this script already ran
if [ -e tests-prepared-stamp ]; then exit 0; fi
# RPM 4.20 changed the builddir structure - unpacked sources go to *-build but
# tmt copies them back to pcs-*, so the pcs-*-build folder is empty
# Remove pcs-web-ui, pcs-*-build for "cd pcs-*" to have exactly one match
rm -rf pcs-web-ui-* pcs-*-build
cd pcs-*/
# Run autotools, use bundled dependencies from the system
export PYTHONPATH=/usr/lib/pcs/pcs_bundled/packages/
export GEM_HOME=/usr/lib/pcsd/vendor/bundle/
# We need to use cd pcs-* because when pcs-web-ui starts using autotools, running
# autogen and configure with expanded TMT_SOURCE_DIR will match that too
./autogen.sh
./configure --enable-webui --enable-local-build --enable-use-local-cache-only \
--enable-individual-bundling --with-pcs-lib-dir=/usr/lib
# Remove pcs sources to make sure tests are not using any of those files
rm -rf pcs
touch ../tests-prepared-stamp

View file

@ -0,0 +1,148 @@
From e7fa056f582c992d3d2b289911be20440fb839ac Mon Sep 17 00:00:00 2001
From: Ivan Devat <idevat@redhat.com>
Date: Tue, 5 Nov 2024 16:35:02 +0100
Subject: [PATCH 1/2] show info page instead of webui
---
pcs/Makefile.am | 1 +
pcs/daemon/app/webui_info_handler.py | 31 ++++++++++++++++++++++++++++
pcs/daemon/run.py | 4 +++-
pcs_test/smoke.sh.in | 4 ++--
pcsd/public/ui_instructions.html | 24 ++++++++++-----------
5 files changed, 48 insertions(+), 16 deletions(-)
create mode 100644 pcs/daemon/app/webui_info_handler.py
diff --git a/pcs/Makefile.am b/pcs/Makefile.am
index 1297473ff..8d4b93073 100644
--- a/pcs/Makefile.am
+++ b/pcs/Makefile.am
@@ -219,6 +219,7 @@ EXTRA_DIST = \
daemon/app/webui/core.py \
daemon/app/webui/session.py \
daemon/app/webui/sinatra_ui.py \
+ daemon/app/webui_info_handler.py \
daemon/async_tasks/__init__.py \
daemon/async_tasks/scheduler.py \
daemon/async_tasks/task.py \
diff --git a/pcs/daemon/app/webui_info_handler.py b/pcs/daemon/app/webui_info_handler.py
new file mode 100644
index 000000000..3ab8275bf
--- /dev/null
+++ b/pcs/daemon/app/webui_info_handler.py
@@ -0,0 +1,31 @@
+from pcs.daemon.app.common import (
+ BaseHandler,
+ RoutesType,
+)
+
+
+class _WebuiInfoHandler(BaseHandler):
+ __path = None
+
+ def initialize(self, path):
+ self.__path = path
+
+ def get(self):
+ self.set_status(404)
+ self.render(self.__path)
+
+
+def get_routes(path: str) -> RoutesType:
+ return [
+ # The following two rules can be compressed into one: r"/(ui/?)?".
+ # However, the content of the parentheses used here should be captured
+ # and passed in to the handlers get method as an argument.
+ # Unfortunately, it seems that tornado version 6.4.1 don't pass this
+ # argument (unlike version 6.3.3). Maybe it's a bug (it needs further
+ # inspection). These rules are a safe way to avoid surprises.
+ # Moreover, the captured parameter is irrelevant to the functionality
+ # of the handler.
+ (r"/", _WebuiInfoHandler, dict(path=path)),
+ (r"/ui/?", _WebuiInfoHandler, dict(path=path)),
+ (r"/ui/.*", _WebuiInfoHandler, dict(path=path)),
+ ]
diff --git a/pcs/daemon/run.py b/pcs/daemon/run.py
index 558315c23..cfe9999fc 100644
--- a/pcs/daemon/run.py
+++ b/pcs/daemon/run.py
@@ -33,6 +33,7 @@ from pcs.daemon.app import (
auth,
sinatra_remote,
sinatra_ui,
+ webui_info_handler,
)
from pcs.daemon.app import capabilities as capabilities_app
@@ -168,7 +169,8 @@ def configure_app( # noqa: PLR0913
# Even with disabled (standalone) webui the following routes must be
# provided because they can be used via unix socket from cockpit.
routes.extend(
- sinatra_ui.get_routes(auth_provider, ruby_pcsd_wrapper)
+ webui_info_handler.get_routes(webui_fallback)
+ + sinatra_ui.get_routes(auth_provider, ruby_pcsd_wrapper)
)
return Application(
diff --git a/pcs_test/smoke.sh.in b/pcs_test/smoke.sh.in
index fdfe8be2c..a9bb83447 100755
--- a/pcs_test/smoke.sh.in
+++ b/pcs_test/smoke.sh.in
@@ -71,10 +71,10 @@ if [ "$webui_http_code_response" = "200" ]; then
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
+elif [ "$webui_http_code_response" = "404" ]; then
curl --insecure https://localhost:2224/ui/ > "${output_file}"
cat "${output_file}"; echo ""
- [ "$(cat "${output_file}")" = '{"notauthorized":"true"}' ]
+ grep "HA cluster management has been moved" "${output_file}"
else
echo "Unexpected response from https://localhost:2224/ui/ - http code: '${webui_http_code_response}'"
exit 1
diff --git a/pcsd/public/ui_instructions.html b/pcsd/public/ui_instructions.html
index a120ed3d4..b9c1c3152 100644
--- a/pcsd/public/ui_instructions.html
+++ b/pcsd/public/ui_instructions.html
@@ -1,27 +1,25 @@
<!DOCTYPE html>
<html>
<head>
- <title>Pcs WebUI instructions</title>
+ <title>Web UI is disabled</title>
<meta charset="utf-8" />
</head>
<body>
- <h1>Pcs WebUI instructions</h1>
+ <h1>Package <code>pcs-web-ui</code> is not installed</h1>
<p>
- WebUI is not a part of pcs repository but it has its own
- <a href="https://github.com/ClusterLabs/pcs-web-ui">repository</a>.
+ Since Fedora 42, pcsd web UI is distributed with pcs as <code>pcs-web-ui
+ </code> package. This<br>package can be uninstalled to disable the web UI.
</p>
<p>
- You can clone <a href="https://github.com/ClusterLabs/pcs-web-ui">WebUI repository</a>
- and build the web application into pcs by:
+ To re-enable pcsd web UI, install the <code>pcs-web-ui</code> RPM package.
</p>
- <pre><code>
- $ npm install
- $ npm run build
- $ mv ./build [/path/to/]pcs/pcsd/public/ui
- </code></pre>
<p>
- For more details, see instructions in
- <a href="https://github.com/ClusterLabs/pcs-web-ui/blob/main/README.md">README.md</a>.
+ Another option is to try pcsd web UI as an application for
+ <a href="https://cockpit-project.org/">Cockpit</a>
+ - a web-based<br>graphical interface for servers. The HA Cluster Management
+ application can be<br>installed from within the Applications pane in
+ Cockpit or by installing the<br><code>cockpit-ha-cluster</code> RPM
+ package.
</p>
</body>
</html>
--
2.50.1

View file

@ -1,5 +1,5 @@
SHA512 (pyagentx-0.4.pcs.2.tar.gz) = d4194fec9a3e5fefe3793d49b7fec1feafef294c7e613a06046c2993daeefc5cb39d7c5b2b402ff83e49b2d976953f862264288c758c0be09d997b5323cc558a
SHA512 (dacite-1.8.1.tar.gz) = 4b40c0bdcf5490bcc77de9e7f04b7267642bcfd41e4168607a5457f38abe3ad4b3041d8a23cb43af76de14eabee45f900ad5ddf7af8f70a2be4850bccc2d3af1
SHA512 (pcs-0.11.7.tar.gz) = 29d61bb945b25ced67e3a05f742ab6f557da8c4d3e8ee04db8caa9a51bb1c64e64cd5382f801173d95e9d62c53a52ad86f823c475ba790cb86b777a1eff658cc
SHA512 (pcs-web-ui-0.1.18.tar.gz) = edbe88d113e967b2d3f345e74e8c4409b013fb8474fe70a8813a1aba5ea8b4deb61a3bb8c4cd4b4d1a9dc9e67216e518ee5bf832a25188e95173317533d7bf69
SHA512 (pcs-web-ui-node-modules-0.1.18.tar.xz) = 237ff976d67a7bf881e45334261af1da32c6330fbf9e7436dcf33e63c9373f85f36db52622676f77e27bb6a853c046223cfe0cca25de68bd004c6535aa077fd7
SHA512 (dacite-1.9.2.tar.gz) = 69513bc1acd43e45a208ce4b4186072f92d9057a6a88c77d56f21405fbed7964d94fe4f6a37c99754a793caa2bd0584664dfab69169ef0d3564bb09d37769e59
SHA512 (pcs-0.12.1.tar.gz) = 4f17a8d9c15b8c9208c94a264f5f79f03abc451e3f4ae4ba0fb338055a26407d4961466dd8f3565f6882c2c00f1d6a1ec8fd15dadcb0cf1a5586d37c56c77238
SHA512 (pcs-web-ui-0.1.23.tar.gz) = 6bc709926f26a02d33fb3865d15a1cf15db51a07dd9b25c63f33277c427c3403c189e2ac5e7adc795b254ad0bdb50f1bc4be70f1385bc8522ca502142d41fc26
SHA512 (pcs-web-ui-node-modules-0.1.23.tar.xz) = f39dd1fd391f10b874b5fec34da1a2f2496d66b31af736ee1dfc2ef6e0b518efd03053fd00312c84e10a33ffda492e12d48a898a21efb6241e5459828e500e80