This commit is contained in:
Jeffrey C. Ollie 2024-07-08 13:26:31 -05:00
parent a73c6b0943
commit 4036006d7f
Signed by: jeff
GPG key ID: 6F86035A6D97044E
4 changed files with 370 additions and 269 deletions

14
flake.lock generated
View file

@ -5,11 +5,11 @@
"systems": "systems"
},
"locked": {
"lastModified": 1694529238,
"narHash": "sha256-zsNZZGTGnMOf9YpHKJqMSsa0dXbfmxeoJ7xHlrt+xmY=",
"lastModified": 1710146030,
"narHash": "sha256-SZ5L6eA7HJ/nmkzGG7/ISclqe6oZdOZTNoesiInkXPQ=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "ff7b65b44d01cf9ba6a71320833626af21126384",
"rev": "b1d9ab70662946ef0850d488da1c9019f3a9752a",
"type": "github"
},
"original": {
@ -20,16 +20,16 @@
},
"nixpkgs": {
"locked": {
"lastModified": 1700403855,
"narHash": "sha256-Q0Uzjik9kUTN9pd/kp52XJi5kletBhy29ctBlAG+III=",
"lastModified": 1720386169,
"narHash": "sha256-NGKVY4PjzwAa4upkGtAMz1npHGoRzWotlSnVlqI40mo=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "0c5678df521e1407884205fe3ce3cf1d7df297db",
"rev": "194846768975b7ad2c4988bdb82572c00222c0d7",
"type": "github"
},
"original": {
"id": "nixpkgs",
"ref": "nixos-23.05",
"ref": "nixos-24.05",
"type": "indirect"
}
},

519
flake.nix
View file

