Files
ocf-managed-container/packaging/ocf-managed-container.spec
T
Lyncoln ec2077f979 Freeze lab-tested PostgreSQL plugin engine
Extract PostgreSQL, Podman runtime and systemd lifecycle adapters while preserving existing lifecycle and scoring behavior. Update RPM layout and add guarded operator-run lab harnesses.

Record successful manual stop/start, promotion, demotion and rewind-only rejoin with pinned installed hashes. The unfenced lab does not validate automatic failover, Pacemaker-managed transitions or divergent-data rewind.

Validation: 103 offline tests, original-function differential checks, checksum manifest and whitespace checks passed.
2026-09-13 01:57:04 -04:00

91 lines
3.8 KiB
RPMSpec

%global ocf_provider_dir /usr/lib/ocf/resource.d/loxthelion
# Preserve the proven entrypoint byte-for-byte, including its /bin/bash shebang.
%global __brp_mangle_shebangs %{nil}
%{!?package_version:%global package_version 0.1.0}
%{!?package_release:%global package_release 0.dev}
Name: ocf-managed-container
Version: %{package_version}
Release: %{package_release}%{?dist}
Summary: PostgreSQL HA agent for a persistent rootless container
# Development status only; see PROVENANCE.md. No release publishing yet.
License: LicenseRef-Provenance-Pending
URL: https://gitea.loxthelion.com/david/ocf-managed-container
Source0: %{name}-%{version}.tar.gz
BuildArch: noarch
BuildRequires: bash
BuildRequires: python3
BuildRequires: resource-agents
BuildRequires: hostname
BuildRequires: diffutils
BuildRequires: coreutils
BuildRequires: pacemaker-cli >= 2.1.0
Requires: python3
Requires: bash
Requires: /usr/lib/ocf/lib/heartbeat/ocf-shellfuncs
Requires: podman
Requires: systemd
Requires: /usr/sbin/runuser
Requires: /usr/bin/getent
Requires: corosync
Requires: coreutils
Requires: gawk
Requires: sed
Requires: hostname
Requires: pacemaker-cli >= 2.1.0
%description
OCF agent managing PostgreSQL through a persistent rootless systemd/Quadlet
container, with role-aware monitoring, promotion, demotion and rejoin.
This development package has unresolved license provenance. It does not
configure the cluster or container and does not start or stop services.
%prep
%autosetup
cp packaging/README.md RPM-BUILD.md
%build
# Shell modules require no compilation.
%install
install -d %{buildroot}%{ocf_provider_dir}/managed-container.d
install -m 0755 refactored/managed-container %{buildroot}%{ocf_provider_dir}/managed-container
for subdir in . applications/postgresql lifecycles runtimes; do
install -d %{buildroot}%{ocf_provider_dir}/managed-container.d/$subdir
install -m 0644 refactored/managed-container.d/$subdir/*.sh %{buildroot}%{ocf_provider_dir}/managed-container.d/$subdir/
done
install -m 0644 refactored/managed-container.d/applications/postgresql/promotion_state.py %{buildroot}%{ocf_provider_dir}/managed-container.d/applications/postgresql/
%check
python3 tests/verify_refactor.py
python3 tests/test_promotion_scores.py
python3 tests/test_promotion_scheduler.py
python3 tests/test_promotion_cleanup.py
python3 tests/test_disconnected_state.py
python3 tests/test_plugin_engine.py
# Check the actual staged layout, including resolution from an unrelated cwd.
agent="%{buildroot}%{ocf_provider_dir}/managed-container"
"$agent" meta-data > staged-metadata.xml
refactored/managed-container meta-data > reference-metadata.xml
cmp reference-metadata.xml staged-metadata.xml
(cd /tmp && "$agent" meta-data) > other-cwd-metadata.xml
cmp reference-metadata.xml other-cwd-metadata.xml
%files
%defattr(-,root,root,-)
%doc README.md packaging/PROVENANCE.md RPM-BUILD.md notes/PROMOTION-SCORING.md notes/DISCONNECTED-STANDBY.md
%doc docs/operations.md docs/testing.md docs/review.md docs/plugin-engine.md
%dir %{ocf_provider_dir}
%attr(0755,root,root) %{ocf_provider_dir}/managed-container
%dir %{ocf_provider_dir}/managed-container.d
%attr(0644,root,root) %{ocf_provider_dir}/managed-container.d/*.sh
%dir %{ocf_provider_dir}/managed-container.d/applications
%dir %{ocf_provider_dir}/managed-container.d/applications/postgresql
%dir %{ocf_provider_dir}/managed-container.d/lifecycles
%dir %{ocf_provider_dir}/managed-container.d/runtimes
%attr(0644,root,root) %{ocf_provider_dir}/managed-container.d/applications/postgresql/*.sh
%attr(0644,root,root) %{ocf_provider_dir}/managed-container.d/applications/postgresql/*.py
%attr(0644,root,root) %{ocf_provider_dir}/managed-container.d/lifecycles/*.sh
%attr(0644,root,root) %{ocf_provider_dir}/managed-container.d/runtimes/*.sh