diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index b722030a..a9ed73a9 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -1,6 +1,6 @@ { "name": "linkerd2", - "image": "ghcr.io/linkerd/dev:v39", + "image": "ghcr.io/linkerd/dev:v42", "extensions": [ "DavidAnson.vscode-markdownlint", "golang.go", diff --git a/.github/workflows/actions.yml b/.github/workflows/actions.yml index 5140f7ca..d94fd44a 100644 --- a/.github/workflows/actions.yml +++ b/.github/workflows/actions.yml @@ -15,13 +15,13 @@ jobs: runs-on: ubuntu-latest timeout-minutes: 10 steps: - - uses: linkerd/dev/actions/setup-tools@v41 + - uses: linkerd/dev/actions/setup-tools@v42 - uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac - run: just action-lint devcontainer-versions: runs-on: ubuntu-latest steps: - - uses: linkerd/dev/actions/setup-tools@v41 + - uses: linkerd/dev/actions/setup-tools@v42 - uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac - run: just action-dev-check diff --git a/.github/workflows/cni-plugin-integration.yml b/.github/workflows/cni-plugin-integration.yml index 58a50085..b0e6e6a2 100644 --- a/.github/workflows/cni-plugin-integration.yml +++ b/.github/workflows/cni-plugin-integration.yml @@ -15,7 +15,7 @@ jobs: timeout-minutes: 15 runs-on: ubuntu-latest steps: - - uses: linkerd/dev/actions/setup-tools@v41 + - uses: linkerd/dev/actions/setup-tools@v42 - uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac - name: Run CNI integration tests run: just cni-plugin-test-integration-flannel @@ -24,7 +24,7 @@ jobs: timeout-minutes: 15 runs-on: ubuntu-latest steps: - - uses: linkerd/dev/actions/setup-tools@v41 + - uses: linkerd/dev/actions/setup-tools@v42 - uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac - name: Run CNI integration tests run: just cni-plugin-test-integration-calico @@ -33,7 +33,7 @@ jobs: timeout-minutes: 15 runs-on: ubuntu-latest steps: - - uses: linkerd/dev/actions/setup-tools@v41 + - uses: linkerd/dev/actions/setup-tools@v42 - uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac - name: Run CNI integration tests run: just cni-plugin-test-integration-cilium @@ -42,7 +42,7 @@ jobs: timeout-minutes: 15 runs-on: ubuntu-latest steps: - - uses: linkerd/dev/actions/setup-tools@v41 + - uses: linkerd/dev/actions/setup-tools@v42 - uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac - name: Run CNI ordering tests run: just cni-plugin-test-ordering diff --git a/.github/workflows/go.yml b/.github/workflows/go.yml index 411d9cd7..5a7436e5 100644 --- a/.github/workflows/go.yml +++ b/.github/workflows/go.yml @@ -11,21 +11,21 @@ on: jobs: lint: runs-on: ubuntu-latest - container: ghcr.io/linkerd/dev:v39-go + container: ghcr.io/linkerd/dev:v42-go steps: - uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac - run: just go-lint --verbose --timeout=10m fmt: runs-on: ubuntu-latest - container: ghcr.io/linkerd/dev:v39-go + container: ghcr.io/linkerd/dev:v42-go steps: - uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac - run: just go-fmt-check unit-test: runs-on: ubuntu-latest - container: ghcr.io/linkerd/dev:v39-go + container: ghcr.io/linkerd/dev:v42-go steps: - uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac - run: just proxy-init-test-unit diff --git a/.github/workflows/integration.yml b/.github/workflows/integration.yml index 692d4db0..8eebe4e2 100644 --- a/.github/workflows/integration.yml +++ b/.github/workflows/integration.yml @@ -16,7 +16,7 @@ jobs: timeout-minutes: 15 runs-on: ubuntu-latest steps: - - uses: linkerd/dev/actions/setup-tools@v41 + - uses: linkerd/dev/actions/setup-tools@v42 - uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac - name: Run proxy-init integration tests run: just proxy-init-test-integration diff --git a/.github/workflows/release-cni-plugin.yml b/.github/workflows/release-cni-plugin.yml index 5b25bfce..91156fc2 100644 --- a/.github/workflows/release-cni-plugin.yml +++ b/.github/workflows/release-cni-plugin.yml @@ -51,7 +51,7 @@ jobs: restore-keys: cni-plugin-${{ needs.meta.outputs.mode }}- - uses: docker/setup-qemu-action@68827325e0b33c7199eb31dd4e31fbe9023e06e3 - - uses: linkerd/dev/actions/setup-tools@v41 + - uses: linkerd/dev/actions/setup-tools@v42 - uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac - run: | just cni-plugin-image='${{ needs.meta.outputs.repo }}:${{ needs.meta.outputs.version }}' \ diff --git a/.github/workflows/release-proxy-init.yml b/.github/workflows/release-proxy-init.yml index 61309181..6c648aa1 100644 --- a/.github/workflows/release-proxy-init.yml +++ b/.github/workflows/release-proxy-init.yml @@ -51,7 +51,7 @@ jobs: restore-keys: proxy-init-${{ needs.meta.outputs.mode }}- - uses: docker/setup-qemu-action@68827325e0b33c7199eb31dd4e31fbe9023e06e3 - - uses: linkerd/dev/actions/setup-tools@v41 + - uses: linkerd/dev/actions/setup-tools@v42 - uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac - run: | just proxy-init-image='${{ needs.meta.outputs.repo }}:${{ needs.meta.outputs.version }}' \ diff --git a/.github/workflows/release-reinitialize-pods.yml b/.github/workflows/release-reinitialize-pods.yml new file mode 100644 index 00000000..019625e2 --- /dev/null +++ b/.github/workflows/release-reinitialize-pods.yml @@ -0,0 +1,82 @@ +name: reinitialize-pods release + +on: + pull_request: + paths: + - .github/workflows/release-reinitialize-pods.yml + push: + tags: ["reinitialize-pods/v*"] + +permissions: + contents: read + +jobs: + meta: + timeout-minutes: 15 + runs-on: ubuntu-latest + container: ghcr.io/linkerd/dev:v42-rust + steps: + - uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac + - id: meta + shell: bash + run: | + set -eu + shopt -s extglob + ref="${{ github.ref }}" + if [[ "$ref" == refs/tags/reinitialize-pods/v+([0-9]).+([0-9]).+([0-9])?(-+([a-z0-9-])) ]]; then + ( echo version="${ref##refs/tags/reinitialize-pods/}" + echo mode=release + ) >> "$GITHUB_OUTPUT" + else + sha="${{ github.sha }}" + ( echo version="$(just reinitialize-pods --evaluate version)-${sha:0:7}" + echo mode=test + ) >> "$GITHUB_OUTPUT" + fi + - if: steps.meta.outputs.mode == 'release' + name: Check that reinitialize-pods version matches release version + shell: bash + run: | + version=$(just reinitialize-pods --evaluate version) + # shellcheck disable=SC2193 + if [[ "${version}" != '${{ steps.meta.outputs.version }}' ]]; then + echo "::error ::Crate version v${version} does not match tag ${{ steps.meta.outputs.version }}" + exit 1 + fi + outputs: + mode: ${{ steps.meta.outputs.mode }} + version: ${{ steps.meta.outputs.version }} + + package: + needs: meta + strategy: + matrix: + arch: [amd64, arm64, arm] + timeout-minutes: 10 + runs-on: ubuntu-latest + container: ghcr.io/linkerd/dev:v42-rust-musl + steps: + - uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac + - run: just reinitialize-pods arch=${{ matrix.arch }} profile=release version=${{ needs.meta.outputs.version }} package + - uses: actions/upload-artifact@v3 + with: + name: ${{ matrix.arch }}-artifacts + path: target/package/ + + publish: + needs: [meta, package] + timeout-minutes: 5 + permissions: + contents: write + runs-on: ubuntu-latest + steps: + - uses: actions/download-artifact@9bc31d5ccc31df68ecc42ccf4149144866c47d8a + with: + path: ${{ runner.temp }}/artifacts + - run: find "$RUNNER_TEMP"/artifacts -type f -ls + - uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac + - if: needs.meta.outputs.mode == 'release' + uses: softprops/action-gh-release@de2c0eb89ae2a093876385947365aca7b0e5f844 + with: + name: reinitialize-pods ${{ needs.meta.outputs.version }} + files: ${{ runner.temp }}/artifacts/**/* diff --git a/.github/workflows/release-validator.yml b/.github/workflows/release-validator.yml index f02e1867..6900f1ce 100644 --- a/.github/workflows/release-validator.yml +++ b/.github/workflows/release-validator.yml @@ -14,7 +14,7 @@ jobs: meta: timeout-minutes: 15 runs-on: ubuntu-latest - container: ghcr.io/linkerd/dev:v39-rust + container: ghcr.io/linkerd/dev:v42-rust steps: - uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac - id: meta @@ -54,7 +54,7 @@ jobs: arch: [amd64, arm64, arm] timeout-minutes: 10 runs-on: ubuntu-latest - container: ghcr.io/linkerd/dev:v39-rust-musl + container: ghcr.io/linkerd/dev:v42-rust-musl steps: - uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac - run: just validator arch=${{ matrix.arch }} profile=release version=${{ needs.meta.outputs.version }} package diff --git a/.github/workflows/rust.yml b/.github/workflows/rust.yml index 7875b85a..155e6a79 100644 --- a/.github/workflows/rust.yml +++ b/.github/workflows/rust.yml @@ -14,7 +14,7 @@ jobs: check: timeout-minutes: 5 runs-on: ubuntu-latest - container: ghcr.io/linkerd/dev:v39-rust + container: ghcr.io/linkerd/dev:v42-rust steps: - uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac - run: just rs-fetch diff --git a/.github/workflows/shell.yml b/.github/workflows/shell.yml index 19f178cc..dcd3ca37 100644 --- a/.github/workflows/shell.yml +++ b/.github/workflows/shell.yml @@ -15,6 +15,6 @@ jobs: timeout-minutes: 5 runs-on: ubuntu-latest steps: - - uses: linkerd/dev/actions/setup-tools@v41 + - uses: linkerd/dev/actions/setup-tools@v42 - uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac - run: just sh-lint diff --git a/Cargo.lock b/Cargo.lock index 6268e842..561790d3 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2,11 +2,86 @@ # It is not intended for manual editing. version = 3 +[[package]] +name = "addr2line" +version = "0.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb" +dependencies = [ + "gimli", +] + +[[package]] +name = "adler" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" + +[[package]] +name = "ahash" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91429305e9f0a25f6205c5b8e0d2db09e0708a7a6df0f42212bb56c32c8ac97a" +dependencies = [ + "cfg-if", + "getrandom", + "once_cell", + "version_check", + "zerocopy", +] + +[[package]] +name = "aho-corasick" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2969dcb958b36655471fc61f7e416fa76033bdd4bfed0678d8fee1e2d07a1f0" +dependencies = [ + "memchr", +] + +[[package]] +name = "allocator-api2" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0942ffc6dcaadf03badf6e6a2d0228460359d5e34b57ccdc720b7382dfbd5ec5" + +[[package]] +name = "android-tzdata" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" + +[[package]] +name = "android_system_properties" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +dependencies = [ + "libc", +] + +[[package]] +name = "anstyle" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7079075b41f533b8c61d2a4d073c4676e1f8b249ff94a393b0595db304e0dd87" + [[package]] name = "anyhow" -version = "1.0.59" +version = "1.0.75" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4668cab20f66d8d020e1fbc0ebe47217433c1b6c8f2040faf858554e394ace6" + +[[package]] +name = "async-trait" +version = "0.1.74" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c91f1f46651137be86f3a2b9a8359f9ab421d04d941c62b5982e1ca21113adf9" +checksum = "a66537f1bb974b254c98ed142ff995236e81b9d0fe4db0575f46612cb15eb0f9" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.39", +] [[package]] name = "autocfg" @@ -14,17 +89,82 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" +[[package]] +name = "backoff" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b62ddb9cb1ec0a098ad4bbf9344d0713fa193ae1a80af55febcff2627b6a00c1" +dependencies = [ + "getrandom", + "instant", + "rand", +] + +[[package]] +name = "backtrace" +version = "0.3.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2089b7e3f35b9dd2d0ed921ead4f6d318c27680d4a5bd167b3ee120edb105837" +dependencies = [ + "addr2line", + "cc", + "cfg-if", + "libc", + "miniz_oxide", + "object", + "rustc-demangle", +] + +[[package]] +name = "base64" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +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.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35636a1494ede3b646cc98f74f8e62c773a38a659ebc777a2cf26b9b74171df9" + [[package]] name = "bitflags" version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" +[[package]] +name = "bitflags" +version = "2.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "327762f6e5a765692301e5bb513e0d9fef63be86bbc14528052b1cd3e6f03e07" + +[[package]] +name = "bumpalo" +version = "3.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f30e7476521f6f8af1a1c4c0b8cc94f0bee37d91763d0ca2665f299b6cd8aec" + [[package]] name = "bytes" -version = "1.2.1" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec8a7b6a70fde80372154c65702f00a0f56f3e1c36abbc6c440484be248856db" +checksum = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223" + +[[package]] +name = "cc" +version = "1.0.83" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0" +dependencies = [ + "libc", +] [[package]] name = "cfg-if" @@ -32,89 +172,574 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +[[package]] +name = "chrono" +version = "0.4.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f2c685bad3eb3d45a01354cedb7d5faa66194d1d58ba6e267a8de788f79db38" +dependencies = [ + "android-tzdata", + "iana-time-zone", + "num-traits", + "serde", + "windows-targets", +] + [[package]] name = "clap" -version = "3.2.16" +version = "4.4.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3dbbb6653e7c55cc8595ad3e1f7be8f32aba4eb7ff7f0fd1163d4f3d137c0a9" +checksum = "41fffed7514f420abec6d183b1d3acfd9099c79c3a10a06ade4f8203f1411272" dependencies = [ - "bitflags", + "clap_builder", "clap_derive", +] + +[[package]] +name = "clap_builder" +version = "4.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "63361bae7eef3771745f02d8d892bec2fee5f6e34af316ba556e7f97a7069ff1" +dependencies = [ + "anstyle", "clap_lex", - "indexmap", - "once_cell", - "textwrap", ] [[package]] name = "clap_derive" -version = "3.2.15" +version = "4.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ba52acd3b0a5c33aeada5cdaa3267cdc7c594a98731d4268cdc1532f4264cb4" +checksum = "cf9804afaaf59a91e75b022a30fb7229a7901f60c755489cc61c9b423b836442" dependencies = [ "heck", - "proc-macro-error", "proc-macro2", "quote", - "syn", + "syn 2.0.39", ] [[package]] name = "clap_lex" -version = "0.2.4" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "702fc72eb24e5a1e48ce58027a675bc24edd52096d5397d4aea7c6dd9eca0bd1" + +[[package]] +name = "core-foundation-sys" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa" + +[[package]] +name = "derivative" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "drain" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2850f2f5a82cbf437dd5af4d49848fbdfc27c157c3d010345776f952765261c5" +checksum = "2f1a0abf3fcefad9b4dd0e414207a7408e12b68414a01e6bb19b897d5bd7632d" dependencies = [ - "os_str_bytes", + "tokio", +] + +[[package]] +name = "either" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07" + +[[package]] +name = "equivalent" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "foreign-types" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" +dependencies = [ + "foreign-types-shared", +] + +[[package]] +name = "foreign-types-shared" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" + +[[package]] +name = "form_urlencoded" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" +dependencies = [ + "percent-encoding", +] + +[[package]] +name = "futures" +version = "0.3.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da0290714b38af9b4a7b094b8a37086d1b4e61f2df9122c3cad2577669145335" +dependencies = [ + "futures-channel", + "futures-core", + "futures-executor", + "futures-io", + "futures-sink", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-channel" +version = "0.3.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff4dd66668b557604244583e3e1e1eada8c5c2e96a6d0d6653ede395b78bbacb" +dependencies = [ + "futures-core", + "futures-sink", +] + +[[package]] +name = "futures-core" +version = "0.3.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eb1d22c66e66d9d72e1758f0bd7d4fd0bee04cad842ee34587d68c07e45d088c" + +[[package]] +name = "futures-executor" +version = "0.3.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f4fb8693db0cf099eadcca0efe2a5a22e4550f98ed16aba6c48700da29597bc" +dependencies = [ + "futures-core", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-io" +version = "0.3.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8bf34a163b5c4c52d0478a4d757da8fb65cabef42ba90515efee0f6f9fa45aaa" + +[[package]] +name = "futures-macro" +version = "0.3.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53b153fd91e4b0147f4aced87be237c98248656bb01050b96bf3ee89220a8ddb" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.39", +] + +[[package]] +name = "futures-sink" +version = "0.3.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e36d3378ee38c2a36ad710c5d30c2911d752cb941c00c72dbabfb786a7970817" + +[[package]] +name = "futures-task" +version = "0.3.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "efd193069b0ddadc69c46389b740bbccdd97203899b48d09c5f7969591d6bae2" + +[[package]] +name = "futures-util" +version = "0.3.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a19526d624e703a3179b3d322efec918b6246ea0fa51d41124525f00f1cc8104" +dependencies = [ + "futures-channel", + "futures-core", + "futures-io", + "futures-macro", + "futures-sink", + "futures-task", + "memchr", + "pin-project-lite", + "pin-utils", + "slab", ] [[package]] name = "getrandom" -version = "0.2.7" +version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4eb1a864a501629691edf6c15a593b7a51eebaa1e8468e9ddc623de7c9b58ec6" +checksum = "fe9006bed769170c11f845cf00c7c1e9092aeb3f268e007c3e760ac68008070f" dependencies = [ "cfg-if", "libc", "wasi", ] +[[package]] +name = "gimli" +version = "0.28.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253" + [[package]] name = "hashbrown" -version = "0.12.3" +version = "0.14.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" +checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604" +dependencies = [ + "ahash", + "allocator-api2", +] [[package]] name = "heck" -version = "0.4.0" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" + +[[package]] +name = "hermit-abi" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d77f7ec81a6d05a3abb01ab6eb7590f6083d08449fe5a1c8b1e620283546ccb7" + +[[package]] +name = "home" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5444c27eef6923071f7ebcc33e3444508466a76f7a2b93da00ed6e19f30c1ddb" +dependencies = [ + "windows-sys", +] + +[[package]] +name = "http" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8947b1a6fad4393052c7ba1f4cd97bed3e953a95c79c92ad9b051a04611d9fbb" +dependencies = [ + "bytes", + "fnv", + "itoa", +] + +[[package]] +name = "http-body" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1" +dependencies = [ + "bytes", + "http", + "pin-project-lite", +] + +[[package]] +name = "http-range-header" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "add0ab9360ddbd88cfeb3bd9574a1d85cfdfa14db10b3e21d3700dbc4328758f" + +[[package]] +name = "httparse" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" + +[[package]] +name = "httpdate" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" + +[[package]] +name = "hyper" +version = "0.14.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffb1cfd654a8219eaef89881fdb3bb3b1cdc5fa75ded05d6933b2b382e395468" +dependencies = [ + "bytes", + "futures-channel", + "futures-core", + "futures-util", + "http", + "http-body", + "httparse", + "httpdate", + "itoa", + "pin-project-lite", + "socket2 0.4.10", + "tokio", + "tower-service", + "tracing", + "want", +] + +[[package]] +name = "hyper-openssl" +version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2540771e65fc8cb83cd6e8a237f70c319bd5c29f78ed1084ba5d50eeac86f7f9" +checksum = "d6ee5d7a8f718585d1c3c61dfde28ef5b0bb14734b4db13f5ada856cdc6c612b" +dependencies = [ + "http", + "hyper", + "linked_hash_set", + "once_cell", + "openssl", + "openssl-sys", + "parking_lot", + "tokio", + "tokio-openssl", + "tower-layer", +] + +[[package]] +name = "hyper-timeout" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbb958482e8c7be4bc3cf272a766a2b0bf1a6755e7a6ae777f017a31d11b13b1" +dependencies = [ + "hyper", + "pin-project-lite", + "tokio", + "tokio-io-timeout", +] + +[[package]] +name = "iana-time-zone" +version = "0.1.58" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8326b86b6cff230b97d0d312a6c40a60726df3332e721f72a1b035f451663b20" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "wasm-bindgen", + "windows-core", +] + +[[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 = "idna" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" +dependencies = [ + "unicode-bidi", + "unicode-normalization", +] [[package]] name = "indexmap" -version = "1.9.1" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10a35a97730320ffe8e2d410b5d3b69279b98d2c14bdb8b70ea89ecf7888d41e" +checksum = "d530e1a18b1cb4c484e6e34556a0d948706958449fca0cab753d649f2bce3d1f" dependencies = [ - "autocfg", + "equivalent", "hashbrown", ] +[[package]] +name = "instant" +version = "0.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" +dependencies = [ + "cfg-if", +] + [[package]] name = "itoa" -version = "1.0.3" +version = "1.0.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38" + +[[package]] +name = "js-sys" +version = "0.3.66" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cee9c64da59eae3b50095c18d3e74f8b73c0b86d2792824ff01bbce68ba229ca" +dependencies = [ + "wasm-bindgen", +] + +[[package]] +name = "json-patch" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55ff1e1486799e3f64129f8ccad108b38290df9cd7015cd31bed17239f0789d6" +dependencies = [ + "serde", + "serde_json", + "thiserror", + "treediff", +] + +[[package]] +name = "jsonpath_lib" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c8af84674fe1f223a982c933a0ee1086ac4d4052aa0fb8060c12c6ad838e754" +checksum = "eaa63191d68230cccb81c5aa23abd53ed64d83337cacbb25a7b8c7979523774f" +dependencies = [ + "log", + "serde", + "serde_json", +] + +[[package]] +name = "k8s-openapi" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95578de7d6eac4fba42114bc751e38c59a739968769df1be56feba6f17fd148e" +dependencies = [ + "base64 0.21.5", + "bytes", + "chrono", + "http", + "percent-encoding", + "serde", + "serde-value", + "serde_json", + "url", +] + +[[package]] +name = "kube" +version = "0.85.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a189cb8721a47de68d883040713bbb9c956763d784fcf066828018d32c180b96" +dependencies = [ + "k8s-openapi", + "kube-client", + "kube-core", + "kube-runtime", +] + +[[package]] +name = "kube-client" +version = "0.85.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "98989b6e1f27695afe22aa29c94136fa06be5e8d28b91222e6dfbe5a460c803f" +dependencies = [ + "base64 0.20.0", + "bytes", + "chrono", + "either", + "futures", + "home", + "http", + "http-body", + "hyper", + "hyper-openssl", + "hyper-timeout", + "jsonpath_lib", + "k8s-openapi", + "kube-core", + "openssl", + "pem", + "pin-project", + "secrecy", + "serde", + "serde_json", + "serde_yaml", + "thiserror", + "tokio", + "tokio-util", + "tower", + "tower-http", + "tracing", +] + +[[package]] +name = "kube-core" +version = "0.85.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c24d23bf764ec9a5652f943442ff062b91fd52318ea6d2fc11115f19d8c84d13" +dependencies = [ + "chrono", + "form_urlencoded", + "http", + "json-patch", + "k8s-openapi", + "once_cell", + "serde", + "serde_json", + "thiserror", +] + +[[package]] +name = "kube-runtime" +version = "0.85.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "381224caa8a6fc16f8251cf1fd6d8678cdf5366f33000a923e4c54192e4b25b5" +dependencies = [ + "ahash", + "async-trait", + "backoff", + "derivative", + "futures", + "hashbrown", + "json-patch", + "k8s-openapi", + "kube-client", + "parking_lot", + "pin-project", + "serde", + "serde_json", + "smallvec", + "thiserror", + "tokio", + "tokio-util", + "tracing", +] [[package]] name = "kubert" -version = "0.8.0" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3583ea5ed19b357df067fa668fc00ddac5d6945a5803e2114c3ed000af1f3cf" +checksum = "357e2b50e5a455abe6199b26ee7d7137e3b72df7f821c0b801756335d13bc140" dependencies = [ + "ahash", + "bytes", + "clap", + "drain", + "futures-core", + "futures-util", + "hyper", + "kube-client", + "kube-core", + "kube-runtime", + "pin-project-lite", + "serde", "thiserror", "tokio", + "tower", + "tower-http", "tracing", "tracing-subscriber", ] @@ -127,9 +752,24 @@ checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" [[package]] name = "libc" -version = "0.2.127" +version = "0.2.150" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89d92a4743f9a61002fae18374ed11e7973f530cb3a3255fb354818118b2203c" + +[[package]] +name = "linked-hash-map" +version = "0.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" + +[[package]] +name = "linked_hash_set" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "505e71a4706fa491e9b1b55f51b95d4037d0821ee40131190475f692b35b009b" +checksum = "47186c6da4d81ca383c7c47c1bfc80f4b95f4720514d860a5407aaf4233f9588" +dependencies = [ + "linked-hash-map", +] [[package]] name = "linkerd-network-validator" @@ -139,109 +779,260 @@ dependencies = [ "bytes", "clap", "kubert", + "linkerd-reinitialize-pods", "rand", "tokio", "tracing", ] [[package]] -name = "log" -version = "0.4.17" +name = "linkerd-reinitialize-pods" +version = "0.1.0" +dependencies = [ + "anyhow", + "clap", + "futures-util", + "k8s-openapi", + "kube", + "kubert", + "tokio", + "tracing", +] + +[[package]] +name = "lock_api" +version = "0.4.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e" +checksum = "3c168f8615b12bc01f9c17e2eb0cc07dcae1940121185446edc3744920e8ef45" dependencies = [ - "cfg-if", + "autocfg", + "scopeguard", ] +[[package]] +name = "log" +version = "0.4.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" + [[package]] name = "matchers" version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" dependencies = [ - "regex-automata", + "regex-automata 0.1.10", ] [[package]] name = "memchr" -version = "2.5.0" +version = "2.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" +checksum = "f665ee40bc4a3c5590afb1e9677db74a508659dfd71e126420da8274909a0167" + +[[package]] +name = "mime" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" + +[[package]] +name = "miniz_oxide" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7" +dependencies = [ + "adler", +] [[package]] name = "mio" -version = "0.8.4" +version = "0.8.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57ee1c23c7c63b0c9250c339ffdc69255f110b298b901b9f6c82547b7b87caaf" +checksum = "3dce281c5e46beae905d4de1870d8b1509a9142b62eedf18b443b011ca8343d0" dependencies = [ "libc", - "log", "wasi", "windows-sys", ] +[[package]] +name = "num-traits" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c" +dependencies = [ + "autocfg", +] + +[[package]] +name = "num_cpus" +version = "1.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" +dependencies = [ + "hermit-abi", + "libc", +] + +[[package]] +name = "object" +version = "0.32.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9cf5f9dd3933bd50a9e1f149ec995f39ae2c496d31fd772c1fd45ebc27e902b0" +dependencies = [ + "memchr", +] + [[package]] name = "once_cell" -version = "1.13.0" +version = "1.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d" + +[[package]] +name = "openssl" +version = "0.10.60" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "79a4c6c3a2b158f7f8f2a2fc5a969fa3a068df6fc9dbb4a43845436e3af7c800" +dependencies = [ + "bitflags 2.4.1", + "cfg-if", + "foreign-types", + "libc", + "once_cell", + "openssl-macros", + "openssl-sys", +] + +[[package]] +name = "openssl-macros" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18a6dbe30758c9f83eb00cbea4ac95966305f5a7772f3f42ebfc7fc7eddbd8e1" +checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.39", +] [[package]] -name = "os_str_bytes" -version = "6.2.0" +name = "openssl-sys" +version = "0.9.96" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "648001efe5d5c0102d8cea768e348da85d90af8ba91f0bea908f157951493cd4" +checksum = "3812c071ba60da8b5677cc12bcb1d42989a65553772897a7e0355545a819838f" +dependencies = [ + "cc", + "libc", + "pkg-config", + "vcpkg", +] [[package]] -name = "pin-project-lite" -version = "0.2.9" +name = "ordered-float" +version = "2.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116" +checksum = "68f19d67e5a2795c94e73e0bb1cc1a7edeb2e28efd39e2e1c9b7a40c1108b11c" +dependencies = [ + "num-traits", +] [[package]] -name = "ppv-lite86" -version = "0.2.16" +name = "parking_lot" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb9f9e6e233e5c4a35559a617bf40a4ec447db2e84c20b55a6f83167b7e57872" +checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" +dependencies = [ + "lock_api", + "parking_lot_core", +] [[package]] -name = "proc-macro-error" -version = "1.0.4" +name = "parking_lot_core" +version = "0.9.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" +checksum = "4c42a9226546d68acdd9c0a280d17ce19bfe27a46bf68784e4066115788d008e" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall", + "smallvec", + "windows-targets", +] + +[[package]] +name = "pem" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8835c273a76a90455d7344889b0964598e3316e2a79ede8e36f16bdcf2228b8" +dependencies = [ + "base64 0.13.1", +] + +[[package]] +name = "percent-encoding" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" + +[[package]] +name = "pin-project" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fda4ed1c6c173e3fc7a83629421152e01d7b1f9b7f65fb301e490e8cfc656422" +dependencies = [ + "pin-project-internal", +] + +[[package]] +name = "pin-project-internal" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4359fd9c9171ec6e8c62926d6faaf553a8dc3f64e1507e76da7911b4f6a04405" dependencies = [ - "proc-macro-error-attr", "proc-macro2", "quote", - "syn", - "version_check", + "syn 2.0.39", ] [[package]] -name = "proc-macro-error-attr" -version = "1.0.4" +name = "pin-project-lite" +version = "0.2.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58" + +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + +[[package]] +name = "pkg-config" +version = "0.3.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964" + +[[package]] +name = "ppv-lite86" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" -dependencies = [ - "proc-macro2", - "quote", - "version_check", -] +checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" [[package]] name = "proc-macro2" -version = "1.0.43" +version = "1.0.70" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a2ca2c61bc9f3d74d2886294ab7b9853abd9c1ad903a3ac7815c58989bb7bab" +checksum = "39278fbbf5fb4f646ce651690877f89d1c5811a3d4acb27700c1cb3cdb78fd3b" dependencies = [ "unicode-ident", ] [[package]] name = "quote" -version = "1.0.21" +version = "1.0.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbe448f377a7d6961e30f5955f9b8d106c3f5e449d493ee1b125c1d43c2b5179" +checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae" dependencies = [ "proc-macro2", ] @@ -269,20 +1060,32 @@ 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.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" +dependencies = [ + "bitflags 1.3.2", +] + [[package]] name = "regex" -version = "1.6.0" +version = "1.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c4eb3267174b8c6c2f654116623910a0fef09c4753f8dd83db29c48a0df988b" +checksum = "380b951a9c5e80ddfd6136919eef32310721aa4aacd4889a8d39124b026ab343" dependencies = [ - "regex-syntax", + "aho-corasick", + "memchr", + "regex-automata 0.4.3", + "regex-syntax 0.8.2", ] [[package]] @@ -291,77 +1094,173 @@ version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" dependencies = [ - "regex-syntax", + "regex-syntax 0.6.29", +] + +[[package]] +name = "regex-automata" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f804c7828047e88b2d32e2d7fe5a105da8ee3264f01902f796c8e067dc2483f" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax 0.8.2", ] [[package]] name = "regex-syntax" -version = "0.6.27" +version = "0.6.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" + +[[package]] +name = "regex-syntax" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f" + +[[package]] +name = "rustc-demangle" +version = "0.1.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3f87b73ce11b1619a3c6332f45341e0047173771e8b8b73f87bfeefb7b56244" +checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" [[package]] name = "ryu" -version = "1.0.11" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ad4cc8da4ef723ed60bced201181d83791ad433213d8c24efffda1eec85d741" + +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + +[[package]] +name = "secrecy" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4501abdff3ae82a1c1b477a17252eb69cee9e66eb915c1abaa4f44d873df9f09" +checksum = "9bd1c54ea06cfd2f6b63219704de0b9b4f72dcc2b8fdef820be6cd799780e91e" +dependencies = [ + "serde", + "zeroize", +] [[package]] name = "serde" -version = "1.0.142" +version = "1.0.193" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25dd9975e68d0cb5aa1120c288333fc98731bd1dd12f561e468ea4728c042b89" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde-value" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3a1a3341211875ef120e117ea7fd5228530ae7e7036a779fdc9117be6b3282c" +dependencies = [ + "ordered-float", + "serde", +] + +[[package]] +name = "serde_derive" +version = "1.0.193" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e590c437916fb6b221e1d00df6e3294f3fccd70ca7e92541c475d6ed6ef5fee2" +checksum = "43576ca501357b9b071ac53cdc7da8ef0cbd9493d8df094cd821777ea6e894d3" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.39", +] [[package]] name = "serde_json" -version = "1.0.83" +version = "1.0.108" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d1c7e3eac408d115102c4c24ad393e0821bb3a5df4d506a80f85f7a742a526b" +dependencies = [ + "indexmap", + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "serde_yaml" +version = "0.9.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38dd04e3c8279e75b31ef29dbdceebfe5ad89f4d0937213c53f7d49d01b3d5a7" +checksum = "3cc7a1570e38322cfe4154732e5110f887ea57e22b76f4bfd32b5bdd3368666c" dependencies = [ + "indexmap", "itoa", "ryu", "serde", + "unsafe-libyaml", ] [[package]] name = "sharded-slab" -version = "0.1.4" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "900fba806f70c630b0a382d0d825e17a0f19fcd059a2ade1ff237bcddf446b31" +checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" dependencies = [ "lazy_static", ] [[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.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" +dependencies = [ + "autocfg", +] + [[package]] name = "smallvec" -version = "1.9.0" +version = "1.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fd0db749597d91ff862fd1d55ea87f7855a744a8425a64695b6fca237d1dad1" +checksum = "4dccd0940a2dcdf68d092b8cbab7dc0ad8fa938bf95787e1b916b0e3d0e8e970" [[package]] name = "socket2" -version = "0.4.4" +version = "0.4.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "66d72b759436ae32898a2af0a14218dbf55efde3feeb170eb623637db85ee1e0" +checksum = "9f7916fc008ca5542385b89a3d3ce689953c143e9304a9bf8beec1de48994c0d" dependencies = [ "libc", "winapi", ] +[[package]] +name = "socket2" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b5fac59a5cb5dd637972e5fca70daf0523c9067fcdc4842f053dae04a18f8e9" +dependencies = [ + "libc", + "windows-sys", +] + [[package]] name = "syn" -version = "1.0.99" +version = "1.0.109" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58dbef6ec655055e20b86b15a8cc6d439cca19b667537ac6a1369572d151ab13" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" dependencies = [ "proc-macro2", "quote", @@ -369,76 +1268,185 @@ dependencies = [ ] [[package]] -name = "textwrap" -version = "0.15.0" +name = "syn" +version = "2.0.39" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1141d4d61095b28419e22cb0bbf02755f5e54e0526f97f1e3d1d160e60885fb" +checksum = "23e78b90f2fcf45d3e842032ce32e3f2d1545ba6636271dcbf24fa306d87be7a" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] [[package]] name = "thiserror" -version = "1.0.32" +version = "1.0.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5f6586b7f764adc0231f4c79be7b920e766bb2f3e51b3661cdb263828f19994" +checksum = "f9a7210f5c9a7156bb50aa36aed4c95afb51df0df00713949448cf9e97d382d2" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.32" +version = "1.0.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12bafc5b54507e0149cdf1b145a5d80ab80a90bcd9275df43d4fff68460f6c21" +checksum = "266b2e40bc00e5a6c09c3584011e08b06f123c00362c92b975ba9843aaaa14b8" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.39", ] [[package]] name = "thread_local" -version = "1.1.4" +version = "1.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5516c27b78311c50bf42c071425c560ac799b11c30b31f87e3081965fe5e0180" +checksum = "3fdd6f064ccff2d6567adcb3873ca630700f00b5ad3f060c25b5dcfd9a4ce152" dependencies = [ + "cfg-if", "once_cell", ] +[[package]] +name = "tinyvec" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" +dependencies = [ + "tinyvec_macros", +] + +[[package]] +name = "tinyvec_macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" + [[package]] name = "tokio" -version = "1.20.4" +version = "1.34.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb78f30e4b41e98ca4cce5acb51168a033839a7af9e42b380355808e14e98ee0" +checksum = "d0c014766411e834f7af5b8f4cf46257aab4036ca95e9d2c144a10f59ad6f5b9" dependencies = [ - "autocfg", + "backtrace", "bytes", "libc", - "memchr", "mio", + "num_cpus", + "parking_lot", "pin-project-lite", "signal-hook-registry", - "socket2", + "socket2 0.5.5", "tokio-macros", - "winapi", + "windows-sys", +] + +[[package]] +name = "tokio-io-timeout" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30b74022ada614a1b4834de765f9bb43877f910cc8ce4be40e89042c9223a8bf" +dependencies = [ + "pin-project-lite", + "tokio", ] [[package]] name = "tokio-macros" -version = "1.8.0" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9724f9a975fb987ef7a3cd9be0350edcbe130698af5b8f7a631e23d42d052484" +checksum = "5b8a1e28f2deaa14e508979454cb3a223b10b938b45af148bc0986de36f1923b" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.39", +] + +[[package]] +name = "tokio-openssl" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c08f9ffb7809f1b20c1b398d92acf4cc719874b3b2b2d9ea2f09b4a80350878a" +dependencies = [ + "futures-util", + "openssl", + "openssl-sys", + "tokio", +] + +[[package]] +name = "tokio-util" +version = "0.7.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5419f34732d9eb6ee4c3578b7989078579b7f039cbbb9ca2c4da015749371e15" +dependencies = [ + "bytes", + "futures-core", + "futures-sink", + "pin-project-lite", + "slab", + "tokio", + "tracing", +] + +[[package]] +name = "tower" +version = "0.4.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c" +dependencies = [ + "futures-core", + "futures-util", + "pin-project", + "pin-project-lite", + "tokio", + "tokio-util", + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "tower-http" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61c5bb1d698276a2443e5ecfabc1008bf15a36c12e6a7176e7bf089ea9131140" +dependencies = [ + "base64 0.21.5", + "bitflags 2.4.1", + "bytes", + "futures-core", + "futures-util", + "http", + "http-body", + "http-range-header", + "mime", + "pin-project-lite", + "tower-layer", + "tower-service", + "tracing", ] +[[package]] +name = "tower-layer" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c20c8dbed6283a09604c3e69b4b7eeb54e298b8a600d4d5ecb5ad39de609f1d0" + +[[package]] +name = "tower-service" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" + [[package]] name = "tracing" -version = "0.1.36" +version = "0.1.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fce9567bd60a67d08a16488756721ba392f24f29006402881e43b19aac64307" +checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" dependencies = [ - "cfg-if", + "log", "pin-project-lite", "tracing-attributes", "tracing-core", @@ -446,20 +1454,20 @@ dependencies = [ [[package]] name = "tracing-attributes" -version = "0.1.22" +version = "0.1.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11c75893af559bc8e10716548bdef5cb2b983f8e637db9d0e15126b61b484ee2" +checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.39", ] [[package]] name = "tracing-core" -version = "0.1.29" +version = "0.1.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5aeea4303076558a00714b823f9ad67d58a3bbda1df83d8827d21193156e22f7" +checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" dependencies = [ "once_cell", "valuable", @@ -467,12 +1475,12 @@ dependencies = [ [[package]] name = "tracing-log" -version = "0.1.3" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78ddad33d2d10b1ed7eb9d1f518a5674713876e97e5bb9b7345a7984fbb4f922" +checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3" dependencies = [ - "lazy_static", "log", + "once_cell", "tracing-core", ] @@ -488,9 +1496,9 @@ dependencies = [ [[package]] name = "tracing-subscriber" -version = "0.3.15" +version = "0.3.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60db860322da191b40952ad9affe65ea23e7dd6a5c442c2c42865810c6ab8e6b" +checksum = "ad0f048c97dbd9faa9b7df56362b8ebcaa52adb06b498c050d2f4e32f90a7a8b" dependencies = [ "matchers", "once_cell", @@ -506,11 +1514,58 @@ dependencies = [ "tracing-serde", ] +[[package]] +name = "treediff" +version = "4.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52984d277bdf2a751072b5df30ec0377febdb02f7696d64c2d7d54630bac4303" +dependencies = [ + "serde_json", +] + +[[package]] +name = "try-lock" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed" + +[[package]] +name = "unicode-bidi" +version = "0.3.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460" + [[package]] name = "unicode-ident" -version = "1.0.3" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" + +[[package]] +name = "unicode-normalization" +version = "0.1.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921" +dependencies = [ + "tinyvec", +] + +[[package]] +name = "unsafe-libyaml" +version = "0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f28467d3e1d3c6586d8f25fa243f544f5800fec42d97032474e17222c2b75cfa" + +[[package]] +name = "url" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4f5b37a154999a8f3f98cc23a628d850e154479cd94decf3414696e12e31aaf" +checksum = "31e6302e3bb753d46e83516cae55ae196fc0c309407cf11ab35cc51a4c2a4633" +dependencies = [ + "form_urlencoded", + "idna", + "percent-encoding", +] [[package]] name = "valuable" @@ -518,18 +1573,87 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" +[[package]] +name = "vcpkg" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" + [[package]] name = "version_check" version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" +[[package]] +name = "want" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" +dependencies = [ + "try-lock", +] + [[package]] name = "wasi" version = "0.11.0+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" +[[package]] +name = "wasm-bindgen" +version = "0.2.89" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ed0d4f68a3015cc185aff4db9506a015f4b96f95303897bfa23f846db54064e" +dependencies = [ + "cfg-if", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.89" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b56f625e64f3a1084ded111c4d5f477df9f8c92df113852fa5a374dbda78826" +dependencies = [ + "bumpalo", + "log", + "once_cell", + "proc-macro2", + "quote", + "syn 2.0.39", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.89" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0162dbf37223cd2afce98f3d0785506dcb8d266223983e4b5b525859e6e182b2" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.89" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0eb82fcb7930ae6219a7ecfd55b217f5f0893484b7a13022ebb2b2bf20b5283" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.39", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.89" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ab9b36309365056cd639da3134bf87fa8f3d86008abf99e612384a6eecd459f" + [[package]] name = "winapi" version = "0.3.9" @@ -552,45 +1676,103 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" +[[package]] +name = "windows-core" +version = "0.51.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1f8cf84f35d2db49a46868f947758c7a1138116f7fac3bc844f43ade1292e64" +dependencies = [ + "windows-targets", +] + [[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.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea04155a16a59f9eab786fe12a4a450e75cdb175f9e0d80da1e17db09f55b8d2" +checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" dependencies = [ + "windows_aarch64_gnullvm", "windows_aarch64_msvc", "windows_i686_gnu", "windows_i686_msvc", "windows_x86_64_gnu", + "windows_x86_64_gnullvm", "windows_x86_64_msvc", ] +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" + [[package]] name = "windows_aarch64_msvc" -version = "0.36.1" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9bb8c3fd39ade2d67e9874ac4f3db21f0d710bee00fe7cab16949ec184eeaa47" +checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" [[package]] name = "windows_i686_gnu" -version = "0.36.1" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "180e6ccf01daf4c426b846dfc66db1fc518f074baa793aa7d9b9aaeffad6a3b6" +checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" [[package]] name = "windows_i686_msvc" -version = "0.36.1" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2e7917148b2812d1eeafaeb22a97e4813dfa60a3f8f78ebe204bcc88f12f024" +checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" [[package]] name = "windows_x86_64_gnu" -version = "0.36.1" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4dcd171b8776c41b97521e5da127a2d86ad280114807d0b2ab1e462bc764d9e1" +checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" [[package]] name = "windows_x86_64_msvc" -version = "0.36.1" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" + +[[package]] +name = "zerocopy" +version = "0.7.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f43de342578a3a14a9314a2dab1942cbfcbe5686e1f91acdc513058063eafe18" +dependencies = [ + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.7.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1012d89e3acb79fad7a799ce96866cfb8098b74638465ea1b1533d35900ca90" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.39", +] + +[[package]] +name = "zeroize" +version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c811ca4a8c853ef420abd8592ba53ddbbac90410fab6903b3e79972a631f7680" +checksum = "525b4ec142c6b68a2d10f01f7bbf6755599ca3f81ea53b8431b7dd348f5fdb2d" diff --git a/Cargo.toml b/Cargo.toml index d8b24013..c492f72e 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,5 +1,5 @@ [workspace] -members = ["validator"] +members = ["reinitialize-pods", "validator"] [profile.release] lto = true diff --git a/Dockerfile-cni-plugin b/Dockerfile-cni-plugin index e95ea777..136a8a6d 100644 --- a/Dockerfile-cni-plugin +++ b/Dockerfile-cni-plugin @@ -1,9 +1,5 @@ # syntax=docker/dockerfile:1.4 -## -## Go -## - # Cross compile from native platform to target arch FROM --platform=$BUILDPLATFORM golang:1.21-alpine as go WORKDIR /build @@ -16,9 +12,13 @@ ARG TARGETARCH RUN CGO_ENABLED=0 GOOS=linux GOARCH=$TARGETARCH GO111MODULE=on \ go build -o /go/bin/linkerd-cni -mod=readonly -ldflags "-s -w" -v ./cni-plugin/ -## -## Runtime -## + +FROM --platform=$BUILDPLATFORM curlimages/curl:7.86.0 as fetch +WORKDIR /build +ARG LINKERD_REINITIALIZE_PODS_VERSION=v0.0.1 +#RUN bin/scurl -O https://github.com/linkerd/linkerd2-proxy-init/releases/download/reinitialize-pods%2F${LINKERD_REINITIALIZE_PODS_VERSION}/linkerd-reinitialize-pods-${LINKERD_REINITIALIZE_PODS_VERSION}-${TARGETARCH}.tgz +#RUN tar -zxvf linkerd-reinitialize-pods-${LINKERD_REINITIALIZE_PODS}-${TARGETARCH}.tgz && mv linkerd-reinitialize-pods-${LINKERD_REINITIALIZE_PODS}-${TARGETARCH}/linkerd-reinitialize-pods . +COPY --link ./linkerd-reinitialize-pods . FROM --platform=$TARGETPLATFORM alpine:3.18.3 as runtime WORKDIR /linkerd @@ -31,6 +31,7 @@ RUN apk add \ jq COPY --from=go /go/bin/linkerd-cni /opt/cni/bin/ +COPY --from=fetch /build/linkerd-reinitialize-pods /usr/lib/linkerd/ COPY LICENSE . COPY cni-plugin/deployment/scripts/install-cni.sh . COPY cni-plugin/deployment/linkerd-cni.conf.default . diff --git a/cni-plugin/deployment/scripts/install-cni.sh b/cni-plugin/deployment/scripts/install-cni.sh index bcb277ff..afbe9ec9 100755 --- a/cni-plugin/deployment/scripts/install-cni.sh +++ b/cni-plugin/deployment/scripts/install-cni.sh @@ -210,6 +210,7 @@ EOF } install_cni_conf() { + sleep 20 local cni_conf_path=$1 create_cni_conf diff --git a/deny.toml b/deny.toml new file mode 100644 index 00000000..2bc0993f --- /dev/null +++ b/deny.toml @@ -0,0 +1,71 @@ +targets = [ + { triple = "x86_64-unknown-linux-gnu" }, + { triple = "aarch64-unknown-linux-gnu" }, + { triple = "armv7-unknown-linux-gnu" }, +] + +[advisories] +db-path = "~/.cargo/advisory-db" +db-urls = ["https://github.com/rustsec/advisory-db"] +vulnerability = "deny" +unmaintained = "warn" +yanked = "deny" +notice = "warn" +ignore = [] + +[licenses] +unlicensed = "deny" +allow = ["Apache-2.0", "BSD-2-Clause", "BSD-3-Clause", "MIT"] +deny = [] +copyleft = "deny" +allow-osi-fsf-free = "neither" +default = "deny" +confidence-threshold = 0.8 +exceptions = [ + # The Unicode-DFS--2016 license is necessary for unicode-ident because they + # use data from the unicode tables to generate the tables which are + # included in the application. We do not distribute those data files so + # this is not a problem for us. See https://github.com/dtolnay/unicode-ident/pull/9/files + # for more details. + { allow = [ + "MIT", + "Apache-2.0", + "Unicode-DFS-2016", + ], name = "unicode-ident" }, +] + +[[licenses.clarify]] +name = "ring" +version = "*" +expression = "MIT AND ISC AND OpenSSL" +license-files = [{ path = "LICENSE", hash = 0xbd0eed23 }] + +[bans] +multiple-versions = "deny" +# Wildcard dependencies are used for all workspace-local crates. +wildcards = "allow" +highlight = "all" +deny = [] +skip = [ + # `rustls-pemfile` and `k8s-openapi` depend on versions of `base64` that + # have diverged significantly. + { name = "base64" }, + # https://github.com/hawkw/matchers/pull/4 + { name = "regex-automata", version = "0.1" }, + { name = "regex-syntax", version = "0.6" }, + # syn v2 has been released and some libraries are slower to adopt it + { name = "syn", version = "1.0" }, + # recent tokio versions (v1.34) depend on socket2 v0.5.5 while hyper is + # stuck on v0.4.10 + { name = "socket2" }, +] +skip-tree = [ +] + +[sources] +unknown-registry = "deny" +unknown-git = "deny" +allow-registry = ["https://github.com/rust-lang/crates.io-index"] + +[sources.allow-org] +github = [] diff --git a/justfile b/justfile index b9c7b4fd..0a3a6e2f 100644 --- a/justfile +++ b/justfile @@ -55,7 +55,7 @@ rs-audit-deps: # Build Rust unit and integration tests rs-test-build: - {{ _cargo }} test-build --workspace --no-run + {{ _cargo }} test-build --workspace # Run unit tests in whole Rust workspace rs-test *flags: @@ -80,6 +80,13 @@ validator *args: cni-plugin-lint *flags: golangci-lint run ./cni-plugin/... {{ flags }} +## +## reinitialize-pods +## + +reinitialize-pods *args: + {{ just_executable() }} --justfile=reinitialize-pods/.justfile {{ args }} + ## ## proxy-init ## diff --git a/linkerd-reinitialize-pods b/linkerd-reinitialize-pods new file mode 100755 index 00000000..b4c58e9e Binary files /dev/null and b/linkerd-reinitialize-pods differ diff --git a/reinitialize-pods/.gitignore b/reinitialize-pods/.gitignore new file mode 100644 index 00000000..ea8c4bf7 --- /dev/null +++ b/reinitialize-pods/.gitignore @@ -0,0 +1 @@ +/target diff --git a/reinitialize-pods/.justfile b/reinitialize-pods/.justfile new file mode 100644 index 00000000..6a55e58e --- /dev/null +++ b/reinitialize-pods/.justfile @@ -0,0 +1,53 @@ +# This justfile includes recipes for building and packaging +# linkerd-reinitialize-pods for release. This file is separated so that we can +# invoke cargo, etc when building defaults. If this logic were in the top-level +# justfile, then these tools would be invoked (possibly updating Rust, etc), +# for unrelated targets. +# +# Users are expected to interact with this via the top-level Justfile. + +# The version name to use for packages. +version := `just-cargo crate-version linkerd-reinitialize-pods` + +profile := 'debug' + +# The architecture name to use for packages. Either 'amd64', 'arm64', or 'arm'. +arch := env_var_or_default("TARGETARCH", "amd64") + +# If an `_arch` is specified, then we change the default cargo `--target` to +# support cross-compilation. Otherwise, we use `rustup` to find the default. +_cargo-target := if arch == "amd64" { + "x86_64-unknown-linux-musl" + } else if arch == "arm64" { + "aarch64-unknown-linux-musl" + } else if arch == "arm" { + "armv7-unknown-linux-musleabihf" + } else { + `rustup show | sed -n 's/^Default host: \(.*\)/\1/p'` + } + +_target-dir := "../target" / _cargo-target / profile +_target-bin := _target-dir / "linkerd-reinitialize-pods" + +_package-name := "linkerd-reinitialize-pods-" + version + "-" + arch +_package-tgz := "../target/package" / _package-name + ".tgz" +_package-dir := "../target/package" / _package-name +_package-bin := _package-dir / "linkerd-reinitialize-pods" +_package-dbg := _package-bin + ".dbg" + +_cargo := 'just-cargo profile=' + profile + ' target=' + _cargo-target +_objcopy := 'llvm-objcopy-' + `just-cargo --evaluate _llvm-version` +_shasum := "shasum -a 256" + +package: build + @mkdir -p {{ _package-dir }} + {{ _objcopy }} --only-keep-debug {{ _target-bin }} {{ _package-bin }}.dbg + {{ _objcopy }} --strip-unneeded {{ _target-bin }} {{ _package-bin }} + {{ _objcopy }} --add-gnu-debuglink={{ _package-dbg }} {{ _package-bin }} + tar -C ../target/package -czf {{ _package-tgz }} {{ _package-name }} + (cd ../target/package && {{ _shasum }} {{ _package-name }}.tgz > {{ _package-name }}.txt) + @rm -rf {{ _package-dir }} + +build *flags: + {{ _cargo }} fetch --locked + {{ _cargo }} build --workspace -p linkerd-reinitialize-pods {{ flags }} diff --git a/reinitialize-pods/Cargo.toml b/reinitialize-pods/Cargo.toml new file mode 100644 index 00000000..94c5e1ba --- /dev/null +++ b/reinitialize-pods/Cargo.toml @@ -0,0 +1,28 @@ +[package] +name = "linkerd-reinitialize-pods" +version = "0.1.0" +authors = ["Linkerd Authors "] +edition = "2018" +license = "Apache-2.0" +publish = false + +[dependencies] +anyhow = "1" +futures-util = "0.3" +k8s-openapi = { version = "0.19", features = ["v1_21"] } +kube = { version = "0.85", features = ["runtime"] } +tracing = "0.1" + +[dependencies.clap] +version = "4" +default-features = false +features = ["derive", "env", "help", "std"] + +[dependencies.kubert] +version = "0.19.0" +default-features = false +features = ["clap", "runtime"] + +[dependencies.tokio] +version = "1" +features = ["macros", "parking_lot", "rt", "rt-multi-thread"] diff --git a/reinitialize-pods/src/lib.rs b/reinitialize-pods/src/lib.rs new file mode 100644 index 00000000..eff29457 --- /dev/null +++ b/reinitialize-pods/src/lib.rs @@ -0,0 +1,59 @@ +use futures_util::StreamExt; +use k8s_openapi::api::core::v1::Pod; +use kube::runtime::watcher; +use kubert::Runtime; + +// ERRNO 95: Operation not supported +pub const UNSUCCESSFUL_EXIT_CODE: i32 = 95; + +const DATA_PLANE_LABEL: &str = "linkerd.io/control-plane-ns"; +const CONDITION_EVICTED_REASON: &str = "EvictionByEvictionAPI"; + +pub fn run(runtime: &mut Runtime, node_name: String) { + let client = runtime.client().clone(); + let pod_evts = runtime.watch_all::( + watcher::Config::default() + .labels(DATA_PLANE_LABEL) + .fields(&format!("spec.nodeName={node_name}")), + ); + + tokio::spawn(async move { + tokio::pin!(pod_evts); + while let Some(evt) = pod_evts.next().await { + if let watcher::Event::Applied(pod) = evt { + let maybe_terminated = pod + .status + .clone() + .and_then(|x| x.init_container_statuses) + .and_then(|x| x.into_iter().next()) + .filter(|x| x.name == "linkerd-network-validator") + .and_then(|x| x.last_state) + .and_then(|x| x.terminated) + .filter(|x| x.exit_code == UNSUCCESSFUL_EXIT_CODE); + + let maybe_already_evicting = + pod.status.clone().and_then(|x| x.conditions).and_then(|x| { + x.into_iter().find(|y| { + y.reason + .as_ref() + .is_some_and(|z| z == CONDITION_EVICTED_REASON) + }) + }); + + if maybe_terminated.is_some() && maybe_already_evicting.is_none() { + let pods = kube::Api::::namespaced( + client.clone(), + &pod.metadata.namespace.unwrap(), + ); + let evict_res = pods + .evict(&pod.metadata.name.clone().unwrap(), &Default::default()) + .await; + match evict_res { + Ok(_) => tracing::info!("Evicting pod {}", pod.metadata.name.unwrap()), + Err(err) => tracing::warn!("Error evicting pod: {:?}", err), + } + } + } + } + }); +} diff --git a/reinitialize-pods/src/main.rs b/reinitialize-pods/src/main.rs new file mode 100644 index 00000000..f61922b1 --- /dev/null +++ b/reinitialize-pods/src/main.rs @@ -0,0 +1,61 @@ +use anyhow::{bail, Result}; +use clap::Parser; + +/// Scan the pods in the current node to find those that have been injected by linkerd, and whose +/// linkerd-network-validator container has failed, and proceed to evict them so they can restart +/// and rety re-acquiring a proper network config. + +#[derive(Parser)] +#[command(version)] +struct Args { + #[arg( + long, + env = "LINKERD_REINITIALIZE_PODS_LOG_LEVEL", + default_value = "linkerd_reinitialize_pods=info,warn" + )] + log_level: kubert::LogFilter, + + #[arg( + long, + env = "LINKERD_REINITIALIZE_PODS_LOG_FORMAT", + default_value = "plain" + )] + log_format: kubert::LogFormat, + + #[arg(long, env = "LINKERD_REINITIALIZE_PODS_POD_NODE_NAME")] + node_name: String, + + #[command(flatten)] + client: kubert::ClientArgs, + + #[command(flatten)] + admin: kubert::AdminArgs, +} + +#[tokio::main] +async fn main() -> Result<()> { + let Args { + log_level, + log_format, + node_name, + client, + admin, + } = Args::parse(); + + let mut runtime = kubert::Runtime::builder() + .with_log(log_level, log_format) + .with_admin(admin) + .with_client(client) + .build() + .await?; + + linkerd_reinitialize_pods::run(&mut runtime, node_name); + + // Block the main thread on the shutdown signal. Once it fires, wait for the background tasks to + // complete before exiting. + if runtime.run().await.is_err() { + bail!("aborted"); + } + + Ok(()) +} diff --git a/rust-toolchain b/rust-toolchain deleted file mode 100644 index 94057304..00000000 --- a/rust-toolchain +++ /dev/null @@ -1 +0,0 @@ -1.64.0 diff --git a/rust-toolchain.toml b/rust-toolchain.toml new file mode 100644 index 00000000..8142c301 --- /dev/null +++ b/rust-toolchain.toml @@ -0,0 +1,2 @@ +[toolchain] +channel = "1.73.0" diff --git a/validator/Cargo.toml b/validator/Cargo.toml index 08222d21..720297f7 100644 --- a/validator/Cargo.toml +++ b/validator/Cargo.toml @@ -9,12 +9,13 @@ publish = false [dependencies] anyhow = "1" bytes = "1" -kubert = { version = "0.8", features = ["log"] } +kubert = { version = "0.19.0", features = ["log"] } +linkerd-reinitialize-pods = { path = "../reinitialize-pods" } rand = "0.8" tracing = "0.1" [dependencies.clap] -version = "3" +version = "4" default-features = false features = ["derive", "env", "std"] diff --git a/validator/src/main.rs b/validator/src/main.rs index 096aebdd..0015e9f5 100644 --- a/validator/src/main.rs +++ b/validator/src/main.rs @@ -1,6 +1,7 @@ use anyhow::{anyhow, bail, ensure, Context, Result}; use bytes::{Bytes, BytesMut}; use clap::Parser; +use linkerd_reinitialize_pods::UNSUCCESSFUL_EXIT_CODE; use rand::distributions::{Alphanumeric, DistString}; use std::{net::SocketAddr, process::exit, time}; use tokio::{ @@ -33,7 +34,7 @@ struct Args { )] log_format: kubert::LogFormat, - #[clap(parse(try_from_str = parse_timeout), long, default_value = "10s")] + #[clap(value_parser = parse_timeout, long, default_value = "10s")] timeout: std::time::Duration, /// Address to which connections are supposed to be redirected by the @@ -46,9 +47,6 @@ struct Args { connect_addr: SocketAddr, } -// ERRNO 95: Operation not supported -const UNSUCCESSFUL_EXIT_CODE: i32 = 95; - #[tokio::main(flavor = "current_thread")] async fn main() { let Args { @@ -134,12 +132,12 @@ async fn validate(listen_addr: SocketAddr, connect_addr: SocketAddr) -> Result<( rules are rewriting traffic as expected"); error })?; - debug!(data = ?String::from_utf8_lossy(&*data), size = data.len()); + debug!(data = ?String::from_utf8_lossy(&data), size = data.len()); ensure!( data == token, "expected client to receive {:?}; got {:?} instead", - String::from_utf8_lossy(&*token), - String::from_utf8_lossy(&*data), + String::from_utf8_lossy(&token), + String::from_utf8_lossy(&data), ); Ok(()) } @@ -159,7 +157,7 @@ async fn serve(listener: TcpListener, token: Bytes) { debug!("Accepted"); // We expect this write to complete instantaneously, so a timeout is not needed // here. - match socket.write_all(&*token).await { + match socket.write_all(&token).await { Ok(()) => debug!(bytes = token.len(), "Wrote message to client"), Err(error) => error!(%error, "Failed to write bytes to client"), }