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 00e0c53..9446ea7 100644 --- a/fence-agents.spec +++ b/fence-agents.spec @@ -9,42 +9,112 @@ Name: fence-agents Summary: Set of unified programs capable of host isolation ("fencing") Version: 4.7.1 -Release: 3%{?alphatag:.%{alphatag}}%{?dist} +Release: 4%{?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.5-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: awscli-1.19.8.tar.gz +Source1008: boto3-1.17.8-py2.py3-none-any.whl +Source1009: botocore-1.20.8-py2.py3-none-any.whl +Source1010: colorama-0.4.3-py2.py3-none-any.whl +Source1011: docutils-0.15.2-py3-none-any.whl +Source1012: pyasn1-0.4.8-py2.py3-none-any.whl +Source1013: python_dateutil-2.8.1-py2.py3-none-any.whl +Source1014: PyYAML-5.3.1.tar.gz +Source1015: rsa-4.5-py2.py3-none-any.whl +Source1016: s3transfer-0.3.4-py2.py3-none-any.whl +Source1017: urllib3-1.26.3-py2.py3-none-any.whl +# azure +Source1018: adal-1.2.6-py2.py3-none-any.whl +Source1019: azure_common-1.1.26-py2.py3-none-any.whl +Source1020: azure_core-1.11.0-py2.py3-none-any.whl +Source1021: azure_mgmt_compute-18.2.0-py2.py3-none-any.whl +Source1022: azure_mgmt_core-1.2.2-py2.py3-none-any.whl +Source1023: azure_mgmt_network-17.1.0-py2.py3-none-any.whl +Source1024: certifi-2020.12.5-py2.py3-none-any.whl +Source1025: chardet-4.0.0-py2.py3-none-any.whl +Source1026: cryptography-3.4.5-cp36-abi3-manylinux2014_x86_64.whl +Source1027: idna-2.10-py2.py3-none-any.whl +Source1028: isodate-0.6.0-py2.py3-none-any.whl +Source1029: msrest-0.6.21-py2.py3-none-any.whl +Source1030: msrestazure-0.6.4-py2.py3-none-any.whl +Source1031: oauthlib-3.1.0-py2.py3-none-any.whl +Source1032: PyJWT-2.0.1-py3-none-any.whl +Source1033: requests-2.25.1-py2.py3-none-any.whl +Source1034: requests_oauthlib-1.3.0-py2.py3-none-any.whl +# google +Source1035: cachetools-4.2.1-py3-none-any.whl +Source1036: chardet-3.0.4-py2.py3-none-any.whl +Source1037: google_api_core-1.26.0-py2.py3-none-any.whl +Source1038: google_api_python_client-1.12.8-py2.py3-none-any.whl +Source1039: googleapis_common_protos-1.52.0-py2.py3-none-any.whl +Source1040: google_auth-1.26.1-py2.py3-none-any.whl +Source1041: google_auth_httplib2-0.0.4-py2.py3-none-any.whl +Source1042: httplib2-0.19.0-py3-none-any.whl +Source1043: packaging-20.9-py2.py3-none-any.whl +Source1044: protobuf-3.14.0-py2.py3-none-any.whl +Source1045: pyasn1_modules-0.2.8-py2.py3-none-any.whl +Source1046: pyparsing-2.4.7-py2.py3-none-any.whl +Source1047: pyroute2-0.5.14.tar.gz +Source1048: pytz-2021.1-py2.py3-none-any.whl +Source1049: rsa-4.7.1-py3-none-any.whl +Source1050: setuptools-53.0.0-py3-none-any.whl +Source1051: 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,20 +178,36 @@ BuildRequires: python-novaclient python-keystoneclient #undefine __brp_python_bytecompile %prep -%autosetup -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 + +sed -i -e "/^import awscli.clidriver/isys.path.insert(0, '/usr/lib/%{name}/support/aws')" support/aws/bin/aws +%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 @@ -202,11 +258,33 @@ This package contains support files including the Python fencing library. %{_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 +### ADD PROVIDES ### +%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 @@ -219,10 +297,11 @@ This package serves as a catch-all for all supported fence agents. %ifarch x86_64 %package aliyun -License: GPLv2+ and LGPLv2+ and ASL 2.0 and BSD and MIT +License: GPLv2+ and LGPLv2+ 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 @@ -233,38 +312,6 @@ The fence-agents-aliyun package contains a fence agent for Alibaba Cloud (Aliyun %{_mandir}/man8/fence_aliyun.8* %endif -%package alom -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 -%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 Summary: Fence agent for Intel AMT (WS-Man) devices @@ -319,16 +366,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 @@ -338,15 +381,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 @@ -358,6 +398,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+ @@ -450,35 +491,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 @@ -536,21 +548,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 @@ -560,18 +563,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 @@ -618,23 +609,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 @@ -770,19 +744,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 @@ -796,25 +757,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 @@ -848,101 +790,6 @@ Device Mapper Multipath. %{_datadir}/cluster/fence_mpath_check* %{_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 @@ -1012,18 +859,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) @@ -1050,18 +885,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+ @@ -1075,22 +898,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 @@ -1119,18 +926,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 @@ -1151,26 +946,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 @@ -1181,8 +957,12 @@ Fence agent for IBM z/VM over IP. %files zvm %{_sbindir}/fence_zvmip %{_mandir}/man8/fence_zvmip.8* +%endif %changelog +* Mon Feb 15 2021 Oyvind Albrigtsen - 4.7.1-4 +- create HA cloud support package + * Thu Feb 11 2021 Oyvind Albrigtsen - 4.7.1-3 - add aliyun subpackage - fence-agents-mpath: add missing fence_mpath_check* @@ -1190,9 +970,6 @@ Fence agent for IBM z/VM over IP. * 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..61c94ad 100644 --- a/sources +++ b/sources @@ -1 +1,57 @@ SHA512 (fence-agents-4.7.1.tar.gz) = 9973d80fa9545f44d0202e6841eeadaf9facdaca2a4a67827369b5fe63a58bc830a5fb91dc94c5a90dc1f8cf4a07198fd52eb46f3974b4730f69013154493527 +SHA512 (requirements-aliyun.txt) = 0c4f89de63246c406535ee73310232f3986b37dedbeed52f25000386d73af6735e1bf8e7ecaa97419df98f55058d76e4ff289d856b815afaaaf69744c5924f7e +SHA512 (requirements-aws.txt) = 3fccf8c386dd21dcb738f89020dd728e76dee347accfdf7bef5b7493d22ac1090340f76187f19a6822777fe939ffc50f1ec84c1dbe328be5d435d5ad56714a99 +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.5-cp39-cp39-manylinux1_x86_64.whl) = 3c73e06bef8e9646beacc584d59ecf42de013034194d6eb59f1abf279e8fe5468e106fcd47802ce1d264d3c1d9122af3c66ea1229db78a768f7ea069ddc2fd72 +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 (awscli-1.19.8.tar.gz) = f8524451cf673c0f7be615b1c66496f5cbb61311d70a14c992c1c4b363197646f198b47fc71c68e8a27d76f43c9a2d56f0619bdb88309299b6e600f05bccc487 +SHA512 (boto3-1.17.8-py2.py3-none-any.whl) = 262aefcadc262e6eda3f34a853f13cfb9b5f77a1f5679c0cf52263072ea96e433087bb4467422615289e62d15d5d5ba265bd168d08f9e563a4a7f8d015ce091b +SHA512 (botocore-1.20.8-py2.py3-none-any.whl) = 4871a165f11196a9e38e6d6910f3242bcde3c3162713cb8b2b440da79052989e2aa5f6ea089af0315f63291b62b9ed9a1ea366cb376860b132bbf250ebe1f93b +SHA512 (colorama-0.4.3-py2.py3-none-any.whl) = 7cb2e248fbda31049e23431a921c71d3ecca650011ba25290ce0bfabb616faa0f0185e49deda10a9a358d3b9355392864b51ef764a4020c33d0980af97a33024 +SHA512 (docutils-0.15.2-py3-none-any.whl) = d9680d716663c8a64e7d8f7b4709974f780600d025d76d9b74363ed42d4935346f642a820a5c3ee9507b047956bc1304816835d750b65ca1dde8f6e3180e1f5b +SHA512 (pyasn1-0.4.8-py2.py3-none-any.whl) = ab0ccbe261323925ca46a4f4e0e674f730f8b93f6db87b6bf94e26f2e190c3e9afd2ea6ede0d99b100eda282e54c03d87c3357bf3bdfa399469d56a92e2aabbb +SHA512 (python_dateutil-2.8.1-py2.py3-none-any.whl) = ff083825ef3c8a3c6887ceae79a4249b938f529b72d0b931b1e30c81856ec7c8ee0adf0e29e2a41d3c76ab4e1faabc1c4161fe977d14589d346a658e343aa122 +SHA512 (PyYAML-5.3.1.tar.gz) = 87372877d396bd06cdb6b9052ef8822ef0589a211659bf27d7a1c4deca8429cb39e120a23e5d590d7adc0f8059ce1c8af42409bebd7c6d504d49dc8504d5683a +SHA512 (rsa-4.5-py2.py3-none-any.whl) = 9316c9cbf195594ab5b37808051954b5614c5e3de3585d2af9cb328d149a55daf31494c53e5e35d075a717002218fbf80a0bd67ab00a40a1f1847a5a0356fcf8 +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.5-cp36-abi3-manylinux2014_x86_64.whl) = 2be77f54a9f715db125a97d75998cb7fdde9368f162e603fb19d1903fc515b58998f7e9687319cf77a64b3ce0716f27c0a6927747e6ce00de3a1f8d2e18b9159 +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.1-py2.py3-none-any.whl) = 6ad87abb4c5e3034c209b8b251f7db8a365ca63c2aa379a2e015463d504b45a30c88b1a958fec48a23d2390678b6b29be4ae0cf621981b7f6296c945d9aa4d5a +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_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.1-py3-none-any.whl) = 1cda6ea5df1d085b1646131fc47f51458df539ac02e2cf51024415285fa35420c2b2605b2b3a4d4d3990a79ec4106c03dbdd97694937bb269668e4762aa3fb41 +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..466626a --- /dev/null +++ b/update-ha-cloud.sh @@ -0,0 +1,24 @@ +#!/bin/sh +export PYTHON_KEYRING_BACKEND="keyring.backends.null.Keyring" + +find -maxdepth 1 -not -name "fence-agents-*.tar.gz" -and \( -name "*.whl" -or -name "*.tar.?z*" \) -delete +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