From e55bf70a6fcfdb65b389ce5f7c2d1e27f5f1e512 Mon Sep 17 00:00:00 2001 From: Oyvind Albrigtsen Date: Wed, 25 Aug 2021 09:45:09 +0200 Subject: [PATCH] - Create cloud subpackage - Add nova-compute-wait/NovaEvacuate - nfsserver: fix nfs-convert issue Resolves: rhbz#1997548, rhbz#1997576, rhbz#1991855 --- bz1991855-nfsserver-add-nfsconvert.patch | 429 ++++++++++++ ha-cloud-support-aliyun.patch | 12 + ha-cloud-support-gcloud.patch | 33 + nova-compute-wait-NovaEvacuate.patch | 787 +++++++++++++++++++++++ resource-agents.spec | 68 +- 5 files changed, 1325 insertions(+), 4 deletions(-) create mode 100644 bz1991855-nfsserver-add-nfsconvert.patch create mode 100644 ha-cloud-support-aliyun.patch create mode 100644 ha-cloud-support-gcloud.patch create mode 100644 nova-compute-wait-NovaEvacuate.patch diff --git a/bz1991855-nfsserver-add-nfsconvert.patch b/bz1991855-nfsserver-add-nfsconvert.patch new file mode 100644 index 0000000..e955c1a --- /dev/null +++ b/bz1991855-nfsserver-add-nfsconvert.patch @@ -0,0 +1,429 @@ +From 6a1e619d46d7ff04b610eb9f6e20ed41ac23b0ab Mon Sep 17 00:00:00 2001 +From: Oyvind Albrigtsen +Date: Thu, 19 Aug 2021 09:37:57 +0200 +Subject: [PATCH] tools: add nfsconvert for RHEL-based distros + +--- + .gitignore | 1 + + configure.ac | 5 + + heartbeat/nfsserver-redhat.sh | 6 + + tools/Makefile.am | 5 + + tools/nfsconvert.in | 324 ++++++++++++++++++++++++++++++++++ + 5 files changed, 341 insertions(+) + create mode 100644 tools/nfsconvert.in + +diff --git a/.gitignore b/.gitignore +index f7277bf04e..ec30a3bb00 100644 +--- a/.gitignore ++++ b/.gitignore +@@ -99,6 +99,7 @@ ldirectord/init.d/ldirectord.debian.default + ldirectord/systemd/ldirectord.service + systemd/resource-agents.conf + tools/findif ++tools/nfsconvert + tools/ocf-tester + tools/send_arp + tools/tickle_tcp +diff --git a/configure.ac b/configure.ac +index c125df98f6..058c0f1da7 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -787,11 +787,15 @@ case $host_os in + *Linux*|*linux*) sendarp_linux=1;; + esac + ++redhat_based=0 ++AC_CHECK_FILE(/etc/redhat-release, [redhat_based=1]) ++ + AC_SUBST(LIBNETLIBS) + AC_SUBST(LIBNETDEFINES) + + AM_CONDITIONAL(SENDARP_LINUX, test $sendarp_linux = 1 ) + AM_CONDITIONAL(USE_LIBNET, test "x$libnet_version" != "xnone" ) ++AM_CONDITIONAL(NFSCONVERT, test $redhat_based = 1 ) + + dnl ************************************************************************ + dnl * Check for netinet/icmp6.h to enable the IPv6addr resource agent +@@ -932,6 +936,7 @@ heartbeat/Makefile \ + systemd/Makefile \ + systemd/resource-agents.conf \ + tools/Makefile \ ++ tools/nfsconvert \ + tools/ocf-tester \ + tools/ocft/Makefile \ + tools/ocft/ocft \ +diff --git a/heartbeat/nfsserver-redhat.sh b/heartbeat/nfsserver-redhat.sh +index 73a70c186c..aec0966050 100644 +--- a/heartbeat/nfsserver-redhat.sh ++++ b/heartbeat/nfsserver-redhat.sh +@@ -1,6 +1,7 @@ + NFS_SYSCONFIG="/etc/sysconfig/nfs" + NFS_SYSCONFIG_LOCAL_BACKUP="/etc/sysconfig/nfs.ha.bu" + NFS_SYSCONFIG_AUTOGEN_TAG="AUTOGENERATED by $0 high availability resource-agent" ++NFSCONVERT="$HA_BIN/nfsconvert" + + nfsserver_redhat_meta_data() { + cat< 0 or not os.path.exists(backupfile): ++ try: ++ os.replace(SYSCONF_NFS, backupfile) ++ except OSError as err: ++ eprint("Error moving old config %s: %s" % (SYSCONF_NFS, err)) ++ raise ++ ++# Main routine ++try: ++ map_values() ++except Exception as e: ++ eprint(e) ++ eprint("Conversion failed. Please correct the error and try again.") ++ exit(1) diff --git a/ha-cloud-support-aliyun.patch b/ha-cloud-support-aliyun.patch new file mode 100644 index 0000000..93d78aa --- /dev/null +++ b/ha-cloud-support-aliyun.patch @@ -0,0 +1,12 @@ +diff --color -uNr a/heartbeat/aliyun-vpc-move-ip b/heartbeat/aliyun-vpc-move-ip +--- a/heartbeat/aliyun-vpc-move-ip 2021-08-19 09:37:57.000000000 +0200 ++++ b/heartbeat/aliyun-vpc-move-ip 2021-08-25 13:38:26.786626079 +0200 +@@ -17,7 +17,7 @@ + OCF_RESKEY_interface_default="eth0" + OCF_RESKEY_profile_default="default" + OCF_RESKEY_endpoint_default="vpc.aliyuncs.com" +-OCF_RESKEY_aliyuncli_default="detect" ++OCF_RESKEY_aliyuncli_default="/usr/lib/fence-agents/support/aliyun/bin/aliyuncli" + + + : ${OCF_RESKEY_address=${OCF_RESKEY_address_default}} diff --git a/ha-cloud-support-gcloud.patch b/ha-cloud-support-gcloud.patch new file mode 100644 index 0000000..95b0d7a --- /dev/null +++ b/ha-cloud-support-gcloud.patch @@ -0,0 +1,33 @@ +diff --color -uNr a/heartbeat/gcp-pd-move.in b/heartbeat/gcp-pd-move.in +--- a/heartbeat/gcp-pd-move.in 2021-08-19 09:37:57.000000000 +0200 ++++ b/heartbeat/gcp-pd-move.in 2021-08-25 13:50:54.461732967 +0200 +@@ -32,6 +32,7 @@ + from ocf import logger + + try: ++ sys.path.insert(0, '/usr/lib/fence-agents/support/google') + import googleapiclient.discovery + except ImportError: + pass +diff --color -uNr a/heartbeat/gcp-vpc-move-route.in b/heartbeat/gcp-vpc-move-route.in +--- a/heartbeat/gcp-vpc-move-route.in 2021-08-19 09:37:57.000000000 +0200 ++++ b/heartbeat/gcp-vpc-move-route.in 2021-08-25 13:51:17.489797999 +0200 +@@ -45,6 +45,7 @@ + from ocf import * + + try: ++ sys.path.insert(0, '/usr/lib/fence-agents/support/google') + import googleapiclient.discovery + import pyroute2 + try: +diff --color -uNr a/heartbeat/gcp-vpc-move-vip.in b/heartbeat/gcp-vpc-move-vip.in +--- a/heartbeat/gcp-vpc-move-vip.in 2021-08-19 09:37:57.000000000 +0200 ++++ b/heartbeat/gcp-vpc-move-vip.in 2021-08-25 13:51:35.012847487 +0200 +@@ -29,6 +29,7 @@ + from ocf import * + + try: ++ sys.path.insert(0, '/usr/lib/fence-agents/support/google') + import googleapiclient.discovery + try: + from google.oauth2.service_account import Credentials as ServiceAccountCredentials diff --git a/nova-compute-wait-NovaEvacuate.patch b/nova-compute-wait-NovaEvacuate.patch new file mode 100644 index 0000000..0e7b605 --- /dev/null +++ b/nova-compute-wait-NovaEvacuate.patch @@ -0,0 +1,787 @@ +diff --color -uNr a/doc/man/Makefile.am b/doc/man/Makefile.am +--- a/doc/man/Makefile.am 2021-08-25 09:51:53.037906134 +0200 ++++ b/doc/man/Makefile.am 2021-08-25 09:48:44.578408475 +0200 +@@ -97,6 +97,8 @@ + ocf_heartbeat_ManageRAID.7 \ + ocf_heartbeat_ManageVE.7 \ + ocf_heartbeat_NodeUtilization.7 \ ++ ocf_heartbeat_nova-compute-wait.7 \ ++ ocf_heartbeat_NovaEvacuate.7 \ + ocf_heartbeat_Pure-FTPd.7 \ + ocf_heartbeat_Raid1.7 \ + ocf_heartbeat_Route.7 \ +diff --color -uNr a/heartbeat/Makefile.am b/heartbeat/Makefile.am +--- a/heartbeat/Makefile.am 2021-08-25 09:51:53.038906137 +0200 ++++ b/heartbeat/Makefile.am 2021-08-25 09:48:44.588408501 +0200 +@@ -29,6 +29,8 @@ + + ocfdir = $(OCF_RA_DIR_PREFIX)/heartbeat + ++ospdir = $(OCF_RA_DIR_PREFIX)/openstack ++ + dtddir = $(datadir)/$(PACKAGE_NAME) + dtd_DATA = ra-api-1.dtd metadata.rng + +@@ -50,6 +52,9 @@ + send_ua_SOURCES = send_ua.c IPv6addr_utils.c + send_ua_LDADD = $(LIBNETLIBS) + ++osp_SCRIPTS = nova-compute-wait \ ++ NovaEvacuate ++ + ocf_SCRIPTS = AoEtarget \ + AudibleAlarm \ + ClusterMon \ +diff --color -uNr a/heartbeat/nova-compute-wait b/heartbeat/nova-compute-wait +--- a/heartbeat/nova-compute-wait 1970-01-01 01:00:00.000000000 +0100 ++++ b/heartbeat/nova-compute-wait 2021-08-25 09:50:14.626646141 +0200 +@@ -0,0 +1,345 @@ ++#!/bin/sh ++# ++# ++# nova-compute-wait agent manages compute daemons. ++# ++# Copyright (c) 2015 ++# ++# This program is free software; you can redistribute it and/or modify ++# it under the terms of version 2 of the GNU General Public License as ++# published by the Free Software Foundation. ++# ++# This program is distributed in the hope that it would be useful, but ++# WITHOUT ANY WARRANTY; without even the implied warranty of ++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. ++# ++# Further, this software is distributed without any warranty that it is ++# free of the rightful claim of any third person regarding infringement ++# or the like. Any license provided herein, whether implied or ++# otherwise, applies only to this software file. Patent licenses, if ++# any, provided herein do not apply to combinations of this program with ++# other software, or any other product whatsoever. ++# ++# You should have received a copy of the GNU General Public License ++# along with this program; if not, write the Free Software Foundation, ++# Inc., 59 Temple Place - Suite 330, Boston MA 02111-1307, USA. ++# ++ ++####################################################################### ++# Initialization: ++ ++ ++### ++: ${OCF_FUNCTIONS_DIR=${OCF_ROOT}/lib/heartbeat} ++. ${OCF_FUNCTIONS_DIR}/ocf-shellfuncs ++### ++ ++: ${__OCF_ACTION=$1} ++ ++####################################################################### ++ ++meta_data() { ++ cat < ++ ++ ++1.0 ++ ++ ++OpenStack Nova Compute Server. ++ ++OpenStack Nova Compute Server ++ ++ ++ ++ ++ ++Deprecated option not in use ++ ++Deprecated ++ ++ ++ ++ ++ ++Deprecated option not in use ++ ++Deprecated ++ ++ ++ ++ ++Deprecated option not in use ++ ++Deprecated ++ ++ ++ ++ ++ ++Deprecated option not in use ++ ++Deprecated ++ ++ ++ ++ ++ ++DNS domain in which hosts live, useful when the cluster uses short names and nova uses FQDN ++ ++DNS domain ++ ++ ++ ++ ++ ++Deprecated option not in use ++ ++Deprecated ++ ++ ++ ++ ++ ++Deprecated option not in use ++ ++Deprecated ++ ++ ++ ++ ++ ++How long to wait for nova to finish evacuating instances elsewhere ++before starting nova-compute. Only used when the agent detects ++evacuations might be in progress. ++ ++You may need to increase the start timeout when increasing this value. ++ ++Delay to allow evacuations time to complete ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++END ++} ++ ++####################################################################### ++ ++# don't exit on TERM, to test that lrmd makes sure that we do exit ++trap sigterm_handler TERM ++sigterm_handler() { ++ ocf_log info "They use TERM to bring us down. No such luck." ++ return ++} ++ ++nova_usage() { ++ cat </run/systemd/system/openstack-nova-compute.service.d/unfence-20.conf ++[Service] ++ExecStartPost=/sbin/fence_compute ${fence_options} -o on -n ${NOVA_HOST} ++EOF ++} ++ ++nova_validate() { ++ rc=$OCF_SUCCESS ++ ++ check_binary crudini ++ check_binary nova-compute ++ check_binary fence_compute ++ ++ if [ ! -f /etc/nova/nova.conf ]; then ++ ocf_exit_reason "/etc/nova/nova.conf not found" ++ exit $OCF_ERR_CONFIGURED ++ fi ++ ++ # Is the state directory writable? ++ state_dir=$(dirname $statefile) ++ touch "$state_dir/$$" ++ if [ $? != 0 ]; then ++ ocf_exit_reason "Invalid state directory: $state_dir" ++ return $OCF_ERR_ARGS ++ fi ++ rm -f "$state_dir/$$" ++ ++ NOVA_HOST=$(crudini --get /etc/nova/nova.conf DEFAULT host 2>/dev/null) ++ if [ $? = 1 ]; then ++ short_host=$(uname -n | awk -F. '{print $1}') ++ if [ "x${OCF_RESKEY_domain}" != x ]; then ++ NOVA_HOST=${short_host}.${OCF_RESKEY_domain} ++ else ++ NOVA_HOST=$(uname -n) ++ fi ++ fi ++ ++ if [ $rc != $OCF_SUCCESS ]; then ++ exit $rc ++ fi ++ return $rc ++} ++ ++statefile="${HA_RSCTMP}/${OCF_RESOURCE_INSTANCE}.active" ++ ++: ${OCF_RESKEY_evacuation_delay=120} ++case $__OCF_ACTION in ++meta-data) meta_data ++ exit $OCF_SUCCESS ++ ;; ++usage|help) nova_usage ++ exit $OCF_SUCCESS ++ ;; ++esac ++ ++case $__OCF_ACTION in ++start) nova_validate; nova_start;; ++stop) nova_stop;; ++monitor) nova_validate; nova_monitor;; ++notify) nova_notify;; ++validate-all) exit $OCF_SUCCESS;; ++*) nova_usage ++ exit $OCF_ERR_UNIMPLEMENTED ++ ;; ++esac ++rc=$? ++ocf_log debug "${OCF_RESOURCE_INSTANCE} $__OCF_ACTION : $rc" ++exit $rc ++ +diff --color -uNr a/heartbeat/NovaEvacuate b/heartbeat/NovaEvacuate +--- a/heartbeat/NovaEvacuate 1970-01-01 01:00:00.000000000 +0100 ++++ b/heartbeat/NovaEvacuate 2021-08-25 09:50:23.780670326 +0200 +@@ -0,0 +1,400 @@ ++#!/bin/bash ++# ++# Copyright 2015 Red Hat, Inc. ++# ++# Description: Manages evacuation of nodes running nova-compute ++# ++# Authors: Andrew Beekhof ++# ++# Support: openstack@lists.openstack.org ++# License: Apache Software License (ASL) 2.0 ++# ++ ++ ++####################################################################### ++# Initialization: ++ ++### ++: ${OCF_FUNCTIONS_DIR=${OCF_ROOT}/lib/heartbeat} ++. ${OCF_FUNCTIONS_DIR}/ocf-shellfuncs ++### ++ ++: ${__OCF_ACTION=$1} ++ ++####################################################################### ++ ++meta_data() { ++ cat < ++ ++ ++1.0 ++ ++ ++Facility for tacking a list of compute nodes and reliably evacuating the ones that fence_evacuate has flagged. ++ ++Evacuator for OpenStack Nova Compute Server ++ ++ ++ ++ ++ ++Authorization URL for connecting to keystone in admin context ++ ++Authorization URL ++ ++ ++ ++ ++ ++Username for connecting to keystone in admin context ++ ++Username ++ ++ ++ ++ ++ ++Password for connecting to keystone in admin context ++ ++Password ++ ++ ++ ++ ++ ++Tenant name for connecting to keystone in admin context. ++Note that with Keystone V3 tenant names are only unique within a domain. ++ ++Tenant name ++ ++ ++ ++ ++ ++DNS domain in which hosts live, useful when the cluster uses short names and nova uses FQDN ++ ++DNS domain ++ ++ ++ ++ ++ ++Nova API location (internal, public or admin URL) ++ ++Nova API location (internal, public or admin URL) ++ ++ ++ ++ ++ ++Region name for connecting to nova. ++ ++Region name ++ ++ ++ ++ ++ ++Explicitly allow client to perform "insecure" TLS (https) requests. ++The server's certificate will not be verified against any certificate authorities. ++This option should be used with caution. ++ ++Allow insecure TLS requests ++ ++ ++ ++ ++ ++Indicate that nova storage for instances is not shared across compute ++nodes. This must match the reality of how nova storage is configured! ++Otherwise VMs could end up in error state upon evacuation. When ++storage is non-shared, instances on dead hypervisors will be rebuilt ++from their original image or volume, so anything on ephemeral storage ++will be lost. ++ ++Disable shared storage recovery for instances ++ ++ ++ ++ ++ ++Enable extra logging from the evacuation process ++ ++Enable debug logging ++ ++ ++ ++ ++ ++Allows delaying the nova evacuate API call, e.g. to give a storage array time to clean ++up eventual locks/leases. ++ ++Nova evacuate delay ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++END ++} ++ ++####################################################################### ++ ++# don't exit on TERM, to test that lrmd makes sure that we do exit ++trap sigterm_handler TERM ++sigterm_handler() { ++ ocf_log info "They use TERM to bring us down. No such luck." ++ return ++} ++ ++evacuate_usage() { ++ cat < >(grep -v "attribute does not exist" 1>&2) | ++ sed 's/ value=""/ value="no"/' | ++ tr '="' ' ' | ++ awk '{print $4" "$6}' ++ ) ++ return $OCF_SUCCESS ++} ++ ++evacuate_validate() { ++ rc=$OCF_SUCCESS ++ fence_options="" ++ ++ if ! have_binary fence_evacuate; then ++ check_binary fence_compute ++ fi ++ ++ # Is the state directory writable? ++ state_dir=$(dirname $statefile) ++ touch "$state_dir/$$" ++ if [ $? != 0 ]; then ++ ocf_exit_reason "Invalid state directory: $state_dir" ++ return $OCF_ERR_ARGS ++ fi ++ rm -f "$state_dir/$$" ++ ++ if [ -z "${OCF_RESKEY_auth_url}" ]; then ++ ocf_exit_reason "auth_url not configured" ++ exit $OCF_ERR_CONFIGURED ++ fi ++ ++ fence_options="${fence_options} -k ${OCF_RESKEY_auth_url}" ++ ++ if [ -z "${OCF_RESKEY_username}" ]; then ++ ocf_exit_reason "username not configured" ++ exit $OCF_ERR_CONFIGURED ++ fi ++ ++ fence_options="${fence_options} -l ${OCF_RESKEY_username}" ++ ++ if [ -z "${OCF_RESKEY_password}" ]; then ++ ocf_exit_reason "password not configured" ++ exit $OCF_ERR_CONFIGURED ++ fi ++ ++ fence_options="${fence_options} -p ${OCF_RESKEY_password}" ++ ++ if [ -z "${OCF_RESKEY_tenant_name}" ]; then ++ ocf_exit_reason "tenant_name not configured" ++ exit $OCF_ERR_CONFIGURED ++ fi ++ ++ fence_options="${fence_options} -t ${OCF_RESKEY_tenant_name}" ++ ++ if [ -n "${OCF_RESKEY_domain}" ]; then ++ fence_options="${fence_options} -d ${OCF_RESKEY_domain}" ++ fi ++ ++ if [ -n "${OCF_RESKEY_region_name}" ]; then ++ fence_options="${fence_options} \ ++ --region-name ${OCF_RESKEY_region_name}" ++ fi ++ ++ if [ -n "${OCF_RESKEY_insecure}" ]; then ++ if ocf_is_true "${OCF_RESKEY_insecure}"; then ++ fence_options="${fence_options} --insecure" ++ fi ++ fi ++ ++ if [ -n "${OCF_RESKEY_no_shared_storage}" ]; then ++ if ocf_is_true "${OCF_RESKEY_no_shared_storage}"; then ++ fence_options="${fence_options} --no-shared-storage" ++ fi ++ fi ++ ++ if [ -n "${OCF_RESKEY_verbose}" ]; then ++ if ocf_is_true "${OCF_RESKEY_verbose}"; then ++ fence_options="${fence_options} --verbose" ++ fi ++ fi ++ ++ if [ -n "${OCF_RESKEY_endpoint_type}" ]; then ++ case ${OCF_RESKEY_endpoint_type} in ++ adminURL|publicURL|internalURL) ++ ;; ++ *) ++ ocf_exit_reason "endpoint_type ${OCF_RESKEY_endpoint_type}" \ ++ "not valid. Use adminURL or publicURL or internalURL" ++ exit $OCF_ERR_CONFIGURED ++ ;; ++ esac ++ fence_options="${fence_options} -e ${OCF_RESKEY_endpoint_type}" ++ fi ++ ++ if [ $rc != $OCF_SUCCESS ]; then ++ exit $rc ++ fi ++ return $rc ++} ++ ++statefile="${HA_RSCTMP}/${OCF_RESOURCE_INSTANCE}.active" ++ ++case $__OCF_ACTION in ++ start) ++ evacuate_validate ++ evacuate_start ++ ;; ++ stop) ++ evacuate_stop ++ ;; ++ monitor) ++ evacuate_validate ++ evacuate_monitor ++ ;; ++ meta-data) ++ meta_data ++ exit $OCF_SUCCESS ++ ;; ++ usage|help) ++ evacuate_usage ++ exit $OCF_SUCCESS ++ ;; ++ validate-all) ++ exit $OCF_SUCCESS ++ ;; ++ *) ++ evacuate_usage ++ exit $OCF_ERR_UNIMPLEMENTED ++ ;; ++esac ++rc=$? ++ocf_log debug "${OCF_RESOURCE_INSTANCE} $__OCF_ACTION : $rc" ++exit $rc diff --git a/resource-agents.spec b/resource-agents.spec index 81b1138..2c88331 100644 --- a/resource-agents.spec +++ b/resource-agents.spec @@ -45,13 +45,18 @@ Name: resource-agents Summary: Open Source HA Reusable Cluster Resource Scripts Version: 4.8.0 -Release: 11%{?rcver:%{rcver}}%{?numcomm:.%{numcomm}}%{?alphatag:.%{alphatag}}%{?dirty:.%{dirty}}%{?dist} +Release: 12%{?rcver:%{rcver}}%{?numcomm:.%{numcomm}}%{?alphatag:.%{alphatag}}%{?dirty:.%{dirty}}%{?dist} License: GPLv2+ and LGPLv2+ URL: https://github.com/ClusterLabs/resource-agents Source0: %{upstream_prefix}-%{upstream_version}.tar.gz -Patch0: ha-cloud-support-aws.patch +Patch0: nova-compute-wait-NovaEvacuate.patch Patch1: bz1952005-pgsqlms-new-ra.patch -Patch2: bz1993900-Filesystem-improve-metadata.patch +Patch2: bz1991855-nfsserver-add-nfsconvert.patch + +# bundled ha-cloud-support libs +Patch500: ha-cloud-support-aws.patch +Patch501: ha-cloud-support-aliyun.patch +Patch502: ha-cloud-support-gcloud.patch Obsoletes: heartbeat-resources <= %{version} Provides: heartbeat-resources = %{version} @@ -133,6 +138,22 @@ A set of scripts to interface with several services to operate in a High Availability environment for both Pacemaker and rgmanager service managers. +%ifarch x86_64 +%package cloud +License: GPLv2+ and LGPLv2+ +Summary: Cloud resource agents +Requires: %{name} = %{version}-%{release} +Requires: ha-cloud-support +Provides: resource-agents-aliyun +Obsoletes: resource-agents-aliyun <= %{version} +Provides: resource-agents-gcp +Obsoletes: resource-agents-gcp <= %{version} + +%description cloud +Cloud resource agents allows Cloud instances to be managed +in a cluster environment. +%endif + %package paf License: PostgreSQL Summary: PostgreSQL Automatic Failover (PAF) resource agent @@ -148,8 +169,18 @@ databases to be managed in a cluster environment. %{error:Unable to determine the distribution/version. This is generally caused by missing /etc/rpm/macros.dist. Please install the correct build packages or define the required macros manually.} exit 1 %endif -%autosetup -n %{upstream_prefix}-%{upstream_version} -p1 +%setup -q -n %{upstream_prefix}-%{upstream_version} +%patch0 -p1 -F1 +%patch1 -p1 +%patch2 -p1 -F1 +# bundled ha-cloud-support libs +%patch500 -p1 +%patch501 -p1 +%patch502 -p1 -F2 + +chmod 755 heartbeat/nova-compute-wait +chmod 755 heartbeat/NovaEvacuate chmod 755 heartbeat/pgsqlms %build @@ -233,6 +264,8 @@ rm -rf %{buildroot}/usr/share/doc/resource-agents %{_usr}/lib/ocf/lib/heartbeat %{_usr}/lib/ocf/resource.d/heartbeat +%{_usr}/lib/ocf/resource.d/openstack + %{_datadir}/pkgconfig/%{name}.pc %if %{defined _unitdir} @@ -267,6 +300,12 @@ rm -rf %{buildroot}/usr/share/doc/resource-agents ### # Supported, but in another sub package ### +%exclude /usr/lib/ocf/resource.d/heartbeat/aliyun-vpc-move-ip* +%exclude /usr/lib/ocf/resource.d/heartbeat/aws* +%exclude /usr/lib/ocf/resource.d/heartbeat/azure-* +%exclude %{_mandir}/man7/*aliyun-vpc-move-ip* +%exclude /usr/lib/ocf/resource.d/heartbeat/gcp* +%exclude %{_mandir}/man7/*gcp* %exclude /usr/lib/ocf/resource.d/heartbeat/pgsqlms %exclude %{_mandir}/man7/*pgsqlms* %exclude %{_usr}/lib/ocf/lib/heartbeat/OCF_*.pm @@ -428,6 +467,20 @@ rm -rf %{buildroot}/usr/share/doc/resource-agents %{_libexecdir}/heartbeat %endif +%ifarch x86_64 +%files cloud +/usr/lib/ocf/resource.d/heartbeat/aliyun-* +%{_mandir}/man7/*aliyun-* +/usr/lib/ocf/resource.d/heartbeat/aws* +%{_mandir}/man7/*aws* +/usr/lib/ocf/resource.d/heartbeat/azure-* +%{_mandir}/man7/*azure-* +/usr/lib/ocf/resource.d/heartbeat/gcp-* +%{_mandir}/man7/*gcp-* +%exclude /usr/lib/ocf/resource.d/heartbeat/gcp-vpc-move-ip +%exclude %{_mandir}/man7/*gcp-vpc-move-ip* +%endif + %files paf %doc paf_README.md %license paf_LICENSE @@ -437,6 +490,13 @@ rm -rf %{buildroot}/usr/share/doc/resource-agents %{_usr}/lib/ocf/lib/heartbeat/OCF_*.pm %changelog +* Wed Aug 25 2021 Oyvind Albrigtsen - 4.8.0-12 +- Create cloud subpackage +- Add nova-compute-wait/NovaEvacuate +- nfsserver: fix nfs-convert issue + + Resolves: rhbz#1997548, rhbz#1997576, rhbz#1991855 + * Mon Aug 16 2021 Oyvind Albrigtsen - 4.8.0-11 - Filesystem: force_unmount: remove "Default value" text from metadata