diff --git a/.gitignore b/.gitignore index f18cf35..a7b3a3c 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,6 @@ -/fence-agents-*.tar.?z -/fence-agents-*.src.rpm +/*.gz +/*.rpm /.build-*.log +/*.whl +/*.txt /*/ diff --git a/fence-agents.spec b/fence-agents.spec index 2bb60c5..e23b03b 100644 --- a/fence-agents.spec +++ b/fence-agents.spec @@ -9,42 +9,107 @@ Name: fence-agents Summary: Set of unified programs capable of host isolation ("fencing") Version: 4.7.1 -Release: 1%{?alphatag:.%{alphatag}}%{?dist} +Release: 2%{?alphatag:.%{alphatag}}%{?dist} License: GPLv2+ and LGPLv2+ URL: https://github.com/ClusterLabs/fence-agents Source0: https://fedorahosted.org/releases/f/e/fence-agents/%{name}-%{version}.tar.gz +### HA cloud requirements-*.txt ### +Source100: requirements-aliyun.txt +Source101: requirements-aws.txt +Source102: requirements-azure.txt +Source103: requirements-google.txt +### HA cloud support libs/utils ### +# update with ./update-ha-cloud.sh and replace lines below with output +### BEGIN ### +# aliyun +Source1000: aliyun-python-sdk-core-2.13.30.tar.gz +Source1001: aliyun_python_sdk_ecs-4.23.9-py2.py3-none-any.whl +Source1002: cffi-1.14.4-cp39-cp39-manylinux1_x86_64.whl +Source1003: cryptography-3.2.1-cp35-abi3-manylinux2010_x86_64.whl +Source1004: jmespath-0.10.0-py2.py3-none-any.whl +Source1005: pycparser-2.20-py2.py3-none-any.whl +Source1006: six-1.15.0-py2.py3-none-any.whl +# aws +Source1007: boto3-1.17.5-py2.py3-none-any.whl +Source1008: botocore-1.20.5-py2.py3-none-any.whl +Source1009: python_dateutil-2.8.1-py2.py3-none-any.whl +Source1010: s3transfer-0.3.4-py2.py3-none-any.whl +Source1011: urllib3-1.26.3-py2.py3-none-any.whl +# azure +Source1012: adal-1.2.6-py2.py3-none-any.whl +Source1013: azure_common-1.1.26-py2.py3-none-any.whl +Source1014: azure_core-1.11.0-py2.py3-none-any.whl +Source1015: azure_mgmt_compute-18.2.0-py2.py3-none-any.whl +Source1016: azure_mgmt_core-1.2.2-py2.py3-none-any.whl +Source1017: azure_mgmt_network-17.1.0-py2.py3-none-any.whl +Source1018: certifi-2020.12.5-py2.py3-none-any.whl +Source1019: chardet-4.0.0-py2.py3-none-any.whl +Source1020: cryptography-3.4.4-cp36-abi3-manylinux2014_x86_64.whl +Source1021: idna-2.10-py2.py3-none-any.whl +Source1022: isodate-0.6.0-py2.py3-none-any.whl +Source1023: msrest-0.6.21-py2.py3-none-any.whl +Source1024: msrestazure-0.6.4-py2.py3-none-any.whl +Source1025: oauthlib-3.1.0-py2.py3-none-any.whl +Source1026: PyJWT-2.0.1-py3-none-any.whl +Source1027: requests-2.25.1-py2.py3-none-any.whl +Source1028: requests_oauthlib-1.3.0-py2.py3-none-any.whl +# google +Source1029: cachetools-4.2.1-py3-none-any.whl +Source1030: chardet-3.0.4-py2.py3-none-any.whl +Source1031: google_api_core-1.26.0-py2.py3-none-any.whl +Source1032: google_api_python_client-1.12.8-py2.py3-none-any.whl +Source1033: googleapis_common_protos-1.52.0-py2.py3-none-any.whl +Source1034: google_auth-1.26.0-py2.py3-none-any.whl +Source1035: google_auth_httplib2-0.0.4-py2.py3-none-any.whl +Source1036: httplib2-0.19.0-py3-none-any.whl +Source1037: packaging-20.9-py2.py3-none-any.whl +Source1038: protobuf-3.14.0-py2.py3-none-any.whl +Source1039: pyasn1-0.4.8-py2.py3-none-any.whl +Source1040: pyasn1_modules-0.2.8-py2.py3-none-any.whl +Source1041: pyparsing-2.4.7-py2.py3-none-any.whl +Source1042: pyroute2-0.5.14.tar.gz +Source1043: pytz-2021.1-py2.py3-none-any.whl +Source1044: rsa-4.7-py3-none-any.whl +Source1045: setuptools-53.0.0-py3-none-any.whl +Source1046: uritemplate-3.0.1-py2.py3-none-any.whl +### END ### -%if 0%{?rhel} == 7 -%ifarch s390x -%define rhel7_s390x 1 +Patch0: fence_gce-google-auth-oauthlib-support.patch +Patch1: ha-cloud-support-aliyun.patch +Patch2: ha-cloud-support-aws.patch +Patch3: ha-cloud-support-azure.patch +Patch4: ha-cloud-support-google.patch + +%global supportedagents amt_ws apc apc_snmp bladecenter brocade cisco_mds cisco_ucs compute drac5 eaton_snmp emerson eps evacuate hpblade ibmblade ifmib ilo ilo_moonshot ilo_mp ilo_ssh intelmodular ipdu ipmilan kdump lpar mpath redfish rhevm rsa rsb sbd scsi vmware_rest vmware_soap wti +%ifarch x86_64 +%global testagents virsh heuristics_ping aliyun aws azure_arm gce %endif +%ifarch ppc64le +%global testagents virsh heuristics_ping +%endif +%ifarch s390x +%global testagents virsh zvm heuristics_ping +%endif +%ifnarch x86_64 ppc64le s390x +%global testagents virsh heuristics_ping %endif # skipped: pve, raritan, rcd-serial, virsh %global allfenceagents %(cat < 7 || 0%{?rhel} > 7 || 0%{?suse_version} -BuildRequires: python3-devel +BuildRequires: python3-devel python3-pip +# wheel for HA cloud support +BuildRequires: python3-wheel BuildRequires: python3-pexpect python3-pycurl python3-requests BuildRequires: python3-suds %if 0%{?fedora} || 0%{?centos} > 7 || 0%{?rhel} > 7 -BuildRequires: python3-google-api-client python3-boto3 openwsman-python3 -%endif -# (-openstack) -%ifarch x86_64 ppc64le -BuildRequires: python3-novaclient python3-keystoneclient +BuildRequires: openwsman-python3 %endif %if 0%{?suse_version} -BuildRequires: python3-google-api-python-client python3-openwsman python3-boto3 +BuildRequires: python3-openwsman %endif %else BuildRequires: python-devel BuildRequires: pexpect python-pycurl python-requests BuildRequires: python-suds openwsman-python -%if ! %{defined rhel7_s390x} -BuildRequires: python-google-api-client python-boto3 -%endif -# (-openstack) -%ifarch x86_64 ppc64le -BuildRequires: python-novaclient python-keystoneclient -%endif %endif # turn off the brp-python-bytecompile script @@ -138,21 +173,34 @@ BuildRequires: python-novaclient python-keystoneclient #undefine __brp_python_bytecompile %prep -%setup -q -n %{name}-%{version}%{?rcver:%{rcver}}%{?numcomm:.%{numcomm}}%{?alphatag:-%{alphatag}}%{?dirty:-%{dirty}} -%autopatch -p1 +%autosetup -b0 -p1 # prevent compilation of something that won't get used anyway sed -i.orig 's|FENCE_ZVM=1|FENCE_ZVM=0|' configure.ac %build +%ifarch x86_64 +# support libs +for x in aliyun azure aws google; do + %{__python3} -m pip install --target support/$x --no-index --find-links %{_sourcedir} -r %{_sourcedir}/requirements-$x.txt +done +%endif + if [ -z "$PYTHON " ]; then PYTHON="%{__python3}" fi ./autogen.sh -%{configure} +%{configure} PYTHONPATH="support/aliyun:support/aws:support/azure:support/google" --with-agents='%{supportedagents} %{testagents}' CFLAGS="$(echo '%{optflags}')" make %{_smp_mflags} %install +%ifarch x86_64 +# support libs +mkdir -p %{buildroot}%{_usr}/lib/%{name} +mv support %{buildroot}%{_usr}/lib/%{name} +%endif + +export PYTHONPATH=%{buildroot}%{_usr}/lib/%{name}/support make install DESTDIR=%{buildroot} # bytecompile Python source code in a non-standard location %if 0%{?fedora} || 0%{?centos} > 7 || 0%{?rhel} > 7 @@ -198,15 +246,37 @@ This package contains support files including the Python fencing library. %exclude %{_datadir}/fence/XenAPI.* %exclude %{_datadir}/fence/__pycache__/XenAPI.* %{_datadir}/cluster +%exclude %{_datadir}/cluster/fence_mpath_check* %exclude %{_datadir}/cluster/fence_scsi_check* %{_datadir}/pkgconfig/%{name}.pc %exclude %{_sbindir}/* %exclude %{_mandir}/man8/* +%exclude /usr/lib/%{name}/support + +%ifarch x86_64 +%package -n ha-cloud-support +License: GPLv2+ and LGPLv2+ +Summary: Support libraries for HA Cloud agents +%description -n ha-cloud-support +Support libraries for Fence Agents. +%files -n ha-cloud-support +%dir %{_usr}/lib/%{name} +%{_usr}/lib/%{name}/support +%endif %package all License: GPLv2+, LGPLv2+ and ASL 2.0 Summary: Set of unified programs capable of host isolation ("fencing") Requires: %{allfenceagents} +%ifarch i686 x86_64 +Requires: fence-virt +%endif +%ifarch ppc64le +Requires: fence-agents-lpar >= %{version}-%{release} +%endif +%ifarch s390x +Requires: fence-agents-zvm >= %{version}-%{release} +%endif Provides: fence-agents = %{version}-%{release} Obsoletes: fence-agents < 3.1.13 %description all @@ -217,37 +287,22 @@ network, storage, or similar. This package serves as a catch-all for all supported fence agents. %files all -%package alom +%ifarch x86_64 +%package aliyun License: GPLv2+ and LGPLv2+ -Summary: Fence agent for SUN ALOM -Requires: openssh-clients -%if 0%{?fedora} < 33 || (0%{?rhel} && 0%{?rhel} < 9) || (0%{?centos} && 0%{?centos} < 9) || 0%{?suse_version} -%if (0%{?rhel} && 0%{?rhel} < 8) || (0%{?centos} && 0%{?centos} < 8) -Requires: telnet -%else -Recommends: telnet +Group: System Environment/Base +Summary: Fence agent for Alibaba Cloud (Aliyun) +Requires: fence-agents-common >= %{version}-%{release} +Requires: ha-cloud-support = %{version}-%{release} +Requires: python3-jmespath >= 0.9.0 +Obsoletes: %{name} < %{version}-%{release} +%description aliyun +The fence-agents-aliyun package contains a fence agent for Alibaba Cloud (Aliyun) instances. +%files aliyun +%defattr(-,root,root,-) +%{_sbindir}/fence_aliyun +%{_mandir}/man8/fence_aliyun.8* %endif -%endif -Requires: fence-agents-common = %{version}-%{release} -BuildArch: noarch -%description alom -Fence agent for SUN ALOM. -%files alom -%{_sbindir}/fence_alom -%{_mandir}/man8/fence_alom.8* - -%package amt -License: GPLv2+ and LGPLv2+ -Summary: Fence agent for Intel AMT devices -Requires: amtterm -Requires: fence-agents-common = %{version}-%{release} -BuildArch: noarch -%description amt -Fence agent for AMT compatibile devices that are accessed via -3rd party software. -%files amt -%{_sbindir}/fence_amt -%{_mandir}/man8/fence_amt.8* %package amt-ws License: ASL 2.0 @@ -303,16 +358,12 @@ Fence agents for APC devices that are accessed via the SNMP protocol. %{_sbindir}/fence_tripplite_snmp %{_mandir}/man8/fence_tripplite_snmp.8* -%if ! %{defined rhel7_s390x} +%ifarch x86_64 %package aws License: GPLv2+ and LGPLv2+ Summary: Fence agent for Amazon AWS Requires: fence-agents-common = %{version}-%{release} -%if 0%{?fedora} || 0%{?centos} > 7 || 0%{?rhel} > 7 || 0%{?suse_version} -Requires: python3-boto3 -%else -Requires: python-boto3 -%endif +Requires: ha-cloud-support = %{version}-%{release} BuildArch: noarch Obsoletes: fence-agents < 3.1.13 %description aws @@ -322,15 +373,12 @@ Fence agent for Amazon AWS instances. %{_mandir}/man8/fence_aws.8* %endif +%ifarch x86_64 %package azure-arm License: GPLv2+ and LGPLv2+ Summary: Fence agent for Azure Resource Manager Requires: fence-agents-common = %{version}-%{release} -%if 0%{?fedora} || 0%{?centos} > 7 || 0%{?rhel} > 7 || 0%{?suse_version} -Requires: python3-azure-sdk -%else -Requires: python-azure-sdk -%endif +Requires: ha-cloud-support = %{version}-%{release} BuildArch: noarch Obsoletes: fence-agents < 3.1.13 %description azure-arm @@ -342,6 +390,7 @@ Fence agent for Azure Resource Manager instances. %{_datadir}/fence/__pycache__/azure_fence.* %endif %{_mandir}/man8/fence_azure_arm.8* +%endif %package bladecenter License: GPLv2+ and LGPLv2+ @@ -434,35 +483,6 @@ Fence agent for Nova compute nodes. %{_mandir}/man8/fence_evacuate.8* %endif -%package docker -License: GPLv2+ and LGPLv2+ -Summary: Fence agent for Docker -%if 0%{?fedora} || 0%{?centos} > 7 || 0%{?rhel} > 7 || 0%{?suse_version} -Requires: python3-pycurl -%else -Requires: python-pycurl -%endif -Requires: fence-agents-common = %{version}-%{release} -BuildArch: noarch -%description docker -Fence agent for Docker images that are accessed over HTTP. -%files docker -%{_sbindir}/fence_docker -%{_mandir}/man8/fence_docker.8* - -%package drac -License: GPLv2+ and LGPLv2+ -Summary: Fence agent for Dell DRAC -Requires: telnet -Requires: fence-agents-common = %{version}-%{release} -BuildArch: noarch -%description drac -Fence agent for Dell DRAC IV series devices that are accessed -via telnet. -%files drac -%{_sbindir}/fence_drac -%{_mandir}/man8/fence_drac.8* - %package drac5 License: GPLv2+ and LGPLv2+ Summary: Fence agent for Dell DRAC 5 @@ -520,21 +540,12 @@ via the HTTP(s) protocol. %{_sbindir}/fence_eps %{_mandir}/man8/fence_eps.8* -%if ! %{defined rhel7_s390x} +%ifarch x86_64 %package gce License: GPLv2+ and LGPLv2+ Summary: Fence agent for GCE (Google Cloud Engine) Requires: fence-agents-common = %{version}-%{release} -%if 0%{?fedora} || 0%{?centos} > 7 || 0%{?rhel} > 7 || 0%{?suse_version} -%if 0%{?fedora} || 0%{?centos} > 7 || 0%{?rhel} > 7 -Requires: python3-google-api-client -%endif -%if 0%{?suse_version} -Requires: python3-google-api-python-client -%endif -%else -Requires: python-google-api-client -%endif +Requires: ha-cloud-support = %{version}-%{release} BuildArch: noarch Obsoletes: fence-agents < 3.1.13 %description gce @@ -544,18 +555,6 @@ Fence agent for GCE (Google Cloud Engine) instances. %{_mandir}/man8/fence_gce.8* %endif -%package hds-cb -License: GPLv2+ and LGPLv2+ -Summary: Fence agent for Hitachi Compute Blade systems -Requires: telnet -Requires: fence-agents-common = %{version}-%{release} -BuildArch: noarch -%description hds-cb -Fence agent for Hitachi Compute Blades that are accessed via telnet. -%files hds-cb -%{_sbindir}/fence_hds_cb -%{_mandir}/man8/fence_hds_cb.8* - %package heuristics-ping License: GPLv2+ and LGPLv2+ Summary: Pseudo fence agent to affect other agents based on ping-heuristics @@ -602,23 +601,6 @@ via the SNMP protocol. %{_sbindir}/fence_ibmblade %{_mandir}/man8/fence_ibmblade.8* -%package ibmz -License: GPLv2+ and LGPLv2+ -Summary: Fence agent for IBM z LPARs -%if 0%{?fedora} || 0%{?centos} > 7 || 0%{?rhel} > 7 || 0%{?suse_version} -Requires: python3-requests -%else -Requires: python-requests -%endif -Requires: fence-agents-common = %{version}-%{release} -BuildArch: noarch -%description ibmz -Fence agent for IBM z LPARs that are accessed via the HMC -Web Services REST API. -%files ibmz -%{_sbindir}/fence_ibmz -%{_mandir}/man8/fence_ibmz.8* - %package ifmib License: GPLv2+ and LGPLv2+ Summary: Fence agent for devices with IF-MIB interfaces @@ -754,19 +736,6 @@ Fence agents for devices with IPMI interface. %{_sbindir}/fence_imm %{_mandir}/man8/fence_imm.8* -%ifarch x86_64 ppc64le -%package ironic -License: GPLv2+ and LGPLv2+ -Summary: Fence agent for OpenStack's Ironic (Bare Metal as a service) -Requires: fence-agents-common = %{version}-%{release} -BuildArch: noarch -%description ironic -Fence agent for OpenStack's Ironic (Bare Metal as a service) service. -%files ironic -%{_sbindir}/fence_ironic -%{_mandir}/man8/fence_ironic.8* -%endif - %package kdump License: GPLv2+ and LGPLv2+ Summary: Fence agent for use with kdump crash recovery service @@ -780,25 +749,6 @@ Fence agent for use with kdump crash recovery service. %{_mandir}/man8/fence_kdump.8* %{_mandir}/man8/fence_kdump_send.8* -%package ldom -License: GPLv2+ and LGPLv2+ -Summary: Fence agent for Sun LDom virtual machines -Requires: openssh-clients -%if 0%{?fedora} < 33 || (0%{?rhel} && 0%{?rhel} < 9) || (0%{?centos} && 0%{?centos} < 9) || 0%{?suse_version} -%if (0%{?rhel} && 0%{?rhel} < 8) || (0%{?centos} && 0%{?centos} < 8) -Requires: telnet -%else -Recommends: telnet -%endif -%endif -Requires: fence-agents-common = %{version}-%{release} -BuildArch: noarch -%description ldom -Fence agent for APC devices that are accessed via telnet or SSH. -%files ldom -%{_sbindir}/fence_ldom -%{_mandir}/man8/fence_ldom.8* - %package lpar License: GPLv2+ and LGPLv2+ Summary: Fence agent for IBM LPAR @@ -831,101 +781,6 @@ Device Mapper Multipath. %{_sbindir}/fence_mpath %{_mandir}/man8/fence_mpath.8* -%package netio -License: GPLv2+ and LGPLv2+ -Summary: Fence agent for Koukaam NETIO devices -Requires: openssh-clients -%if 0%{?fedora} < 33 || (0%{?rhel} && 0%{?rhel} < 9) || (0%{?centos} && 0%{?centos} < 9) || 0%{?suse_version} -%if (0%{?rhel} && 0%{?rhel} < 8) || (0%{?centos} && 0%{?centos} < 8) -Requires: telnet -%else -Recommends: telnet -%endif -%endif -Requires: fence-agents-common = %{version}-%{release} -BuildArch: noarch -%description netio -Fence agent for Koukaam NETIO devices that are accessed -via telnet or SSH. -%files netio -%{_sbindir}/fence_netio -%{_mandir}/man8/fence_netio.8* - -%ifarch x86_64 ppc64le -%package openstack -License: GPLv2+ and LGPLv2+ -Summary: Fence agent for OpenStack's Nova service -%if 0%{?fedora} || 0%{?centos} > 7 || 0%{?rhel} > 7 || 0%{?suse_version} -Requires: python3-requests -%else -Requires: python-requests -%endif -Requires: fence-agents-common = %{version}-%{release} -BuildArch: noarch -%description openstack -Fence agent for OpenStack's Nova service. -%files openstack -%{_sbindir}/fence_openstack -%{_mandir}/man8/fence_openstack.8* -%endif - -%package ovh -License: GPLv2+ and LGPLv2+ -Summary: Fence agent for OVH provider -%if 0%{?fedora} || 0%{?centos} > 7 || 0%{?rhel} > 7 || 0%{?suse_version} -Requires: python3-suds -%else -Requires: python-suds -%endif -Requires: fence-agents-common = %{version}-%{release} -BuildArch: noarch -%description ovh -Fence agent for OVH hosting provider. -%files ovh -%{_sbindir}/fence_ovh -%{_mandir}/man8/fence_ovh.8* - -# skipped from allfenceagents -%package pve -License: GPLv2+ and LGPLv2+ -Summary: Fence agent for PVE -%if 0%{?fedora} || 0%{?centos} > 7 || 0%{?rhel} > 7 || 0%{?suse_version} -Requires: python3-pycurl -%else -Requires: python-pycurl -%endif -Requires: fence-agents-common = %{version}-%{release} -BuildArch: noarch -%description pve -Fence agent for PVE. -%files pve -%{_sbindir}/fence_pve -%{_mandir}/man8/fence_pve.8* - -# skipped from allfenceagents -%package raritan -License: GPLv2+ and LGPLv2+ -Summary: Fence agent for Raritan Dominion PX -Requires: fence-agents-common = %{version}-%{release} -BuildArch: noarch -%description raritan -Fence agent for Raritan Dominion PX. -%files raritan -%{_sbindir}/fence_raritan -%{_mandir}/man8/fence_raritan.8* - -# skipped from allfenceagents -%package rcd-serial -License: GPLv2+ and LGPLv2+ -Summary: Fence agent for RCD serial -Requires: fence-agents-common = %{version}-%{release} -BuildArch: noarch -%description rcd-serial -Fence agent for RCD serial. -%files rcd-serial -%{_sbindir}/fence_rcd_serial -%{_mandir}/man8/fence_rcd_serial.8* - %package redfish License: GPLv2+ and LGPLv2+ Group: System Environment/Base @@ -995,18 +850,6 @@ via telnet or SSH. %{_sbindir}/fence_rsb %{_mandir}/man8/fence_rsb.8* -%package sanbox2 -License: GPLv2+ and LGPLv2+ -Summary: Fence agent for QLogic SANBox2 FC switches -Requires: telnet -Requires: fence-agents-common = %{version}-%{release} -BuildArch: noarch -%description sanbox2 -Fence agent for QLogic SANBox2 switches that are accessed via telnet. -%files sanbox2 -%{_sbindir}/fence_sanbox2 -%{_mandir}/man8/fence_sanbox2.8* - %package sbd License: GPLv2+ and LGPLv2+ Summary: Fence agent for SBD (storage-based death) @@ -1033,18 +876,6 @@ Fence agent for SCSI persistent reservations. %{_datadir}/cluster/fence_scsi_check_hardreboot %{_mandir}/man8/fence_scsi.8* -%package vbox -License: GPLv2+ and LGPLv2+ -Summary: Fence agent for VirtualBox -Requires: openssh-clients -Requires: fence-agents-common = %{version}-%{release} -BuildArch: noarch -%description vbox -Fence agent for VirtualBox dom0 accessed via SSH. -%files vbox -%{_sbindir}/fence_vbox -%{_mandir}/man8/fence_vbox.8* - # skipped from allfenceagents %package virsh License: GPLv2+ and LGPLv2+ @@ -1058,22 +889,6 @@ Fence agent for virtual machines that are accessed via SSH. %{_sbindir}/fence_virsh %{_mandir}/man8/fence_virsh.8* -%package vmware -License: GPLv2+ and LGPLv2+ -Summary: Fence agent for VMWare with VI Perl Toolkit or vmrun -%if 0%{?fedora} || 0%{?centos} > 7 || 0%{?rhel} > 7 || 0%{?suse_version} -Requires: python3-pexpect -%else -Requires: pexpect -%endif -Requires: fence-agents-common = %{version}-%{release} -BuildArch: noarch -%description vmware -Fence agent for VMWare accessed with VI Perl Toolkit or vmrun. -%files vmware -%{_sbindir}/fence_vmware -%{_mandir}/man8/fence_vmware.8* - %package vmware-rest License: GPLv2+ and LGPLv2+ Summary: Fence agent for VMWare with REST API @@ -1102,18 +917,6 @@ Fence agent for VMWare with SOAP API v4.1+. %{_sbindir}/fence_vmware_soap %{_mandir}/man8/fence_vmware_soap.8* -%package vmware-vcloud -License: GPLv2+ and LGPLv2+ -Summary: Fence agent for VMWare vCloud Director -Requires: fence-agents-common = %{version}-%{release} -BuildArch: noarch -Obsoletes: fence-agents < 3.1.13 -%description vmware-vcloud -Fence agent for VMWare vCloud Director. -%files vmware-vcloud -%{_sbindir}/fence_vmware_vcloud -%{_mandir}/man8/fence_vmware_vcloud.8* - %package wti License: GPLv2+ and LGPLv2+ Summary: Fence agent for WTI Network power switches @@ -1134,26 +937,7 @@ via telnet or SSH. %{_sbindir}/fence_wti %{_mandir}/man8/fence_wti.8* -%package xenapi -License: GPLv2+ and LGPLv2+ -Summary: Fence agent for Citrix XenServer over XenAPI -%if 0%{?fedora} || 0%{?centos} > 7 || 0%{?rhel} > 7 || 0%{?suse_version} -Requires: python3-pexpect -%else -Requires: pexpect -%endif -Requires: fence-agents-common = %{version}-%{release} -BuildArch: noarch -%description xenapi -Fence agent for Citrix XenServer accessed over XenAPI. -%files xenapi -%{_sbindir}/fence_xenapi -%{_datadir}/fence/XenAPI.py* -%if 0%{?fedora} || 0%{?centos} > 7 || 0%{?rhel} > 7 -%{_datadir}/fence/__pycache__/XenAPI.* -%endif -%{_mandir}/man8/fence_xenapi.8* - +%ifarch s390x %package zvm License: GPLv2+ and LGPLv2+ Summary: Fence agent for IBM z/VM over IP @@ -1164,14 +948,15 @@ Fence agent for IBM z/VM over IP. %files zvm %{_sbindir}/fence_zvmip %{_mandir}/man8/fence_zvmip.8* +%endif %changelog +* Thu Feb 11 2021 Oyvind Albrigtsen - 4.7.1-2 +- create HA cloud support package + * Mon Feb 8 2021 Oyvind Albrigtsen - 4.7.1-1 - new upstream release -* Tue Jan 26 2021 Fedora Release Engineering - 4.7.0-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild - * Wed Dec 9 2020 Oyvind Albrigtsen - 4.7.0-1 - new upstream release diff --git a/fence_gce-google-auth-oauthlib-support.patch b/fence_gce-google-auth-oauthlib-support.patch new file mode 100644 index 0000000..dabcda7 --- /dev/null +++ b/fence_gce-google-auth-oauthlib-support.patch @@ -0,0 +1,43 @@ +From a06a83566e11b0bdf197b16beb022b4cece11d5f Mon Sep 17 00:00:00 2001 +From: Oyvind Albrigtsen +Date: Wed, 10 Feb 2021 15:37:27 +0100 +Subject: [PATCH] fence_gce: support google-auth and oauthlib and fallback to + deprecated libs when not available + +oauth2client deprecated info: https://pypi.org/project/oauth2client/ +--- + agents/gce/fence_gce.py | 14 +++++++++++--- + 1 file changed, 11 insertions(+), 3 deletions(-) + +diff --git a/agents/gce/fence_gce.py b/agents/gce/fence_gce.py +index d69acf4e..04318744 100644 +--- a/agents/gce/fence_gce.py ++++ b/agents/gce/fence_gce.py +@@ -29,8 +29,12 @@ + from fencing import fail_usage, run_delay, all_opt, atexit_handler, check_input, process_input, show_docs, fence_action + try: + import googleapiclient.discovery +- from oauth2client.client import GoogleCredentials +- from oauth2client.service_account import ServiceAccountCredentials ++ try: ++ from google.oauth2.credentials import Credentials as GoogleCredentials ++ from google.oauth2.service_account import Credentials as ServiceAccountCredentials ++ except: ++ from oauth2client.client import GoogleCredentials ++ from oauth2client.service_account import ServiceAccountCredentials + except: + pass + +@@ -380,7 +384,11 @@ def main(): + credentials = ServiceAccountCredentials.from_json_keyfile_name(options.get("--serviceaccount")) + logging.debug("using credentials from service account") + else: +- credentials = GoogleCredentials.get_application_default() ++ try: ++ from googleapiclient import _auth ++ credentials = _auth.default_credentials(); ++ except: ++ credentials = GoogleCredentials.get_application_default() + logging.debug("using application default credentials") + conn = googleapiclient.discovery.build( + 'compute', 'v1', credentials=credentials, cache_discovery=False) diff --git a/ha-cloud-support-aliyun.patch b/ha-cloud-support-aliyun.patch new file mode 100644 index 0000000..5f310f1 --- /dev/null +++ b/ha-cloud-support-aliyun.patch @@ -0,0 +1,10 @@ +--- a/agents/aliyun/fence_aliyun.py 2021-02-08 16:27:46.587068911 +0100 ++++ b/agents/aliyun/fence_aliyun.py 2021-02-08 16:27:41.368054268 +0100 +@@ -9,6 +9,7 @@ + from fencing import fail, fail_usage, EC_TIMED_OUT, run_delay + + try: ++ sys.path.insert(0, '/usr/lib/fence-agents/support/aliyun') + from aliyunsdkcore import client + from aliyunsdkcore.auth.credentials import EcsRamRoleCredential + from aliyunsdkecs.request.v20140526.DescribeInstancesRequest import DescribeInstancesRequest diff --git a/ha-cloud-support-aws.patch b/ha-cloud-support-aws.patch new file mode 100644 index 0000000..f4939dd --- /dev/null +++ b/ha-cloud-support-aws.patch @@ -0,0 +1,10 @@ +--- a/agents/aws/fence_aws.py 2021-02-08 13:31:49.748362643 +0100 ++++ b/agents/aws/fence_aws.py 2021-02-08 13:31:46.836356513 +0100 +@@ -11,6 +11,7 @@ + from requests import HTTPError + + try: ++ sys.path.insert(0, '/usr/lib/fence-agents/support/aws') + import boto3 + from botocore.exceptions import ConnectionError, ClientError, EndpointConnectionError, NoRegionError + except ImportError: diff --git a/ha-cloud-support-azure.patch b/ha-cloud-support-azure.patch new file mode 100644 index 0000000..f8290f5 --- /dev/null +++ b/ha-cloud-support-azure.patch @@ -0,0 +1,12 @@ +--- fence-agents-4.7.1/lib/azure_fence.py.py 2021-02-08 16:52:32.955244393 +0100 ++++ fence-agents-4.7.1/lib/azure_fence.py.py.modif 2021-02-08 16:52:28.150234151 +0100 +@@ -1,6 +1,9 @@ + import logging, re, time + from fencing import fail_usage + ++import sys ++sys.path.insert(0, '/usr/lib/fence-agents/support/azure') ++ + FENCE_SUBNET_NAME = "fence-subnet" + FENCE_INBOUND_RULE_NAME = "FENCE_DENY_ALL_INBOUND" + FENCE_INBOUND_RULE_DIRECTION = "Inbound" diff --git a/ha-cloud-support-google.patch b/ha-cloud-support-google.patch new file mode 100644 index 0000000..0208170 --- /dev/null +++ b/ha-cloud-support-google.patch @@ -0,0 +1,10 @@ +--- a/agents/gce/fence_gce.py 2021-02-10 16:13:16.156356744 +0100 ++++ b/agents/gce/fence_gce.py 2021-02-10 16:13:29.346383884 +0100 +@@ -28,6 +28,7 @@ + + from fencing import fail_usage, run_delay, all_opt, atexit_handler, check_input, process_input, show_docs, fence_action + try: ++ sys.path.insert(0, '/usr/lib/fence-agents/support/google') + import googleapiclient.discovery + try: + from google.oauth2.credentials import Credentials as GoogleCredentials diff --git a/sources b/sources index ecf6a61..dfd1e82 100644 --- a/sources +++ b/sources @@ -1 +1,52 @@ SHA512 (fence-agents-4.7.1.tar.gz) = 9973d80fa9545f44d0202e6841eeadaf9facdaca2a4a67827369b5fe63a58bc830a5fb91dc94c5a90dc1f8cf4a07198fd52eb46f3974b4730f69013154493527 +SHA512 (requirements-aliyun.txt) = 0c4f89de63246c406535ee73310232f3986b37dedbeed52f25000386d73af6735e1bf8e7ecaa97419df98f55058d76e4ff289d856b815afaaaf69744c5924f7e +SHA512 (requirements-aws.txt) = ca39604d09f4b05589ddaa437be13b7f5d1868218745df107564d73a6c32efb7e4761436197a69653edc47a78f40dd7d5f0894935ec21b8f23b7c7bc71dfd0d1 +SHA512 (requirements-azure.txt) = a176aeaba7f13ca126bc6b41de1237148480787e4fe56cd9969b843d7102b24cbef2c9f9bd5e4460c603da96ba588639a77dfb376f9ab4ff6f7c2a29013edc31 +SHA512 (requirements-google.txt) = d916eb72588e55f5243b9e5391ab07d65eaafe583e073ef79d0e865f4c5e911d7b10310f7ccb98b5fdc1383c2214cc0cc082fa3c5fac6aa3d1931e4779149241 +SHA512 (aliyun-python-sdk-core-2.13.30.tar.gz) = fd099305bca978b683f3fcd020da2ae424e0f834dd734e6e27e6ce03f245bdfbb9ecfe9b6631b80c85fea9f74fa71efa86bf39bac2aed9031eb10e7d013b42ce +SHA512 (aliyun_python_sdk_ecs-4.23.9-py2.py3-none-any.whl) = 79469c4b4ce33964da5748d80fa2e218a13e44c05615ab966333d1f54954fd2e7f0bf64bb0ee3b9e2a4dc86bde6011f533de61da2cee64f7e8119c1a9a982c05 +SHA512 (cffi-1.14.4-cp39-cp39-manylinux1_x86_64.whl) = 5b38d1d9b5c0500f63bc8b1648c4e7901f4b14218d9a5c7faef8ca833b640084afacb665504c2bfbf9e15645685bfa2f469aab88539ef032354c31f747563694 +SHA512 (cryptography-3.2.1-cp35-abi3-manylinux2010_x86_64.whl) = e7cff2e9e0183163ffefeafe108ad2dea4f308e691c9b38a09a3b2ade99a2f64de5c9203f77eb528bc8336777ac282548b866396f330280f0633db59f8db87ae +SHA512 (jmespath-0.10.0-py2.py3-none-any.whl) = c4ef69cbdac0e6ff8fe1b4a604ebd7abd16e6021cea4b8b6c69917433939a60632462cecf6164a00fd585cb2ca4ddbfb3f871286ab48dd4aa37a11d002612b65 +SHA512 (pycparser-2.20-py2.py3-none-any.whl) = 06dc9cefdcde6b97c96d0452a77db42a629c48ee545edd7ab241763e50e3b3c56d21f9fcce4e206817aa1a597763d948a10ccc73572490d739c89eea7fede0a1 +SHA512 (six-1.15.0-py2.py3-none-any.whl) = 0416d59434623604de755601c919722c2b800042612a2a7b221ecd3ccf556aca3a78f0f926fd640032a3d74d153457628a89c25065dfcdbb96892d5bf7279904 +SHA512 (boto3-1.17.5-py2.py3-none-any.whl) = cfdf92ded65bb98bdd06544374c8e0bedd6df3d9a28e6ea43e0ec119f6f132b8baa808e705434df06befb51ec1078f1db5026fa821fa7cb3216bec7bc7ba32aa +SHA512 (botocore-1.20.5-py2.py3-none-any.whl) = 3bb65305435be9d5b4c69927e7ad17b577b1a04d483f5cb4b9f7b888109681887c1313261157a5feb615d84e0bbd8af0aeffb2878c34363ab4a5bf42479e18ef +SHA512 (python_dateutil-2.8.1-py2.py3-none-any.whl) = ff083825ef3c8a3c6887ceae79a4249b938f529b72d0b931b1e30c81856ec7c8ee0adf0e29e2a41d3c76ab4e1faabc1c4161fe977d14589d346a658e343aa122 +SHA512 (s3transfer-0.3.4-py2.py3-none-any.whl) = a6040e816789e9c57683cd4870c0c7942b036abb9565dd9140456a57818170f066fbb5f642a9a03828776e02de722aa7a891e9f1c502df482fcba9377b2c8cd0 +SHA512 (urllib3-1.26.3-py2.py3-none-any.whl) = f099de13c42d19acf014ba6ba4bf099b8b3e66d5ce523d7516740093ebb69ff93f78aead1ee99310dab23747fee1fd9306c634af3f52bf64c0f830dd51b2d9e6 +SHA512 (adal-1.2.6-py2.py3-none-any.whl) = f0559a475f854f04712cace23a168d43ec1baf0167a0c021160044d08d7d808c3455e68fbfd37ea7f04428d3b9c60a9e3e88da2ceedda09e533821f9a0c3a6e0 +SHA512 (azure_common-1.1.26-py2.py3-none-any.whl) = 9e61a6db9d4e62c373345d17613d288bdfcbaacb65322b677a729cc2f7bd86b60b03d2733e2604b7ad1c989395c24e33f05ba16db9815781666f285ed32e9942 +SHA512 (azure_core-1.11.0-py2.py3-none-any.whl) = 7f33124e0fddb0039e169a0617e6b55956c2f40febf7acc331d7625772d4651f69b16654f6239d598c4c46f7c05bdd88b31dff8a91b8bf471bfcb54128b82696 +SHA512 (azure_mgmt_compute-18.2.0-py2.py3-none-any.whl) = bb0ae742d888c80210b33a8dd8a79792aa71c293d2debc4f013322a19d23d07e6a32e4c48e58718cb5eda329c7fbecf3548331491cbf588f327269f2024248f1 +SHA512 (azure_mgmt_core-1.2.2-py2.py3-none-any.whl) = ea0b4062314de37d048cf6d9e40757372e050291a8861719dda2f1446c2e9a932050d0c0f732a8afb182993b7f700b5d6053217801199a4257b6269f5c7e47e5 +SHA512 (azure_mgmt_network-17.1.0-py2.py3-none-any.whl) = c7764faebe1bed870deb7ac13f0fd1d800d3037099561cfdb4a024843f5a2047a68ffab176fde52fbd4d003aa86a197b356afc7a2049d8d2c8e7911a1f524212 +SHA512 (certifi-2020.12.5-py2.py3-none-any.whl) = a0f753977d0e9e6c7eb4670eefafaffbbf2f44f22799eaffb45ffa458003b8d27b400254935a778e1daff769009f41b8686658e876b142376db54a0a14b59010 +SHA512 (chardet-4.0.0-py2.py3-none-any.whl) = cc8cdd5e73b4eace0131bbeaf6099e322ba5c2f827f26ad3316c674c60529d77f39f68d9fb83199ab78d16902021ab1ae58d74ab62d770cf95ceb804b9242e90 +SHA512 (cryptography-3.4.4-cp36-abi3-manylinux2014_x86_64.whl) = 52023cfb884c1cace8eb1b20f94567a08d069e3ed8e436a55729df767df14796f38c99a793d49bb94fcc6ce6d289acc7f8265ba2a84fff2f9880c5c5d459cf3a +SHA512 (idna-2.10-py2.py3-none-any.whl) = 7b7be129e1a99288aa74a15971377cb17bee1618843c03c8f782e287d0f3ecf3b8f26e3ea736444eb358f1d6079131a7eb291446f3279874eb8e00b624d9471c +SHA512 (isodate-0.6.0-py2.py3-none-any.whl) = 6d39a350ff4af87c74ae3226e6627f9c254205bfd2a761a5bf956883667bbe6d4678e1830b629c899a6f0fe67a9603cb4890c5a1fa6c8d245fe4fdbddddde870 +SHA512 (msrest-0.6.21-py2.py3-none-any.whl) = 331070553409fb006726d90667822951188712a2671fd00b5304e12341db0a5c529660b630b5ad2584214ee48ae32a0a2ffbfe43ede3d0639ee176bac0f4c15b +SHA512 (msrestazure-0.6.4-py2.py3-none-any.whl) = aa4329e3a6ba639d0061c1eb0712b9d474d49ca9d7c8d41f02e44089c9efa3bf37075d52942841c3431b3afead51b9bc73193b087f4fd6672131d8e3b6c9cb86 +SHA512 (oauthlib-3.1.0-py2.py3-none-any.whl) = 6506ce8024c6c7c3f009378f994c1946d937e4f3d3d3b3480207782a04326f7d19d25e3174c030fe1c36fff3c6a61d86eceafbf86d262dc2374cf89181c01ca9 +SHA512 (PyJWT-2.0.1-py3-none-any.whl) = 76b1766ea31768168deb95fab93c7adf086f8df6265ada4ca548bacad6ef10dfb4ca34e21573f181f2d356965b9813756acfd6439eec57313b89250eaa26225d +SHA512 (requests-2.25.1-py2.py3-none-any.whl) = cc0afada76d46295c685ac060d15a1ccb9af671522cb7b4fa0ad11988853715d1b7c31d42fa1e72a576cbd775db174da5bc03ab25c1e31c234c37740a63a6bcf +SHA512 (requests_oauthlib-1.3.0-py2.py3-none-any.whl) = 17d5e66d174e57ef1dae451a20bce215a3cc3d7ab1a5b922d4a66cb49b497c9a0799bd90b5a378648335daee7cf80f843f065d90410bfa791f989f76300a02d7 +SHA512 (cachetools-4.2.1-py3-none-any.whl) = d86a81a934e01a3b490c8fd5d5c7330dfc5857a26fd3d6743213128d9df8c20ab82c22a171bd7527c0e552d3dbd09c4f33b98eb8c718a2f705b18182476aa4ec +SHA512 (chardet-3.0.4-py2.py3-none-any.whl) = bfae58c8ea19c87cc9c9bf3d0b6146bfdb3630346bd954fe8e9f7da1f09da1fc0d6943ff04802798a665ea3b610ee2d65658ce84fe5a89f9e93625ea396a17f4 +SHA512 (google_api_core-1.26.0-py2.py3-none-any.whl) = ee6cb98695ccac771f1aff7035a34d206b8f62d3322aa465ebf1b494466a661ce6fd42b74ec1501675c7e2ed18c0c76647e8637e198c98324aaccf078031a253 +SHA512 (google_api_python_client-1.12.8-py2.py3-none-any.whl) = 59bb36abda556192f972943eb8a620779fb4315ff61b0492a6e8808b29cc433726a2550b20364cc560507061fde2971a2174dc1d3fe41f1b2d117a9f020e2ae8 +SHA512 (googleapis_common_protos-1.52.0-py2.py3-none-any.whl) = e304c46c7bc2279fc7499a1e591c79a3085f53cf20210e6b0f82e387cf0c25e461ccc86148a1c48325ebea49ea10889dff28f3f6100a55f2ef96273085cad2a7 +SHA512 (google_auth-1.26.0-py2.py3-none-any.whl) = 99b3ff59c0fa4affbba798f3129bf3b3aa3f83aece53a8ee753bcf8e882d03fbeb2ff219a948bd168622dbff55978938657e872be6d4930b944910e9bea1e1d8 +SHA512 (google_auth_httplib2-0.0.4-py2.py3-none-any.whl) = b63090447df1f6f90abe28e1d14ea7cf6e0904121951203f7736f7506cd7373fc858df2ab20a995d19b5fb07253311c5097fc0a1f36d9129020722226303714f +SHA512 (httplib2-0.19.0-py3-none-any.whl) = 82286fdc91e7be835ef7fcbd2cf9a6a891248e97327e295692555e4a0b82b7c4c0b795e9c78021a9f0957c387746efe71f8ca5e9ae455c379ea224284d5347db +SHA512 (packaging-20.9-py2.py3-none-any.whl) = 6a4f69737814acbf43a3d0644d8dbbe4446075c7dfd1ec4d36ad73af9d5f2a4a5bd5a8d8f19e31d4ef63a1617dd3e0554812803bdcaf81888925267a16969b0b +SHA512 (protobuf-3.14.0-py2.py3-none-any.whl) = 0f0e3818ca8dcd390ee9605dfa0ab91876184411c8d120fa799c38b4cf1a7ce453864c5571a23d6004142a56ed17d03776891582aa316c4417051ed91b0a0ceb +SHA512 (pyasn1-0.4.8-py2.py3-none-any.whl) = ab0ccbe261323925ca46a4f4e0e674f730f8b93f6db87b6bf94e26f2e190c3e9afd2ea6ede0d99b100eda282e54c03d87c3357bf3bdfa399469d56a92e2aabbb +SHA512 (pyasn1_modules-0.2.8-py2.py3-none-any.whl) = 8248686f74d000f29c9a5a2dfd14883d44a276286caf7c34c100ea9660e5f644765452fb62c88c534093ea330d5e3d9389fa6398477231e2d1b6331b98861a62 +SHA512 (pyparsing-2.4.7-py2.py3-none-any.whl) = acb6b4ff90254d73804621d302926deb69bc99ffde16d7aa16cba7d0af7a53c25b7197d422309d9e82a766704fd7ea4c8b078a48d2e7d8658a8b237266fe24f5 +SHA512 (pyroute2-0.5.14.tar.gz) = 081152662fa12398876e0b4a886cc7f79a9e664c8c4c256b6079251c046808c538c0e0b7c1717e04067c8827be0705ade1c2320fb51434d5d50df21f579f3186 +SHA512 (pytz-2021.1-py2.py3-none-any.whl) = 7ef08f53204664d6426bcb77e6f74bad8263d0f96128254aa41a752eaa9a0d1c9dac64134f5fd40c36a7385cfb453ec95ae7f714ba88993de000c34c32835619 +SHA512 (rsa-4.7-py3-none-any.whl) = ad0734a3ae9cc1527a5fca5aa6ee7964539a36aaf1509bc768508d7ee27c256bff235210b93c27c8037abf21605ebd1caa6ae660c97a889149fa3da409a68fd4 +SHA512 (setuptools-53.0.0-py3-none-any.whl) = 11ae9c0afbaa5224e9ad2b6a342948a9f306df8d52f277e6e7d6557e6af774604bd37340bf1316356db729724d04667569b54748ff1091da3cb3ac9ea49739d6 +SHA512 (uritemplate-3.0.1-py2.py3-none-any.whl) = 0d4cfc2eb14b73f17ef9d82a08d9bc7fbc8a1efd1e51693e20c51c01812e7597ebe964904f79fd86e21d06bd690abfdf9bd2824e8f957dd8a9486e3b860d58d0 diff --git a/update-ha-cloud.sh b/update-ha-cloud.sh new file mode 100755 index 0000000..cc173e8 --- /dev/null +++ b/update-ha-cloud.sh @@ -0,0 +1,24 @@ +#!/bin/sh +export PYTHON_KEYRING_BACKEND="keyring.backends.null.Keyring" + +rm -f *.whl aliyun*.tar.gz boto3-*.tar.gz gcloud-*.tar.gz pycrypto-*.tar.gz pyroute2-*.tar.gz +sed -i -n -E '/\(fence-agents-/p' sources +sha512sum --tag requirements-*.txt >> sources + +for x in aliyun aws azure google; do +echo "# $x" >> sources + pip download -r requirements-$x.txt | awk '/Saved/{gsub("./", "", $2); print $2}' | sort | xargs sha512sum --tag >> sources +done + +awk 'NR<6{next} /^# /{print}; /^[^#]/{gsub("[()]", "", $2); printf "Source%d: %s\n", 1000+c++, $2}' sources + +sed -i '/^#/d' sources + +if ! git diff --quiet sources; then + cat << EOF + +Upload new sources by running: +awk '/^[^#]/{gsub("[()]", "", \$2); printf "%s ", \$2}' sources | xargs rhpkg new-sources + +EOF +fi