- fence_kubevirt: new fence agent
Resolves: rhbz#2000954
This commit is contained in:
parent
69ddab129d
commit
984972b246
24
bz2000954-1-configure-fix-virt.patch
Normal file
24
bz2000954-1-configure-fix-virt.patch
Normal file
@ -0,0 +1,24 @@
|
||||
From 52de83b30a8eea638b01f649f4884f50417121c0 Mon Sep 17 00:00:00 2001
|
||||
From: Oyvind Albrigtsen <oalbrigt@redhat.com>
|
||||
Date: Mon, 8 Nov 2021 09:55:11 +0100
|
||||
Subject: [PATCH] configure: fix --with-agents to not match *virt in regex
|
||||
|
||||
---
|
||||
configure.ac | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/configure.ac b/configure.ac
|
||||
index 7aa51e75d..76aec7186 100644
|
||||
--- a/configure.ac
|
||||
+++ b/configure.ac
|
||||
@@ -173,8 +173,8 @@ if echo "$AGENTS_LIST" | grep -q -E "all|zvm( |$)"; then
|
||||
fi
|
||||
|
||||
FENCE_VIRT=0
|
||||
-if echo "$AGENTS_LIST" | grep -q -E "all|virt( |$)"; then
|
||||
- AGENTS_LIST=$(echo "$AGENTS_LIST" | sed -E "s/virt( |$)//")
|
||||
+if echo "$AGENTS_LIST" | grep -q -E "all|(^| )virt( |$)"; then
|
||||
+ AGENTS_LIST=$(echo "$AGENTS_LIST" | sed -E "s/(^| )virt( |$)//")
|
||||
case "$host_os" in
|
||||
*bsd*)
|
||||
;;
|
160
bz2000954-2-fence_kubevirt.patch
Normal file
160
bz2000954-2-fence_kubevirt.patch
Normal file
@ -0,0 +1,160 @@
|
||||
--- fence-agents-4.10.0/agents/kubevirt/fence_kubevirt.py 2021-07-08 13:09:05.000000000 +0200
|
||||
+++ /home/oalbrigt/rhpkg/fence-agents-8.6/fence-agents-4.2.1/agents/kubevirt/fence_kubevirt.py 2021-11-02 15:35:46.217440426 +0100
|
||||
@@ -2,24 +2,25 @@
|
||||
|
||||
import sys
|
||||
import logging
|
||||
+import atexit
|
||||
sys.path.append("@FENCEAGENTSLIBDIR@")
|
||||
from fencing import *
|
||||
-from fencing import fail, fail_usage, run_delay, EC_STATUS
|
||||
+from fencing import fail, fail_usage, run_delay, EC_STATUS, EC_FETCH_VM_UUID
|
||||
|
||||
try:
|
||||
+ sys.path.insert(0, '/usr/lib/fence-agents/bundled/kubevirt')
|
||||
from kubernetes.client.exceptions import ApiException
|
||||
except ImportError:
|
||||
logging.error("Couldn\'t import kubernetes.client.exceptions.ApiException - not found or not accessible")
|
||||
|
||||
-API_VERSION='kubevirt.io/v1'
|
||||
-
|
||||
def get_nodes_list(conn, options):
|
||||
logging.debug("Starting list/monitor operation")
|
||||
result = {}
|
||||
try:
|
||||
+ apiversion = options.get("--apiversion")
|
||||
namespace = options.get("--namespace")
|
||||
include_uninitialized = True
|
||||
- vm_api = conn.resources.get(api_version=API_VERSION, kind='VirtualMachine')
|
||||
+ vm_api = conn.resources.get(api_version=apiversion, kind='VirtualMachine')
|
||||
vm_list = vm_api.get(namespace=namespace)
|
||||
for vm in vm_list.items:
|
||||
result[vm.metadata.name] = ("", None)
|
||||
@@ -30,18 +31,21 @@
|
||||
def get_power_status(conn, options):
|
||||
logging.debug("Starting get status operation")
|
||||
try:
|
||||
+ apiversion = options.get("--apiversion")
|
||||
namespace = options.get("--namespace")
|
||||
name = options.get("--plug")
|
||||
- vmi_api = conn.resources.get(api_version=API_VERSION,
|
||||
+ vmi_api = conn.resources.get(api_version=apiversion,
|
||||
kind='VirtualMachineInstance')
|
||||
vmi = vmi_api.get(name=name, namespace=namespace)
|
||||
- if vmi is not None:
|
||||
- phase = vmi.status.phase
|
||||
- if phase == "Running":
|
||||
- return "on"
|
||||
- return "off"
|
||||
+ return translate_status(vmi.status.phase)
|
||||
except ApiException as e:
|
||||
if e.status == 404:
|
||||
+ try:
|
||||
+ vm_api = conn.resources.get(api_version=apiversion, kind='VirtualMachine')
|
||||
+ vm = vm_api.get(name=name, namespace=namespace)
|
||||
+ except ApiException as e:
|
||||
+ logging.error("VM %s doesn't exist", name)
|
||||
+ fail(EC_FETCH_VM_UUID)
|
||||
return "off"
|
||||
logging.error("Failed to get power status, with API Exception: %s", e)
|
||||
fail(EC_STATUS)
|
||||
@@ -49,38 +53,53 @@
|
||||
logging.error("Failed to get power status, with Exception: %s", e)
|
||||
fail(EC_STATUS)
|
||||
|
||||
+def translate_status(instance_status):
|
||||
+ if instance_status == "Running":
|
||||
+ return "on"
|
||||
+ return "unknown"
|
||||
+
|
||||
def set_power_status(conn, options):
|
||||
logging.debug("Starting set status operation")
|
||||
try:
|
||||
+ apiversion= options.get("--apiversion")
|
||||
namespace = options.get("--namespace")
|
||||
name = options.get("--plug")
|
||||
action = 'start' if options["--action"] == "on" else 'stop'
|
||||
- virtctl_vm_action(conn, action, namespace, name)
|
||||
+ virtctl_vm_action(conn, action, namespace, name, apiversion)
|
||||
except Exception as e:
|
||||
logging.error("Failed to set power status, with Exception: %s", e)
|
||||
fail(EC_STATUS)
|
||||
|
||||
def define_new_opts():
|
||||
- all_opt["namespace"] = {
|
||||
- "getopt" : ":",
|
||||
- "longopt" : "namespace",
|
||||
- "help" : "--namespace=[namespace] Namespace of the KubeVirt machine",
|
||||
- "shortdesc" : "Namespace of the KubeVirt machine.",
|
||||
- "required" : "1",
|
||||
- "order" : 2
|
||||
- }
|
||||
- all_opt["kubeconfig"] = {
|
||||
- "getopt" : ":",
|
||||
- "longopt" : "kubeconfig",
|
||||
- "help" : "--kubeconfig=[kubeconfig] Kubeconfig file path",
|
||||
- "shortdesc": "Kubeconfig file path",
|
||||
- "required": "0",
|
||||
- "order": 4
|
||||
- }
|
||||
+ all_opt["namespace"] = {
|
||||
+ "getopt" : ":",
|
||||
+ "longopt" : "namespace",
|
||||
+ "help" : "--namespace=[namespace] Namespace of the KubeVirt machine",
|
||||
+ "shortdesc" : "Namespace of the KubeVirt machine.",
|
||||
+ "required" : "1",
|
||||
+ "order" : 2
|
||||
+ }
|
||||
+ all_opt["kubeconfig"] = {
|
||||
+ "getopt" : ":",
|
||||
+ "longopt" : "kubeconfig",
|
||||
+ "help" : "--kubeconfig=[kubeconfig] Kubeconfig file path",
|
||||
+ "shortdesc": "Kubeconfig file path",
|
||||
+ "required": "0",
|
||||
+ "order": 4
|
||||
+ }
|
||||
+ all_opt["apiversion"] = {
|
||||
+ "getopt" : ":",
|
||||
+ "longopt" : "apiversion",
|
||||
+ "help" : "--apiversion=[apiversion] Version of the KubeVirt API",
|
||||
+ "shortdesc" : "Version of the KubeVirt API.",
|
||||
+ "required" : "0",
|
||||
+ "default" : "kubevirt.io/v1",
|
||||
+ "order" : 5
|
||||
+ }
|
||||
|
||||
-def virtctl_vm_action(conn, action, namespace, name):
|
||||
+def virtctl_vm_action(conn, action, namespace, name, apiversion):
|
||||
path = '/apis/subresources.{api_version}/namespaces/{namespace}/virtualmachines/{name}/{action}'
|
||||
- path = path.format(api_version=API_VERSION, namespace=namespace, name=name, action=action)
|
||||
+ path = path.format(api_version=apiversion, namespace=namespace, name=name, action=action)
|
||||
return conn.request('put', path, header_params={'accept': '*/*'})
|
||||
|
||||
def validate_options(required_options_list, options):
|
||||
@@ -92,8 +111,13 @@
|
||||
def main():
|
||||
conn = None
|
||||
|
||||
- device_opt = ["port", "namespace", "kubeconfig", "separator", "no_password"]
|
||||
+ device_opt = ["port", "namespace", "kubeconfig", "ssl_insecure", "no_password", "apiversion"]
|
||||
+
|
||||
+ atexit.register(atexit_handler)
|
||||
define_new_opts()
|
||||
+
|
||||
+ all_opt["power_timeout"]["default"] = "40"
|
||||
+
|
||||
options = check_input(device_opt, process_input(device_opt))
|
||||
|
||||
docs = {}
|
||||
@@ -106,6 +130,11 @@
|
||||
|
||||
validate_options(['--namespace'], options)
|
||||
|
||||
+ # Disable insecure-certificate-warning message
|
||||
+ if "--ssl-insecure" in options:
|
||||
+ import urllib3
|
||||
+ urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
|
||||
+
|
||||
try:
|
||||
from kubernetes import config
|
||||
from openshift.dynamic import DynamicClient
|
@ -6,10 +6,60 @@
|
||||
# keep around ready for later user
|
||||
## global alphatag git0a6184070
|
||||
|
||||
# bundles
|
||||
%global bundled_lib_dir bundled
|
||||
# kubevirt
|
||||
%global openshift openshift
|
||||
%global openshift_version 0.12.1
|
||||
%global ruamelyamlclib ruamel.yaml.clib
|
||||
%global ruamelyamlclib_version 0.2.6
|
||||
%global kubernetes kubernetes
|
||||
%global kubernetes_version 12.0.1
|
||||
%global certifi certifi
|
||||
%global certifi_version 2021.10.8
|
||||
%global googleauth google-auth
|
||||
%global googleauth_version 2.3.0
|
||||
%global cachetools cachetools
|
||||
%global cachetools_version 4.2.4
|
||||
%global pyasn1modules pyasn1-modules
|
||||
%global pyasn1modules_version 0.2.8
|
||||
%global pyasn1 pyasn1
|
||||
%global pyasn1_version 0.4.8
|
||||
%global dateutil dateutil
|
||||
%global dateutil_version 2.8.2
|
||||
%global pyyaml PyYAML
|
||||
%global pyyaml_version 6.0
|
||||
%global six six
|
||||
%global six_version 1.16.0
|
||||
%global urllib3 urllib3
|
||||
%global urllib3_version 1.26.7
|
||||
%global websocketclient websocket-client
|
||||
%global websocketclient_version 1.2.1
|
||||
%global jinja2 Jinja2
|
||||
%global jinja2_version 3.0.2
|
||||
%global markupsafe MarkupSafe
|
||||
%global markupsafe_version 2.0.1
|
||||
%global stringutils string-utils
|
||||
%global stringutils_version 1.0.0
|
||||
%global requests requests
|
||||
%global requests_version 2.26.0
|
||||
%global chrstnormalizer charset-normalizer
|
||||
%global chrstnormalizer_version 2.0.7
|
||||
%global idna idna
|
||||
%global idna_version 3.3
|
||||
%global reqstsoauthlib requests-oauthlib
|
||||
%global reqstsoauthlib_version 1.3.0
|
||||
%global oauthlib oauthlib
|
||||
%global oauthlib_version 3.1.1
|
||||
%global ruamelyaml ruamel.yaml
|
||||
%global ruamelyaml_version 0.17.16
|
||||
%global setuptools setuptools
|
||||
%global setuptools_version 58.3.0
|
||||
|
||||
Name: fence-agents
|
||||
Summary: Set of unified programs capable of host isolation ("fencing")
|
||||
Version: 4.10.0
|
||||
Release: 10%{?alphatag:.%{alphatag}}%{?dist}
|
||||
Release: 11%{?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
|
||||
@ -126,6 +176,42 @@ Source1088: pexpect-4.8.0-py2.py3-none-any.whl
|
||||
Source1089: ptyprocess-0.7.0-py2.py3-none-any.whl
|
||||
Source1090: suds_community-0.8.5-py3-none-any.whl
|
||||
### END ###
|
||||
# kubevirt
|
||||
## pip download --no-binary :all: openshift "ruamel.yaml.clib>=0.1.2"
|
||||
### BEGIN
|
||||
Source1091: %{openshift}-%{openshift_version}.tar.gz
|
||||
Source1092: %{ruamelyamlclib}-%{ruamelyamlclib_version}.tar.gz
|
||||
Source1093: %{kubernetes}-%{kubernetes_version}.tar.gz
|
||||
Source1094: %{certifi}-%{certifi_version}.tar.gz
|
||||
Source1095: %{googleauth}-%{googleauth_version}.tar.gz
|
||||
Source1096: %{cachetools}-%{cachetools_version}.tar.gz
|
||||
Source1097: %{pyasn1modules}-%{pyasn1modules_version}.tar.gz
|
||||
Source1098: %{pyasn1}-%{pyasn1_version}.tar.gz
|
||||
Source1099: python-%{dateutil}-%{dateutil_version}.tar.gz
|
||||
Source1100: %{pyyaml}-%{pyyaml_version}.tar.gz
|
||||
## rsa is dependency for "pip install",
|
||||
## but gets removed to use cryptography lib instead
|
||||
Source1101: rsa-4.7.2.tar.gz
|
||||
Source1102: %{six}-%{six_version}.tar.gz
|
||||
Source1103: %{urllib3}-%{urllib3_version}.tar.gz
|
||||
Source1104: %{websocketclient}-%{websocketclient_version}.tar.gz
|
||||
Source1105: %{jinja2}-%{jinja2_version}.tar.gz
|
||||
Source1106: %{markupsafe}-%{markupsafe_version}.tar.gz
|
||||
Source1107: python-%{stringutils}-%{stringutils_version}.tar.gz
|
||||
Source1108: %{requests}-%{requests_version}.tar.gz
|
||||
Source1109: %{chrstnormalizer}-%{chrstnormalizer_version}.tar.gz
|
||||
Source1110: %{idna}-%{idna_version}.tar.gz
|
||||
Source1111: %{reqstsoauthlib}-%{reqstsoauthlib_version}.tar.gz
|
||||
Source1112: %{oauthlib}-%{oauthlib_version}.tar.gz
|
||||
Source1113: %{ruamelyaml}-%{ruamelyaml_version}.tar.gz
|
||||
Source1114: %{setuptools}-%{setuptools_version}.tar.gz
|
||||
## required for installation
|
||||
Source1115: setuptools_scm-6.3.2.tar.gz
|
||||
Source1116: packaging-21.2-py3-none-any.whl
|
||||
Source1117: poetry-core-1.0.7.tar.gz
|
||||
Source1118: pyparsing-3.0.1.tar.gz
|
||||
Source1119: tomli-1.0.1.tar.gz
|
||||
### END
|
||||
|
||||
Patch0: ha-cloud-support-aliyun.patch
|
||||
Patch1: ha-cloud-support-aws.patch
|
||||
@ -136,8 +222,10 @@ Patch5: bundled-pexpect.patch
|
||||
Patch6: bundled-suds.patch
|
||||
Patch7: bz2010652-fence_azure_arm-fix-sovereign-cloud-msi-support.patch
|
||||
Patch8: bz2010709-fence_amt_ws-fix-or-causing-dead-code.patch
|
||||
Patch9: bz2000954-1-configure-fix-virt.patch
|
||||
Patch10: bz2000954-2-fence_kubevirt.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
|
||||
%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 kubevirt 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 openstack virt
|
||||
%endif
|
||||
@ -302,6 +390,11 @@ install -m 0644 agents/virt/fence_virtd.service %{buildroot}/%{_unitdir}/
|
||||
%endif
|
||||
# XXX unsure if /usr/sbin/fence_* should be compiled as well
|
||||
|
||||
# kubevirt
|
||||
%{__python3} -m pip install --user --no-index --find-links %{_sourcedir} setuptools-scm
|
||||
%{__python3} -m pip install --target %{buildroot}/usr/lib/fence-agents/%{bundled_lib_dir}/kubevirt --no-index --find-links %{_sourcedir} openshift
|
||||
rm -rf %{buildroot}/usr/lib/fence-agents/%{bundled_lib_dir}/kubevirt/rsa*
|
||||
|
||||
## tree fix up
|
||||
# fix libfence permissions
|
||||
chmod 0755 %{buildroot}%{_datadir}/fence/*.py
|
||||
@ -977,6 +1070,41 @@ Fence agent for use with kdump crash recovery service.
|
||||
%{_mandir}/man8/fence_kdump.8*
|
||||
%{_mandir}/man8/fence_kdump_send.8*
|
||||
|
||||
%package kubevirt
|
||||
License: GPLv2+ and LGPLv2+ and ASL 2.0 and BSD and BSD-2-Clause and BSD-3-Clause and ISC and MIT and MPL-2.0
|
||||
Summary: Fence agent for KubeVirt platform
|
||||
Requires: fence-agents-common = %{version}-%{release}
|
||||
Provides: bundled(python3-%{openshift}) = %{openshift_version}
|
||||
Provides: bundled(python3-%{ruamelyamlclib}) = %{ruamelyamlclib_version}
|
||||
Provides: bundled(python3-%{kubernetes}) = %{kubernetes_version}
|
||||
Provides: bundled(python3-%{certifi}) = %{certifi_version}
|
||||
Provides: bundled(python3-%{googleauth}) = %{googleauth_version}
|
||||
Provides: bundled(python3-%{cachetools}) = %{cachetools_version}
|
||||
Provides: bundled(python3-%{pyasn1modules}) = %{pyasn1modules_version}
|
||||
Provides: bundled(python3-%{pyasn1}) = %{pyasn1_version}
|
||||
Provides: bundled(python3-%{dateutil}) = %{dateutil_version}
|
||||
Provides: bundled(python3-%{pyyaml}) = %{pyyaml_version}
|
||||
Provides: bundled(python3-%{six}) = %{six_version}
|
||||
Provides: bundled(python3-%{urllib3}) = %{urllib3_version}
|
||||
Provides: bundled(python3-%{websocketclient}) = %{websocketclient_version}
|
||||
Provides: bundled(python3-%{jinja2}) = %{jinja2_version}
|
||||
Provides: bundled(python3-%{markupsafe}) = %{markupsafe_version}
|
||||
Provides: bundled(python3-%{stringutils}) = %{stringutils_version}
|
||||
Provides: bundled(python3-%{requests}) = %{requests_version}
|
||||
Provides: bundled(python3-%{chrstnormalizer}) = %{chrstnormalizer_version}
|
||||
Provides: bundled(python3-%{idna}) = %{idna_version}
|
||||
Provides: bundled(python3-%{reqstsoauthlib}) = %{reqstsoauthlib_version}
|
||||
Provides: bundled(python3-%{oauthlib}) = %{oauthlib_version}
|
||||
Provides: bundled(python3-%{ruamelyaml}) = %{ruamelyaml_version}
|
||||
Provides: bundled(python3-%{setuptools}) = %{setuptools_version}
|
||||
%description kubevirt
|
||||
Fence agent for KubeVirt platform.
|
||||
%files kubevirt
|
||||
%{_sbindir}/fence_kubevirt
|
||||
%{_mandir}/man8/fence_kubevirt.8*
|
||||
# bundled libraries
|
||||
/usr/lib/fence-agents/%{bundled_lib_dir}/kubevirt
|
||||
|
||||
%package lpar
|
||||
License: GPLv2+ and LGPLv2+
|
||||
Summary: Fence agent for IBM LPAR
|
||||
@ -1274,6 +1402,10 @@ are located on corosync cluster nodes.
|
||||
%endif
|
||||
|
||||
%changelog
|
||||
* Mon Nov 8 2021 Oyvind Albrigtsen <oalbrigt@redhat.com> - 4.10.0-11
|
||||
- fence_kubevirt: new fence agent
|
||||
Resolves: rhbz#2000954
|
||||
|
||||
* Tue Oct 5 2021 Oyvind Albrigtsen <oalbrigt@redhat.com> - 4.10.0-10
|
||||
- fence_azure_arm: fix sovereign cloud and MSI support
|
||||
Resolves: rhbz#2010652
|
||||
|
29
sources
29
sources
@ -99,3 +99,32 @@ SHA512 (wrapt-1.12.1.tar.gz) = efc38c0adc4fcaa34499a996ea4a337a000a812254ec7ddac
|
||||
SHA512 (pexpect-4.8.0-py2.py3-none-any.whl) = 79b3a33866f8fec11a5ccf079387b7de393cdee65167671db0ac42cf3d6c2e544c40ee344c1b5f7deb13d97057300c86f605df30fbfff9c6773944886c5158c0
|
||||
SHA512 (ptyprocess-0.7.0-py2.py3-none-any.whl) = aa6c925add18a9603f130887e2a0ec645eb5bbf6b8020c78450a7cee934454dc46d1a435068368347f851d45550ea0fda8fb2ba0864c24c41e17a58bc7a9e84f
|
||||
SHA512 (suds_community-0.8.5-py3-none-any.whl) = 0719c3c2988ff96bd8698df326fb332f85f830ef8d4bfca13c285cc0e917a6cf575f71a2b037df9270cd64edf2ea543779630f08d9d2eb77b82233ea0c5ac215
|
||||
SHA512 (openshift-0.12.1.tar.gz) = 35a0ecfbc12d657f5f79d4c752a7c023a2a5e3fc5e7b377d9f11ce4a7d5f666ca5c6296f31adb44b7680d051af42d3638ced1092fb7e9146d2cc998f2c3a7b80
|
||||
SHA512 (ruamel.yaml.clib-0.2.6.tar.gz) = 12307a3c3bae09cf65d9672894c9a869a7ed5483ca3afb9ee39d8bcbf1948b012a0dbf570e315cc8b9a8b55184de9e10324953ec4819d214379e01522ee13b20
|
||||
SHA512 (kubernetes-12.0.1.tar.gz) = ff4739dc185dbf46050e53382b9260a0a69c55b43820ccb1df498718c78d1bf42842f4ab1b6d0c3520c5edab45d9c9c9527aea9ccb0b6347f34e18202f9155a2
|
||||
SHA512 (certifi-2021.10.8.tar.gz) = 06dc41a471f16f6c52751854e82fb42011c9388651cff55761298b86ba437d431e6325ab039ef330f2b2c5f69f5ba43dc468e7ca3df205a8bb31468f43711fbe
|
||||
SHA512 (google-auth-2.3.0.tar.gz) = cf0040d238880ea4bbad64f0a47311f2ed3922a7301a0d5287319b39ea8e76dca66dc78fd860cc12386b078bd2147a1cba01de97381420ef94cc44fca0c90ad1
|
||||
SHA512 (cachetools-4.2.4.tar.gz) = 29a6bb3a064e5603cd3e3882d8e5a6a6ef95ba3029716692c9a82d7186a0befcfb8ed4a0ee3ecb591fdff93a46836d5b25acca7ba5eab1ba837e86404aea8fcf
|
||||
SHA512 (pyasn1-modules-0.2.8.tar.gz) = fdfcaa065deffdd732deaa1fa30dec2fc4a90ffe15bd12de40636ce0212f447611096d2f4e652ed786b5c47544439e6a93721fabe121f3320f13965692a1ca5b
|
||||
SHA512 (pyasn1-0.4.8.tar.gz) = e64e70b325c8067f87ace7c0673149e82fe564aa4b0fa146d29b43cb588ecd6e81b1b82803b8cfa7a17d3d0489b6d88b4af5afb3aa0052bf92e8a1769fe8f7b0
|
||||
SHA512 (python-dateutil-2.8.2.tar.gz) = 6538858e4a3e2d1de1bf25b6d8b25e3a8d20bf60fb85e32d07ac491c90ce193e268bb5641371b8a79fb0f033a184bac9896b3bc643c1aca9ee9c6478286ac20c
|
||||
SHA512 (PyYAML-6.0.tar.gz) = b402993073282e7f4202823b051d364b91929362edd5b3aebe93b56833956ec9279c1ba82b97f8bc8a2b82d20e1060e4ec9fc90400a6ed902adce3e4f83a6e0e
|
||||
SHA512 (rsa-4.7.2.tar.gz) = 63f561774dbaa10511167cba31e0f852e32b3250f2803edaa2729dc2b28baa2c42cb79dfbd49e38eb42ce82f665ed4c3d9dcc810c37380401e2c62202b1c7948
|
||||
SHA512 (six-1.16.0.tar.gz) = 076fe31c8f03b0b52ff44346759c7dc8317da0972403b84dfe5898179f55acdba6c78827e0f8a53ff20afe8b76432c6fe0d655a75c24259d9acbaa4d9e8015c0
|
||||
SHA512 (urllib3-1.26.7.tar.gz) = 6f5a5e6dd5ff99950fcc051495e0a698153b57e20b6c83d869b54c7fece9616909bcf2fe99efc40815f8722996ad93e430bf765ce5c629b912690c286014b86f
|
||||
SHA512 (websocket-client-1.2.1.tar.gz) = fdbeb7ac2add27478a17b388ac62e9378094a368f29749d8b63c274ee41836506369dddd083956f42f1f2d74948392b3ddd59b801c98f9e028c126bdb54c636b
|
||||
SHA512 (Jinja2-3.0.2.tar.gz) = cea7d24656bbc9117785886caee4eb28bc417bd7529152493ac2dd5041d798a1e30c0c5c619327817a708b1af8d08f13ae9125bbc7cb7d440045cb54d7bfbd9e
|
||||
SHA512 (MarkupSafe-2.0.1.tar.gz) = 77249bda784111ece15d59eb3de1cbb37a58fb9f22902fe6b73fea9eb0f23857ccbe53dc55463278e3b91f78dc35e2b027fd823ca50d88d8985d5a98ce2327f1
|
||||
SHA512 (python-string-utils-1.0.0.tar.gz) = 23ee48053848edd74915a985ee9edec48bbba468e228745f7d27b6a855c67f6b7ddf1cf71049458bf0b1c6c4d4f905ebacfac960597cbadbbe2daa1fe9472280
|
||||
SHA512 (requests-2.26.0.tar.gz) = c3397d77f0d2f1afb05661c4b98adad6c1ddaf360906254150b33ab0d9479fd306905bd6d61b8cf8becd9a40bdcf9b03542e8267c644ef19f03f44bfca0bc461
|
||||
SHA512 (charset-normalizer-2.0.7.tar.gz) = 7096fa23fade52c8eee2577b87aa574deffe6f66e8986f71172f3b9212bd6c6fb17901cceab90144c9d07de8bc6f5e320497daa3d3f749f436788232d4cba088
|
||||
SHA512 (idna-3.3.tar.gz) = 70b7cc8718e7d7899c75cfe476f044eae5a2fa03801fc9c12e3a092627ca943ffc4a578f9b8a55e181a11564835e125cfaaa577c02a6461dbb97366e620e53ad
|
||||
SHA512 (requests-oauthlib-1.3.0.tar.gz) = 7ef206aaf50cd3289f04175ff3a08022d00aeaaba57a6580912f37c30880322ec71ae9f6af7edc99efe6043fc6c19ba2c9f6fc0f29c126be28cde22bb885510d
|
||||
SHA512 (oauthlib-3.1.1.tar.gz) = 1c18f265a6017a6f2bf77507f5de095b439be36f309316993b547ded0f306461b058dcb85dc245bf26f65a9c77be44ca38f9053f3300a9b5cb92332b61a7f307
|
||||
SHA512 (ruamel.yaml-0.17.16.tar.gz) = 61780127c23a2fa20c6ce29b27790b72538b5ea0370906d38f4cfe760c30a3756022a385d3f241dd88199358ff152d624dc372fbe7e1fd6d2959f873daf1263d
|
||||
SHA512 (setuptools-58.3.0.tar.gz) = 5a38231c2ce361ad45befbd0de34dd7dde9d15f25e7fe2b8cf595d43eeee86fb3c2400e5b2676b547a025217aad85e63b1db6d9778baa412eefb25b22170c587
|
||||
SHA512 (setuptools_scm-6.3.2.tar.gz) = 9a16552803ef92367ad71007cf322737b5baa58b924083f04c860875bf6cb2e2bb4f43a7f89778b040c2eb55c5d32de479a918056519339820c6d0f1a6a386f0
|
||||
SHA512 (packaging-21.2-py3-none-any.whl) = 620a077783da21db677eda413c7cfcd9a9112afd573deda853615fad5b7f79b0ddfae4a7ee5d69834ba45e2299ebf343c6398b8eb60bb04569883520ada4a381
|
||||
SHA512 (poetry-core-1.0.7.tar.gz) = 0d93daefd7cb785059d1faa04b347cbaa908e0698d59543a18eeb6d86c8aae6f922b9105cb794b23895d676a05eea339f8f19bf41252e9940381be6b1c5d2d1a
|
||||
SHA512 (pyparsing-3.0.1.tar.gz) = 4a91daaf962a4d689ac26a712a83e8c4fbebc33270b6e46f0ae34fe247f6858d6334fbb59bdbbafa448703d24763fe1c86ce164e095de5003c7f1390960ba520
|
||||
SHA512 (tomli-1.0.1.tar.gz) = 2731ff827bda17471bf75a44b445062bd4c43adfc9f0fdab4f8953e559f60708bc3e3500b424bf914c5e472fc9afbab72316c5a3b47c3a7654b2eb5343e62d21
|
||||
|
Loading…
Reference in New Issue
Block a user