From 04b8fa388deac6893f47bb6085c45fbb5e1ae2ea Mon Sep 17 00:00:00 2001 From: Alexander Berger Date: Mon, 19 Jun 2023 15:56:41 +0200 Subject: [PATCH 1/3] Upgrade CI dependencies and Kubernetes versions --- .github/install-cr.sh | 2 +- .github/workflows/build.yaml | 4 ++-- .github/workflows/publish.yml | 18 +++++++++--------- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/.github/install-cr.sh b/.github/install-cr.sh index c3fcec0..0943f75 100755 --- a/.github/install-cr.sh +++ b/.github/install-cr.sh @@ -2,7 +2,7 @@ set -e -version=v1.4.0 +version=v1.5.0 curl -sSLo /tmp/cr.tar.gz "https://github.com/helm/chart-releaser/releases/download/$version/chart-releaser_${version#v}_linux_amd64.tar.gz" tar -xzvf /tmp/cr.tar.gz -C "/tmp" rm -f /tmp/cr.tar.gz diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index b8dd2f0..3b68043 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -39,8 +39,8 @@ jobs: - name: Setup Kubernetes uses: engineerd/setup-kind@v0.5.0 with: - version: "v0.13.0" - image: kindest/node:v1.23.6 + version: "v0.20.0" + image: kindest/node:v1.26.6 - name: Setup Helm uses: fluxcd/pkg/actions/helm@main - name: Setup Kubectl diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 4f37227..e01c0a0 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -53,11 +53,11 @@ jobs: strategy: matrix: k8s: - - v1.20.2 - - v1.21.12 - - v1.22.9 - - v1.23.6 - - v1.24.0 + - v1.23.17 + - v1.24.15 + - v1.25.11 + - v1.26.6 + - v1.27.3 steps: - name: Checkout uses: actions/checkout@v3 @@ -67,13 +67,13 @@ jobs: - name: Set up Helm uses: azure/setup-helm@v3.5 with: - version: "v3.8.2" + version: "v3.12.1" - name: Run chart-testing (lint) run: (cd charts/k8s-object-syncer && helm lint .) - name: Create kind ${{ matrix.k8s }} cluster - uses: helm/kind-action@v1.5.0 + uses: helm/kind-action@v1.7.0 with: - version: "v0.13.0" + version: "v0.20.0" node_image: kindest/node:${{ matrix.k8s }} - name: Install chart # No --wait, we do not wait for the Deployment to become ready, as it will not become @@ -136,7 +136,7 @@ jobs: - name: Install Helm uses: azure/setup-helm@v3.5 with: - version: "v3.8.2" + version: "v3.12.1" - name: Install CR run: .github/install-cr.sh - name: Update Helm Chart versions From 31a3254a4945ab78457693a2f99e4c462f61d23c Mon Sep 17 00:00:00 2001 From: Alexander Berger Date: Mon, 19 Jun 2023 15:58:03 +0200 Subject: [PATCH 2/3] Update Alpine Linux from 3.15.4 to 3.18.2 --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index c791e14..d4647ba 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -ARG ALPINE_VERSION=3.15.4 +ARG ALPINE_VERSION=3.18.2 FROM alpine:$ALPINE_VERSION as builder From 6682d4dd9d817fa46fd913628d972eadaf326358 Mon Sep 17 00:00:00 2001 From: Alexander Berger Date: Mon, 19 Jun 2023 19:08:35 +0200 Subject: [PATCH 3/3] Upgrade dependencies and move Kubernetes API version from v1.20 to v1.26 --- Cargo.lock | 982 +++++++++++------- charts/k8s-object-syncer/crds/crds.yaml | 325 +++--- rustrial-k8s-object-syncer-apis/Cargo.toml | 10 +- rustrial-k8s-object-syncer/Cargo.toml | 18 +- rustrial-k8s-object-syncer/src/main.rs | 28 +- .../src/object_sync_controller.rs | 46 +- .../src/object_sync_modifications.rs | 26 +- .../src/resource_controller.rs | 63 +- rustrial-k8s-object-syncer/src/utils.rs | 18 +- 9 files changed, 870 insertions(+), 646 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 27499e4..df24d6e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4,10 +4,11 @@ version = 3 [[package]] name = "ahash" -version = "0.7.6" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47" +checksum = "2c99f64d1e06488f620f932677e24bc6e2897582980441ae90a671415bd7ec2f" dependencies = [ + "cfg-if", "getrandom", "once_cell", "version_check", @@ -15,39 +16,43 @@ dependencies = [ [[package]] name = "aho-corasick" -version = "0.7.18" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e37cfd5e7657ada45f742d6e99ca5788580b5c529dc78faf11ece6dc702656f" +checksum = "43f6cb1bf222025340178f382c426f13757b2960e89779dfcb319c32542a5a41" dependencies = [ "memchr", ] [[package]] -name = "anyhow" -version = "1.0.57" +name = "android-tzdata" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08f9b8508dccb7687a1d6c4ce66b2b0ecef467c94667de27d8d7fe1f8d2a9cdc" +checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" [[package]] -name = "async-trait" -version = "0.1.53" +name = "android_system_properties" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed6aa3524a2dfcf9fe180c51eae2b58738348d819517ceadf95789c51fff7600" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" dependencies = [ - "proc-macro2", - "quote", - "syn", + "libc", ] [[package]] -name = "atty" -version = "0.2.14" +name = "anyhow" +version = "1.0.71" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" +checksum = "9c7d0618f0e0b7e8ff11427422b64564d5fb0be1940354bfe2e0529b18a9d9b8" + +[[package]] +name = "async-trait" +version = "0.1.68" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9ccdd8f2a161be9bd5c023df56f1b2a0bd1d83872ae53b71a84a12c9bf6e842" dependencies = [ - "hermit-abi", - "libc", - "winapi", + "proc-macro2", + "quote", + "syn 2.0.18", ] [[package]] @@ -69,9 +74,21 @@ dependencies = [ [[package]] name = "base64" -version = "0.13.0" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd" +checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" + +[[package]] +name = "base64" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ea22880d78093b0cbe17c89f64a7d457941e65759157ec6cb31a31d652b05e5" + +[[package]] +name = "base64" +version = "0.21.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "604178f6c5c21f02dc555784810edfb88d34ac2c73b2eae109655649ee73ce3d" [[package]] name = "bitflags" @@ -81,21 +98,21 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bumpalo" -version = "3.12.0" +version = "3.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d261e256854913907f67ed06efbc3338dfe6179796deefc1ff763fc1aee5535" +checksum = "a3e2c3daef883ecc1b5d58c15adae93470a91d425f3532ba1695849656af3fc1" [[package]] name = "bytes" -version = "1.1.0" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4872d67bab6358e59559027aa3b9157c53d9358c51423c17554809a8858e0f8" +checksum = "89b2fd2a0dcf38d7971e2194b6b6eebab45ae01067456a7fd93d5547a61b70be" [[package]] name = "cc" -version = "1.0.73" +version = "1.0.79" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fff2a6927b3bb87f9595d67196a70493f627687a71d87a0d692242c33f58c11" +checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f" [[package]] name = "cfg-if" @@ -105,12 +122,12 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] name = "chrono" -version = "0.4.19" +version = "0.4.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "670ad68c9088c2a963aaa298cb369688cf3f9465ce5e2d4ca10e6e0098a1ce73" +checksum = "ec837a71355b28f6556dbd569b37b3f363091c0bd4b2e735674521b4c5fd9bc5" dependencies = [ - "libc", - "num-integer", + "android-tzdata", + "iana-time-zone", "num-traits", "serde", "winapi", @@ -128,15 +145,15 @@ dependencies = [ [[package]] name = "core-foundation-sys" -version = "0.8.3" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc" +checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa" [[package]] name = "crossbeam-channel" -version = "0.5.4" +version = "0.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5aaa7bd5fb665c6864b5f963dd9097905c54125909c7aa94c9e18507cdbe6c53" +checksum = "a33c2bf77f2df06183c3aa30d1e96c0695a313d4f9c453cc3762a6db39f99200" dependencies = [ "cfg-if", "crossbeam-utils", @@ -144,19 +161,18 @@ dependencies = [ [[package]] name = "crossbeam-utils" -version = "0.8.8" +version = "0.8.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bf124c720b7686e3c2663cf54062ab0f68a88af2fb6a030e87e30bf721fcb38" +checksum = "5a22b2d63d4d1dc0b7f1b6b2747dd0088008a9be28b6ddf0b1e7d335e3037294" dependencies = [ "cfg-if", - "lazy_static", ] [[package]] name = "darling" -version = "0.14.1" +version = "0.14.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4529658bdda7fd6769b8614be250cdcfc3aeb0ee72fe66f9e41e5e5eb73eac02" +checksum = "7b750cb3417fd1b327431a470f388520309479ab0bf5e323505daf0290cd3850" dependencies = [ "darling_core", "darling_macro", @@ -164,37 +180,40 @@ dependencies = [ [[package]] name = "darling_core" -version = "0.14.1" +version = "0.14.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "649c91bc01e8b1eac09fb91e8dbc7d517684ca6be8ebc75bb9cafc894f9fdb6f" +checksum = "109c1ca6e6b7f82cc233a97004ea8ed7ca123a9af07a8230878fcfda9b158bf0" dependencies = [ "fnv", "ident_case", "proc-macro2", "quote", "strsim", - "syn", + "syn 1.0.109", ] [[package]] name = "darling_macro" -version = "0.14.1" +version = "0.14.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddfc69c5bfcbd2fc09a0f38451d2daf0e372e367986a83906d1b0dbc88134fb5" +checksum = "a4aab4dbc9f7611d8b55048a3a16d2d010c2c8334e46304b40ac1cc14bf3b48e" dependencies = [ "darling_core", "quote", - "syn", + "syn 1.0.109", ] [[package]] name = "dashmap" -version = "4.0.2" +version = "5.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e77a43b28d0668df09411cb0bc9a8c2adc40f9a048afe863e05fd43251e8e39c" +checksum = "907076dfda823b0b36d2a1bb5f90c96660a5bbcd7729e10727f07858f22c4edc" dependencies = [ "cfg-if", - "num_cpus", + "hashbrown", + "lock_api", + "once_cell", + "parking_lot_core", ] [[package]] @@ -205,7 +224,7 @@ checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -231,29 +250,50 @@ dependencies = [ [[package]] name = "dyn-clone" -version = "1.0.5" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21e50f3adc76d6a43f5ed73b698a87d0760ca74617f60f7c3b879003536fdd28" +checksum = "68b0cf012f1230e43cd00ebb729c6bb58707ecfa8ad08b52ef3a4ccd2697fc30" [[package]] name = "either" -version = "1.6.1" +version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e78d4f1cc4ae33bbfc157ed5d5a5ef3bc29227303d595861deb238fcec4e9457" +checksum = "7fcaabb2fef8c910e7f4c7ce9f67a1283a1715879a7c230ca9d6d1ae31f16d91" [[package]] name = "env_logger" -version = "0.9.0" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b2cf0344971ee6c64c31be0d530793fba457d322dfec2810c453d0ef228f9c3" +checksum = "85cdab6a89accf66733ad5a1693a4dcced6aeff64602b634530dd73c1f3ee9f0" dependencies = [ - "atty", "humantime", + "is-terminal", "log", "regex", "termcolor", ] +[[package]] +name = "errno" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4bcfec3a70f97c962c307b2d2c56e358cf1d00b558d74262b5f929ee8cc7e73a" +dependencies = [ + "errno-dragonfly", + "libc", + "windows-sys 0.48.0", +] + +[[package]] +name = "errno-dragonfly" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf" +dependencies = [ + "cc", + "libc", +] + [[package]] name = "fnv" version = "1.0.7" @@ -277,19 +317,18 @@ checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" [[package]] name = "form_urlencoded" -version = "1.0.1" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5fc25a87fa4fd2094bffb06925852034d90a17f0d1e05197d4956d3555752191" +checksum = "a62bc1cf6f830c2ec14a513a9fb124d0a213a629668a4186f329db21fe045652" dependencies = [ - "matches", "percent-encoding", ] [[package]] name = "futures" -version = "0.3.21" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f73fe65f54d1e12b726f517d3e2135ca3125a437b6d998caf1962961f7172d9e" +checksum = "23342abe12aba583913b2e62f22225ff9c950774065e4bfb61a19cd9770fec40" dependencies = [ "futures-channel", "futures-core", @@ -302,9 +341,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.21" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3083ce4b914124575708913bca19bfe887522d6e2e6d0952943f5eac4a74010" +checksum = "955518d47e09b25bbebc7a18df10b81f0c766eaf4c4f1cccef2fca5f2a4fb5f2" dependencies = [ "futures-core", "futures-sink", @@ -312,15 +351,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.21" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c09fd04b7e4073ac7156a9539b57a484a8ea920f79c7c675d05d289ab6110d3" +checksum = "4bca583b7e26f571124fe5b7561d49cb2868d79116cfa0eefce955557c6fee8c" [[package]] name = "futures-executor" -version = "0.3.21" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9420b90cfa29e327d0429f19be13e7ddb68fa1cccb09d65e5706b8c7a749b8a6" +checksum = "ccecee823288125bd88b4d7f565c9e58e41858e47ab72e8ea2d64e93624386e0" dependencies = [ "futures-core", "futures-task", @@ -329,38 +368,38 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.21" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc4045962a5a5e935ee2fdedaa4e08284547402885ab326734432bed5d12966b" +checksum = "4fff74096e71ed47f8e023204cfd0aa1289cd54ae5430a9523be060cdb849964" [[package]] name = "futures-macro" -version = "0.3.21" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33c1e13800337f4d4d7a316bf45a567dbcb6ffe087f16424852d97e97a91f512" +checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.18", ] [[package]] name = "futures-sink" -version = "0.3.21" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21163e139fa306126e6eedaf49ecdb4588f939600f0b1e770f4205ee4b7fa868" +checksum = "f43be4fe21a13b9781a69afa4985b0f6ee0e1afab2c6f454a8cf30e2b2237b6e" [[package]] name = "futures-task" -version = "0.3.21" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57c66a976bf5909d801bbef33416c41372779507e7a6b3a5e25e4749c58f776a" +checksum = "76d3d132be6c0e6aa1534069c705a74a5997a356c0dc2f86a47765e5617c5b65" [[package]] name = "futures-util" -version = "0.3.21" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8b7abd5d659d9b90c8cba917f6ec750a74e2dc23902ef9cd4cc8c8b22e6036a" +checksum = "26b01e40b772d54cf6c6d721c1d1abd0647a0106a12ecaa1c186273392a69533" dependencies = [ "futures-channel", "futures-core", @@ -376,35 +415,41 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.6" +version = "0.2.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9be70c98951c83b8d2f8f60d7065fa6d5146873094452a1008da8c2f1e4205ad" +checksum = "be4136b2a15dd319360be1c07d9933517ccf0be8f16bf62a3bee4f0d618df427" dependencies = [ "cfg-if", "libc", - "wasi 0.10.2+wasi-snapshot-preview1", + "wasi", ] [[package]] name = "hashbrown" -version = "0.11.2" +version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" [[package]] name = "hermit-abi" -version = "0.1.19" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" +checksum = "ee512640fe35acbfb4bb779db6f0d80704c2cacfa2e39b601ef3e3f47d1ae4c7" dependencies = [ "libc", ] +[[package]] +name = "hermit-abi" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fed44880c466736ef9a5c5b5facefb5ed0785676d0c02d612db14e54f0d84286" + [[package]] name = "http" -version = "0.2.7" +version = "0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff8670570af52249509a86f5e3e18a08c60b177071826898fde8997cf5f6bfbb" +checksum = "bd6effc99afb63425aff9b05836f029929e345a6148a14b7ecd5ab67af944482" dependencies = [ "bytes", "fnv", @@ -413,9 +458,9 @@ dependencies = [ [[package]] name = "http-body" -version = "0.4.4" +version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ff4f84919677303da5f147645dbea6b1881f368d03ac84e1dc09031ebd7b2c6" +checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1" dependencies = [ "bytes", "http", @@ -430,9 +475,9 @@ checksum = "0bfe8eed0a9285ef776bb792479ea3834e8b94e13d615c2f66d03dd50a435a29" [[package]] name = "httparse" -version = "1.7.1" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "496ce29bb5a52785b44e0f7ca2847ae0bb839c9bd28f69acac9b99d461c0c04c" +checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" [[package]] name = "httpdate" @@ -448,9 +493,9 @@ checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" [[package]] name = "hyper" -version = "0.14.18" +version = "0.14.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b26ae0a80afebe130861d90abf98e3814a4f28a4c6ffeb5ab8ebb2be311e0ef2" +checksum = "ab302d72a6f11a3b910431ff93aae7e773078c769f0a3ef15fb9ec692ed147d4" dependencies = [ "bytes", "futures-channel", @@ -481,7 +526,7 @@ dependencies = [ "once_cell", "openssl", "openssl-sys", - "parking_lot 0.12.0", + "parking_lot", "tokio", "tokio-openssl", "tower-layer", @@ -489,9 +534,9 @@ dependencies = [ [[package]] name = "hyper-rustls" -version = "0.23.0" +version = "0.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d87c48c02e0dc5e3b849a2041db3029fd066650f8f717c07bf8ed78ccb895cac" +checksum = "0646026eb1b3eea4cd9ba47912ea5ce9cc07713d105b1a14698f4e6433d348b7" dependencies = [ "http", "hyper", @@ -514,6 +559,29 @@ dependencies = [ "tokio-io-timeout", ] +[[package]] +name = "iana-time-zone" +version = "0.1.57" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2fad5b825842d2b38bd206f3e81d6957625fd7f0a361e345c30e01a0ae2dd613" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "wasm-bindgen", + "windows", +] + +[[package]] +name = "iana-time-zone-haiku" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" +dependencies = [ + "cc", +] + [[package]] name = "ident_case" version = "1.0.1" @@ -522,9 +590,9 @@ checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" [[package]] name = "indexmap" -version = "1.8.1" +version = "1.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f647032dfaa1f8b6dc29bd3edb7bbef4861b8b8007ebb118d6db284fd59f6ee" +checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" dependencies = [ "autocfg", "hashbrown", @@ -539,29 +607,53 @@ dependencies = [ "cfg-if", ] +[[package]] +name = "io-lifetimes" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2" +dependencies = [ + "hermit-abi 0.3.1", + "libc", + "windows-sys 0.48.0", +] + +[[package]] +name = "is-terminal" +version = "0.4.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adcf93614601c8129ddf72e2d5633df827ba6551541c6d8c59520a371475be1f" +dependencies = [ + "hermit-abi 0.3.1", + "io-lifetimes", + "rustix", + "windows-sys 0.48.0", +] + [[package]] name = "itoa" -version = "1.0.2" +version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "112c678d4050afce233f4f2852bb2eb519230b3cf12f33585275537d7e41578d" +checksum = "453ad9f582a441959e5f0d088b02ce04cfe8d51a8eaf077f12ac6d3e94164ca6" [[package]] name = "js-sys" -version = "0.3.57" +version = "0.3.64" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "671a26f820db17c2a2750743f1dd03bafd15b98c9f30c7c2628c024c05d73397" +checksum = "c5f195fe497f702db0f318b07fdd68edb16955aed830df8363d837542f8f935a" dependencies = [ "wasm-bindgen", ] [[package]] name = "json-patch" -version = "0.2.6" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f995a3c8f2bc3dd52a18a583e90f9ec109c047fa1603a853e46bcda14d2e279d" +checksum = "1f54898088ccb91df1b492cc80029a6fdf1c48ca0db7c6822a8babad69c94658" dependencies = [ "serde", "serde_json", + "thiserror", "treediff", ] @@ -578,11 +670,11 @@ dependencies = [ [[package]] name = "k8s-openapi" -version = "0.14.0" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0489fc937cc7616a9abfa61bf39c250d7e32e1325ef028c8d9278dd24ea395b3" +checksum = "cd990069640f9db34b3b0f7a1afc62a05ffaa3be9b66aa3c313f58346df7f788" dependencies = [ - "base64", + "base64 0.21.2", "bytes", "chrono", "schemars", @@ -593,9 +685,9 @@ dependencies = [ [[package]] name = "kube" -version = "0.72.0" +version = "0.83.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "977951a1d7dbce4c6f9c2cbed0711f568df9944010fafa88161a20f7e5163bd3" +checksum = "32f468b2fa6c5ef92117813238758f79e394c2d7688bd6faa3e77243f90260b0" dependencies = [ "k8s-openapi", "kube-client", @@ -605,11 +697,11 @@ dependencies = [ [[package]] name = "kube-client" -version = "0.72.0" +version = "0.83.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "625e8a89c79dd4e590217838f32274ccbb0f4ecc1db181f84aba3df635fca729" +checksum = "337eb332d253036adc3247936248d0742c6c743f51eb38a684fd9b3b2878b27c" dependencies = [ - "base64", + "base64 0.20.0", "bytes", "chrono", "dirs-next", @@ -643,9 +735,9 @@ dependencies = [ [[package]] name = "kube-core" -version = "0.72.0" +version = "0.83.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0491dcd9adca79a96c63404aa978137f5fe1d3db5dcb6e5c0b073f915dbdd49d" +checksum = "f924177ad71936cfe612641b45bb9879890696d3c026f0846423529f4fa449af" dependencies = [ "chrono", "form_urlencoded", @@ -661,31 +753,32 @@ dependencies = [ [[package]] name = "kube-derive" -version = "0.72.0" +version = "0.83.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f19faefec284e5eec6680c74cd54d29823f38f0cf8811d54265877e1963996ad" +checksum = "3ce7c7a14cf3fe567ca856de41db0d61394867675cfb0d65094c55f0fa2df2e0" dependencies = [ "darling", "proc-macro2", "quote", "serde_json", - "syn", + "syn 1.0.109", ] [[package]] name = "kube-runtime" -version = "0.72.0" +version = "0.83.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb67002cbacd6cd99d1b1d0890785a84b6408158972f2561317bc4cdc06c981e" +checksum = "6d5e4d09df25250ffcb09df3f31105a5f49eb8f8a08da9b776ea5b6431ec476f" dependencies = [ "ahash", + "async-trait", "backoff", "derivative", "futures", "json-patch", "k8s-openapi", "kube-client", - "parking_lot 0.12.0", + "parking_lot", "pin-project", "serde", "serde_json", @@ -704,15 +797,15 @@ checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" [[package]] name = "libc" -version = "0.2.125" +version = "0.2.146" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5916d2ae698f6de9bfb891ad7a8d65c09d232dc58cc4ac433c7da3b2fd84bc2b" +checksum = "f92be4933c13fd498862a9e02a3055f8a8d9c039ce33db97306fd5a6caa7f29b" [[package]] name = "linked-hash-map" -version = "0.5.4" +version = "0.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fb9b38af92608140b86b693604b9ffcc5824240a484d1ecd4795bacb2fe88f3" +checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" [[package]] name = "linked_hash_set" @@ -723,11 +816,17 @@ dependencies = [ "linked-hash-map", ] +[[package]] +name = "linux-raw-sys" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519" + [[package]] name = "lock_api" -version = "0.4.7" +version = "0.4.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "327fa5b6a6940e4699ec49a9beae1ea4845c6bab9314e4f84ac68742139d8c53" +checksum = "c1cc9717a20b1bb222f333e6a92fd32f7d8a18ddc5a3191a11af45dcbf4dcd16" dependencies = [ "autocfg", "scopeguard", @@ -735,18 +834,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "matches" -version = "0.1.9" +version = "0.4.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3e378b66a060d48947b590737b30a1be76706c8dd7b8ba0f2fe3989c68a853f" +checksum = "b06a4cde4c0f271a446782e3eff8de789548ce57dbc8eca9292c27f4a42004b4" [[package]] name = "memchr" @@ -755,25 +845,20 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" [[package]] -name = "mio" -version = "0.8.3" +name = "mime" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "713d550d9b44d89174e066b7a6217ae06234c10cb47819a88290d2b353c31799" -dependencies = [ - "libc", - "log", - "wasi 0.11.0+wasi-snapshot-preview1", - "windows-sys", -] +checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" [[package]] -name = "num-integer" -version = "0.1.45" +name = "mio" +version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" +checksum = "927a765cd3fc26206e66b296465fa9d3e5ab003e651c1b3c060e7956d96b19d2" dependencies = [ - "autocfg", - "num-traits", + "libc", + "wasi", + "windows-sys 0.48.0", ] [[package]] @@ -787,25 +872,25 @@ dependencies = [ [[package]] name = "num_cpus" -version = "1.13.1" +version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19e64526ebdee182341572e50e9ad03965aa510cd94427a4549448f285e957a1" +checksum = "0fac9e2da13b5eb447a6ce3d392f23a29d8694bff781bf03a16cd9ac8697593b" dependencies = [ - "hermit-abi", + "hermit-abi 0.2.6", "libc", ] [[package]] name = "once_cell" -version = "1.10.0" +version = "1.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87f3e037eac156d1775da914196f0f37741a274155e34a0b7e427c35d2a2ecb9" +checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d" [[package]] name = "openssl" -version = "0.10.48" +version = "0.10.54" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "518915b97df115dd36109bfa429a48b8f737bd05508cf9588977b599648926d2" +checksum = "69b3f656a17a6cbc115b5c7a40c616947d213ba182135b014d6051b73ab6f019" dependencies = [ "bitflags", "cfg-if", @@ -818,13 +903,13 @@ dependencies = [ [[package]] name = "openssl-macros" -version = "0.1.0" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b501e44f11665960c7e7fcf062c7d96a14ade4aa98116c004b2e37b5be7d736c" +checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.18", ] [[package]] @@ -835,11 +920,10 @@ checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" [[package]] name = "openssl-sys" -version = "0.9.83" +version = "0.9.88" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "666416d899cf077260dac8698d60a60b435a46d57e82acb1be3d0dad87284e5b" +checksum = "c2ce0f250f34a308dcfdbb351f511359857d4ed2134ba715a4eadd46e1ffd617" dependencies = [ - "autocfg", "cc", "libc", "pkg-config", @@ -848,30 +932,19 @@ dependencies = [ [[package]] name = "opentelemetry" -version = "0.17.0" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6105e89802af13fdf48c49d7646d3b533a70e536d818aae7e78ba0433d01acb8" +checksum = "5f4b8347cc26099d3aeee044065ecc3ae11469796b4d65d065a23a584ed92a6f" dependencies = [ - "async-trait", - "crossbeam-channel", - "dashmap", - "fnv", - "futures-channel", - "futures-executor", - "futures-util", - "js-sys", - "lazy_static", - "percent-encoding", - "pin-project", - "rand", - "thiserror", + "opentelemetry_api", + "opentelemetry_sdk", ] [[package]] name = "opentelemetry-prometheus" -version = "0.10.0" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9328977e479cebe12ce0d3fcecdaea4721d234895a9440c5b5dfd113f0594ac6" +checksum = "9a9f186f6293ebb693caddd0595e66b74a6068fa51048e26e0bf9c95478c639c" dependencies = [ "opentelemetry", "prometheus", @@ -879,95 +952,106 @@ dependencies = [ ] [[package]] -name = "ordered-float" -version = "2.10.0" +name = "opentelemetry_api" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7940cf2ca942593318d07fcf2596cdca60a85c9e7fab408a5e21a4f9dcd40d87" +checksum = "ed41783a5bf567688eb38372f2b7a8530f5a607a4b49d38dd7573236c23ca7e2" dependencies = [ - "num-traits", + "fnv", + "futures-channel", + "futures-util", + "indexmap", + "once_cell", + "pin-project-lite", + "thiserror", + "urlencoding", ] [[package]] -name = "parking_lot" -version = "0.11.2" +name = "opentelemetry_sdk" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99" +checksum = "8b3a2a91fdbfdd4d212c0dcc2ab540de2c2bcbbd90be17de7a7daf8822d010c1" dependencies = [ - "instant", - "lock_api", - "parking_lot_core 0.8.5", + "async-trait", + "crossbeam-channel", + "dashmap", + "fnv", + "futures-channel", + "futures-executor", + "futures-util", + "once_cell", + "opentelemetry_api", + "percent-encoding", + "rand", + "thiserror", ] [[package]] -name = "parking_lot" -version = "0.12.0" +name = "ordered-float" +version = "2.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87f5ec2493a61ac0506c0f4199f99070cbe83857b0337006a30f3e6719b8ef58" +checksum = "7940cf2ca942593318d07fcf2596cdca60a85c9e7fab408a5e21a4f9dcd40d87" dependencies = [ - "lock_api", - "parking_lot_core 0.9.3", + "num-traits", ] [[package]] -name = "parking_lot_core" -version = "0.8.5" +name = "parking_lot" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d76e8e1493bcac0d2766c42737f34458f1c8c50c0d23bcb24ea953affb273216" +checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" dependencies = [ - "cfg-if", - "instant", - "libc", - "redox_syscall", - "smallvec", - "winapi", + "lock_api", + "parking_lot_core", ] [[package]] name = "parking_lot_core" -version = "0.9.3" +version = "0.9.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09a279cbf25cb0757810394fbc1e359949b59e348145c643a939a525692e6929" +checksum = "93f00c865fe7cabf650081affecd3871070f26767e7b2070a3ffae14c654b447" dependencies = [ "cfg-if", "libc", - "redox_syscall", + "redox_syscall 0.3.5", "smallvec", - "windows-sys", + "windows-targets", ] [[package]] name = "pem" -version = "1.0.2" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9a3b09a20e374558580a4914d3b7d89bd61b954a5a5e1dcbea98753addb1947" +checksum = "a8835c273a76a90455d7344889b0964598e3316e2a79ede8e36f16bdcf2228b8" dependencies = [ - "base64", + "base64 0.13.1", ] [[package]] name = "percent-encoding" -version = "2.1.0" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e" +checksum = "9b2a4787296e9989611394c33f193f676704af1686e70b8f8033ab5ba9a35a94" [[package]] name = "pin-project" -version = "1.0.10" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58ad3879ad3baf4e44784bc6a718a8698867bb991f8ce24d1bcbe2cfb4c3a75e" +checksum = "c95a7476719eab1e366eaf73d0260af3021184f18177925b07f54b30089ceead" dependencies = [ "pin-project-internal", ] [[package]] name = "pin-project-internal" -version = "1.0.10" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "744b6f092ba29c3650faf274db506afd39944f48420f6c86b17cfe0ee1cb36bb" +checksum = "39407670928234ebc5e6e580247dd567ad73a3578460c5990f9503df207e8f07" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.18", ] [[package]] @@ -984,51 +1068,51 @@ checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" [[package]] name = "pkg-config" -version = "0.3.25" +version = "0.3.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1df8c4ec4b0627e53bdf214615ad287367e482558cf84b109250b37464dc03ae" +checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964" [[package]] name = "ppv-lite86" -version = "0.2.16" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb9f9e6e233e5c4a35559a617bf40a4ec447db2e84c20b55a6f83167b7e57872" +checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" [[package]] name = "proc-macro2" -version = "1.0.39" +version = "1.0.60" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c54b25569025b7fc9651de43004ae593a75ad88543b17178aa5e1b9c4f15f56f" +checksum = "dec2b086b7a862cf4de201096214fa870344cf922b2b30c167badb3af3195406" dependencies = [ "unicode-ident", ] [[package]] name = "prometheus" -version = "0.13.0" +version = "0.13.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7f64969ffd5dd8f39bd57a68ac53c163a095ed9d0fb707146da1b27025a3504" +checksum = "449811d15fbdf5ceb5c1144416066429cf82316e2ec8ce0c1f6f8a02e7bbcf8c" dependencies = [ "cfg-if", "fnv", "lazy_static", "memchr", - "parking_lot 0.11.2", + "parking_lot", "protobuf", "thiserror", ] [[package]] name = "protobuf" -version = "2.27.1" +version = "2.28.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf7e6d18738ecd0902d30d1ad232c9125985a3422929b16c65517b38adc14f96" +checksum = "106dd99e98437432fed6519dedecfade6a06a73bb7b2a1e019fdd2bee5778d94" [[package]] name = "quote" -version = "1.0.18" +version = "1.0.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1feb54ed693b93a84e14094943b84b7c4eae204c512b7ccb95ab0c66d278ad1" +checksum = "1b9ab9c7eadfd8df19006f1cf1a4aed13540ed5cbc047010ece5826e10825488" dependencies = [ "proc-macro2", ] @@ -1056,18 +1140,27 @@ dependencies = [ [[package]] name = "rand_core" -version = "0.6.3" +version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d34f1408f55294453790c48b2f1ebbb1c5b4b7563eb1f418bcfcfdbb06ebb4e7" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" dependencies = [ "getrandom", ] [[package]] name = "redox_syscall" -version = "0.2.13" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" +dependencies = [ + "bitflags", +] + +[[package]] +name = "redox_syscall" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62f25bc4c7e55e0b0b7a1d43fb893f4fa1361d0abe38b9ce4f323c2adfe6ef42" +checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29" dependencies = [ "bitflags", ] @@ -1079,15 +1172,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b" dependencies = [ "getrandom", - "redox_syscall", + "redox_syscall 0.2.16", "thiserror", ] [[package]] name = "regex" -version = "1.5.5" +version = "1.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a11647b6b25ff05a515cb92c365cec08801e83423a235b51e231e1808747286" +checksum = "d0ab3ca65655bb1e41f2a8c8cd662eb4fb035e67c3f78da1d61dffe89d07300f" dependencies = [ "aho-corasick", "memchr", @@ -1096,9 +1189,9 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.6.25" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f497285884f3fcff424ffc933e56d7cbca511def0c9831a7f9b5f6153e3cc89b" +checksum = "436b050e76ed2903236f032a59761c1eb99e1b0aead2c257922771dab1fc8c78" [[package]] name = "ring" @@ -1115,23 +1208,37 @@ dependencies = [ "winapi", ] +[[package]] +name = "rustix" +version = "0.37.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b96e891d04aa506a6d1f318d2771bcb1c7dfda84e126660ace067c9b474bb2c0" +dependencies = [ + "bitflags", + "errno", + "io-lifetimes", + "libc", + "linux-raw-sys", + "windows-sys 0.48.0", +] + [[package]] name = "rustls" -version = "0.20.5" +version = "0.21.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a024a432ae760ab3bff924ad91ce1cfa52cb57ed16e1ef32d0d249cfee1a6c13" +checksum = "e32ca28af694bc1bbf399c33a516dbdf1c90090b8ab23c2bc24f834aa2247f5f" dependencies = [ "log", "ring", + "rustls-webpki", "sct", - "webpki", ] [[package]] name = "rustls-native-certs" -version = "0.6.2" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0167bac7a9f490495f3c33013e7722b53cb087ecbe082fb0c6387c96f634ea50" +checksum = "a9aace74cb666635c918e9c12bc0d348266037aa8eb599b5cba565709a8dff00" dependencies = [ "openssl-probe", "rustls-pemfile", @@ -1141,11 +1248,21 @@ dependencies = [ [[package]] name = "rustls-pemfile" -version = "1.0.0" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d194b56d58803a43635bdc398cd17e383d6f71f9182b9a192c127ca42494a59b" +dependencies = [ + "base64 0.21.2", +] + +[[package]] +name = "rustls-webpki" +version = "0.100.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7522c9de787ff061458fe9a829dc790a3f5b22dc571694fc5883f448b94d9a9" +checksum = "d6207cd5ed3d8dca7816f8f3725513a34609c0c765bf652b8c3cb4cfd87db46b" dependencies = [ - "base64", + "ring", + "untrusted", ] [[package]] @@ -1185,25 +1302,24 @@ dependencies = [ [[package]] name = "ryu" -version = "1.0.10" +version = "1.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3f6f92acf49d1b98f7a81226834412ada05458b7364277387724a237f062695" +checksum = "f91339c0467de62360649f8d3e185ca8de4224ff281f66000de5eb2a77a79041" [[package]] name = "schannel" -version = "0.1.19" +version = "0.1.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f05ba609c234e60bee0d547fe94a4c7e9da733d1c962cf6e59efa4cd9c8bc75" +checksum = "713cfb06c7059f3588fb8044c0fad1d09e3c01d225e25b9220dbfdcf16dbb1b3" dependencies = [ - "lazy_static", - "winapi", + "windows-sys 0.42.0", ] [[package]] name = "schemars" -version = "0.8.9" +version = "0.8.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d21ecb263bf75fc69d5e74b0f2a60b6dd80cfd9fb0eba15c4b9d1104ceffc77" +checksum = "02c613288622e5f0c3fdc5dbd4db1c5fbe752746b1d1a56a0630b78fd00de44f" dependencies = [ "dyn-clone", "schemars_derive", @@ -1213,14 +1329,14 @@ dependencies = [ [[package]] name = "schemars_derive" -version = "0.8.9" +version = "0.8.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "219b924f5b39f25b7d7c9203873a2698fdac8db2b396aaea6fa099b699cc40e9" +checksum = "109da1e6b197438deb6db99952990c7f959572794b80ff93707d55a232545e7c" dependencies = [ "proc-macro2", "quote", "serde_derive_internals", - "syn", + "syn 1.0.109", ] [[package]] @@ -1251,9 +1367,9 @@ dependencies = [ [[package]] name = "security-framework" -version = "2.6.1" +version = "2.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dc14f172faf8a0194a3aded622712b0de276821addc574fa54fc0a1167e10dc" +checksum = "1fc758eb7bffce5b308734e9b0c1468893cae9ff70ebf13e7090be8dcbcc83a8" dependencies = [ "bitflags", "core-foundation", @@ -1264,9 +1380,9 @@ dependencies = [ [[package]] name = "security-framework-sys" -version = "2.6.1" +version = "2.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0160a13a177a45bfb43ce71c01580998474f556ad854dcbca936dd2841a5c556" +checksum = "f51d0c0d83bec45f16480d0ce0058397a69e48fcdc52d1dc8855fb68acbd31a7" dependencies = [ "core-foundation-sys", "libc", @@ -1274,9 +1390,9 @@ dependencies = [ [[package]] name = "serde" -version = "1.0.137" +version = "1.0.164" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61ea8d54c77f8315140a05f4c7237403bf38b72704d031543aa1d16abbf517d1" +checksum = "9e8c8cf938e98f769bc164923b06dce91cea1751522f46f8466461af04c9027d" dependencies = [ "serde_derive", ] @@ -1293,13 +1409,13 @@ dependencies = [ [[package]] name = "serde_derive" -version = "1.0.137" +version = "1.0.164" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f26faba0c3959972377d3b2d306ee9f71faee9714294e41bb777f83f88578be" +checksum = "d9735b638ccc51c28bf6914d90a2e9725b377144fc612c49a611fddd1b631d68" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.18", ] [[package]] @@ -1310,14 +1426,14 @@ checksum = "85bf8229e7920a9f636479437026331ce11aa132b4dde37d121944a44d6e5f3c" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] name = "serde_json" -version = "1.0.81" +version = "1.0.97" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b7ce2b32a1aed03c558dc61a5cd328f15aff2dbc17daad8fb8af04d2100e15c" +checksum = "bdf3bf93142acad5821c99197022e170842cdbc1c30482b98750c688c640842a" dependencies = [ "indexmap", "itoa", @@ -1327,42 +1443,46 @@ dependencies = [ [[package]] name = "serde_yaml" -version = "0.8.24" +version = "0.9.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "707d15895415db6628332b737c838b88c598522e4dc70647e59b72312924aebc" +checksum = "d9d684e3ec7de3bf5466b32bd75303ac16f0736426e5a4e0d6e489559ce1249c" dependencies = [ "indexmap", + "itoa", "ryu", "serde", - "yaml-rust", + "unsafe-libyaml", ] [[package]] name = "signal-hook-registry" -version = "1.4.0" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e51e73328dc4ac0c7ccbda3a494dfa03df1de2f46018127f60c693f2648455b0" +checksum = "d8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1" dependencies = [ "libc", ] [[package]] name = "slab" -version = "0.4.6" +version = "0.4.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb703cfe953bccee95685111adeedb76fabe4e97549a58d16f03ea7b9367bb32" +checksum = "6528351c9bc8ab22353f9d776db39a20288e8d6c37ef8cfe3317cf875eecfc2d" +dependencies = [ + "autocfg", +] [[package]] name = "smallvec" -version = "1.8.0" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2dd574626839106c320a323308629dcb1acfc96e32a8cba364ddc61ac23ee83" +checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0" [[package]] name = "socket2" -version = "0.4.4" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "66d72b759436ae32898a2af0a14218dbf55efde3feeb170eb623637db85ee1e0" +checksum = "64a4a911eed85daf18834cfaa86a79b7d266ff93ff5ba14005426219480ed662" dependencies = [ "libc", "winapi", @@ -1382,9 +1502,20 @@ checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" [[package]] name = "syn" -version = "1.0.95" +version = "1.0.109" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "2.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbaf6116ab8924f39d52792136fb74fd60a80194cf1b1c6ffa6453eef1c3f942" +checksum = "32d41677bcbe24c20c52e7c70b0d8db04134c5d1066bf98662e2871ad200ea3e" dependencies = [ "proc-macro2", "quote", @@ -1393,50 +1524,50 @@ dependencies = [ [[package]] name = "termcolor" -version = "1.1.3" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bab24d30b911b2376f3a13cc2cd443142f0c81dda04c118693e35b3835757755" +checksum = "be55cf8942feac5c765c2c993422806843c9a9a45d4d5c407ad6dd2ea95eb9b6" dependencies = [ "winapi-util", ] [[package]] name = "thiserror" -version = "1.0.31" +version = "1.0.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd829fe32373d27f76265620b5309d0340cb8550f523c1dda251d6298069069a" +checksum = "978c9a314bd8dc99be594bc3c175faaa9794be04a5a5e153caba6915336cebac" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.31" +version = "1.0.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0396bc89e626244658bef819e22d0cc459e795a5ebe878e6ec336d1674a8d79a" +checksum = "f9456a42c5b0d803c8cd86e73dd7cc9edd429499f37a3550d286d5e86720569f" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.18", ] [[package]] name = "tokio" -version = "1.18.5" +version = "1.28.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e050c618355082ae5a89ec63bbf897225d5ffe84c7c4e036874e4d185a5044e" +checksum = "94d7b1cfd2aa4011f2de74c2c4c63665e27a71006b0a192dcd2710272e73dfa2" dependencies = [ + "autocfg", "bytes", "libc", - "memchr", "mio", "num_cpus", - "parking_lot 0.12.0", + "parking_lot", "pin-project-lite", "signal-hook-registry", "socket2", "tokio-macros", - "winapi", + "windows-sys 0.48.0", ] [[package]] @@ -1451,13 +1582,13 @@ dependencies = [ [[package]] name = "tokio-macros" -version = "1.7.0" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b557f72f448c511a979e2564e55d74e6c4432fc96ff4f6241bc6bded342643b7" +checksum = "630bdcf245f78637c13ec01ffae6187cca34625e8c63150d424b59e55af2675e" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.18", ] [[package]] @@ -1474,20 +1605,19 @@ dependencies = [ [[package]] name = "tokio-rustls" -version = "0.23.4" +version = "0.24.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c43ee83903113e03984cb9e5cebe6c04a5116269e900e3ddba8f068a62adda59" +checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081" dependencies = [ "rustls", "tokio", - "webpki", ] [[package]] name = "tokio-util" -version = "0.7.2" +version = "0.7.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f988a1a1adc2fb21f9c12aa96441da33a1728193ae0b95d2be22dbd17fcb4e5c" +checksum = "806fe8c2c87eccc8b3267cbae29ed3ab2d0bd37fca70ab622e46aaa9375ddb7d" dependencies = [ "bytes", "futures-core", @@ -1500,9 +1630,9 @@ dependencies = [ [[package]] name = "tower" -version = "0.4.12" +version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a89fd63ad6adf737582df5db40d286574513c69a11dac5214dc3b5603d6713e" +checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c" dependencies = [ "futures-core", "futures-util", @@ -1517,11 +1647,11 @@ dependencies = [ [[package]] name = "tower-http" -version = "0.3.3" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d342c6d58709c0a6d48d48dabbb62d4ef955cf5f0f3bbfd845838e7ae88dbae" +checksum = "5d1d42a9b3f3ec46ba828e8d376aec14592ea199f70a06a548587ecd1c4ab658" dependencies = [ - "base64", + "base64 0.20.0", "bitflags", "bytes", "futures-core", @@ -1529,6 +1659,7 @@ dependencies = [ "http", "http-body", "http-range-header", + "mime", "pin-project-lite", "tower-layer", "tower-service", @@ -1537,21 +1668,21 @@ dependencies = [ [[package]] name = "tower-layer" -version = "0.3.1" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "343bc9466d3fe6b0f960ef45960509f84480bf4fd96f92901afe7ff3df9d3a62" +checksum = "c20c8dbed6283a09604c3e69b4b7eeb54e298b8a600d4d5ecb5ad39de609f1d0" [[package]] name = "tower-service" -version = "0.3.1" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "360dfd1d6d30e05fda32ace2c8c70e9c0a9da713275777f5a4dbb8a1893930c6" +checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" [[package]] name = "tracing" -version = "0.1.34" +version = "0.1.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d0ecdcb44a79f0fe9844f0c4f33a342cbcbb5117de8001e6ba0dc2351327d09" +checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8" dependencies = [ "cfg-if", "log", @@ -1562,44 +1693,50 @@ dependencies = [ [[package]] name = "tracing-attributes" -version = "0.1.21" +version = "0.1.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc6b8ad3567499f98a1db7a752b07a7c8c7c7c34c332ec00effb2b0027974b7c" +checksum = "0f57e3ca2a01450b1a921183a9c9cbfda207fd822cef4ccb00a65402cbba7a74" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.18", ] [[package]] name = "tracing-core" -version = "0.1.26" +version = "0.1.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f54c8ca710e81886d498c2fd3331b56c93aa248d49de2222ad2742247c60072f" +checksum = "0955b8137a1df6f1a2e9a37d8a6656291ff0297c1a97c24e0d8425fe2312f79a" dependencies = [ - "lazy_static", + "once_cell", ] [[package]] name = "treediff" -version = "3.0.2" +version = "4.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "761e8d5ad7ce14bb82b7e61ccc0ca961005a275a060b9644a2431aa11553c2ff" +checksum = "52984d277bdf2a751072b5df30ec0377febdb02f7696d64c2d7d54630bac4303" dependencies = [ "serde_json", ] [[package]] name = "try-lock" -version = "0.2.3" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59547bce71d9c38b83d9c0e92b6066c4253371f15005def0c30d9657f50c7642" +checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed" [[package]] name = "unicode-ident" -version = "1.0.0" +version = "1.0.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b15811caf2415fb889178633e7724bad2509101cde276048e013b9def5e51fa0" + +[[package]] +name = "unsafe-libyaml" +version = "0.2.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d22af068fba1eb5edcb4aea19d382b2a3deb4c8f9d475c589b6ada9e0fd493ee" +checksum = "1865806a559042e51ab5414598446a5871b561d21b6764f2eabb0dd481d880a6" [[package]] name = "untrusted" @@ -1607,6 +1744,12 @@ version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" +[[package]] +name = "urlencoding" +version = "2.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8db7427f936968176eaa7cdf81b7f98b980b18495ec28f1b5791ac3bfe3eea9" + [[package]] name = "vcpkg" version = "0.2.15" @@ -1621,20 +1764,13 @@ checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" [[package]] name = "want" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0" +checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" dependencies = [ - "log", "try-lock", ] -[[package]] -name = "wasi" -version = "0.10.2+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd6fbd9a79829dd1ad0cc20627bf1ed606756a7f77edff7b66b7064f9cb327c6" - [[package]] name = "wasi" version = "0.11.0+wasi-snapshot-preview1" @@ -1643,9 +1779,9 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wasm-bindgen" -version = "0.2.80" +version = "0.2.87" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "27370197c907c55e3f1a9fbe26f44e937fe6451368324e009cba39e139dc08ad" +checksum = "7706a72ab36d8cb1f80ffbf0e071533974a60d0a308d01a5d0375bf60499a342" dependencies = [ "cfg-if", "wasm-bindgen-macro", @@ -1653,24 +1789,24 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.80" +version = "0.2.87" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53e04185bfa3a779273da532f5025e33398409573f348985af9a1cbf3774d3f4" +checksum = "5ef2b6d3c510e9625e5fe6f509ab07d66a760f0885d858736483c32ed7809abd" dependencies = [ "bumpalo", - "lazy_static", "log", + "once_cell", "proc-macro2", "quote", - "syn", + "syn 2.0.18", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-macro" -version = "0.2.80" +version = "0.2.87" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17cae7ff784d7e83a2fe7611cfe766ecf034111b49deb850a3dc7699c08251f5" +checksum = "dee495e55982a3bd48105a7b947fd2a9b4a8ae3010041b9e0faab3f9cd028f1d" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -1678,43 +1814,33 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.80" +version = "0.2.87" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99ec0dc7a4756fffc231aab1b9f2f578d23cd391390ab27f952ae0c9b3ece20b" +checksum = "54681b18a46765f095758388f2d0cf16eb8d4169b639ab575a8f5693af210c7b" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.18", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.80" +version = "0.2.87" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d554b7f530dee5964d9a9468d95c1f8b8acae4f282807e7d27d4b03099a46744" +checksum = "ca6ad05a4870b2bf5fe995117d3728437bd27d7cd5f06f13c17443ef369775a1" [[package]] name = "web-sys" -version = "0.3.57" +version = "0.3.64" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b17e741662c70c8bd24ac5c5b18de314a2c26c32bf8346ee1e6f53de919c283" +checksum = "9b85cbef8c220a6abc02aefd892dfc0fc23afb1c6a426316ec33253a3877249b" dependencies = [ "js-sys", "wasm-bindgen", ] -[[package]] -name = "webpki" -version = "0.22.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f095d78192e208183081cc07bc5515ef55216397af48b873e5edcd72637fa1bd" -dependencies = [ - "ring", - "untrusted", -] - [[package]] name = "winapi" version = "0.3.9" @@ -1746,60 +1872,140 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" +[[package]] +name = "windows" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e686886bc078bc1b0b600cac0147aadb815089b6e4da64016cbd754b6342700f" +dependencies = [ + "windows-targets", +] + +[[package]] +name = "windows-sys" +version = "0.42.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7" +dependencies = [ + "windows_aarch64_gnullvm 0.42.2", + "windows_aarch64_msvc 0.42.2", + "windows_i686_gnu 0.42.2", + "windows_i686_msvc 0.42.2", + "windows_x86_64_gnu 0.42.2", + "windows_x86_64_gnullvm 0.42.2", + "windows_x86_64_msvc 0.42.2", +] + [[package]] name = "windows-sys" -version = "0.36.1" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" +dependencies = [ + "windows-targets", +] + +[[package]] +name = "windows-targets" +version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea04155a16a59f9eab786fe12a4a450e75cdb175f9e0d80da1e17db09f55b8d2" +checksum = "7b1eb6f0cd7c80c79759c929114ef071b87354ce476d9d94271031c0497adfd5" dependencies = [ - "windows_aarch64_msvc", - "windows_i686_gnu", - "windows_i686_msvc", - "windows_x86_64_gnu", - "windows_x86_64_msvc", + "windows_aarch64_gnullvm 0.48.0", + "windows_aarch64_msvc 0.48.0", + "windows_i686_gnu 0.48.0", + "windows_i686_msvc 0.48.0", + "windows_x86_64_gnu 0.48.0", + "windows_x86_64_gnullvm 0.48.0", + "windows_x86_64_msvc 0.48.0", ] +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" + [[package]] name = "windows_aarch64_msvc" -version = "0.36.1" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3" + +[[package]] +name = "windows_i686_gnu" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9bb8c3fd39ade2d67e9874ac4f3db21f0d710bee00fe7cab16949ec184eeaa47" +checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" [[package]] name = "windows_i686_gnu" -version = "0.36.1" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241" + +[[package]] +name = "windows_i686_msvc" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "180e6ccf01daf4c426b846dfc66db1fc518f074baa793aa7d9b9aaeffad6a3b6" +checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" [[package]] name = "windows_i686_msvc" -version = "0.36.1" +version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2e7917148b2812d1eeafaeb22a97e4813dfa60a3f8f78ebe204bcc88f12f024" +checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00" [[package]] name = "windows_x86_64_gnu" -version = "0.36.1" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4dcd171b8776c41b97521e5da127a2d86ad280114807d0b2ab1e462bc764d9e1" +checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953" [[package]] name = "windows_x86_64_msvc" -version = "0.36.1" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c811ca4a8c853ef420abd8592ba53ddbbac90410fab6903b3e79972a631f7680" +checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" [[package]] -name = "yaml-rust" -version = "0.4.5" +name = "windows_x86_64_msvc" +version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56c1936c4cc7a1c9ab21a1ebb602eb942ba868cbd44a99cb7cdc5892335e1c85" -dependencies = [ - "linked-hash-map", -] +checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a" [[package]] name = "zeroize" -version = "1.5.5" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94693807d016b2f2d2e14420eb3bfcca689311ff775dcf113d74ea624b7cdf07" +checksum = "2a0956f1ba7c7909bfb66c2e9e4124ab6f6482560f6628b5aaeba39207c9aad9" diff --git a/charts/k8s-object-syncer/crds/crds.yaml b/charts/k8s-object-syncer/crds/crds.yaml index a435de6..cae2c99 100644 --- a/charts/k8s-object-syncer/crds/crds.yaml +++ b/charts/k8s-object-syncer/crds/crds.yaml @@ -1,4 +1,3 @@ ---- apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: @@ -13,180 +12,180 @@ spec: singular: objectsync scope: Namespaced versions: - - additionalPrinterColumns: - - description: Whether ObjectSync is ready or not. It is considered ready if there were no errors while synchronizing the resource. - jsonPath: ".status.conditions[?(@.type==\"Ready\")].status" - name: Ready - type: string - - description: Whether all destination objects are in sync or not. - jsonPath: ".status.conditions[?(@.type==\"InSync\")].status" - name: InSync - type: string - name: v1alpha1 - schema: - openAPIV3Schema: - description: "Auto-generated derived type for ObjectSyncSpec via `CustomResource`" - properties: - spec: - description: "Kubernetes object synchronization specification, defining how a single source object should be replicated and synced to multiple destination objects." - properties: - destinations: - description: The destinations to sync the source object to. - items: - description: Synchronization target configuration. - properties: - name: - description: "Optional new name for the destination object, defaults to the name of the source object." - nullable: true - type: string - namespace: - description: "The destination (target) namespace, if empty `\"\"` or `\"*\"` the source object is synced to all namespaces." - type: string - strategy: - description: "The sync strategy to use for this destination, defaults to \"apply\" (server side apply)." - enum: - - apply - - replace - nullable: true - type: string - required: - - namespace - type: object - type: array - source: - description: "The \"original\" source object to be synced." + - additionalPrinterColumns: + - description: Whether ObjectSync is ready or not. It is considered ready if there were no errors while synchronizing the resource. + jsonPath: .status.conditions[?(@.type=="Ready")].status + name: Ready + type: string + - description: Whether all destination objects are in sync or not. + jsonPath: .status.conditions[?(@.type=="InSync")].status + name: InSync + type: string + name: v1alpha1 + schema: + openAPIV3Schema: + description: Auto-generated derived type for ObjectSyncSpec via `CustomResource` + properties: + spec: + description: Kubernetes object synchronization specification, defining how a single source object should be replicated and synced to multiple destination objects. + properties: + destinations: + description: The destinations to sync the source object to. + items: + description: Synchronization target configuration. + properties: + name: + description: Optional new name for the destination object, defaults to the name of the source object. + nullable: true + type: string + namespace: + description: The destination (target) namespace, if empty `""` or `"*"` the source object is synced to all namespaces. + type: string + strategy: + description: The sync strategy to use for this destination, defaults to "apply" (server side apply). + enum: + - apply + - replace + nullable: true + type: string + required: + - namespace + type: object + type: array + source: + description: The "original" source object to be synced. + properties: + group: + description: The Kubernetes API Group name (without the version part). + type: string + kind: + description: The Kubernetes API Kind name. + type: string + name: + description: The Kubernetes object's name (`metadata.name`) + type: string + namespace: + description: The Kubernetes object's namespace (`metadata.namespace`) defaults to the namespace of the `ObjectSync` object. + nullable: true + type: string + version: + description: The Kubernetes API version, defaults to the preferred version of the API Group. + nullable: true + type: string + required: + - group + - kind + - name + type: object + required: + - destinations + - source + type: object + status: + nullable: true + properties: + conditions: + items: + description: We maintain our own copy of Condition as the one from k8s_openapi does not implement JsonSchema. + properties: + lastTransitionTime: + description: lastTransitionTime is the last time the condition transitioned from one status to another. This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable. + nullable: true + type: string + message: + description: message is a human readable message indicating details about the transition. This may be an empty string. + type: string + observedGeneration: + description: observedGeneration represents the .metadata.generation that the condition was set based upon. For instance, if .metadata.generation is currently 12, but the .status.conditions\[x\].observedGeneration is 9, the condition is out of date with respect to the current state of the instance. + format: int64 + nullable: true + type: integer + reason: + description: reason contains a programmatic identifier indicating the reason for the condition's last transition. Producers of specific condition types may define expected values and meanings for this field, and whether the values are considered a guaranteed API. The value should be a CamelCase string. This field may not be empty. + type: string + status: + description: status of the condition, one of True, False, Unknown. + type: string + type: + description: type of condition in CamelCase or in foo.example.com/CamelCase. + type: string + required: + - message + - reason + - status + - type + type: object + nullable: true + type: array + destinations: + description: As Kubernetes does not support cross-namespace OwnerReferences and automatic garbage collection of owned objects, we keep track of all synced destination objects in the status sub-resource. + items: + description: Synchronization target status, used to track synchronized objects. properties: group: - description: The Kubernetes API Group name (without the version part). + description: Kubernetes API Group name of the synchronization target. type: string kind: - description: The Kubernetes API Kind name. + description: Kubernetes API Kind name of the synchronization target. type: string name: - description: "The Kubernetes object's name (`metadata.name`)" + description: Kubernetes object's name of the synchronization target. type: string namespace: - description: "The Kubernetes object's namespace (`metadata.namespace`) defaults to the namespace of the `ObjectSync` object." + description: Kubernetes object's namespace of the synchronization target. + type: string + sourceVersion: + description: The last source version observed. + nullable: true + properties: + resource_version: + description: The Kubernetes object's `resourceVersion`. + nullable: true + type: string + uid: + description: The Kubernetes object's `UID`. + nullable: true + type: string + type: object + strategy: + description: The [`SyncStrategy`] applied to this destination. + enum: + - apply + - replace nullable: true type: string - version: - description: "The Kubernetes API version, defaults to the preferred version of the API Group." + syncedVersion: + description: The last source version syced, `None` if not yet synced. nullable: true + properties: + resource_version: + description: The Kubernetes object's `resourceVersion`. + nullable: true + type: string + uid: + description: The Kubernetes object's `UID`. + nullable: true + type: string + type: object + version: + description: Kubernetes API Group version of the synchronization target. type: string required: - - group - - kind - - name + - group + - kind + - name + - namespace + - version type: object - required: - - destinations - - source - type: object - status: - nullable: true - properties: - conditions: - items: - description: We maintain our own copy of Condition as the one from k8s_openapi does not implement JsonSchema. - properties: - lastTransitionTime: - description: "lastTransitionTime is the last time the condition transitioned from one status to another. This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable." - nullable: true - type: string - message: - description: message is a human readable message indicating details about the transition. This may be an empty string. - type: string - observedGeneration: - description: "observedGeneration represents the .metadata.generation that the condition was set based upon. For instance, if .metadata.generation is currently 12, but the .status.conditions\\[x\\].observedGeneration is 9, the condition is out of date with respect to the current state of the instance." - format: int64 - nullable: true - type: integer - reason: - description: "reason contains a programmatic identifier indicating the reason for the condition's last transition. Producers of specific condition types may define expected values and meanings for this field, and whether the values are considered a guaranteed API. The value should be a CamelCase string. This field may not be empty." - type: string - status: - description: "status of the condition, one of True, False, Unknown." - type: string - type: - description: type of condition in CamelCase or in foo.example.com/CamelCase. - type: string - required: - - message - - reason - - status - - type - type: object - nullable: true - type: array - destinations: - description: "As Kubernetes does not support cross-namespace OwnerReferences and automatic garbage collection of owned objects, we keep track of all synced destination objects in the status sub-resource." - items: - description: "Synchronization target status, used to track synchronized objects." - properties: - group: - description: Kubernetes API Group name of the synchronization target. - type: string - kind: - description: Kubernetes API Kind name of the synchronization target. - type: string - name: - description: "Kubernetes object's name of the synchronization target." - type: string - namespace: - description: "Kubernetes object's namespace of the synchronization target." - type: string - sourceVersion: - description: The last source version observed. - nullable: true - properties: - resource_version: - description: "The Kubernetes object's `resourceVersion`." - nullable: true - type: string - uid: - description: "The Kubernetes object's `UID`." - nullable: true - type: string - type: object - strategy: - description: "The [`SyncStrategy`] applied to this destination." - enum: - - apply - - replace - nullable: true - type: string - syncedVersion: - description: "The last source version syced, `None` if not yet synced." - nullable: true - properties: - resource_version: - description: "The Kubernetes object's `resourceVersion`." - nullable: true - type: string - uid: - description: "The Kubernetes object's `UID`." - nullable: true - type: string - type: object - version: - description: Kubernetes API Group version of the synchronization target. - type: string - required: - - group - - kind - - name - - namespace - - version - type: object - nullable: true - type: array - type: object - required: - - spec - title: ObjectSync - type: object - served: true - storage: true - subresources: - status: {} + nullable: true + type: array + type: object + required: + - spec + title: ObjectSync + type: object + served: true + storage: true + subresources: + status: {} diff --git a/rustrial-k8s-object-syncer-apis/Cargo.toml b/rustrial-k8s-object-syncer-apis/Cargo.toml index 67df4d2..b1c4d27 100644 --- a/rustrial-k8s-object-syncer-apis/Cargo.toml +++ b/rustrial-k8s-object-syncer-apis/Cargo.toml @@ -7,15 +7,15 @@ license = "Unlicense OR MIT OR Apache-2.0" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -kube = { version = "0.72.0", features = ["derive"] } +kube = { version = "0.83.0", features = ["derive"] } schemars = "0.8.8" -k8s-openapi = { version = "0.14.0", default-features = false } +k8s-openapi = { version = "0.18.0", default-features = false } serde = { version = "1.0.137", features = ["derive"] } serde_json = "1.0.81" -serde_yaml = "0.8.24" +serde_yaml = "0.9.21" [dev-dependencies] -k8s-openapi = { version = "0.14.0", default-features = false, features = [ - "v1_20", +k8s-openapi = { version = "0.18.0", default-features = false, features = [ + "v1_26", "schemars", ] } diff --git a/rustrial-k8s-object-syncer/Cargo.toml b/rustrial-k8s-object-syncer/Cargo.toml index 372609c..1335a1b 100644 --- a/rustrial-k8s-object-syncer/Cargo.toml +++ b/rustrial-k8s-object-syncer/Cargo.toml @@ -9,27 +9,27 @@ license = "Unlicense OR MIT OR Apache-2.0" [dependencies] log = "0.4.17" -env_logger = "0.9.0" -opentelemetry = "0.17.0" -opentelemetry-prometheus = "0.10.0" +env_logger = "0.10.0" +opentelemetry = "0.19.0" +opentelemetry-prometheus = "0.12.0" prometheus = "0.13.0" anyhow = { version = "1.0.57", features = ["std"] } thiserror = "1.0.26" tokio = { version = "1.18.5", features = ["full"] } futures = "0.3.21" -kube = { version = "0.72.0", default-features = false, features = [ +kube = { version = "0.83.0", default-features = false, features = [ "client", "rustls-tls", "derive", "jsonpatch", ] } -json-patch = "0.2.6" -kube-runtime = "0.72.0" -k8s-openapi = { version = "0.14.0", default-features = false, features = [ - "v1_20", +json-patch = "1.0.0" +kube-runtime = "0.83.0" +k8s-openapi = { version = "0.18.0", default-features = false, features = [ + "v1_26", "schemars", ] } serde = { version = "1.0.137", features = ["derive"] } serde_json = "1.0.81" -hyper = { version = "0.14.18", features = ["server", "http1", "tcp"] } +hyper = { version = "0.14.26", features = ["server", "http1", "tcp"] } rustrial-k8s-object-syncer-apis = { path = "../rustrial-k8s-object-syncer-apis" } diff --git a/rustrial-k8s-object-syncer/src/main.rs b/rustrial-k8s-object-syncer/src/main.rs index 6b15173..3cd0aba 100644 --- a/rustrial-k8s-object-syncer/src/main.rs +++ b/rustrial-k8s-object-syncer/src/main.rs @@ -1,18 +1,21 @@ #[macro_use] extern crate log; -use std::collections::HashSet; - use futures::TryStreamExt; use k8s_openapi::api::core::v1::Namespace; -use kube::{api::ListParams, Api, Client}; +use kube::{Api, Client}; use kube_runtime::{ reflector::{reflector, store::Writer}, - watcher, WatchStreamExt, + watcher::{self}, + WatchStreamExt, +}; +use opentelemetry::sdk::{ + export::metrics::aggregation, + metrics::{controllers, processors, selectors}, }; - use prometheus_exporter::start_prometheus_metrics_server; use rustrial_k8s_object_syncer_apis::ObjectSync; +use std::collections::HashSet; mod object_sync_controller; use object_sync_controller::*; @@ -105,11 +108,22 @@ async fn main() -> anyhow::Result<()> { let metrics_addr = env_var("METRICS_LISTEN_ADDR").unwrap_or_else(|| "0.0.0.0".to_string()); let metrics_port = env_var("METRICS_LISTEN_PORT").unwrap_or_else(|| "9000".to_string()); let metrics_addr = format!("{}:{}", metrics_addr, metrics_port).parse()?; - let prometheus_metrics_exporter = opentelemetry_prometheus::exporter().init(); + let controller = controllers::basic(processors::factory( + selectors::simple::histogram([ + 200.0, 400.0, 800.0, 1600.0, 3200.0, 6400.0, 12800.0, 25600.0, 51200.0, + ]), + aggregation::cumulative_temporality_selector(), + )) + .build(); + + let prometheus_metrics_exporter = opentelemetry_prometheus::exporter(controller).init(); let prometheus_metrics_exporter = start_prometheus_metrics_server(metrics_addr, prometheus_metrics_exporter); let client = Client::try_default().await?; - let namespace_watcher = watcher(Api::::all(client.clone()), ListParams::default()); + let namespace_watcher = watcher::watcher( + Api::::all(client.clone()), + watcher::Config::default(), + ); let writer: Writer = Default::default(); let namespace_cache = writer.as_reader(); let namespace_reflector = reflector(writer, namespace_watcher) diff --git a/rustrial-k8s-object-syncer/src/object_sync_controller.rs b/rustrial-k8s-object-syncer/src/object_sync_controller.rs index da2ec17..3e4bd0a 100644 --- a/rustrial-k8s-object-syncer/src/object_sync_controller.rs +++ b/rustrial-k8s-object-syncer/src/object_sync_controller.rs @@ -9,18 +9,19 @@ use crate::{ use futures::StreamExt; use k8s_openapi::api::core::v1::Namespace; use kube::{ - api::{ApiResource, DynamicObject, GroupVersionKind, ListParams, TypeMeta}, + api::{ApiResource, DynamicObject, GroupVersionKind, TypeMeta}, discovery, Api, Client, ResourceExt, }; use kube_runtime::{ - controller::{Action, Context as Ctx, Controller}, + controller::{Action, Controller}, reflector::Store, + watcher::Config, }; use log::{debug, info}; use opentelemetry::{ global, - metrics::{Counter, Meter, Unit, ValueRecorder}, - KeyValue, + metrics::{Counter, Histogram, Meter, Unit}, + Context, KeyValue, }; use rustrial_k8s_object_syncer_apis::{Condition, ObjectSync, SourceObject}; use std::{ @@ -73,7 +74,7 @@ pub(crate) struct ObjectSyncController { instances: Arc>>, reconcile_object_sync_count: Counter, - reconcile_object_sync_duration: ValueRecorder, + reconcile_object_sync_duration: Histogram, } impl ObjectSyncController { @@ -84,7 +85,7 @@ impl ObjectSyncController { .with_description("Count of ObjectSync reconcile invocations") .init(); let reconcile_object_sync_duration = meter - .u64_value_recorder(metric_name("reconcile_duration_ms")) + .u64_histogram(metric_name("reconcile_duration_ms")) .with_description("Reconcile duration of ObjectSync objects in milliseconds") .with_unit(Unit::new("ns")) .init(); @@ -348,8 +349,8 @@ impl ObjectSyncController { } /// Controller triggers this whenever our main object changed - async fn reconcile(object: Arc, ctx: Ctx) -> Result { - let me = ctx.get_ref(); + async fn reconcile(object: Arc, ctx: Arc) -> Result { + let me = ctx.as_ref(); let mut event = ObjectSyncModifications::new(object.as_ref().clone()); let namespace = event.namespace().unwrap_or_else(|| "".to_string()); if me @@ -362,28 +363,29 @@ impl ObjectSyncController { { let start = Instant::now(); if event.is_deleted() { - ctx.get_ref().delete(&mut event).await?; + ctx.as_ref().delete(&mut event).await?; } else { - if let Err(e) = ctx.get_ref().check(&mut event).await { + if let Err(e) = ctx.as_ref().check(&mut event).await { event.update_condition(Condition::new( READY, Some(false), FAILURE, format!("{}", e), )); - event.replace_status(ctx.get_ref().client()).await?; + event.replace_status(ctx.as_ref().client()).await?; Err(e)? } }; let duration = Instant::now() - start; let labels = &[ - KeyValue::new("object_name", event.name()), + KeyValue::new("object_name", event.name_any()), KeyValue::new("object_namespace", namespace), ]; - me.reconcile_object_sync_count.add(1, labels); + let context = Context::current(); + me.reconcile_object_sync_count.add(&context, 1, labels); me.reconcile_object_sync_duration - .record(duration.as_millis() as u64, labels); + .record(&context, duration.as_millis() as u64, labels); } else { debug!( "Ignore {} as its namespace is not in the set of namespaces to watch for ObjectSync objects", @@ -395,7 +397,9 @@ impl ObjectSyncController { } /// The controller triggers this on reconcile errors - fn error_policy(error: &ControllerError, _ctx: Ctx) -> Action { + /// + /// Arc, &ReconcilerFut::Error, Arc + fn error_policy(_object: Arc, error: &ControllerError, _ctx: Arc) -> Action { if error.is_temporary() { Action::requeue(Duration::from_secs(30)) } else { @@ -404,12 +408,10 @@ impl ObjectSyncController { } pub fn start(self) -> impl Future { - let controller = Controller::new( - self.configuration.resource_sync.clone(), - ListParams::default(), - ); + let controller = + Controller::new(self.configuration.resource_sync.clone(), Config::default()); let controller = controller - .run(Self::reconcile, Self::error_policy, Ctx::new(self)) + .run(Self::reconcile, Self::error_policy, Arc::new(self)) .for_each(|res| async move { match res { Ok(o) => { @@ -428,7 +430,7 @@ impl ObjectSyncController { match e { a @ kube_runtime::controller::Error::QueueError { .. } => { debug!("reconcile failed: {:?}", a); - reconcile_object_sync_errors.add(1, labels); + reconcile_object_sync_errors.add(&Context::current(), 1, labels); // Slow down on errors caused by missing CRDs or permissions. sleep(Duration::from_secs(30)).await; } @@ -437,7 +439,7 @@ impl ObjectSyncController { } e => { warn!("reconcile failed: {:?}", e); - reconcile_object_sync_errors.add(1, labels); + reconcile_object_sync_errors.add(&Context::current(), 1, labels); } }; } diff --git a/rustrial-k8s-object-syncer/src/object_sync_modifications.rs b/rustrial-k8s-object-syncer/src/object_sync_modifications.rs index a25e6c0..1186691 100644 --- a/rustrial-k8s-object-syncer/src/object_sync_modifications.rs +++ b/rustrial-k8s-object-syncer/src/object_sync_modifications.rs @@ -1,5 +1,4 @@ -use std::ops::DerefMut; - +use crate::{errors::ControllerError, MANAGER}; use json_patch::diff; use kube::api::PostParams; use kube::ResourceExt; @@ -8,8 +7,7 @@ use kube::{ Api, Client, }; use rustrial_k8s_object_syncer_apis::ObjectSync; - -use crate::{errors::ControllerError, MANAGER}; +use std::ops::DerefMut; /// Helper construct to simplify updating and patching [`ObjectSync`] objects. pub(crate) struct ObjectSyncModifications { @@ -51,7 +49,7 @@ impl ObjectSyncModifications { async fn latest(&mut self, client: &Client) -> kube::Result { let api = self.api(client.clone()); - let name = self.modified.name(); + let name = self.modified.name_any(); Ok(api.get_status(name.as_str()).await?) } @@ -65,7 +63,7 @@ impl ObjectSyncModifications { async fn _replace_spec(&mut self, client: Client, latest: &ObjectSync) -> kube::Result<()> { let api = self.api(client); - let name = self.modified.name(); + let name = self.modified.name_any(); self.modified.metadata.resource_version = latest.metadata.resource_version.clone(); let mut pp = PostParams::default(); pp.field_manager = Some(MANAGER.to_string()); @@ -85,7 +83,7 @@ impl ObjectSyncModifications { async fn _replace_status(&mut self, client: Client, latest: &ObjectSync) -> kube::Result<()> { let api = self.api(client); - let name = self.modified.name(); + let name = self.modified.name_any(); self.modified.metadata.resource_version = latest.metadata.resource_version.clone(); let mut pp = PostParams::default(); pp.field_manager = Some(MANAGER.to_string()); @@ -155,7 +153,7 @@ impl ObjectSyncModifications { } async fn _patch_spec(&mut self, client: Client) -> Result<(), ControllerError> { - let name = self.modified.name(); + let name = self.modified.name_any(); let namespace = self.original.namespace().unwrap_or("".to_string()); let api = self.api(client); let latest = api.get(name.as_str()).await?; @@ -164,11 +162,12 @@ impl ObjectSyncModifications { let patch_txt = serde_json::to_string(&patch).unwrap(); let response = api .patch( - self.original.name().as_str(), + self.original.name_any().as_str(), &PatchParams { field_manager: Some(MANAGER.to_string()), dry_run: false, force: false, + field_validation: None, }, &Patch::::Json(patch), ) @@ -176,7 +175,7 @@ impl ObjectSyncModifications { debug!( "Patch object {}/{} ({:?}) with {} -> {:?}", namespace, - self.original.name(), + self.original.name_any(), self.original.resource_version(), patch_txt, response @@ -193,7 +192,7 @@ impl ObjectSyncModifications { } async fn _patch_status(&mut self, client: Client) -> Result<(), ControllerError> { - let name = self.modified.name(); + let name = self.modified.name_any(); let namespace = self.original.namespace().unwrap_or("".to_string()); let api = self.api(client); let latest = api.get(name.as_str()).await?; @@ -202,11 +201,12 @@ impl ObjectSyncModifications { let patch_txt = serde_json::to_string(&patch).unwrap(); let response = api .patch_status( - self.original.name().as_str(), + self.original.name_any().as_str(), &PatchParams { field_manager: Some(MANAGER.to_string()), dry_run: false, force: false, + field_validation: None, }, &Patch::::Json(patch), ) @@ -214,7 +214,7 @@ impl ObjectSyncModifications { debug!( "Patch object status {}/{} ({:?}) with {} -> {:?}", namespace, - self.original.name(), + self.original.name_any(), self.original.resource_version(), patch_txt, response diff --git a/rustrial-k8s-object-syncer/src/resource_controller.rs b/rustrial-k8s-object-syncer/src/resource_controller.rs index 01c5ba1..6c8593a 100644 --- a/rustrial-k8s-object-syncer/src/resource_controller.rs +++ b/rustrial-k8s-object-syncer/src/resource_controller.rs @@ -6,28 +6,25 @@ use crate::{ utils::{delete_destinations, metric_name}, Configuration, FINALIZER, MANAGER, }; - use futures::{ channel::mpsc::{channel, Receiver, Sender}, SinkExt, StreamExt, }; use k8s_openapi::{api::core::v1::Namespace, chrono::Utc}; use kube::{ - api::{ - ApiResource, DynamicObject, GroupVersionKind, ListParams, Patch, PatchParams, PostParams, - TypeMeta, - }, + api::{ApiResource, DynamicObject, GroupVersionKind, Patch, PatchParams, PostParams, TypeMeta}, Api, Client, ResourceExt, }; use kube_runtime::{ - controller::{Action, Context as Ctx, Controller}, + controller::{Action, Controller}, reflector::{ObjectRef, Store}, + watcher::{self, Config}, }; use log::{debug, error, info}; use opentelemetry::{ global::{self}, - metrics::{Counter, Meter, Unit, ValueRecorder}, - KeyValue, + metrics::{Counter, Histogram, Meter, Unit}, + Context, KeyValue, }; use rustrial_k8s_object_syncer_apis::{ Condition, DestinationStatus, ObjectRevision, ObjectSync, ObjectSyncSpec, SyncStrategy, @@ -91,7 +88,7 @@ impl std::fmt::Display for NamespacedName { impl From<&DynamicObject> for NamespacedName { fn from(o: &DynamicObject) -> Self { Self { - name: o.name(), + name: o.name_any(), namespace: o.namespace().unwrap_or_else(|| "".to_string()), } } @@ -100,7 +97,7 @@ impl From<&DynamicObject> for NamespacedName { impl From<&ObjectSync> for NamespacedName { fn from(o: &ObjectSync) -> Self { Self { - name: o.name(), + name: o.name_any(), namespace: o.namespace().unwrap_or_else(|| "".to_string()), } } @@ -122,7 +119,7 @@ struct ResourceControllerImpl { /// src-ref -> ObjectSync-ref sources: Arc>>>, resource_reconcile_count: Counter, - resource_reconcile_duration: ValueRecorder, + resource_reconcile_duration: Histogram, } const RESOURCE_CONTROLLER: &'static str = "resource_controller"; @@ -141,7 +138,7 @@ impl ResourceControllerImpl { .with_description("Count of resources specific reconcile invocations for objects managed by at least one ObjectSync instance") .init(); let resource_reconcile_duration = meter - .u64_value_recorder(metric_name("resource_reconcile_duration_ms")) + .u64_histogram(metric_name("resource_reconcile_duration_ms")) .with_description("Resource specific reconciliation duration in milliseconds") .with_unit(Unit::new("ns")) .init(); @@ -226,13 +223,13 @@ impl ResourceControllerImpl { // Make sure we skip deleted namespaces, as otherwise the finalizers on the synced // destination objects will prevent the namespace from being deleted. if ns.metadata.deletion_timestamp.is_none() { - if let Some((ns, name)) = d.applies_to(event, ns.name().as_str()) { + if let Some((ns, name)) = d.applies_to(event, ns.name_any().as_str()) { tmp.push((ns, name, d.strategy)); } } } } else if let Some((namespace, name)) = d.applies_to(event, d.namespace.as_str()) { - if let Some(ns) = cache.iter().find(|ns| ns.name() == d.namespace) { + if let Some(ns) = cache.iter().find(|ns| ns.name_any() == d.namespace) { // Make sure we skip deleted namespaces, as otherwise the finalizers on the synced // destination objects will prevent the namespace from being deleted. if ns.metadata.deletion_timestamp.is_none() { @@ -264,7 +261,7 @@ impl ResourceControllerImpl { format!( "{}/{}", source.namespace().as_deref().unwrap_or(""), - source.name() + source.name_any() ), ); let mut changed = false; @@ -289,7 +286,6 @@ impl ResourceControllerImpl { template.metadata.managed_fields = Default::default(); template.metadata.owner_references = Default::default(); template.metadata.self_link = Default::default(); - template.metadata.cluster_name = Default::default(); template.metadata.creation_timestamp = Default::default(); template.metadata.finalizers = Some(vec![FINALIZER.to_string()]); let api = self.namespaced_api(d.namespace.as_str()); @@ -535,10 +531,10 @@ impl ResourceControllerImpl { /// Controller triggers this whenever our main object or our children changed async fn reconcile( source: Arc, - ctx: Ctx, + ctx: Arc, ) -> Result { let start = Instant::now(); - let me = ctx.get_ref(); + let me = ctx.as_ref(); let namespaced_name = NamespacedName::from(source.as_ref()); let source_id = format!( @@ -573,7 +569,7 @@ impl ResourceControllerImpl { KeyValue::new("group", me.gvk.group.clone()), KeyValue::new("version", me.gvk.version.clone()), KeyValue::new("kind", me.gvk.kind.clone()), - KeyValue::new("object_name", source.name()), + KeyValue::new("object_name", source.name_any()), KeyValue::new("object_namespace", namespaced_name.namespace.clone()), ]; if source.metadata.deletion_timestamp.is_some() { @@ -623,9 +619,10 @@ impl ResourceControllerImpl { } // Only update metrics let duration = Instant::now() - start; - me.resource_reconcile_count.add(1, labels); + let context = Context::current(); + me.resource_reconcile_count.add(&context, 1, labels); me.resource_reconcile_duration - .record(duration.as_millis() as u64, labels); + .record(&&context, duration.as_millis() as u64, labels); // Requeue objects tracked by ObjectSync configuration to make sure any // downstream destination drift is elminitated in an eventual consistent manner. Ok(Action::requeue(Duration::from_secs(300))) @@ -640,7 +637,11 @@ impl ResourceControllerImpl { } /// The controller triggers this on reconcile errors - fn error_policy(error: &ControllerError, _ctx: Ctx) -> Action { + fn error_policy( + _object: Arc, + error: &ControllerError, + _ctx: Arc, + ) -> Action { if error.is_temporary() { Action::requeue(Duration::from_secs(30)) } else { @@ -670,11 +671,11 @@ impl ResourceControllerImpl { let api_resource3 = self.api_resource.clone(); let src_api = self.api(&self.configuration.source_namespaces); let dst_api = self.api(&self.configuration.target_namespaces); - let list_params = ListParams::default(); - let controller = Controller::new_with(src_api, list_params, self.api_resource.clone()); + let config = Config::default(); + let controller = Controller::new_with(src_api, config, self.api_resource.clone()); let sources = self.sources.clone(); let sources2 = sources.clone(); - let mut lp_dst = ListParams::default(); + let mut lp_dst = watcher::Config::default(); lp_dst.label_selector = Some(format!("app.kubernetes.io/managed-by={}", MANAGER)); let source_object_annotation_key = format!("{}/source-object", API_GROUP); let controller = controller @@ -682,11 +683,11 @@ impl ResourceControllerImpl { // Watch namespaces to track newly created namespaces. .watches( Api::::all(self.client()), - ListParams::default(), + watcher::Config::default(), move |namespace| { let is_target_namespace = target_namespaces2 .as_ref() - .map_or(true, |v| v.contains(namespace.name().as_str())); + .map_or(true, |v| v.contains(namespace.name_any().as_str())); if let Some(ct) = &namespace.metadata.creation_timestamp { let age = Utc::now() - ct.0; if is_target_namespace && age.num_seconds() < 300 { @@ -706,7 +707,7 @@ impl ResourceControllerImpl { // Watch ObjectSync objects, to track destination changes. .watches( self.configuration.resource_sync.clone(), - ListParams::default(), + watcher::Config::default(), move |rs| { let namespaced_name = NamespacedName::from(&rs); let guard = futures::executor::block_on(sources2.read()); @@ -748,7 +749,7 @@ impl ResourceControllerImpl { } }, ) - .run(Self::reconcile, Self::error_policy, Ctx::new(self)) + .run(Self::reconcile, Self::error_policy, Arc::new(self)) .for_each(|res| async move { match res { Ok(_o) => {} @@ -763,7 +764,7 @@ impl ResourceControllerImpl { match e { a @ kube_runtime::controller::Error::QueueError { .. } => { debug!("reconcile failed: {:?}", a); - reconcile_kind_errors.add(1, &[]); + reconcile_kind_errors.add(&Context::current(), 1, &[]); // Slow down on errors caused by missing CRDs or permissions. sleep(Duration::from_secs(30)).await; } @@ -772,7 +773,7 @@ impl ResourceControllerImpl { } e => { warn!("reconcile failed: {:?}", e); - reconcile_kind_errors.add(1, &[]); + reconcile_kind_errors.add(&Context::current(), 1, &[]); } }; } diff --git a/rustrial-k8s-object-syncer/src/utils.rs b/rustrial-k8s-object-syncer/src/utils.rs index 6e131ef..114e89b 100644 --- a/rustrial-k8s-object-syncer/src/utils.rs +++ b/rustrial-k8s-object-syncer/src/utils.rs @@ -1,18 +1,18 @@ +use crate::{ + errors::{ControllerError, ExtKubeApiError}, + FINALIZER, MANAGER, +}; use json_patch::diff; use kube::{ api::{ ApiResource, DeleteParams, DynamicObject, GroupVersionKind, Patch, PatchParams, TypeMeta, + ValidationDirective, }, Api, Client, Resource, ResourceExt, }; use rustrial_k8s_object_syncer_apis::DestinationStatus; use serde::{de::DeserializeOwned, Serialize}; -use crate::{ - errors::{ControllerError, ExtKubeApiError}, - FINALIZER, MANAGER, -}; - pub(crate) async fn add_finalizer_if_missing( api: Api, source: &mut T, @@ -30,11 +30,12 @@ where { finalizers.push(finalizer.to_string()); api.patch( - source.name().as_str(), + source.name_any().as_str(), &PatchParams { field_manager: Some(MANAGER.to_string()), dry_run: false, force: true, + field_validation: Some(ValidationDirective::Ignore), }, &Patch::Apply(source), ) @@ -68,11 +69,12 @@ where ); match api .patch( - source.name().as_str(), + source.name_any().as_str(), &PatchParams { field_manager: Some(MANAGER.to_string()), dry_run: false, force: false, + field_validation: None, }, &Patch::::Json(patch), ) @@ -117,7 +119,7 @@ pub(crate) async fn delete_destinations( "error while removing finalizer from destination object {} {}/{}:{}", gvk.kind, source.namespace().as_deref().unwrap_or(""), - source.name(), + source.name_any(), e ); }