@ -3,24 +3,33 @@
inputs = {
nixpkgs = {
url = "nixpkgs/nixos-23.05";
url = "nixpkgs/nixos-24.05";
};
flake-utils = {
url = "github:numtide/flake-utils";
};
};
outputs = { self, nixpkgs, flake-utils, ... }@inputs:
outputs = {
self,
nixpkgs,
flake-utils,
...
} @ inputs:
flake-utils.lib.eachDefaultSystem
(system:
let
pkgs = import nixpkgs {
inherit system;
};
arch = {
(
system: let
pkgs = import nixpkgs {
inherit system;
};
arch =
{
"x86_64-linux" = "amd64";
"aarch64-linux" = "arm64";
}.${system};
hashes = builtins.fromJSON (builtins.readFile ./hashes.json) // {
}
.${system};
hashes =
builtins.fromJSON (builtins.readFile ./hashes.json)
// {
crictl = {
"amd64" = {
"1.28.0" = "sha256-jceHdPfL6veHmU04buxmPwo88k3h6kiTWYCWyznvJQg=";
@ -36,7 +45,8 @@
};
};
};
kubePackage = pname: version: pkgs.stdenvNoCC.mkDerivation {
kubePackage = pname: version:
pkgs.stdenvNoCC.mkDerivation {
pname = pname;
version = version;
src = pkgs.fetchurl {
@ -64,150 +74,149 @@
--zsh <($out/bin/${pname} completion zsh)
'';
};
in
{
apps = {
hashes =
let
py = pkgs.python3.withPackages (p: with p; [
requests
]);
program = pkgs.writeScript "program" ''
${py}/bin/python3 gethashes.py
'';
in
{
type = "app";
program = "${program}";
};
in {
apps = {
hashes = let
py = pkgs.python3.withPackages (p:
with p; [
requests
]);
program = pkgs.writeScript "program" ''
${py}/bin/python3 gethashes.py
'';
in {
type = "app";
program = "${program}";
};
packages = {
kubeadm = (version: kubePackage "kubeadm" version);
kubectl = (version: kubePackage "kubectl" version);
kubelet = (version: kubePackage "kubelet" version);
fstab-cifs =
let
pname = "fstab-cifs";
buildInputs = [
pkgs.bash
pkgs.cifs-utils
pkgs.coreutils
pkgs.jq
pkgs.keyutils
pkgs.util-linux
pkgs.which
];
in
pkgs.stdenv.mkDerivation {
inherit pname;
name = pname;
src = pkgs.fetchFromGitHub {
owner = "fstab";
repo = "cifs";
rev = "3b640936ef51614d3c1ad68cba50c4db5da3d61b";
hash = "sha256-C5ze3CWyDxdWJ9cYWUmjKVPCrrdUYXP2JvlnRcW/lgg=";
};
nativeBuildInputs = [
pkgs.makeWrapper
];
buildInputs = buildInputs;
dontUnpack = true;
dontPatch = true;
dontConfigure = true;
dontBuild = true;
installPhase = ''
install -d $out/bin
install $src/cifs -m 0555 $out/bin/cifs
wrapProgram $out/bin/cifs --prefix PATH : ${pkgs.lib.makeBinPath buildInputs}
'';
meta = {
homepage = "https://github.com/fstab/cifs";
description = "Driver for CIFS (SMB, Samba, Windows Share) network filesystems as Kubernetes volumes.";
longDescription = ''
Docker containers running in Kubernetes have an
ephemeral file system: Once a container is
terminated, all files are gone. In order to store
persistent data in Kubernetes, you need to mount a
Persistent Volume into your container. Kubernetes
has built-in support for network filesystems found
in the most common cloud providers, like Amazon's
EBS, Microsoft's Azure disk, etc. However, some
cloud hosting services, like the Hetzner cloud,
provide network storage using the CIFS (SMB, Samba,
Windows Share) protocol, which is not natively
supported in Kubernetes.
Fortunately, Kubernetes provides Flexvolume, which
is a plugin mechanism enabling users to write their
own drivers. There are a few flexvolume drivers for
CIFS out there, but for different reasons none of
them seemed to work for me. So I wrote my own, which
can be found on github.com/fstab/cifs.
'';
license = pkgs.lib.licenses.mit;
};
};
crictl =
let
pname = "crictl";
version = "1.28.0";
in
pkgs.stdenvNoCC.mkDerivation {
inherit pname version;
src = pkgs.fetchurl {
url = "https://github.com/kubernetes-sigs/cri-tools/releases/download/v${version}/${pname}-v${version}-linux-${arch}.tar.gz";
hash = hashes.${pname}.${arch}.${version};
};
nativeBuildInputs = [
pkgs.autoPatchelfHook
];
setSourceRoot = "sourceRoot=`pwd`";
dontUnpack = false;
dontPatch = true;
dontConfigure = true;
dontBuild = true;
installPhase = ''
install -d $out/bin
install ${pname} -m 0555 $out/bin/${pname}
'';
};
cni =
let
pname = "cni";
version = "1.2.0";
in
pkgs.stdenv.mkDerivation {
pname = pname;
version = version;
src = pkgs.fetchurl {
url = "https://github.com/containernetworking/plugins/releases/download/v${version}/cni-plugins-linux-${arch}-v${version}.tgz";
hash = hashes.${pname}.${arch}.${version};
};
nativeBuildInputs = [
pkgs.autoPatchelfHook
];
setSourceRoot = "sourceRoot=`pwd`";
dontPatch = true;
dontConfigure = true;
dontBuild = true;
installPhase = ''
install -d $out/bin
install -m 0555 `ls | grep -v env-vars` $out/bin
'';
};
packages = {
kubeadm = version: kubePackage "kubeadm" version;
kubectl = version: kubePackage "kubectl" version;
kubelet = version: kubePackage "kubelet" version;
fstab-cifs = let
pname = "fstab-cifs";
buildInputs = [
pkgs.bash
pkgs.cifs-utils
pkgs.coreutils
pkgs.jq
pkgs.keyutils
pkgs.util-linux
pkgs.which
];
in
pkgs.stdenv.mkDerivation {
inherit pname;
name = pname;
src = pkgs.fetchFromGitHub {
owner = "fstab";
repo = "cifs";
rev = "3b640936ef51614d3c1ad68cba50c4db5da3d61b";
hash = "sha256-C5ze3CWyDxdWJ9cYWUmjKVPCrrdUYXP2JvlnRcW/lgg=";
};
nativeBuildInputs = [
pkgs.makeWrapper
];
buildInputs = buildInputs;
dontUnpack = true;
dontPatch = true;
dontConfigure = true;
dontBuild = true;
installPhase = ''
install -d $out/bin
install $src/cifs -m 0555 $out/bin/cifs
wrapProgram $out/bin/cifs --prefix PATH : ${pkgs.lib.makeBinPath buildInputs}
'';
meta = {
homepage = "https://github.com/fstab/cifs";
description = "Driver for CIFS (SMB, Samba, Windows Share) network filesystems as Kubernetes volumes.";
longDescription = ''
Docker containers running in Kubernetes have an
ephemeral file system: Once a container is
terminated, all files are gone. In order to store
persistent data in Kubernetes, you need to mount a
Persistent Volume into your container. Kubernetes
has built-in support for network filesystems found
in the most common cloud providers, like Amazon's
EBS, Microsoft's Azure disk, etc. However, some
cloud hosting services, like the Hetzner cloud,
provide network storage using the CIFS (SMB, Samba,
Windows Share) protocol, which is not natively
supported in Kubernetes.
};
}
) // {
nixosModules.kubernetes = { config, lib, pkgs, name, ... }:
let
cfg = config.jk8s;
in
{
options = with lib; {
jk8s = mkOption {
type = with types; submodule {
Fortunately, Kubernetes provides Flexvolume, which
is a plugin mechanism enabling users to write their
own drivers. There are a few flexvolume drivers for
CIFS out there, but for different reasons none of
them seemed to work for me. So I wrote my own, which
can be found on github.com/fstab/cifs.
'';
license = pkgs.lib.licenses.mit;
};
};
crictl = let
pname = "crictl";
version = "1.28.0";
in
pkgs.stdenvNoCC.mkDerivation {
inherit pname version;
src = pkgs.fetchurl {
url = "https://github.com/kubernetes-sigs/cri-tools/releases/download/v${version}/${pname}-v${version}-linux-${arch}.tar.gz";
hash = hashes.${pname}.${arch}.${version};
};
nativeBuildInputs = [
pkgs.autoPatchelfHook
];
setSourceRoot = "sourceRoot=`pwd`";
dontUnpack = false;
dontPatch = true;
dontConfigure = true;
dontBuild = true;
installPhase = ''
install -d $out/bin
install ${pname} -m 0555 $out/bin/${pname}
'';
};
cni = let
pname = "cni";
version = "1.2.0";
in
pkgs.stdenv.mkDerivation {
pname = pname;
version = version;
src = pkgs.fetchurl {
url = "https://github.com/containernetworking/plugins/releases/download/v${version}/cni-plugins-linux-${arch}-v${version}.tgz";
hash = hashes.${pname}.${arch}.${version};
};
nativeBuildInputs = [
pkgs.autoPatchelfHook
];
setSourceRoot = "sourceRoot=`pwd`";
dontPatch = true;
dontConfigure = true;
dontBuild = true;
installPhase = ''
install -d $out/bin
install -m 0555 `ls | grep -v env-vars` $out/bin
'';
};
};
}
)
// {
nixosModules.kubernetes = {
config,
lib,
pkgs,
name,
...
}: let
cfg = config.jk8s;
in {
options = with lib; {
jk8s = mkOption {
type = with types;
submodule {
options = {
enable = mkEnableOption "Kubernetes";
package_versions = mkOption {
@ -236,7 +245,7 @@
};
};
};
default = { };
default = {};
};
service_subnet = mkOption {
type = str;
@ -245,12 +254,13 @@
type = str;
};
hosts = mkOption {
type = attrsOf
type =
attrsOf
(
submodule {
options = {
role = mkOption {
type = types.enum [ "etcd" "master+etcd" "master" "worker" ];
type = types.enum ["etcd" "master+etcd" "master" "worker"];
};
domain = mkOption {
type = str;
@ -306,13 +316,14 @@
};
};
};
};
};
config = with lib; mkIf cfg.enable (
};
config = with lib;
mkIf cfg.enable (
let
kubeadm = (self.packages.${pkgs.system}.kubeadm cfg.package_versions.kubeadm);
kubectl = (self.packages.${pkgs.system}.kubectl cfg.package_versions.kubectl);
kubelet = (self.packages.${pkgs.system}.kubelet cfg.package_versions.kubelet);
kubeadm = self.packages.${pkgs.system}.kubeadm cfg.package_versions.kubeadm;
kubectl = self.packages.${pkgs.system}.kubectl cfg.package_versions.kubectl;
kubelet = self.packages.${pkgs.system}.kubelet cfg.package_versions.kubelet;
ca-config-json = pkgs.writeText "ca-config-json" (
builtins.toJSON {
@ -427,10 +438,7 @@
};
}
);
in
{
in {
deployment.keys."private_key" = {
text = cfg.hosts.${name}.private_key;
destDir = "/etc/wireguard";
@ -479,46 +487,56 @@
services.openssh.openFirewall = false;
systemd.enableUnifiedCgroupHierarchy = true;
environment.systemPackages =
let
endpoints = concatStringsSep "," (
map
(
n: "https://${cfg.hosts.${n}.wireguard_subnet.address}:2379"
)
(
filter (n: cfg.hosts.${n}.role == "etcd" || cfg.hosts.${n}.role == "master+etcd") (attrNames cfg.hosts)
)
);
etcdctl = pkgs.writeShellScriptBin "etcdctl" ''
export ETCDCTL_API=3
export ETCDCTL_CERT=${if cfg.hosts.${name}.role == "etcd" then "/var/lib/etcd/healthcheck-client.pem" else "/etc/kubernetes/pki/etcd/healthcheck-client.crt"}
export ETCDCTL_KEY=${if cfg.hosts.${name}.role == "etcd" then "/var/lib/etcd/healthcheck-client-key.pem" else "/etc/kubernetes/pki/etcd/healthcheck-client.key"}
export ETCDCTL_CACERT=${if cfg.hosts.${name}.role == "etcd" then cfg.etcd.certPath else "/etc/kubernetes/pki/etcd/ca.crt"}
#export ETCDCTL_ENDPOINTS=${endpoints}
export ETCDCTL_ENDPOINTS=https://${cfg.hosts.${name}.wireguard_subnet.address}:2379
exec ${pkgs.etcd_3_5}/bin/etcdctl "$@"
'';
in
[
(lib.mkIf (cfg.hosts.${name}.role != "etcd") self.packages.${pkgs.system}.cni)
(lib.mkIf (cfg.hosts.${name}.role != "etcd") self.packages.${pkgs.system}.crictl)
(lib.mkIf (cfg.hosts.${name}.role != "etcd") kubeadm)
(lib.mkIf (cfg.hosts.${name}.role != "etcd") kubectl)
(lib.mkIf (cfg.hosts.${name}.role != "etcd") kubelet)
(lib.mkIf (builtins.elem cfg.hosts.${name}.role [ "etcd" "master+etcd" ]) etcdctl)
pkgs.cfssl
pkgs.cifs-utils
pkgs.conntrack-tools
pkgs.ethtool
pkgs.file
pkgs.iptables
pkgs.keyutils
pkgs.nfs-utils
pkgs.socat
pkgs.wireguard-tools
pkgs.wireshark-cli
];
environment.systemPackages = let
endpoints = concatStringsSep "," (
map
(
n: "https://${cfg.hosts.${n}.wireguard_subnet.address}:2379"
)
(
filter (n: cfg.hosts.${n}.role == "etcd" || cfg.hosts.${n}.role == "master+etcd") (attrNames cfg.hosts)
)
);
etcdctl = pkgs.writeShellScriptBin "etcdctl" ''
export ETCDCTL_API=3
export ETCDCTL_CERT=${
if cfg.hosts.${name}.role == "etcd"
then "/var/lib/etcd/healthcheck-client.pem"
else "/etc/kubernetes/pki/etcd/healthcheck-client.crt"
}
export ETCDCTL_KEY=${
if cfg.hosts.${name}.role == "etcd"
then "/var/lib/etcd/healthcheck-client-key.pem"
else "/etc/kubernetes/pki/etcd/healthcheck-client.key"
}
export ETCDCTL_CACERT=${
if cfg.hosts.${name}.role == "etcd"
then cfg.etcd.certPath
else "/etc/kubernetes/pki/etcd/ca.crt"
}
#export ETCDCTL_ENDPOINTS=${endpoints}
export ETCDCTL_ENDPOINTS=https://${cfg.hosts.${name}.wireguard_subnet.address}:2379
exec ${pkgs.etcd_3_5}/bin/etcdctl "$@"
'';
in [
(lib.mkIf (cfg.hosts.${name}.role != "etcd") self.packages.${pkgs.system}.cni)
(lib.mkIf (cfg.hosts.${name}.role != "etcd") self.packages.${pkgs.system}.crictl)
(lib.mkIf (cfg.hosts.${name}.role != "etcd") kubeadm)
(lib.mkIf (cfg.hosts.${name}.role != "etcd") kubectl)
(lib.mkIf (cfg.hosts.${name}.role != "etcd") kubelet)
(lib.mkIf (builtins.elem cfg.hosts.${name}.role ["etcd" "master+etcd"]) etcdctl)
pkgs.cfssl
pkgs.cifs-utils
pkgs.conntrack-tools
pkgs.ethtool
pkgs.file
pkgs.iptables
pkgs.keyutils
pkgs.nfs-utils
pkgs.socat
pkgs.wireguard-tools
pkgs.wireshark-cli
];
virtualisation.containerd = {
enable = true;
@ -618,7 +636,8 @@
ListenPort = cfg.hosts.${name}.endpoint.port;
PrivateKeyFile = "/etc/wireguard/private_key";
};
wireguardPeers = map
wireguardPeers =
map
(
n: {
wireguardPeerConfig = {
@ -648,7 +667,8 @@
DHCP = "no";
IPForward = "yes";
};
addresses = map
addresses =
map
(
n: {
addressConfig = {
@ -660,7 +680,8 @@
filter (n: n == name) (attrNames cfg.hosts)
);
routes = map
routes =
map
(
n: {
routeConfig = {
@ -675,28 +696,28 @@
};
systemd.services.etcd.preStart =
if
(cfg.hosts.${name}.role == "etcd")
then
''
cd /var/lib/etcd
if [ ! -f server.pem ]
then
cat ${server-csr-json} | ${pkgs.cfssl}/bin/cfssl gencert -ca=${cfg.etcd.certPath} -ca-key=${cfg.etcd.keyPath} -config=${ca-config-json} -profile=server - | ${pkgs.cfssl}/bin/cfssljson -bare server
fi
if [ ! -f peer.pem ]
then
cat ${peer-csr-json} | ${pkgs.cfssl}/bin/cfssl gencert -ca=${cfg.etcd.certPath} -ca-key=${cfg.etcd.keyPath} -config=${ca-config-json} -profile=peer - | ${pkgs.cfssl}/bin/cfssljson -bare peer
fi
if [ ! -f healthcheck-client.pem ]
then
cat ${healthcheck-client-csr-json} | ${pkgs.cfssl}/bin/cfssl gencert -ca=${cfg.etcd.certPath} -ca-key=${cfg.etcd.keyPath} -config=${ca-config-json} -profile=client - | ${pkgs.cfssl}/bin/cfssljson -bare healthcheck-client
fi
''
else
"";
if (cfg.hosts.${name}.role == "etcd")
then ''
cd /var/lib/etcd
if [ ! -f server.pem ]
then
cat ${server-csr-json} | ${pkgs.cfssl}/bin/cfssl gencert -ca=${cfg.etcd.certPath} -ca-key=${cfg.etcd.keyPath} -config=${ca-config-json} -profile=server - | ${pkgs.cfssl}/bin/cfssljson -bare server
fi
if [ ! -f peer.pem ]
then
cat ${peer-csr-json} | ${pkgs.cfssl}/bin/cfssl gencert -ca=${cfg.etcd.certPath} -ca-key=${cfg.etcd.keyPath} -config=${ca-config-json} -profile=peer - | ${pkgs.cfssl}/bin/cfssljson -bare peer
fi
if [ ! -f healthcheck-client.pem ]
then
cat ${healthcheck-client-csr-json} | ${pkgs.cfssl}/bin/cfssl gencert -ca=${cfg.etcd.certPath} -ca-key=${cfg.etcd.keyPath} -config=${ca-config-json} -profile=client - | ${pkgs.cfssl}/bin/cfssljson -bare healthcheck-client
fi
''
else "";
systemd.services.etcd.serviceConfig.ExecStart = if (cfg.hosts.${name}.role == "etcd") then (lib.mkForce "${pkgs.etcd_3_5}/bin/etcd") else "";
systemd.services.etcd.serviceConfig.ExecStart =
if (cfg.hosts.${name}.role == "etcd")
then (lib.mkForce "${pkgs.etcd_3_5}/bin/etcd")
else "";
services.etcd = lib.mkIf (cfg.hosts.${name}.role == "etcd") {
enable = true;
@ -707,7 +728,8 @@
initialAdvertisePeerUrls = [
"https://${cfg.hosts.${name}.wireguard_subnet.address}:2380"
];
initialCluster = map
initialCluster =
map
(
n: "${n}.${cfg.hosts.${n}.domain}=https://${cfg.hosts.${n}.wireguard_subnet.address}:2380"
)
@ -738,11 +760,8 @@
};
};
systemd.services."kubelet" =
let
in
systemd.services."kubelet" = let
in
lib.mkIf (cfg.hosts.${name}.role != "etcd") {
enable = true;
description = "kubelet";
@ -758,24 +777,22 @@
];
unitConfig = {
StartLimitIntervalSec = 0;
After = [ "network-online.target" ];
Wants = [ "network-online.target" ];
After = ["network-online.target"];
Wants = ["network-online.target"];
};
preStart =
if (cfg.hosts.${name}.role == "master")
then
''
mkdir -p /etc/kubernetes/pki
cd /etc/kubernetes/pki
if [ ! -f apiserver-etcd-client.crt ]
then
cat ${apiserver-etcd-client-csr-json} | ${pkgs.cfssl}/bin/cfssl gencert -ca=${cfg.etcd.certPath} -ca-key=${cfg.etcd.keyPath} -config=${ca-config-json} -profile=client - | ${pkgs.cfssl}/bin/cfssljson -bare apiserver-etcd-client
mv apiserver-etcd-client.pem apiserver-etcd-client.crt
mv apiserver-etcd-client-key.pem apiserver-etcd-client.key
fi
''
else
"";
then ''
mkdir -p /etc/kubernetes/pki
cd /etc/kubernetes/pki
if [ ! -f apiserver-etcd-client.crt ]
then
cat ${apiserver-etcd-client-csr-json} | ${pkgs.cfssl}/bin/cfssl gencert -ca=${cfg.etcd.certPath} -ca-key=${cfg.etcd.keyPath} -config=${ca-config-json} -profile=client - | ${pkgs.cfssl}/bin/cfssljson -bare apiserver-etcd-client
mv apiserver-etcd-client.pem apiserver-etcd-client.crt
mv apiserver-etcd-client-key.pem apiserver-etcd-client.key
fi
''
else "";
serviceConfig = {
Slice = "kubernetes.slice";
CPUAccounting = true;
@ -793,10 +810,10 @@
Restart = "always";
RestartSec = "10s";
};
wantedBy = [ "multi-user.target" ];
wantedBy = ["multi-user.target"];
};
}
);
};
};
};
}

View file

@ -21,7 +21,7 @@ for pname in ["kubeadm", "kubectl", "kubelet"]:
if arch not in hashes[pname]:
hashes[pname][arch] = {}
for major in [1]:
for minor in [26, 27, 28, 29]:
for minor in [26, 27, 28, 29, 30]:
match minor:
case 23:
patch_max = 17
@ -32,13 +32,13 @@ for pname in ["kubeadm", "kubectl", "kubelet"]:
case 26:
patch_max = 14
case 27:
patch_max = 11
patch_max = 15
case 28:
patch_max = 8
patch_max = 11
case 29:
patch_max = 6
case 30:
patch_max = 2
# case 30:
# patch_max = 1
case _:
raise ValueError
for patch in range(0, patch_max + 1):

View file

@ -73,6 +73,10 @@
"1.27.1": "sha256-x9MtaY6ZuQ+HcCUQTLSp8/jHB+meaBeUDyYBNbbRrQo=",
"1.27.10": "sha256-I5helYRDrBqr2+7txnU1irwGOOtYBweCn9QrCZagquU=",
"1.27.11": "sha256-Mb9EanEvsIGQg4w10fTJOw+XVwjFljSl3D2JFaJByD4=",
"1.27.12": "sha256-Bu42zIDP38Ack311B4PTymFpo9p2OCx6890XLZ9r+k4=",
"1.27.13": "sha256-uIwwtwZ/CVt/oCxVYMxQ1uaaWp/sxgbvR33H78hkU7k=",
"1.27.14": "sha256-HOJkZD5SFJThEbHJ7llpSlTR8kZLusOnpTEyT/6uAYI=",
"1.27.15": "sha256-5vgxPiE6inXe2oHt9EXQ14VJP2oKDKrfMeiNFztgeUM=",
"1.27.2": "sha256-lcS/t5KZAFBqQt5NkigPBu/mtH4KMsvB9aHtc3WSl3o=",
"1.27.3": "sha256-LNZj8lwkkL1hSmwK2QiaR+8xXK8NvfeO/Xh9VlOxxuM=",
"1.27.4": "sha256-e+Idb7Nwf7vo8NsEA9tiNMivdzuUH5Mb+CSHWe6Yi80=",
@ -83,6 +87,8 @@
"1.27.9": "sha256-eN3aw3b6LwQRYCLLRO05zLnLAQTgXFshsiDVFR5cD4Y=",
"1.28.0": "sha256-Eupov+8Dd8ztwafJigXqdpB97Lzx4eyFimCnubcyEbs=",
"1.28.1": "sha256-YTTbyS3Lg8O64agDD3uzkUGbXRPqlLrdOnm37OdbJzY=",
"1.28.10": "sha256-GjRNNHVcXwBRIDCPCacw51ZMj4V95mBra8Xximlgblo=",
"1.28.11": "sha256-Hyx8aXNmmKoTpZxnBawmt7Z1LZZRMwYFNpNXwayZx8Y=",
"1.28.2": "sha256-akgIIwZhxpQxFD2y4gDqLQIcfxsQheY1NYMHVHExDQA=",
"1.28.3": "sha256-zjhIsd+lYuD6L5EaPY47sHugQO6nZlTWjiEzFciEasA=",
"1.28.4": "sha256-tNJTG3zd94L1lVVDa8CYSFtfpsBa/M3uzw1i0h2E9b0=",
@ -90,9 +96,17 @@
"1.28.6": "sha256-vaPtqNUeh0akK1Nbfqt99SsJGnliJ8MhLcMJCajxtDE=",
"1.28.7": "sha256-iqAFvfavQ+R/yBiyb0y582Gq6OxDkFGejUAzvmX77ys=",
"1.28.8": "sha256-wRlGy/2WLhGXBiU0UUImz9cCMDSeY0P/Ps6/ylR27mQ=",
"1.28.9": "sha256-pNis8KdMsdB9lqGjQUj1TGQgh0IhrxbY7JAtm//H74k=",
"1.29.0": "sha256-Yp1GMGV8qs6cgZ/TeX9KcMOX+9QaKn5GSgUH2tZ11Sw=",
"1.29.1": "sha256-1NgdkCC1UMiWN2+54FhqnxWjMhdYkNBhYZtSs+m8bL0=",
"1.29.2": "sha256-LU5PqGhby/tmHLQQUM1HVvUKeqFH9oSS1RqZ+c39aaw="
"1.29.2": "sha256-LU5PqGhby/tmHLQQUM1HVvUKeqFH9oSS1RqZ+c39aaw=",
"1.29.3": "sha256-arqhIIv0C20fSeUYvWjIrkob4MW30+Rdh5eZmasHDYs=",
"1.29.4": "sha256-6iCrBk9xarf2mjbXLfNAJXsxyXIeqG4c+dcLNZmd3uo=",
"1.29.5": "sha256-5CTc2+ZhMUtsofzJRybrVUvD9DkrBguWJvnfjX1E1Cw=",
"1.29.6": "sha256-jx4EB55hTdVJ42voEU7nAiUX1kbqcVtXeOfGqzU+s1Q=",
"1.30.0": "sha256-KfQjLFDmUkq7o0Q/87mUjThpZNeeuN/vtAnh+KhDTBQ=",
"1.30.1": "sha256-ZR+qO7v7No7QBGDk0RcyYUMQtpC3Z8UYEKe2OMwJYaI=",
"1.30.2": "sha256-ZysMrirMzl6sEKH+TqaxZuW1GMecz3Gi++e1PCynQGI="
},
"arm64": {
"1.23.0": "sha256-mJ0RcSjcqpI7LHqRegP0g2wbAj/h7nI1QeDjmwaLk6Y=",
@ -167,6 +181,10 @@
"1.27.1": "sha256-AkpZzW/HZ4S1l8DBzzAFJuhW6Mn++l+nlIFYkptzlVE=",
"1.27.10": "sha256-7QRHFVp+lnriNICwazGywKqocefFnf2CriWwOh7M9uY=",
"1.27.11": "sha256-uEUtbD8TMb6z1fpCRmqbyWY4p2xAmA26mCIwDyMMCFg=",
"1.27.12": "sha256-501HwUtaJRz/lh3M6SzWMqvP0PukoH548KWlsnluS4Q=",
"1.27.13": "sha256-8zS6BhL62lDpin6la2hrNcIvDjJD7CIQ8qaofoQaE58=",
"1.27.14": "sha256-y4QOuDQEBHza/sCxUFQCPJCkdJG1bS3OuhBQBA83zH4=",
"1.27.15": "sha256-V3YwtlxUuptinJxC41ugk5zgPcuPOPt5WD7DyduRQac=",
"1.27.2": "sha256-jwHzY/fH+S3i8idhJKiVUDzcWmD/VJRAFwiA8pawh+s=",
"1.27.3": "sha256-SV4hk+13nSVYS0tTJ5bCJw3w9xOe8V+4nceYBgNhXvQ=",
"1.27.4": "sha256-tO3ooY7z0c+mHm+8qPyrAvju49B3DSMpSQ+nvpCkyuQ=",
@ -177,6 +195,8 @@
"1.27.9": "sha256-09AihCsLjkZhIi6IcySfWsr9vvUv0b+5gVKlgjUrPEA=",
"1.28.0": "sha256-ubRz0tkTZVmxnrRlAGr3ffRcCYYs185mc6M6rlF/9as=",
"1.28.1": "sha256-fS9okXRwpdZr0qfWKJf1nLSvrv+y8mwCivoRms2MP8g=",
"1.28.10": "sha256-9oCdcu0b9v3kYOSOXHFMO8kvaA4yje+pvVkqeWNHtkQ=",
"1.28.11": "sha256-FaAh/ezwiYnWtkr4c9icYXUNOgVkvuWMJI6v5cxN9DM=",
"1.28.2": "sha256-AQeJqUz1EtkY7Eo++OxzTeoAYdiagpMFnvkQHKG/a/8=",
"1.28.3": "sha256-3LN9eMzf6djdbxAOGI3cbj9VcNDEnbaEcAc2g7RToec=",
"1.28.4": "sha256-pEIngAIJVENrjnarHFm2jFWBpUQy3T5WbEcJu0DI1Pk=",
@ -184,9 +204,17 @@
"1.28.6": "sha256-QpjK1GTpLuwZzfPmpgeoKh1iaucP7bp5VhdRUquYNFc=",
"1.28.7": "sha256-9VbklJRzf5ehW/FbtLJ9Rfh0e0dzAs39It1hgWvAIgM=",
"1.28.8": "sha256-4PR63GnvhOL2xCzDQbinkJBKkprRDtHCPC6CLsgE4kc=",
"1.28.9": "sha256-zWrvrYFEqXcf1HBSn/FL4mdd97Vh98Vt7j/tT4EzLcQ=",
"1.29.0": "sha256-u93uLUbS4WQ642I2mLRbE6ouhYYW1hxkLy9J5bsUyYA=",
"1.29.1": "sha256-O/+MUMEExF5BbM6ZkXBsasRjZfDe+81U+M9Kzg+mjc8=",
"1.29.2": "sha256-4Fcg/rnS1n7/JbAValwi4t43vi/6tOH00x6MUm+v0OE="
"1.29.2": "sha256-4Fcg/rnS1n7/JbAValwi4t43vi/6tOH00x6MUm+v0OE=",
"1.29.3": "sha256-zi5MIw+VTlmud+NMT/KuCMrTlwUFrh4htjN+bYOyFoI=",
"1.29.4": "sha256-Q4KHqR4Iy+/sq3m+isiTqTXD2/boe+qJX7mfK8OM8G4=",
"1.29.5": "sha256-1NuMUU8nZO3AOUYsIY280xZXf3byGyCbdumksfCOMQA=",
"1.29.6": "sha256-O6aHnvSRzdhDNkcCDTRdhsDqjnf3JjdbxLVJWIi793g=",
"1.30.0": "sha256-w2r9KJITA+bbjlgnTeFsYKgKHnUDD8PE6cTtYkm2tpY=",
"1.30.1": "sha256-vaQjy0udBW+Zou8Ra98if628HDMJ+j122lcUJ6f0FHg=",
"1.30.2": "sha256-cmh2K3r9RL8HYZmF3VLDdrY+R9c7j5o7CMxJYkqPvVU="
}
},
"kubectl": {
@ -263,6 +291,10 @@
"1.27.1": "sha256-f+OnYtkm+waLrjLDmYgOlG6Mrz2QMHi+qbFp3NXBf20=",
"1.27.10": "sha256-v7IZZDwo2YQvzq5RWQd28GmHg12T/Dy5sBSckRHHQaw=",
"1.27.11": "sha256-euMnl4oe20NwAHDIb1/XchV5LGtYp+pwGSZH4NqEjik=",
"1.27.12": "sha256-1jnto5vi3OQvvsIeA4lCq1c0VBcV4+pfspya12aGvX8=",
"1.27.13": "sha256-6ZHxYxl8vYW7/yL2VqdNSLadta3fpDzATMoM9TKPV/E=",
"1.27.14": "sha256-HSQxxou236nePNQP1m2XqaxzWTxIn5RnJJ7qQ+nBah4=",
"1.27.15": "sha256-wSzxfsMPsWL49fsWjmfU5bfWgm4Ix2SKXxxrTpuiPzk=",
"1.27.2": "sha256-TzjukD81swDTsAWpxr+5pGpX+S6JrmAu+cEpuR3GxaU=",
"1.27.3": "sha256-+6bAYudUoSC8gQXN4TRN4gBFL+AUqHWeBuTux+0ligk=",
"1.27.4": "sha256-RoW/z3MiYPcvzlg3noEuCRVX7x38G8gIQibHiR3WAo8=",
@ -273,6 +305,8 @@
"1.27.9": "sha256-0MqukQcil7KRXdZfbvMFXSdkbc6CHsZ9GNo1upqNyFs=",
"1.28.0": "sha256-RxdmD9FGbsctWQALsdn1zckfrDHUkQQ8pis0OY4Hmc4=",
"1.28.1": "sha256-56fW+dBvqzi0EoeFqoD2XFT2Z1oNKr72VSWd3YUidOE=",
"1.28.10": "sha256-OJwXqXAKSwHrsFXjm4vAiGMwSXRA3eAEte2Q8qOgKNs=",
"1.28.11": "sha256-Hbpj4aXJUg/FFsboF5JNknubg7jgglTI/iou22Xaepw=",
"1.28.2": "sha256-ySJECwQ+XeGvo8E4L4xmOiXwVZeMvG6EI0k+wVdXnsU=",
"1.28.3": "sha256-DGgMkIksQ+XOcI6RiCH5JEXR0kT5s9dRMCO8rppiRtE=",
"1.28.4": "sha256-iTySBTrepu271OlZyHH1wh7c5BaYj5aL7FZdEVOD97g=",
@ -280,9 +314,17 @@
"1.28.6": "sha256-yDUf4GERGf02Y03T9T65TsGi1D7554uStIRt9cx6p+M=",
"1.28.7": "sha256-r/QtMWdoXk2Ohv2grZxs5uxsBHvCTWCAQdVHF6GBkro=",
"1.28.8": "sha256-4CqtXAusUslwcAuBRkW2LE8YtjQUQ5isNEh1268Qcvg=",
"1.28.9": "sha256-tGk9CyL1CSUGlLEMdyfEK0J9VwrwTyBl/iOlXWwAUfE=",
"1.29.0": "sha256-DgOrCWFj9hq2ELM/N/VXCdOvjhbk3MHraCiC74D5b9U=",
"1.29.1": "sha256-aas6kx6Ca/esFNOLp8pjfWam/LHKDjMzosr98VSCr58=",
"1.29.2": "sha256-eBbQZ3QPR/lJvoJqx2lDFnt7OjjE8MGLkC//qHeaWvo="
"1.29.2": "sha256-eBbQZ3QPR/lJvoJqx2lDFnt7OjjE8MGLkC//qHeaWvo=",
"1.29.3": "sha256-icBDXOx1J4+EtiuEi4wNPhWJfWlHtsWaSd3M2T1zEr8=",
"1.29.4": "sha256-EONDhhw8sAEBYecDMHupB63Sru6v/GREd5rZFfmInIg=",
"1.29.5": "sha256-YDyGgfwNhgnIUfnMWLz1XuuX4pNIluhY0CMqqNETg2Y=",
"1.29.6": "sha256-M5VTyRmHTr47cZ6eH81otVvIh1+bWgBc9MAoc41U0wk=",
"1.30.0": "sha256-fDgHwPXBswEQov8eVdodESptAJYgHxvrgbJp9YK10cU=",
"1.30.1": "sha256-W4bwsG4aW6b48A4rAejtOUB3KcSZCu2pYfg6WG+XXoo=",
"1.30.2": "sha256-xunEXOP4LJBmPjww2zsnwWfosZ2D7UBIthwQE/anxm4="
},
"arm64": {
"1.23.0": "sha256-HXfWAn/I3+13Jgmtm9aPYRt+TOc6+pSfJwhK06krFf4=",
@ -357,6 +399,10 @@
"1.27.1": "sha256-/Ty48W5u2K7plVt24wJ6xCO20cxzVoZzENEoCC4tuRY=",
"1.27.10": "sha256-LhmWN51aixMuBgb80988honhGIJjC3XMo7cTUSaEeHE=",
"1.27.11": "sha256-0w4aqHPnjrN23e48eFqnjETt3FbOLvkB2sHODCxPULA=",
"1.27.12": "sha256-v8bLcQQevA8EhAKYjszBB8//K4ZshkIxya2gWrMo5b8=",
"1.27.13": "sha256-SDitjzkCySj2E51p66liscwkcVEcgoiFZQ1yjZcFlNE=",
"1.27.14": "sha256-KfOh9SDZKd84hzxo3sc1GcHl5SEUDgHPnXcB97X/5PM=",
"1.27.15": "sha256-a9a9MJLAqOU26OWlayKqq4erHlSkVWzk0b/ySTGA+4w=",
"1.27.2": "sha256-GwlmaS45jv5x/ln5E+rsRP/URozBrNAL+Rwp+o/49Xg=",
"1.27.3": "sha256-e7f+xOKOC1C2A9ZOR2KegSQIdRvR4M4Fmy/ug7Dj/28=",
"1.27.4": "sha256-UXjLtR3P/yhsILyEfWTdNc1Zk7gaLjYJWBN3pSCmQl0=",
@ -367,6 +413,8 @@
"1.27.9": "sha256-vaR1U5/e2p2KhahLlnrzYa8mTQgmwSGyOwti7psAzS0=",
"1.28.0": "sha256-9UhL2crGaxg8ZTq+0wImtWH1N9FTRsYFzIHZgJXxcXw=",
"1.28.1": "sha256-RpVKYEt4SosNwWdUz8P6Jqq8qf1P/RCc0Ci/upnUkvY=",
"1.28.10": "sha256-5lnSPUQsJwbevluWdCMmwKHh17XGlan+ff6Op0Asrug=",
"1.28.11": "sha256-eYSpjVI2XRkLb1bKqWIzmnIotvQy5Yul8bHmDb7awnU=",
"1.28.2": "sha256-6m2Jtneo2d8zGoITm7kNmWgTFTC5TqsmzuVhUx7/TFM=",
"1.28.3": "sha256-BlEfA+NNjuNQvVVxeEXifr7DEWUm23xgCS7rM6R1ozc=",
"1.28.4": "sha256-7fHhe0GJHsFdWd08xivNLNzksP2cLuBYsJZ7F1NEV9c=",
@ -374,9 +422,17 @@
"1.28.6": "sha256-DecFZZqAw/7wHfQ8wJJmEP4xSC9yiw+ZKBir2b3NLLk=",
"1.28.7": "sha256-E9VHSVvepJsiP+Br/7bSvvlkNmNIR/dZEHZVqoD8mQ4=",
"1.28.8": "sha256-k9YN02CTtMcZ8fG6/PWUN8F8siCTQcfJR3Hn3ZrNqzM=",
"1.28.9": "sha256-4DQdOXMhP4CZ5/y79tHVBpZ7wrek+qw/s7Q0DyJumy8=",
"1.29.0": "sha256-j3pL1rrpAKTdqxK9E5mqZSwNWepQjzm5EOER0kiJP/c=",
"1.29.1": "sha256-ltbceyvc00TOWNF2McRSIl3lu/Wbg/08icM8Ypj7XYs=",
"1.29.2": "sha256-NQfstCJM8FriFRqY1JMiU2JOd2IVmTbVNHsZ/gN2Vco="
"1.29.2": "sha256-NQfstCJM8FriFRqY1JMiU2JOd2IVmTbVNHsZ/gN2Vco=",
"1.29.3": "sha256-GRqWsn48auKLMw2kyb/vyVknYmcHJ99PzxJMnx1aRmo=",
"1.29.4": "sha256-YVN0CO7crQZNczQ4Su1Qioqh6nhjEbh7UFRWouBTXTY=",
"1.29.5": "sha256-nukWje8SrGpsDGQw4PcxdedW7SYttgQPiqISGtLB9i4=",
"1.29.6": "sha256-IYFkiM869M8rlW7lj3r8W0lkwpSI9jdW9d3PCbDfW+k=",
"1.30.0": "sha256-Zprwz1IHVymOpgqLbra3GbpEOpx9NfNtP7L9dRPox9I=",
"1.30.1": "sha256-2QRGcZuBXjq/57LEbd+LP9oXWZ8DqzcNbkexWAwOhp4=",
"1.30.2": "sha256-Vr7PBxBfus0rcPh/P2ls++0ibLSNbYntf2W6Ssrj8vg="
}
},
"kubelet": {
@ -453,6 +509,10 @@
"1.27.1": "sha256-yyhF//DOQcQASJOT2nOSXSj77lTP63g0zU0R5iLL06c=",
"1.27.10": "sha256-JaNL+Yu4opbqB/HrvLSWsea2xtoyR2lSiKfJn8jBviw=",
"1.27.11": "sha256-LOkqXYmFuTvY/8T1UZzXm/L4RFkKo4Ioo9gJxb9ZhuA=",
"1.27.12": "sha256-quhhohkTwnQijM2tFgmzcOUZjJ9LObiSSyCn/+fxSOA=",
"1.27.13": "sha256-7WjfKnfzBXq0f1fqy26TEOkXMeT0PFijw7XIV9eNAIA=",
"1.27.14": "sha256-8o3vpD+A+CzpCZQMG1e3HLofzw3m/Ecj55jvXHI3bCg=",
"1.27.15": "sha256-wKtBTN0RbpZEyMFUrkplZcdcJgXix7aloEtWA37yuog=",
"1.27.2": "sha256-oNEq/Ks7KDbeSkJ1WNBnvr3/BA6bMGsFEsk9nSoGZXk=",
"1.27.3": "sha256-wOGNpqVYMM9JEOzXJhWXxm6j+PWM9E1K22vctuLm8L8=",
"1.27.4": "sha256-OF9lh43ItI3w8r02lTX/JzOQUYtawswaFoTWVhkyRwQ=",
@ -463,6 +523,8 @@
"1.27.9": "sha256-7eYO6jrLrD8127I9exSPRc8WnruyCvEC084UH8C6xgw=",
"1.28.0": "sha256-v7a5dxAJY/KHmjPl+6pZpSdrqCmpV6aBnJNunBRl+YE=",
"1.28.1": "sha256-K8IjMvRPj80/zleHn9hz+XeUnr0mFXH7rjH7snE6XdM=",
"1.28.10": "sha256-o2HnRKru9FOfBjbs0YJ8hSB6XysMKwqY27zhSYBh9Qk=",
"1.28.11": "sha256-Iw8GNOpCpUpslncfEu7NbK3+C3arQcO8Oap8u+TfsS4=",
"1.28.2": "sha256-F+24ZmNvFOzqrVjFbqsSr3qzvjx4QAr/loBjXZJ/EYU=",
"1.28.3": "sha256-o6BYtLow2gH/4YAc04/K1YqQIqLTnggLSy4Ol0mnWtU=",
"1.28.4": "sha256-2ypHO3PDdU1AEVkPLwqod2V2CEmVkMaw+LQL7Jaj6bo=",
@ -470,9 +532,17 @@
"1.28.6": "sha256-hQbfHyCl+LugWS9aTPXQzFQQR3COZky4hYBzVADQsm8=",
"1.28.7": "sha256-EgsUlbq8Q2T34WqdD4uOa294MW0Efk9t53tVabBYE8c=",
"1.28.8": "sha256-BJtBKlhhJVzTki9hKst5q1ETXhZsXYCs8S+6kXnuvww=",
"1.28.9": "sha256-869Gz/EcZ1qA2R67OOvE6FqfgTzpPlbuEx5/6hSRt4Y=",
"1.29.0": "sha256-4cOBN9uNh3fu2IE2RrWb9NItGbkBGrEdwo4uNPa4CgU=",
"1.29.1": "sha256-Gxl1xY04vhqZqLy6RWSsSJr9IjsKvp8qsIu96J0kEqM=",
"1.29.2": "sha256-9xqFA5tx/gjxwGOpPWGhyVLcj5qMa+mxP72sjw2f+WA="
"1.29.2": "sha256-9xqFA5tx/gjxwGOpPWGhyVLcj5qMa+mxP72sjw2f+WA=",
"1.29.3": "sha256-2LVaL4qHyM0sv4Z9dtHX+YtxmKdA2xm61u17i4E953E=",
"1.29.4": "sha256-WFcfDtYlQ6m7rFQeUsFdg4UIMROkY+I67BNB0LUEOTk=",
"1.29.5": "sha256-Jh3D88OE0TiDX+kaAgccZCr5SrsMylbrwEcZJARAlEw=",
"1.29.6": "sha256-qUZ4nU/vZOb1kF29fcoB1MOr0wLQ2nlY/aqST+JynAs=",
"1.30.0": "sha256-MqMuw9fn+LJkjJ3VA86e9jtK8dFnf1ta7XhG+wLWbxg=",
"1.30.1": "sha256-h71uXenAdpxgXaX+23ejXIt2TjvaFjJEeIPJNdzyGdM=",
"1.30.2": "sha256-aSOr5n7waa/KYcccWFAjhAQm6AKxmCmAVa86guEaTlI="
},
"arm64": {
"1.23.0": "sha256-pUb7fMzmnEFj5KCxmjHzDqA5tORWDCP9bjAW4rLf0Nk=",
@ -547,6 +617,10 @@
"1.27.1": "sha256-27CdKX2SRXVlTbOO0vxifjWRPC1AAMNGE6xt5JlUV9A=",
"1.27.10": "sha256-DtrcRO82vo2BBsrZlyNgwEd1QOLYwLvrOP2X/R14AdU=",
"1.27.11": "sha256-6BmHqGT7R6/hT2X6TpN2C8GcQkM14PBUDGxyW3J84io=",
"1.27.12": "sha256-DX0tJci5CdbOx8HCpb/lFCjsM+ql6LIJxxi3eYPp3Lo=",
"1.27.13": "sha256-17+xTQsPwsQQdLrwJhfPmFif0Cn7NTnqAXgl42Nx8Zw=",
"1.27.14": "sha256-Mcl6cjAhzMkKR6Fa0d4f/fWLoQmuqSLrNZrS/Ljozks=",
"1.27.15": "sha256-rIq7JJ3XiiLZLigwbOmCP3484jzUuo27DzvTT0i2wSs=",
"1.27.2": "sha256-gQzZphHp8ITlfJ7kZuM8MksiKNQkn/OMJYigzDIk8Q0=",
"1.27.3": "sha256-KDj9VTQNWfd3171+WYn8cregyhmM9PP3I82ZVoWc6UI=",
"1.27.4": "sha256-x1rY58fvBcDAIbIan+hukvZNseTBvIThuvRdjbuLqNE=",
@ -557,6 +631,8 @@
"1.27.9": "sha256-ihS8Nzn1yjsj0IMBwudp7ljI0c7LckO0axwJiud+/9c=",
"1.28.0": "sha256-Bd0S41eDyrSWDohewOfQ5GGYm5QpfnvqkBjMvRXE3Ok=",
"1.28.1": "sha256-m3+mSyeF2ko4doN3lh4if42mKcVqXfQ8obZl3Qe1bzw=",
"1.28.10": "sha256-/q4WHjdO4BVbUmPNoznzDxa1JWMVNaADvnqkN2YeFYA=",
"1.28.11": "sha256-DgHBOT+HRpZZlEMbcKIMMrhUffsdzydwy2kpkPxlul8=",
"1.28.2": "sha256-MiaensOMVh0Ci2XDBI6moQDhKSy+nlBVZSIkVcgJZXc=",
"1.28.3": "sha256-ZPVunFUYORkVP+Wd8skBXf8JxW3hOjy8zA8EqVt22rk=",
"1.28.4": "sha256-vyA5id2bOYe4oNIzHczmMZ+DS1ffgQ+vulpIBdVII6w=",
@ -564,9 +640,17 @@
"1.28.6": "sha256-7iwGDe/zMNMzjiSuyXNMnl1a6k/qGQXAeVvM/2mXpl4=",
"1.28.7": "sha256-4smLObCwdF7z4w/rrrjqrzHschASQFvQ3PJehAJsIh4=",
"1.28.8": "sha256-kNYfQLe7BhsPxtCLi53a5R+QhjyJmwmOGeqonchV8sA=",
"1.28.9": "sha256-MSRxrSVaz83uosWEmxcUZ69FGOltadcnoxl/8zTpKZ0=",
"1.29.0": "sha256-Dg5FRMKgo0dVKRVLdTTQ1YaDRm76BKK7LnY7R22wuxY=",
"1.29.1": "sha256-5GQXqxzq6ZXw4A1Bd5WaNu00uAeClCK8ndpwsmP+XF0=",
"1.29.2": "sha256-m0qlctTNUaQbEGcWHZYUI9DRKxIPtjbqiHoSqXXUsZo="
"1.29.2": "sha256-m0qlctTNUaQbEGcWHZYUI9DRKxIPtjbqiHoSqXXUsZo=",
"1.29.3": "sha256-iR3OGe0OrjQFDC7KBFQgSJLpe/4akm+YjNBEqYepx8k=",
"1.29.4": "sha256-3Eu26mzTWwJNY8wg0cGACpxpW9b3BBHFc1jXxAdROwA=",
"1.29.5": "sha256-DUMoo8Z+Tw2/Jw+kk0Pz6rkxat3hob0qhX+laHapr/E=",
"1.29.6": "sha256-Dw+pQp0LzwTycdz09mZYLdSksV1vEWpF8XtfzakMLSw=",
"1.30.0": "sha256-+oh2R0ItNPPHzFsw/vz5cITSwyd+/yN8WAhoW6jksVo=",
"1.30.1": "sha256-xFBJuCmvh2WI7Bow3vOITOd8LBdc13SF1Jx40gZKOPs=",
"1.30.2": "sha256-cs6wgjEbQgMoJ6k2+AzSQ3uO7gMFPQXb42ukhYX+v7g="
}
}
}