import base64 import hashlib import json import pathlib import requests url = "https://storage.googleapis.com/kubernetes-release/release/v{version}/bin/linux/{arch}/{pname}" # noqa E501 hashes = {} f = pathlib.Path("hashes.json") if f.exists(): hashes = json.loads(f.read_bytes()) for pname in ["kubeadm", "kubectl", "kubelet"]: if pname not in hashes: hashes[pname] = {} for arch in ["amd64", "arm64"]: if arch not in hashes[pname]: hashes[pname][arch] = {} for major in [1]: for minor in [27, 28, 29, 30]: match minor: case 23: patch_max = 17 case 24: patch_max = 17 case 25: patch_max = 16 case 26: patch_max = 14 case 27: patch_max = 16 case 28: patch_max = 12 case 29: patch_max = 7 case 30: patch_max = 3 case _: raise ValueError for patch in range(0, patch_max + 1): version = f"{major}.{minor}.{patch}" if version in hashes[pname][arch]: continue url = f"https://storage.googleapis.com/kubernetes-release/release/v{version}/bin/linux/{arch}/{pname}" # noqa E501 r = requests.get(url) hash = "sha256-" + base64.b64encode( hashlib.sha256(r.content).digest() ).decode("ascii") hashes[pname][arch][version] = hash print(pname, arch, version, hash) f.write_text(json.dumps(hashes, indent=2, sort_keys=True), encoding="utf-8") # open("hashes.json", "w").write(json.dumps(hashes))