├── .gitignore ├── ci ├── script.sh ├── before_deploy.ps1 ├── before_deploy.sh └── install.sh ├── Cargo.toml ├── lib ├── Cargo.toml └── src │ └── lib.rs ├── .travis.yml ├── README.md ├── src └── main.rs ├── LICENSE └── Cargo.lock /.gitignore: -------------------------------------------------------------------------------- 1 | /target 2 | **/*.rs.bk 3 | .idea 4 | -------------------------------------------------------------------------------- /ci/script.sh: -------------------------------------------------------------------------------- 1 | # This script takes care of testing your crate 2 | 3 | set -ex 4 | 5 | # TODO This is the "test phase", tweak it as you see fit 6 | main() { 7 | cross build --target $TARGET 8 | cross build --target $TARGET --release 9 | 10 | if [ ! -z $DISABLE_TESTS ]; then 11 | return 12 | fi 13 | 14 | cross test --target $TARGET 15 | cross test --target $TARGET --release 16 | } 17 | 18 | # we don't run the "test phase" when doing deploys 19 | if [ -z $TRAVIS_TAG ]; then 20 | main 21 | fi 22 | -------------------------------------------------------------------------------- /Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "suspicious-pods" 3 | version = "1.2.0" 4 | authors = ["edrevo "] 5 | edition = "2018" 6 | keywords = ["k8s", "kubernetes"] 7 | description = "Prints a list of k8s pods that might not be working correctly" 8 | license = "Apache-2.0" 9 | repository = "https://github.com/edrevo/suspicious-pods" 10 | # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html 11 | 12 | [workspace] 13 | 14 | [dependencies] 15 | ansi_term = "0.12" 16 | clap = "3.1" 17 | itertools = "0.10" 18 | suspicious-pods-lib = { version = "1.2.0", path = "lib" } 19 | tokio = { version = "1", features = ["macros", "rt"] } 20 | -------------------------------------------------------------------------------- /ci/before_deploy.ps1: -------------------------------------------------------------------------------- 1 | # This script takes care of packaging the build artifacts that will go in the 2 | # release zipfile 3 | 4 | $SRC_DIR = $pwd.Path 5 | $STAGE = [System.Guid]::NewGuid().ToString() 6 | 7 | Set-Location $env:TEMP 8 | New-Item -Type Directory -Name $STAGE 9 | Set-Location $STAGE 10 | 11 | $ZIP = "$SRC_DIR\$($env:CRATE_NAME)-$($env:APPVEYOR_REPO_TAG_NAME)-$($env:TARGET).zip" 12 | 13 | # TODO Update this to package the right artifacts 14 | Copy-Item "$SRC_DIR\target\$($env:TARGET)\release\$(env:CRATE_NAME).exe" '.\' 15 | 16 | 7z a "$ZIP" * 17 | 18 | Push-AppveyorArtifact "$ZIP" 19 | 20 | Remove-Item *.* -Force 21 | Set-Location .. 22 | Remove-Item $STAGE 23 | Set-Location $SRC_DIR 24 | -------------------------------------------------------------------------------- /lib/Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "suspicious-pods-lib" 3 | version = "1.2.0" 4 | authors = ["edrevo "] 5 | edition = "2018" 6 | keywords = ["k8s", "kubernetes"] 7 | description = "List k8s pods that might not be working correctly" 8 | license = "Apache-2.0" 9 | repository = "https://github.com/edrevo/suspicious-pods" 10 | # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html 11 | 12 | [dependencies] 13 | kube = { version = "0.71", default-features = false, features = ["client", "rustls-tls"] } 14 | k8s-openapi = { version = "0.14", default-features = false, features = ["v1_22"] } 15 | serde = { "version" = "1.0", features = ["derive"] } -------------------------------------------------------------------------------- /ci/before_deploy.sh: -------------------------------------------------------------------------------- 1 | # This script takes care of building your crate and packaging it for release 2 | 3 | set -ex 4 | 5 | main() { 6 | local src=$(pwd) \ 7 | stage= 8 | 9 | case $TRAVIS_OS_NAME in 10 | linux) 11 | stage=$(mktemp -d) 12 | ;; 13 | osx) 14 | stage=$(mktemp -d -t tmp) 15 | ;; 16 | esac 17 | 18 | test -f Cargo.lock || cargo generate-lockfile 19 | 20 | export CARGO_PROFILE_RELEASE_LTO=true 21 | cross build --bin suspicious-pods --target $TARGET --release 22 | 23 | cp target/$TARGET/release/suspicious-pods $stage/ 24 | 25 | cd $stage 26 | tar czf $src/$CRATE_NAME-$TRAVIS_TAG-$TARGET.tar.gz * 27 | cd $src 28 | 29 | rm -rf $stage 30 | } 31 | 32 | main 33 | -------------------------------------------------------------------------------- /ci/install.sh: -------------------------------------------------------------------------------- 1 | set -ex 2 | 3 | main() { 4 | local target= 5 | if [ $TRAVIS_OS_NAME = linux ]; then 6 | target=x86_64-unknown-linux-musl 7 | sort=sort 8 | else 9 | target=x86_64-apple-darwin 10 | sort=gsort # for `sort --sort-version`, from brew's coreutils. 11 | fi 12 | 13 | # Builds for iOS are done on OSX, but require the specific target to be 14 | # installed. 15 | case $TARGET in 16 | aarch64-apple-ios) 17 | rustup target install aarch64-apple-ios 18 | ;; 19 | armv7-apple-ios) 20 | rustup target install armv7-apple-ios 21 | ;; 22 | armv7s-apple-ios) 23 | rustup target install armv7s-apple-ios 24 | ;; 25 | i386-apple-ios) 26 | rustup target install i386-apple-ios 27 | ;; 28 | x86_64-apple-ios) 29 | rustup target install x86_64-apple-ios 30 | ;; 31 | esac 32 | 33 | # This fetches latest stable release 34 | local tag=$(git ls-remote --tags --refs --exit-code https://github.com/japaric/cross \ 35 | | cut -d/ -f3 \ 36 | | grep -E '^v[0.1.0-9.]+$' \ 37 | | $sort --version-sort \ 38 | | tail -n1) 39 | curl -LSfs https://japaric.github.io/trust/install.sh | \ 40 | sh -s -- \ 41 | --force \ 42 | --git japaric/cross \ 43 | --tag $tag \ 44 | --target $target 45 | } 46 | 47 | main 48 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | # Based on the "trust" template v0.1.2 2 | # https://github.com/japaric/trust/tree/v0.1.2 3 | 4 | dist: trusty 5 | language: rust 6 | services: docker 7 | sudo: required 8 | 9 | env: 10 | global: 11 | - CRATE_NAME=suspicious-pods 12 | 13 | matrix: 14 | include: 15 | # Linux 16 | - env: TARGET=i686-unknown-linux-gnu 17 | - env: TARGET=i686-unknown-linux-musl 18 | - env: TARGET=x86_64-unknown-linux-gnu 19 | - env: TARGET=x86_64-unknown-linux-musl 20 | 21 | # OSX 22 | - env: TARGET=x86_64-apple-darwin 23 | os: osx 24 | 25 | before_install: 26 | - set -e 27 | - rustup self update 28 | 29 | install: 30 | - sh ci/install.sh 31 | - source ~/.cargo/env || true 32 | 33 | script: 34 | - bash ci/script.sh 35 | 36 | after_script: set +e 37 | 38 | before_deploy: 39 | - sh ci/before_deploy.sh 40 | 41 | deploy: 42 | api_key: 43 | secure: "ds+KXq+nhiRx8OgbYZOezbiM8TuzuG6Ib059TQcrbcHlI+x4rWdaYtdQQujqddwyvtEmD2kfMm0Aw9fDHQB1L8s2Unu04xqxddQ7H4nsixNFse5CgJlaBBXHWylZb46JSwsFpTbOZti/I3o4BxUcn5VaaWu/UMS/j874/pQQWlw+LYZmdd+SyOb3dIlpgp2Ecd1xX9kpqUFV0a3a7bh3uPwnl9EyukZ4Sa8+xqARQengfHvnQpQTFv0TsrdylRg+MpfcFiLxNNyyPky6kiGzMlT1QuUx5s/s8eLszecOalmNRoYi43qf6q22PHHLyTNt98D0Ikk+CvuFcuiygpdI7aynJEpRDRdxoVcHXo/ZHHCm1x5Ckr7vWaCwKaetUmF0rUHf29uv3McEDFEiK1QzcOefNQPDN2mZml/GBULK8Q6+aukX0VR6SLHZ2KHatjL7tErwTnqIzYlZiQgcpOlA78QOyvJqjcNQa2l9j61PFIpPx1sSpVsYoltnSi5lKCkHAYnW9MgaOnePzd+Nyfpwh1YYHvZs8M4P2FH3MG6SVTwKm7Aqnh4C/RN4mD4EVjKEyANqpsy+/WXSOpn4VXoymIVwivIjt055t2hj6bqsXRsKgv0I2bPlrTO2aKTQNuKIw2x1TAf3ZXxqs5yLU8pnvpBvX1ac70IpxyIpWhsb8bQ=" 44 | file_glob: true 45 | file: $CRATE_NAME-$TRAVIS_TAG-$TARGET.* 46 | on: 47 | condition: $TRAVIS_RUST_VERSION = stable 48 | tags: true 49 | provider: releases 50 | skip_cleanup: true 51 | 52 | cache: cargo 53 | before_cache: 54 | # Travis can't cache files that are not readable by "others" 55 | - chmod -R a+r $HOME/.cargo 56 | 57 | branches: 58 | only: 59 | # release tags 60 | - /^\d+\.\d+\.\d+.*$/ 61 | - master 62 | 63 | notifications: 64 | email: 65 | on_success: never 66 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Suspicious pods 2 | 3 | ![crates.io](https://img.shields.io/crates/v/suspicious-pods.svg) 4 | 5 | Suspicious pods is a very simple tool, which does a very simple task: print a list of pods in your Kubernetes cluster that might not be working correctly, along with a reason on why that pod is considered suspicious. 6 | 7 | Example: 8 | 9 | ``` 10 | $ suspicious-pods --help 11 | suspicious-pods 1.2.0 12 | Prints a list of k8s pods that might not be working correctly 13 | 14 | USAGE: 15 | suspicious-pods.exe [FLAGS] 16 | 17 | FLAGS: 18 | --all-namespaces Set this flag to scan all namespaces in the cluster 19 | -h, --help Prints help information 20 | -V, --version Prints version information 21 | 22 | ARGS: 23 | The namespace you want to scan [default: default] 24 | 25 | $ suspicious-pods 26 | 27 | fluentd-aggregator-0/fluentd-aggregator Restarted 6 times. Last exit code: 1. (Error) 28 | fluentd-dgjm8/fluentd Waiting: PodInitializing 29 | jaeger-es-index-cleaner-120860-jd7b4/jaeger-es-index-cleaner Waiting: ImagePullBackOff 30 | jaeger-operator-5545d554cb-mf5zt/jaeger-operator Restarted 3 times. Last exit code: 137. (OOMKilled) 31 | thanos-store-gateway-0 Stuck on init container: wait-for-prometheus 32 | ``` 33 | 34 | This is useful in big deployments, when you have a large number of pods and you just want to get a quick glimpse of what might be failing in your cluster. 35 | 36 | ## Installation 37 | 38 | ### Option 1: Precompiled binaries 39 | 40 | Head to the [release page](https://github.com/edrevo/suspicious-pods/releases) and download your binary. There are binaries for Windows, Linux and MacOS. On Windows, you need to have OpenSSL installed on your machine. You can install it through [vcpkg](https://github.com/Microsoft/vcpkg) 41 | 42 | ### Option 2: Cargo 43 | 44 | Install [rustup](https://rustup.rs/) and run `cargo install suspicious-pods`. If you are on Windows, you need to have OpenSSL installed on your machine through [vcpkg](https://github.com/Microsoft/vcpkg) and set the environment variable `VCPKGRS_DYNAMIC=1`. 45 | 46 | 47 | ## Feedback 48 | 49 | Feedback and contributions are welcome! Please open an issue or a PR. 50 | -------------------------------------------------------------------------------- /src/main.rs: -------------------------------------------------------------------------------- 1 | use ansi_term::Style; 2 | use clap::{Command, Arg}; 3 | use itertools::Itertools; 4 | use suspicious_pods_lib::*; 5 | 6 | fn display_pods(namespace: Option<&str>, suspicious_pods: T) 7 | where 8 | T: Iterator, 9 | { 10 | if let Some(ns) = namespace { 11 | let namespace_title = format!("Namespace {}", ns); 12 | println!("{}", Style::new().bold().underline().paint(namespace_title)); 13 | } 14 | for pod in suspicious_pods { 15 | match pod.reason { 16 | SuspiciousPodReason::Pending => { 17 | println!("{: <60} Pending", pod.name); 18 | } 19 | SuspiciousPodReason::StuckOnInitContainer(init) => { 20 | println!("{: <60} Stuck on init container: {}", pod.name, init); 21 | } 22 | SuspiciousPodReason::SuspiciousContainers(containers) => { 23 | for container in containers { 24 | let coord = format!("{}/{}", pod.name, container.name); 25 | println!("{: <60} {}", coord, container.reason); 26 | } 27 | } 28 | } 29 | } 30 | println!(); 31 | } 32 | 33 | #[tokio::main(flavor = "current_thread")] 34 | async fn main() -> Result<()> { 35 | let matches = Command::new("suspicious-pods") 36 | .version(env!("CARGO_PKG_VERSION")) 37 | .about("Prints a list of k8s pods that might not be working correctly") 38 | .arg( 39 | Arg::new("namespace") 40 | .default_value("default") 41 | .help("The namespace you want to scan") 42 | .takes_value(true), 43 | ) 44 | .arg( 45 | Arg::new("all-namespaces") 46 | .long("--all-namespaces") 47 | .takes_value(false) 48 | .help("Set this flag to scan all namespaces in the cluster"), 49 | ) 50 | .get_matches(); 51 | let namespace = matches.value_of("namespace").unwrap(); 52 | if matches.is_present("all-namespaces") { 53 | let groups = get_all_suspicious_pods() 54 | .await? 55 | .group_by(|p| p.namespace.to_string()); 56 | for (namespace, group) in &groups { 57 | display_pods(Some(&namespace), group); 58 | } 59 | } else { 60 | display_pods(None, get_suspicious_pods(namespace).await?); 61 | }; 62 | Ok(()) 63 | } 64 | -------------------------------------------------------------------------------- /lib/src/lib.rs: -------------------------------------------------------------------------------- 1 | use std::fmt::Formatter; 2 | 3 | use k8s_openapi::api::core::v1::{ContainerStatus, Pod}; 4 | use kube::{api::Api, Client}; 5 | use serde::{Deserialize, Serialize}; 6 | 7 | #[derive(Serialize, Deserialize)] 8 | pub enum SuspiciousContainerReason { 9 | ContainerWaiting(Option), 10 | NotReady, 11 | Restarted { 12 | count: i32, 13 | exit_code: Option, 14 | reason: Option, 15 | }, 16 | TerminatedWithError(i32), 17 | } 18 | 19 | impl std::fmt::Display for SuspiciousContainerReason { 20 | fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result { 21 | match self { 22 | SuspiciousContainerReason::ContainerWaiting(reason) => { 23 | write!(f, "Waiting")?; 24 | if let Some(r) = reason { 25 | write!(f, ": {}", r)?; 26 | } 27 | } 28 | SuspiciousContainerReason::NotReady => { 29 | write!(f, "Not Ready")?; 30 | } 31 | SuspiciousContainerReason::Restarted { 32 | count, 33 | exit_code, 34 | reason, 35 | } => { 36 | if *count == 1 { 37 | write!(f, "Restarted {} time", count)?; 38 | } else { 39 | write!(f, "Restarted {} times", count)?; 40 | } 41 | if let Some(e) = exit_code { 42 | write!(f, ". Last exit code: {}", e)?; 43 | } 44 | if let Some(r) = reason { 45 | write!(f, ". ({})", r)?; 46 | } 47 | } 48 | SuspiciousContainerReason::TerminatedWithError(exit_code) => { 49 | write!(f, "Terminated with error. Exit code {}.", exit_code)?; 50 | } 51 | } 52 | Ok(()) 53 | } 54 | } 55 | 56 | #[derive(Deserialize, Serialize)] 57 | pub struct SuspiciousContainer { 58 | pub name: String, 59 | pub reason: SuspiciousContainerReason, 60 | } 61 | 62 | #[derive(Deserialize, Serialize)] 63 | pub enum SuspiciousPodReason { 64 | Pending, 65 | StuckOnInitContainer(String), 66 | SuspiciousContainers(Vec), 67 | } 68 | 69 | #[derive(Deserialize, Serialize)] 70 | pub struct SuspiciousPod { 71 | pub namespace: String, 72 | pub name: String, 73 | pub reason: SuspiciousPodReason, 74 | } 75 | 76 | pub type Result = std::result::Result; 77 | 78 | fn is_suspicious_container(pod_name: &str, status: ContainerStatus) -> Option { 79 | let container_name = status.name; 80 | let state = status.state.unwrap_or_else(|| { 81 | panic!( 82 | "Cannot get state for container {} in pod {}", 83 | container_name, pod_name 84 | ) 85 | }); 86 | let reason = if status.restart_count > 0 { 87 | let last_state = status 88 | .last_state 89 | .unwrap_or_else(|| { 90 | panic!( 91 | "Cannot get last state for container {} in pod {}", 92 | container_name, pod_name 93 | ) 94 | }) 95 | .terminated; 96 | Some(SuspiciousContainerReason::Restarted { 97 | count: status.restart_count, 98 | exit_code: last_state.as_ref().map(|s| s.exit_code), 99 | reason: last_state.and_then(|s| s.reason), 100 | }) 101 | } else if let Some(waiting_state) = state.waiting { 102 | let msg: Option = waiting_state.reason.or(waiting_state.message); 103 | Some(SuspiciousContainerReason::ContainerWaiting(msg)) 104 | } else if state.terminated.is_some() && state.terminated.as_ref().unwrap().exit_code != 0 { 105 | Some(SuspiciousContainerReason::TerminatedWithError( 106 | state.terminated.unwrap().exit_code, 107 | )) 108 | } else if state.running.is_some() && !status.ready { 109 | Some(SuspiciousContainerReason::NotReady) 110 | } else { 111 | None 112 | }; 113 | reason.map(|reason| SuspiciousContainer { 114 | name: container_name, 115 | reason, 116 | }) 117 | } 118 | 119 | pub fn is_suspicious_pod(p: Pod) -> Option { 120 | let metadata = p.metadata; 121 | let pod_namespace = metadata.namespace.unwrap_or_else(|| "default".to_string()); 122 | let pod_name = metadata.name.expect("Could not find pod name"); 123 | let status = p 124 | .status 125 | .unwrap_or_else(|| panic!("Cannot get status for pod {}", pod_name)); 126 | if let Some(init_containers) = status.init_container_statuses { 127 | if let Some(stuck_init) = init_containers.into_iter().find(|c| !c.ready) { 128 | return Some(SuspiciousPod { 129 | namespace: pod_namespace, 130 | name: pod_name, 131 | reason: SuspiciousPodReason::StuckOnInitContainer(stuck_init.name), 132 | }); 133 | } 134 | } 135 | if let Some(statuses) = status.container_statuses { 136 | let suspicious_containers: Vec<_> = statuses 137 | .into_iter() 138 | .filter_map(|c| is_suspicious_container(&pod_name, c)) 139 | .collect(); 140 | 141 | if suspicious_containers.is_empty() { 142 | None 143 | } else { 144 | Some(SuspiciousPod { 145 | namespace: pod_namespace, 146 | name: pod_name, 147 | reason: SuspiciousPodReason::SuspiciousContainers(suspicious_containers), 148 | }) 149 | } 150 | } else { 151 | Some(SuspiciousPod { 152 | namespace: pod_namespace, 153 | name: pod_name, 154 | reason: SuspiciousPodReason::Pending, 155 | }) 156 | } 157 | } 158 | 159 | pub async fn get_all_suspicious_pods() -> Result> { 160 | let client = Client::try_default().await?; 161 | let pods = Api::::all(client).list(&Default::default()).await?; 162 | Ok(pods.items.into_iter().filter_map(is_suspicious_pod)) 163 | } 164 | 165 | pub async fn get_suspicious_pods(namespace: &str) -> Result> { 166 | let client = Client::try_default().await?; 167 | let pods = Api::::namespaced(client, namespace) 168 | .list(&Default::default()) 169 | .await?; 170 | Ok(pods.items.into_iter().filter_map(is_suspicious_pod)) 171 | } 172 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Apache License 2 | Version 2.0, January 2004 3 | http://www.apache.org/licenses/ 4 | 5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 6 | 7 | 1. Definitions. 8 | 9 | "License" shall mean the terms and conditions for use, reproduction, 10 | and distribution as defined by Sections 1 through 9 of this document. 11 | 12 | "Licensor" shall mean the copyright owner or entity authorized by 13 | the copyright owner that is granting the License. 14 | 15 | "Legal Entity" shall mean the union of the acting entity and all 16 | other entities that control, are controlled by, or are under common 17 | control with that entity. For the purposes of this definition, 18 | "control" means (i) the power, direct or indirect, to cause the 19 | direction or management of such entity, whether by contract or 20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 21 | outstanding shares, or (iii) beneficial ownership of such entity. 22 | 23 | "You" (or "Your") shall mean an individual or Legal Entity 24 | exercising permissions granted by this License. 25 | 26 | "Source" form shall mean the preferred form for making modifications, 27 | including but not limited to software source code, documentation 28 | source, and configuration files. 29 | 30 | "Object" form shall mean any form resulting from mechanical 31 | transformation or translation of a Source form, including but 32 | not limited to compiled object code, generated documentation, 33 | and conversions to other media types. 34 | 35 | "Work" shall mean the work of authorship, whether in Source or 36 | Object form, made available under the License, as indicated by a 37 | copyright notice that is included in or attached to the work 38 | (an example is provided in the Appendix below). 39 | 40 | "Derivative Works" shall mean any work, whether in Source or Object 41 | form, that is based on (or derived from) the Work and for which the 42 | editorial revisions, annotations, elaborations, or other modifications 43 | represent, as a whole, an original work of authorship. For the purposes 44 | of this License, Derivative Works shall not include works that remain 45 | separable from, or merely link (or bind by name) to the interfaces of, 46 | the Work and Derivative Works thereof. 47 | 48 | "Contribution" shall mean any work of authorship, including 49 | the original version of the Work and any modifications or additions 50 | to that Work or Derivative Works thereof, that is intentionally 51 | submitted to Licensor for inclusion in the Work by the copyright owner 52 | or by an individual or Legal Entity authorized to submit on behalf of 53 | the copyright owner. For the purposes of this definition, "submitted" 54 | means any form of electronic, verbal, or written communication sent 55 | to the Licensor or its representatives, including but not limited to 56 | communication on electronic mailing lists, source code control systems, 57 | and issue tracking systems that are managed by, or on behalf of, the 58 | Licensor for the purpose of discussing and improving the Work, but 59 | excluding communication that is conspicuously marked or otherwise 60 | designated in writing by the copyright owner as "Not a Contribution." 61 | 62 | "Contributor" shall mean Licensor and any individual or Legal Entity 63 | on behalf of whom a Contribution has been received by Licensor and 64 | subsequently incorporated within the Work. 65 | 66 | 2. Grant of Copyright License. Subject to the terms and conditions of 67 | this License, each Contributor hereby grants to You a perpetual, 68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 69 | copyright license to reproduce, prepare Derivative Works of, 70 | publicly display, publicly perform, sublicense, and distribute the 71 | Work and such Derivative Works in Source or Object form. 72 | 73 | 3. Grant of Patent License. Subject to the terms and conditions of 74 | this License, each Contributor hereby grants to You a perpetual, 75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 76 | (except as stated in this section) patent license to make, have made, 77 | use, offer to sell, sell, import, and otherwise transfer the Work, 78 | where such license applies only to those patent claims licensable 79 | by such Contributor that are necessarily infringed by their 80 | Contribution(s) alone or by combination of their Contribution(s) 81 | with the Work to which such Contribution(s) was submitted. If You 82 | institute patent litigation against any entity (including a 83 | cross-claim or counterclaim in a lawsuit) alleging that the Work 84 | or a Contribution incorporated within the Work constitutes direct 85 | or contributory patent infringement, then any patent licenses 86 | granted to You under this License for that Work shall terminate 87 | as of the date such litigation is filed. 88 | 89 | 4. Redistribution. You may reproduce and distribute copies of the 90 | Work or Derivative Works thereof in any medium, with or without 91 | modifications, and in Source or Object form, provided that You 92 | meet the following conditions: 93 | 94 | (a) You must give any other recipients of the Work or 95 | Derivative Works a copy of this License; and 96 | 97 | (b) You must cause any modified files to carry prominent notices 98 | stating that You changed the files; and 99 | 100 | (c) You must retain, in the Source form of any Derivative Works 101 | that You distribute, all copyright, patent, trademark, and 102 | attribution notices from the Source form of the Work, 103 | excluding those notices that do not pertain to any part of 104 | the Derivative Works; and 105 | 106 | (d) If the Work includes a "NOTICE" text file as part of its 107 | distribution, then any Derivative Works that You distribute must 108 | include a readable copy of the attribution notices contained 109 | within such NOTICE file, excluding those notices that do not 110 | pertain to any part of the Derivative Works, in at least one 111 | of the following places: within a NOTICE text file distributed 112 | as part of the Derivative Works; within the Source form or 113 | documentation, if provided along with the Derivative Works; or, 114 | within a display generated by the Derivative Works, if and 115 | wherever such third-party notices normally appear. The contents 116 | of the NOTICE file are for informational purposes only and 117 | do not modify the License. You may add Your own attribution 118 | notices within Derivative Works that You distribute, alongside 119 | or as an addendum to the NOTICE text from the Work, provided 120 | that such additional attribution notices cannot be construed 121 | as modifying the License. 122 | 123 | You may add Your own copyright statement to Your modifications and 124 | may provide additional or different license terms and conditions 125 | for use, reproduction, or distribution of Your modifications, or 126 | for any such Derivative Works as a whole, provided Your use, 127 | reproduction, and distribution of the Work otherwise complies with 128 | the conditions stated in this License. 129 | 130 | 5. Submission of Contributions. Unless You explicitly state otherwise, 131 | any Contribution intentionally submitted for inclusion in the Work 132 | by You to the Licensor shall be under the terms and conditions of 133 | this License, without any additional terms or conditions. 134 | Notwithstanding the above, nothing herein shall supersede or modify 135 | the terms of any separate license agreement you may have executed 136 | with Licensor regarding such Contributions. 137 | 138 | 6. Trademarks. This License does not grant permission to use the trade 139 | names, trademarks, service marks, or product names of the Licensor, 140 | except as required for reasonable and customary use in describing the 141 | origin of the Work and reproducing the content of the NOTICE file. 142 | 143 | 7. Disclaimer of Warranty. Unless required by applicable law or 144 | agreed to in writing, Licensor provides the Work (and each 145 | Contributor provides its Contributions) on an "AS IS" BASIS, 146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 147 | implied, including, without limitation, any warranties or conditions 148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 149 | PARTICULAR PURPOSE. You are solely responsible for determining the 150 | appropriateness of using or redistributing the Work and assume any 151 | risks associated with Your exercise of permissions under this License. 152 | 153 | 8. Limitation of Liability. In no event and under no legal theory, 154 | whether in tort (including negligence), contract, or otherwise, 155 | unless required by applicable law (such as deliberate and grossly 156 | negligent acts) or agreed to in writing, shall any Contributor be 157 | liable to You for damages, including any direct, indirect, special, 158 | incidental, or consequential damages of any character arising as a 159 | result of this License or out of the use or inability to use the 160 | Work (including but not limited to damages for loss of goodwill, 161 | work stoppage, computer failure or malfunction, or any and all 162 | other commercial damages or losses), even if such Contributor 163 | has been advised of the possibility of such damages. 164 | 165 | 9. Accepting Warranty or Additional Liability. While redistributing 166 | the Work or Derivative Works thereof, You may choose to offer, 167 | and charge a fee for, acceptance of support, warranty, indemnity, 168 | or other liability obligations and/or rights consistent with this 169 | License. However, in accepting such obligations, You may act only 170 | on Your own behalf and on Your sole responsibility, not on behalf 171 | of any other Contributor, and only if You agree to indemnify, 172 | defend, and hold each Contributor harmless for any liability 173 | incurred by, or claims asserted against, such Contributor by reason 174 | of your accepting any such warranty or additional liability. 175 | 176 | END OF TERMS AND CONDITIONS 177 | 178 | APPENDIX: How to apply the Apache License to your work. 179 | 180 | To apply the Apache License to your work, attach the following 181 | boilerplate notice, with the fields enclosed by brackets "[]" 182 | replaced with your own identifying information. (Don't include 183 | the brackets!) The text should be enclosed in the appropriate 184 | comment syntax for the file format. We also recommend that a 185 | file or class name and description of purpose be included on the 186 | same "printed page" as the copyright notice for easier 187 | identification within third-party archives. 188 | 189 | Copyright [yyyy] [name of copyright owner] 190 | 191 | Licensed under the Apache License, Version 2.0 (the "License"); 192 | you may not use this file except in compliance with the License. 193 | You may obtain a copy of the License at 194 | 195 | http://www.apache.org/licenses/LICENSE-2.0 196 | 197 | Unless required by applicable law or agreed to in writing, software 198 | distributed under the License is distributed on an "AS IS" BASIS, 199 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 200 | See the License for the specific language governing permissions and 201 | limitations under the License. 202 | -------------------------------------------------------------------------------- /Cargo.lock: -------------------------------------------------------------------------------- 1 | # This file is automatically @generated by Cargo. 2 | # It is not intended for manual editing. 3 | version = 3 4 | 5 | [[package]] 6 | name = "ansi_term" 7 | version = "0.12.1" 8 | source = "registry+https://github.com/rust-lang/crates.io-index" 9 | checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2" 10 | dependencies = [ 11 | "winapi", 12 | ] 13 | 14 | [[package]] 15 | name = "atty" 16 | version = "0.2.14" 17 | source = "registry+https://github.com/rust-lang/crates.io-index" 18 | checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" 19 | dependencies = [ 20 | "hermit-abi", 21 | "libc", 22 | "winapi", 23 | ] 24 | 25 | [[package]] 26 | name = "autocfg" 27 | version = "1.1.0" 28 | source = "registry+https://github.com/rust-lang/crates.io-index" 29 | checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" 30 | 31 | [[package]] 32 | name = "base64" 33 | version = "0.13.0" 34 | source = "registry+https://github.com/rust-lang/crates.io-index" 35 | checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd" 36 | 37 | [[package]] 38 | name = "bitflags" 39 | version = "1.3.2" 40 | source = "registry+https://github.com/rust-lang/crates.io-index" 41 | checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" 42 | 43 | [[package]] 44 | name = "bumpalo" 45 | version = "3.9.1" 46 | source = "registry+https://github.com/rust-lang/crates.io-index" 47 | checksum = "a4a45a46ab1f2412e53d3a0ade76ffad2025804294569aae387231a0cd6e0899" 48 | 49 | [[package]] 50 | name = "bytes" 51 | version = "1.1.0" 52 | source = "registry+https://github.com/rust-lang/crates.io-index" 53 | checksum = "c4872d67bab6358e59559027aa3b9157c53d9358c51423c17554809a8858e0f8" 54 | 55 | [[package]] 56 | name = "cc" 57 | version = "1.0.73" 58 | source = "registry+https://github.com/rust-lang/crates.io-index" 59 | checksum = "2fff2a6927b3bb87f9595d67196a70493f627687a71d87a0d692242c33f58c11" 60 | 61 | [[package]] 62 | name = "cfg-if" 63 | version = "1.0.0" 64 | source = "registry+https://github.com/rust-lang/crates.io-index" 65 | checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" 66 | 67 | [[package]] 68 | name = "chrono" 69 | version = "0.4.19" 70 | source = "registry+https://github.com/rust-lang/crates.io-index" 71 | checksum = "670ad68c9088c2a963aaa298cb369688cf3f9465ce5e2d4ca10e6e0098a1ce73" 72 | dependencies = [ 73 | "libc", 74 | "num-integer", 75 | "num-traits", 76 | "serde", 77 | "winapi", 78 | ] 79 | 80 | [[package]] 81 | name = "clap" 82 | version = "3.1.17" 83 | source = "registry+https://github.com/rust-lang/crates.io-index" 84 | checksum = "47582c09be7c8b32c0ab3a6181825ababb713fde6fff20fc573a3870dd45c6a0" 85 | dependencies = [ 86 | "atty", 87 | "bitflags", 88 | "clap_lex", 89 | "indexmap", 90 | "strsim", 91 | "termcolor", 92 | "textwrap", 93 | ] 94 | 95 | [[package]] 96 | name = "clap_lex" 97 | version = "0.2.0" 98 | source = "registry+https://github.com/rust-lang/crates.io-index" 99 | checksum = "a37c35f1112dad5e6e0b1adaff798507497a18fceeb30cceb3bae7d1427b9213" 100 | dependencies = [ 101 | "os_str_bytes", 102 | ] 103 | 104 | [[package]] 105 | name = "core-foundation" 106 | version = "0.9.3" 107 | source = "registry+https://github.com/rust-lang/crates.io-index" 108 | checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146" 109 | dependencies = [ 110 | "core-foundation-sys", 111 | "libc", 112 | ] 113 | 114 | [[package]] 115 | name = "core-foundation-sys" 116 | version = "0.8.3" 117 | source = "registry+https://github.com/rust-lang/crates.io-index" 118 | checksum = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc" 119 | 120 | [[package]] 121 | name = "dirs-next" 122 | version = "2.0.0" 123 | source = "registry+https://github.com/rust-lang/crates.io-index" 124 | checksum = "b98cf8ebf19c3d1b223e151f99a4f9f0690dca41414773390fc824184ac833e1" 125 | dependencies = [ 126 | "cfg-if", 127 | "dirs-sys-next", 128 | ] 129 | 130 | [[package]] 131 | name = "dirs-sys-next" 132 | version = "0.1.2" 133 | source = "registry+https://github.com/rust-lang/crates.io-index" 134 | checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d" 135 | dependencies = [ 136 | "libc", 137 | "redox_users", 138 | "winapi", 139 | ] 140 | 141 | [[package]] 142 | name = "either" 143 | version = "1.6.1" 144 | source = "registry+https://github.com/rust-lang/crates.io-index" 145 | checksum = "e78d4f1cc4ae33bbfc157ed5d5a5ef3bc29227303d595861deb238fcec4e9457" 146 | 147 | [[package]] 148 | name = "fnv" 149 | version = "1.0.7" 150 | source = "registry+https://github.com/rust-lang/crates.io-index" 151 | checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" 152 | 153 | [[package]] 154 | name = "form_urlencoded" 155 | version = "1.0.1" 156 | source = "registry+https://github.com/rust-lang/crates.io-index" 157 | checksum = "5fc25a87fa4fd2094bffb06925852034d90a17f0d1e05197d4956d3555752191" 158 | dependencies = [ 159 | "matches", 160 | "percent-encoding", 161 | ] 162 | 163 | [[package]] 164 | name = "futures" 165 | version = "0.3.21" 166 | source = "registry+https://github.com/rust-lang/crates.io-index" 167 | checksum = "f73fe65f54d1e12b726f517d3e2135ca3125a437b6d998caf1962961f7172d9e" 168 | dependencies = [ 169 | "futures-channel", 170 | "futures-core", 171 | "futures-executor", 172 | "futures-io", 173 | "futures-sink", 174 | "futures-task", 175 | "futures-util", 176 | ] 177 | 178 | [[package]] 179 | name = "futures-channel" 180 | version = "0.3.21" 181 | source = "registry+https://github.com/rust-lang/crates.io-index" 182 | checksum = "c3083ce4b914124575708913bca19bfe887522d6e2e6d0952943f5eac4a74010" 183 | dependencies = [ 184 | "futures-core", 185 | "futures-sink", 186 | ] 187 | 188 | [[package]] 189 | name = "futures-core" 190 | version = "0.3.21" 191 | source = "registry+https://github.com/rust-lang/crates.io-index" 192 | checksum = "0c09fd04b7e4073ac7156a9539b57a484a8ea920f79c7c675d05d289ab6110d3" 193 | 194 | [[package]] 195 | name = "futures-executor" 196 | version = "0.3.21" 197 | source = "registry+https://github.com/rust-lang/crates.io-index" 198 | checksum = "9420b90cfa29e327d0429f19be13e7ddb68fa1cccb09d65e5706b8c7a749b8a6" 199 | dependencies = [ 200 | "futures-core", 201 | "futures-task", 202 | "futures-util", 203 | ] 204 | 205 | [[package]] 206 | name = "futures-io" 207 | version = "0.3.21" 208 | source = "registry+https://github.com/rust-lang/crates.io-index" 209 | checksum = "fc4045962a5a5e935ee2fdedaa4e08284547402885ab326734432bed5d12966b" 210 | 211 | [[package]] 212 | name = "futures-macro" 213 | version = "0.3.21" 214 | source = "registry+https://github.com/rust-lang/crates.io-index" 215 | checksum = "33c1e13800337f4d4d7a316bf45a567dbcb6ffe087f16424852d97e97a91f512" 216 | dependencies = [ 217 | "proc-macro2", 218 | "quote", 219 | "syn", 220 | ] 221 | 222 | [[package]] 223 | name = "futures-sink" 224 | version = "0.3.21" 225 | source = "registry+https://github.com/rust-lang/crates.io-index" 226 | checksum = "21163e139fa306126e6eedaf49ecdb4588f939600f0b1e770f4205ee4b7fa868" 227 | 228 | [[package]] 229 | name = "futures-task" 230 | version = "0.3.21" 231 | source = "registry+https://github.com/rust-lang/crates.io-index" 232 | checksum = "57c66a976bf5909d801bbef33416c41372779507e7a6b3a5e25e4749c58f776a" 233 | 234 | [[package]] 235 | name = "futures-util" 236 | version = "0.3.21" 237 | source = "registry+https://github.com/rust-lang/crates.io-index" 238 | checksum = "d8b7abd5d659d9b90c8cba917f6ec750a74e2dc23902ef9cd4cc8c8b22e6036a" 239 | dependencies = [ 240 | "futures-channel", 241 | "futures-core", 242 | "futures-io", 243 | "futures-macro", 244 | "futures-sink", 245 | "futures-task", 246 | "memchr", 247 | "pin-project-lite", 248 | "pin-utils", 249 | "slab", 250 | ] 251 | 252 | [[package]] 253 | name = "getrandom" 254 | version = "0.2.6" 255 | source = "registry+https://github.com/rust-lang/crates.io-index" 256 | checksum = "9be70c98951c83b8d2f8f60d7065fa6d5146873094452a1008da8c2f1e4205ad" 257 | dependencies = [ 258 | "cfg-if", 259 | "libc", 260 | "wasi 0.10.2+wasi-snapshot-preview1", 261 | ] 262 | 263 | [[package]] 264 | name = "hashbrown" 265 | version = "0.11.2" 266 | source = "registry+https://github.com/rust-lang/crates.io-index" 267 | checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e" 268 | 269 | [[package]] 270 | name = "hermit-abi" 271 | version = "0.1.19" 272 | source = "registry+https://github.com/rust-lang/crates.io-index" 273 | checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" 274 | dependencies = [ 275 | "libc", 276 | ] 277 | 278 | [[package]] 279 | name = "http" 280 | version = "0.2.7" 281 | source = "registry+https://github.com/rust-lang/crates.io-index" 282 | checksum = "ff8670570af52249509a86f5e3e18a08c60b177071826898fde8997cf5f6bfbb" 283 | dependencies = [ 284 | "bytes", 285 | "fnv", 286 | "itoa", 287 | ] 288 | 289 | [[package]] 290 | name = "http-body" 291 | version = "0.4.4" 292 | source = "registry+https://github.com/rust-lang/crates.io-index" 293 | checksum = "1ff4f84919677303da5f147645dbea6b1881f368d03ac84e1dc09031ebd7b2c6" 294 | dependencies = [ 295 | "bytes", 296 | "http", 297 | "pin-project-lite", 298 | ] 299 | 300 | [[package]] 301 | name = "http-range-header" 302 | version = "0.3.0" 303 | source = "registry+https://github.com/rust-lang/crates.io-index" 304 | checksum = "0bfe8eed0a9285ef776bb792479ea3834e8b94e13d615c2f66d03dd50a435a29" 305 | 306 | [[package]] 307 | name = "httparse" 308 | version = "1.7.1" 309 | source = "registry+https://github.com/rust-lang/crates.io-index" 310 | checksum = "496ce29bb5a52785b44e0f7ca2847ae0bb839c9bd28f69acac9b99d461c0c04c" 311 | 312 | [[package]] 313 | name = "httpdate" 314 | version = "1.0.2" 315 | source = "registry+https://github.com/rust-lang/crates.io-index" 316 | checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421" 317 | 318 | [[package]] 319 | name = "hyper" 320 | version = "0.14.18" 321 | source = "registry+https://github.com/rust-lang/crates.io-index" 322 | checksum = "b26ae0a80afebe130861d90abf98e3814a4f28a4c6ffeb5ab8ebb2be311e0ef2" 323 | dependencies = [ 324 | "bytes", 325 | "futures-channel", 326 | "futures-core", 327 | "futures-util", 328 | "http", 329 | "http-body", 330 | "httparse", 331 | "httpdate", 332 | "itoa", 333 | "pin-project-lite", 334 | "socket2", 335 | "tokio", 336 | "tower-service", 337 | "tracing", 338 | "want", 339 | ] 340 | 341 | [[package]] 342 | name = "hyper-rustls" 343 | version = "0.23.0" 344 | source = "registry+https://github.com/rust-lang/crates.io-index" 345 | checksum = "d87c48c02e0dc5e3b849a2041db3029fd066650f8f717c07bf8ed78ccb895cac" 346 | dependencies = [ 347 | "http", 348 | "hyper", 349 | "log", 350 | "rustls", 351 | "rustls-native-certs", 352 | "tokio", 353 | "tokio-rustls", 354 | ] 355 | 356 | [[package]] 357 | name = "hyper-timeout" 358 | version = "0.4.1" 359 | source = "registry+https://github.com/rust-lang/crates.io-index" 360 | checksum = "bbb958482e8c7be4bc3cf272a766a2b0bf1a6755e7a6ae777f017a31d11b13b1" 361 | dependencies = [ 362 | "hyper", 363 | "pin-project-lite", 364 | "tokio", 365 | "tokio-io-timeout", 366 | ] 367 | 368 | [[package]] 369 | name = "indexmap" 370 | version = "1.8.1" 371 | source = "registry+https://github.com/rust-lang/crates.io-index" 372 | checksum = "0f647032dfaa1f8b6dc29bd3edb7bbef4861b8b8007ebb118d6db284fd59f6ee" 373 | dependencies = [ 374 | "autocfg", 375 | "hashbrown", 376 | ] 377 | 378 | [[package]] 379 | name = "itertools" 380 | version = "0.10.3" 381 | source = "registry+https://github.com/rust-lang/crates.io-index" 382 | checksum = "a9a9d19fa1e79b6215ff29b9d6880b706147f16e9b1dbb1e4e5947b5b02bc5e3" 383 | dependencies = [ 384 | "either", 385 | ] 386 | 387 | [[package]] 388 | name = "itoa" 389 | version = "1.0.1" 390 | source = "registry+https://github.com/rust-lang/crates.io-index" 391 | checksum = "1aab8fc367588b89dcee83ab0fd66b72b50b72fa1904d7095045ace2b0c81c35" 392 | 393 | [[package]] 394 | name = "js-sys" 395 | version = "0.3.57" 396 | source = "registry+https://github.com/rust-lang/crates.io-index" 397 | checksum = "671a26f820db17c2a2750743f1dd03bafd15b98c9f30c7c2628c024c05d73397" 398 | dependencies = [ 399 | "wasm-bindgen", 400 | ] 401 | 402 | [[package]] 403 | name = "jsonpath_lib" 404 | version = "0.3.0" 405 | source = "registry+https://github.com/rust-lang/crates.io-index" 406 | checksum = "eaa63191d68230cccb81c5aa23abd53ed64d83337cacbb25a7b8c7979523774f" 407 | dependencies = [ 408 | "log", 409 | "serde", 410 | "serde_json", 411 | ] 412 | 413 | [[package]] 414 | name = "k8s-openapi" 415 | version = "0.14.0" 416 | source = "registry+https://github.com/rust-lang/crates.io-index" 417 | checksum = "0489fc937cc7616a9abfa61bf39c250d7e32e1325ef028c8d9278dd24ea395b3" 418 | dependencies = [ 419 | "base64", 420 | "bytes", 421 | "chrono", 422 | "serde", 423 | "serde-value", 424 | "serde_json", 425 | ] 426 | 427 | [[package]] 428 | name = "kube" 429 | version = "0.71.0" 430 | source = "registry+https://github.com/rust-lang/crates.io-index" 431 | checksum = "342744dfeb81fe186b84f485b33f12c6a15d3396987d933b06a566a3db52ca38" 432 | dependencies = [ 433 | "k8s-openapi", 434 | "kube-client", 435 | "kube-core", 436 | ] 437 | 438 | [[package]] 439 | name = "kube-client" 440 | version = "0.71.0" 441 | source = "registry+https://github.com/rust-lang/crates.io-index" 442 | checksum = "3f69a504997799340408635d6e351afb8aab2c34ca3165e162f41b3b34a69a79" 443 | dependencies = [ 444 | "base64", 445 | "bytes", 446 | "chrono", 447 | "dirs-next", 448 | "either", 449 | "futures", 450 | "http", 451 | "http-body", 452 | "hyper", 453 | "hyper-rustls", 454 | "hyper-timeout", 455 | "jsonpath_lib", 456 | "k8s-openapi", 457 | "kube-core", 458 | "pem", 459 | "pin-project", 460 | "rustls", 461 | "rustls-pemfile 0.3.0", 462 | "secrecy", 463 | "serde", 464 | "serde_json", 465 | "serde_yaml", 466 | "thiserror", 467 | "tokio", 468 | "tokio-util", 469 | "tower", 470 | "tower-http", 471 | "tracing", 472 | ] 473 | 474 | [[package]] 475 | name = "kube-core" 476 | version = "0.71.0" 477 | source = "registry+https://github.com/rust-lang/crates.io-index" 478 | checksum = "a4a247487699941baaf93438d65b12d4e32450bea849d619d19ed394e8a4a645" 479 | dependencies = [ 480 | "chrono", 481 | "form_urlencoded", 482 | "http", 483 | "k8s-openapi", 484 | "once_cell", 485 | "serde", 486 | "serde_json", 487 | "thiserror", 488 | ] 489 | 490 | [[package]] 491 | name = "lazy_static" 492 | version = "1.4.0" 493 | source = "registry+https://github.com/rust-lang/crates.io-index" 494 | checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" 495 | 496 | [[package]] 497 | name = "libc" 498 | version = "0.2.125" 499 | source = "registry+https://github.com/rust-lang/crates.io-index" 500 | checksum = "5916d2ae698f6de9bfb891ad7a8d65c09d232dc58cc4ac433c7da3b2fd84bc2b" 501 | 502 | [[package]] 503 | name = "linked-hash-map" 504 | version = "0.5.4" 505 | source = "registry+https://github.com/rust-lang/crates.io-index" 506 | checksum = "7fb9b38af92608140b86b693604b9ffcc5824240a484d1ecd4795bacb2fe88f3" 507 | 508 | [[package]] 509 | name = "log" 510 | version = "0.4.17" 511 | source = "registry+https://github.com/rust-lang/crates.io-index" 512 | checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e" 513 | dependencies = [ 514 | "cfg-if", 515 | ] 516 | 517 | [[package]] 518 | name = "matches" 519 | version = "0.1.9" 520 | source = "registry+https://github.com/rust-lang/crates.io-index" 521 | checksum = "a3e378b66a060d48947b590737b30a1be76706c8dd7b8ba0f2fe3989c68a853f" 522 | 523 | [[package]] 524 | name = "memchr" 525 | version = "2.5.0" 526 | source = "registry+https://github.com/rust-lang/crates.io-index" 527 | checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" 528 | 529 | [[package]] 530 | name = "mio" 531 | version = "0.8.2" 532 | source = "registry+https://github.com/rust-lang/crates.io-index" 533 | checksum = "52da4364ffb0e4fe33a9841a98a3f3014fb964045ce4f7a45a398243c8d6b0c9" 534 | dependencies = [ 535 | "libc", 536 | "log", 537 | "miow", 538 | "ntapi", 539 | "wasi 0.11.0+wasi-snapshot-preview1", 540 | "winapi", 541 | ] 542 | 543 | [[package]] 544 | name = "miow" 545 | version = "0.3.7" 546 | source = "registry+https://github.com/rust-lang/crates.io-index" 547 | checksum = "b9f1c5b025cda876f66ef43a113f91ebc9f4ccef34843000e0adf6ebbab84e21" 548 | dependencies = [ 549 | "winapi", 550 | ] 551 | 552 | [[package]] 553 | name = "ntapi" 554 | version = "0.3.7" 555 | source = "registry+https://github.com/rust-lang/crates.io-index" 556 | checksum = "c28774a7fd2fbb4f0babd8237ce554b73af68021b5f695a3cebd6c59bac0980f" 557 | dependencies = [ 558 | "winapi", 559 | ] 560 | 561 | [[package]] 562 | name = "num-integer" 563 | version = "0.1.45" 564 | source = "registry+https://github.com/rust-lang/crates.io-index" 565 | checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" 566 | dependencies = [ 567 | "autocfg", 568 | "num-traits", 569 | ] 570 | 571 | [[package]] 572 | name = "num-traits" 573 | version = "0.2.15" 574 | source = "registry+https://github.com/rust-lang/crates.io-index" 575 | checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd" 576 | dependencies = [ 577 | "autocfg", 578 | ] 579 | 580 | [[package]] 581 | name = "once_cell" 582 | version = "1.10.0" 583 | source = "registry+https://github.com/rust-lang/crates.io-index" 584 | checksum = "87f3e037eac156d1775da914196f0f37741a274155e34a0b7e427c35d2a2ecb9" 585 | 586 | [[package]] 587 | name = "openssl-probe" 588 | version = "0.1.5" 589 | source = "registry+https://github.com/rust-lang/crates.io-index" 590 | checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" 591 | 592 | [[package]] 593 | name = "ordered-float" 594 | version = "2.10.0" 595 | source = "registry+https://github.com/rust-lang/crates.io-index" 596 | checksum = "7940cf2ca942593318d07fcf2596cdca60a85c9e7fab408a5e21a4f9dcd40d87" 597 | dependencies = [ 598 | "num-traits", 599 | ] 600 | 601 | [[package]] 602 | name = "os_str_bytes" 603 | version = "6.0.0" 604 | source = "registry+https://github.com/rust-lang/crates.io-index" 605 | checksum = "8e22443d1643a904602595ba1cd8f7d896afe56d26712531c5ff73a15b2fbf64" 606 | 607 | [[package]] 608 | name = "pem" 609 | version = "1.0.2" 610 | source = "registry+https://github.com/rust-lang/crates.io-index" 611 | checksum = "e9a3b09a20e374558580a4914d3b7d89bd61b954a5a5e1dcbea98753addb1947" 612 | dependencies = [ 613 | "base64", 614 | ] 615 | 616 | [[package]] 617 | name = "percent-encoding" 618 | version = "2.1.0" 619 | source = "registry+https://github.com/rust-lang/crates.io-index" 620 | checksum = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e" 621 | 622 | [[package]] 623 | name = "pin-project" 624 | version = "1.0.10" 625 | source = "registry+https://github.com/rust-lang/crates.io-index" 626 | checksum = "58ad3879ad3baf4e44784bc6a718a8698867bb991f8ce24d1bcbe2cfb4c3a75e" 627 | dependencies = [ 628 | "pin-project-internal", 629 | ] 630 | 631 | [[package]] 632 | name = "pin-project-internal" 633 | version = "1.0.10" 634 | source = "registry+https://github.com/rust-lang/crates.io-index" 635 | checksum = "744b6f092ba29c3650faf274db506afd39944f48420f6c86b17cfe0ee1cb36bb" 636 | dependencies = [ 637 | "proc-macro2", 638 | "quote", 639 | "syn", 640 | ] 641 | 642 | [[package]] 643 | name = "pin-project-lite" 644 | version = "0.2.9" 645 | source = "registry+https://github.com/rust-lang/crates.io-index" 646 | checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116" 647 | 648 | [[package]] 649 | name = "pin-utils" 650 | version = "0.1.0" 651 | source = "registry+https://github.com/rust-lang/crates.io-index" 652 | checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" 653 | 654 | [[package]] 655 | name = "proc-macro2" 656 | version = "1.0.38" 657 | source = "registry+https://github.com/rust-lang/crates.io-index" 658 | checksum = "9027b48e9d4c9175fa2218adf3557f91c1137021739951d4932f5f8268ac48aa" 659 | dependencies = [ 660 | "unicode-xid", 661 | ] 662 | 663 | [[package]] 664 | name = "quote" 665 | version = "1.0.18" 666 | source = "registry+https://github.com/rust-lang/crates.io-index" 667 | checksum = "a1feb54ed693b93a84e14094943b84b7c4eae204c512b7ccb95ab0c66d278ad1" 668 | dependencies = [ 669 | "proc-macro2", 670 | ] 671 | 672 | [[package]] 673 | name = "redox_syscall" 674 | version = "0.2.13" 675 | source = "registry+https://github.com/rust-lang/crates.io-index" 676 | checksum = "62f25bc4c7e55e0b0b7a1d43fb893f4fa1361d0abe38b9ce4f323c2adfe6ef42" 677 | dependencies = [ 678 | "bitflags", 679 | ] 680 | 681 | [[package]] 682 | name = "redox_users" 683 | version = "0.4.3" 684 | source = "registry+https://github.com/rust-lang/crates.io-index" 685 | checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b" 686 | dependencies = [ 687 | "getrandom", 688 | "redox_syscall", 689 | "thiserror", 690 | ] 691 | 692 | [[package]] 693 | name = "ring" 694 | version = "0.16.20" 695 | source = "registry+https://github.com/rust-lang/crates.io-index" 696 | checksum = "3053cf52e236a3ed746dfc745aa9cacf1b791d846bdaf412f60a8d7d6e17c8fc" 697 | dependencies = [ 698 | "cc", 699 | "libc", 700 | "once_cell", 701 | "spin", 702 | "untrusted", 703 | "web-sys", 704 | "winapi", 705 | ] 706 | 707 | [[package]] 708 | name = "rustls" 709 | version = "0.20.4" 710 | source = "registry+https://github.com/rust-lang/crates.io-index" 711 | checksum = "4fbfeb8d0ddb84706bc597a5574ab8912817c52a397f819e5b614e2265206921" 712 | dependencies = [ 713 | "log", 714 | "ring", 715 | "sct", 716 | "webpki", 717 | ] 718 | 719 | [[package]] 720 | name = "rustls-native-certs" 721 | version = "0.6.2" 722 | source = "registry+https://github.com/rust-lang/crates.io-index" 723 | checksum = "0167bac7a9f490495f3c33013e7722b53cb087ecbe082fb0c6387c96f634ea50" 724 | dependencies = [ 725 | "openssl-probe", 726 | "rustls-pemfile 1.0.0", 727 | "schannel", 728 | "security-framework", 729 | ] 730 | 731 | [[package]] 732 | name = "rustls-pemfile" 733 | version = "0.3.0" 734 | source = "registry+https://github.com/rust-lang/crates.io-index" 735 | checksum = "1ee86d63972a7c661d1536fefe8c3c8407321c3df668891286de28abcd087360" 736 | dependencies = [ 737 | "base64", 738 | ] 739 | 740 | [[package]] 741 | name = "rustls-pemfile" 742 | version = "1.0.0" 743 | source = "registry+https://github.com/rust-lang/crates.io-index" 744 | checksum = "e7522c9de787ff061458fe9a829dc790a3f5b22dc571694fc5883f448b94d9a9" 745 | dependencies = [ 746 | "base64", 747 | ] 748 | 749 | [[package]] 750 | name = "ryu" 751 | version = "1.0.9" 752 | source = "registry+https://github.com/rust-lang/crates.io-index" 753 | checksum = "73b4b750c782965c211b42f022f59af1fbceabdd026623714f104152f1ec149f" 754 | 755 | [[package]] 756 | name = "schannel" 757 | version = "0.1.19" 758 | source = "registry+https://github.com/rust-lang/crates.io-index" 759 | checksum = "8f05ba609c234e60bee0d547fe94a4c7e9da733d1c962cf6e59efa4cd9c8bc75" 760 | dependencies = [ 761 | "lazy_static", 762 | "winapi", 763 | ] 764 | 765 | [[package]] 766 | name = "sct" 767 | version = "0.7.0" 768 | source = "registry+https://github.com/rust-lang/crates.io-index" 769 | checksum = "d53dcdb7c9f8158937a7981b48accfd39a43af418591a5d008c7b22b5e1b7ca4" 770 | dependencies = [ 771 | "ring", 772 | "untrusted", 773 | ] 774 | 775 | [[package]] 776 | name = "secrecy" 777 | version = "0.8.0" 778 | source = "registry+https://github.com/rust-lang/crates.io-index" 779 | checksum = "9bd1c54ea06cfd2f6b63219704de0b9b4f72dcc2b8fdef820be6cd799780e91e" 780 | dependencies = [ 781 | "serde", 782 | "zeroize", 783 | ] 784 | 785 | [[package]] 786 | name = "security-framework" 787 | version = "2.6.1" 788 | source = "registry+https://github.com/rust-lang/crates.io-index" 789 | checksum = "2dc14f172faf8a0194a3aded622712b0de276821addc574fa54fc0a1167e10dc" 790 | dependencies = [ 791 | "bitflags", 792 | "core-foundation", 793 | "core-foundation-sys", 794 | "libc", 795 | "security-framework-sys", 796 | ] 797 | 798 | [[package]] 799 | name = "security-framework-sys" 800 | version = "2.6.1" 801 | source = "registry+https://github.com/rust-lang/crates.io-index" 802 | checksum = "0160a13a177a45bfb43ce71c01580998474f556ad854dcbca936dd2841a5c556" 803 | dependencies = [ 804 | "core-foundation-sys", 805 | "libc", 806 | ] 807 | 808 | [[package]] 809 | name = "serde" 810 | version = "1.0.137" 811 | source = "registry+https://github.com/rust-lang/crates.io-index" 812 | checksum = "61ea8d54c77f8315140a05f4c7237403bf38b72704d031543aa1d16abbf517d1" 813 | dependencies = [ 814 | "serde_derive", 815 | ] 816 | 817 | [[package]] 818 | name = "serde-value" 819 | version = "0.7.0" 820 | source = "registry+https://github.com/rust-lang/crates.io-index" 821 | checksum = "f3a1a3341211875ef120e117ea7fd5228530ae7e7036a779fdc9117be6b3282c" 822 | dependencies = [ 823 | "ordered-float", 824 | "serde", 825 | ] 826 | 827 | [[package]] 828 | name = "serde_derive" 829 | version = "1.0.137" 830 | source = "registry+https://github.com/rust-lang/crates.io-index" 831 | checksum = "1f26faba0c3959972377d3b2d306ee9f71faee9714294e41bb777f83f88578be" 832 | dependencies = [ 833 | "proc-macro2", 834 | "quote", 835 | "syn", 836 | ] 837 | 838 | [[package]] 839 | name = "serde_json" 840 | version = "1.0.81" 841 | source = "registry+https://github.com/rust-lang/crates.io-index" 842 | checksum = "9b7ce2b32a1aed03c558dc61a5cd328f15aff2dbc17daad8fb8af04d2100e15c" 843 | dependencies = [ 844 | "indexmap", 845 | "itoa", 846 | "ryu", 847 | "serde", 848 | ] 849 | 850 | [[package]] 851 | name = "serde_yaml" 852 | version = "0.8.24" 853 | source = "registry+https://github.com/rust-lang/crates.io-index" 854 | checksum = "707d15895415db6628332b737c838b88c598522e4dc70647e59b72312924aebc" 855 | dependencies = [ 856 | "indexmap", 857 | "ryu", 858 | "serde", 859 | "yaml-rust", 860 | ] 861 | 862 | [[package]] 863 | name = "signal-hook-registry" 864 | version = "1.4.0" 865 | source = "registry+https://github.com/rust-lang/crates.io-index" 866 | checksum = "e51e73328dc4ac0c7ccbda3a494dfa03df1de2f46018127f60c693f2648455b0" 867 | dependencies = [ 868 | "libc", 869 | ] 870 | 871 | [[package]] 872 | name = "slab" 873 | version = "0.4.6" 874 | source = "registry+https://github.com/rust-lang/crates.io-index" 875 | checksum = "eb703cfe953bccee95685111adeedb76fabe4e97549a58d16f03ea7b9367bb32" 876 | 877 | [[package]] 878 | name = "socket2" 879 | version = "0.4.4" 880 | source = "registry+https://github.com/rust-lang/crates.io-index" 881 | checksum = "66d72b759436ae32898a2af0a14218dbf55efde3feeb170eb623637db85ee1e0" 882 | dependencies = [ 883 | "libc", 884 | "winapi", 885 | ] 886 | 887 | [[package]] 888 | name = "spin" 889 | version = "0.5.2" 890 | source = "registry+https://github.com/rust-lang/crates.io-index" 891 | checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" 892 | 893 | [[package]] 894 | name = "strsim" 895 | version = "0.10.0" 896 | source = "registry+https://github.com/rust-lang/crates.io-index" 897 | checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" 898 | 899 | [[package]] 900 | name = "suspicious-pods" 901 | version = "1.2.0" 902 | dependencies = [ 903 | "ansi_term", 904 | "clap", 905 | "itertools", 906 | "suspicious-pods-lib", 907 | "tokio", 908 | ] 909 | 910 | [[package]] 911 | name = "suspicious-pods-lib" 912 | version = "1.2.0" 913 | dependencies = [ 914 | "k8s-openapi", 915 | "kube", 916 | "serde", 917 | ] 918 | 919 | [[package]] 920 | name = "syn" 921 | version = "1.0.92" 922 | source = "registry+https://github.com/rust-lang/crates.io-index" 923 | checksum = "7ff7c592601f11445996a06f8ad0c27f094a58857c2f89e97974ab9235b92c52" 924 | dependencies = [ 925 | "proc-macro2", 926 | "quote", 927 | "unicode-xid", 928 | ] 929 | 930 | [[package]] 931 | name = "termcolor" 932 | version = "1.1.3" 933 | source = "registry+https://github.com/rust-lang/crates.io-index" 934 | checksum = "bab24d30b911b2376f3a13cc2cd443142f0c81dda04c118693e35b3835757755" 935 | dependencies = [ 936 | "winapi-util", 937 | ] 938 | 939 | [[package]] 940 | name = "textwrap" 941 | version = "0.15.0" 942 | source = "registry+https://github.com/rust-lang/crates.io-index" 943 | checksum = "b1141d4d61095b28419e22cb0bbf02755f5e54e0526f97f1e3d1d160e60885fb" 944 | 945 | [[package]] 946 | name = "thiserror" 947 | version = "1.0.31" 948 | source = "registry+https://github.com/rust-lang/crates.io-index" 949 | checksum = "bd829fe32373d27f76265620b5309d0340cb8550f523c1dda251d6298069069a" 950 | dependencies = [ 951 | "thiserror-impl", 952 | ] 953 | 954 | [[package]] 955 | name = "thiserror-impl" 956 | version = "1.0.31" 957 | source = "registry+https://github.com/rust-lang/crates.io-index" 958 | checksum = "0396bc89e626244658bef819e22d0cc459e795a5ebe878e6ec336d1674a8d79a" 959 | dependencies = [ 960 | "proc-macro2", 961 | "quote", 962 | "syn", 963 | ] 964 | 965 | [[package]] 966 | name = "tokio" 967 | version = "1.18.1" 968 | source = "registry+https://github.com/rust-lang/crates.io-index" 969 | checksum = "dce653fb475565de9f6fb0614b28bca8df2c430c0cf84bcd9c843f15de5414cc" 970 | dependencies = [ 971 | "libc", 972 | "mio", 973 | "once_cell", 974 | "pin-project-lite", 975 | "signal-hook-registry", 976 | "socket2", 977 | "tokio-macros", 978 | "winapi", 979 | ] 980 | 981 | [[package]] 982 | name = "tokio-io-timeout" 983 | version = "1.2.0" 984 | source = "registry+https://github.com/rust-lang/crates.io-index" 985 | checksum = "30b74022ada614a1b4834de765f9bb43877f910cc8ce4be40e89042c9223a8bf" 986 | dependencies = [ 987 | "pin-project-lite", 988 | "tokio", 989 | ] 990 | 991 | [[package]] 992 | name = "tokio-macros" 993 | version = "1.7.0" 994 | source = "registry+https://github.com/rust-lang/crates.io-index" 995 | checksum = "b557f72f448c511a979e2564e55d74e6c4432fc96ff4f6241bc6bded342643b7" 996 | dependencies = [ 997 | "proc-macro2", 998 | "quote", 999 | "syn", 1000 | ] 1001 | 1002 | [[package]] 1003 | name = "tokio-rustls" 1004 | version = "0.23.4" 1005 | source = "registry+https://github.com/rust-lang/crates.io-index" 1006 | checksum = "c43ee83903113e03984cb9e5cebe6c04a5116269e900e3ddba8f068a62adda59" 1007 | dependencies = [ 1008 | "rustls", 1009 | "tokio", 1010 | "webpki", 1011 | ] 1012 | 1013 | [[package]] 1014 | name = "tokio-util" 1015 | version = "0.7.1" 1016 | source = "registry+https://github.com/rust-lang/crates.io-index" 1017 | checksum = "0edfdeb067411dba2044da6d1cb2df793dd35add7888d73c16e3381ded401764" 1018 | dependencies = [ 1019 | "bytes", 1020 | "futures-core", 1021 | "futures-sink", 1022 | "pin-project-lite", 1023 | "tokio", 1024 | "tracing", 1025 | ] 1026 | 1027 | [[package]] 1028 | name = "tower" 1029 | version = "0.4.12" 1030 | source = "registry+https://github.com/rust-lang/crates.io-index" 1031 | checksum = "9a89fd63ad6adf737582df5db40d286574513c69a11dac5214dc3b5603d6713e" 1032 | dependencies = [ 1033 | "futures-core", 1034 | "futures-util", 1035 | "pin-project", 1036 | "pin-project-lite", 1037 | "tokio", 1038 | "tokio-util", 1039 | "tower-layer", 1040 | "tower-service", 1041 | "tracing", 1042 | ] 1043 | 1044 | [[package]] 1045 | name = "tower-http" 1046 | version = "0.2.5" 1047 | source = "registry+https://github.com/rust-lang/crates.io-index" 1048 | checksum = "aba3f3efabf7fb41fae8534fc20a817013dd1c12cb45441efb6c82e6556b4cd8" 1049 | dependencies = [ 1050 | "base64", 1051 | "bitflags", 1052 | "bytes", 1053 | "futures-core", 1054 | "futures-util", 1055 | "http", 1056 | "http-body", 1057 | "http-range-header", 1058 | "pin-project-lite", 1059 | "tower-layer", 1060 | "tower-service", 1061 | "tracing", 1062 | ] 1063 | 1064 | [[package]] 1065 | name = "tower-layer" 1066 | version = "0.3.1" 1067 | source = "registry+https://github.com/rust-lang/crates.io-index" 1068 | checksum = "343bc9466d3fe6b0f960ef45960509f84480bf4fd96f92901afe7ff3df9d3a62" 1069 | 1070 | [[package]] 1071 | name = "tower-service" 1072 | version = "0.3.1" 1073 | source = "registry+https://github.com/rust-lang/crates.io-index" 1074 | checksum = "360dfd1d6d30e05fda32ace2c8c70e9c0a9da713275777f5a4dbb8a1893930c6" 1075 | 1076 | [[package]] 1077 | name = "tracing" 1078 | version = "0.1.34" 1079 | source = "registry+https://github.com/rust-lang/crates.io-index" 1080 | checksum = "5d0ecdcb44a79f0fe9844f0c4f33a342cbcbb5117de8001e6ba0dc2351327d09" 1081 | dependencies = [ 1082 | "cfg-if", 1083 | "log", 1084 | "pin-project-lite", 1085 | "tracing-attributes", 1086 | "tracing-core", 1087 | ] 1088 | 1089 | [[package]] 1090 | name = "tracing-attributes" 1091 | version = "0.1.21" 1092 | source = "registry+https://github.com/rust-lang/crates.io-index" 1093 | checksum = "cc6b8ad3567499f98a1db7a752b07a7c8c7c7c34c332ec00effb2b0027974b7c" 1094 | dependencies = [ 1095 | "proc-macro2", 1096 | "quote", 1097 | "syn", 1098 | ] 1099 | 1100 | [[package]] 1101 | name = "tracing-core" 1102 | version = "0.1.26" 1103 | source = "registry+https://github.com/rust-lang/crates.io-index" 1104 | checksum = "f54c8ca710e81886d498c2fd3331b56c93aa248d49de2222ad2742247c60072f" 1105 | dependencies = [ 1106 | "lazy_static", 1107 | ] 1108 | 1109 | [[package]] 1110 | name = "try-lock" 1111 | version = "0.2.3" 1112 | source = "registry+https://github.com/rust-lang/crates.io-index" 1113 | checksum = "59547bce71d9c38b83d9c0e92b6066c4253371f15005def0c30d9657f50c7642" 1114 | 1115 | [[package]] 1116 | name = "unicode-xid" 1117 | version = "0.2.3" 1118 | source = "registry+https://github.com/rust-lang/crates.io-index" 1119 | checksum = "957e51f3646910546462e67d5f7599b9e4fb8acdd304b087a6494730f9eebf04" 1120 | 1121 | [[package]] 1122 | name = "untrusted" 1123 | version = "0.7.1" 1124 | source = "registry+https://github.com/rust-lang/crates.io-index" 1125 | checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" 1126 | 1127 | [[package]] 1128 | name = "want" 1129 | version = "0.3.0" 1130 | source = "registry+https://github.com/rust-lang/crates.io-index" 1131 | checksum = "1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0" 1132 | dependencies = [ 1133 | "log", 1134 | "try-lock", 1135 | ] 1136 | 1137 | [[package]] 1138 | name = "wasi" 1139 | version = "0.10.2+wasi-snapshot-preview1" 1140 | source = "registry+https://github.com/rust-lang/crates.io-index" 1141 | checksum = "fd6fbd9a79829dd1ad0cc20627bf1ed606756a7f77edff7b66b7064f9cb327c6" 1142 | 1143 | [[package]] 1144 | name = "wasi" 1145 | version = "0.11.0+wasi-snapshot-preview1" 1146 | source = "registry+https://github.com/rust-lang/crates.io-index" 1147 | checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" 1148 | 1149 | [[package]] 1150 | name = "wasm-bindgen" 1151 | version = "0.2.80" 1152 | source = "registry+https://github.com/rust-lang/crates.io-index" 1153 | checksum = "27370197c907c55e3f1a9fbe26f44e937fe6451368324e009cba39e139dc08ad" 1154 | dependencies = [ 1155 | "cfg-if", 1156 | "wasm-bindgen-macro", 1157 | ] 1158 | 1159 | [[package]] 1160 | name = "wasm-bindgen-backend" 1161 | version = "0.2.80" 1162 | source = "registry+https://github.com/rust-lang/crates.io-index" 1163 | checksum = "53e04185bfa3a779273da532f5025e33398409573f348985af9a1cbf3774d3f4" 1164 | dependencies = [ 1165 | "bumpalo", 1166 | "lazy_static", 1167 | "log", 1168 | "proc-macro2", 1169 | "quote", 1170 | "syn", 1171 | "wasm-bindgen-shared", 1172 | ] 1173 | 1174 | [[package]] 1175 | name = "wasm-bindgen-macro" 1176 | version = "0.2.80" 1177 | source = "registry+https://github.com/rust-lang/crates.io-index" 1178 | checksum = "17cae7ff784d7e83a2fe7611cfe766ecf034111b49deb850a3dc7699c08251f5" 1179 | dependencies = [ 1180 | "quote", 1181 | "wasm-bindgen-macro-support", 1182 | ] 1183 | 1184 | [[package]] 1185 | name = "wasm-bindgen-macro-support" 1186 | version = "0.2.80" 1187 | source = "registry+https://github.com/rust-lang/crates.io-index" 1188 | checksum = "99ec0dc7a4756fffc231aab1b9f2f578d23cd391390ab27f952ae0c9b3ece20b" 1189 | dependencies = [ 1190 | "proc-macro2", 1191 | "quote", 1192 | "syn", 1193 | "wasm-bindgen-backend", 1194 | "wasm-bindgen-shared", 1195 | ] 1196 | 1197 | [[package]] 1198 | name = "wasm-bindgen-shared" 1199 | version = "0.2.80" 1200 | source = "registry+https://github.com/rust-lang/crates.io-index" 1201 | checksum = "d554b7f530dee5964d9a9468d95c1f8b8acae4f282807e7d27d4b03099a46744" 1202 | 1203 | [[package]] 1204 | name = "web-sys" 1205 | version = "0.3.57" 1206 | source = "registry+https://github.com/rust-lang/crates.io-index" 1207 | checksum = "7b17e741662c70c8bd24ac5c5b18de314a2c26c32bf8346ee1e6f53de919c283" 1208 | dependencies = [ 1209 | "js-sys", 1210 | "wasm-bindgen", 1211 | ] 1212 | 1213 | [[package]] 1214 | name = "webpki" 1215 | version = "0.22.0" 1216 | source = "registry+https://github.com/rust-lang/crates.io-index" 1217 | checksum = "f095d78192e208183081cc07bc5515ef55216397af48b873e5edcd72637fa1bd" 1218 | dependencies = [ 1219 | "ring", 1220 | "untrusted", 1221 | ] 1222 | 1223 | [[package]] 1224 | name = "winapi" 1225 | version = "0.3.9" 1226 | source = "registry+https://github.com/rust-lang/crates.io-index" 1227 | checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" 1228 | dependencies = [ 1229 | "winapi-i686-pc-windows-gnu", 1230 | "winapi-x86_64-pc-windows-gnu", 1231 | ] 1232 | 1233 | [[package]] 1234 | name = "winapi-i686-pc-windows-gnu" 1235 | version = "0.4.0" 1236 | source = "registry+https://github.com/rust-lang/crates.io-index" 1237 | checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" 1238 | 1239 | [[package]] 1240 | name = "winapi-util" 1241 | version = "0.1.5" 1242 | source = "registry+https://github.com/rust-lang/crates.io-index" 1243 | checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" 1244 | dependencies = [ 1245 | "winapi", 1246 | ] 1247 | 1248 | [[package]] 1249 | name = "winapi-x86_64-pc-windows-gnu" 1250 | version = "0.4.0" 1251 | source = "registry+https://github.com/rust-lang/crates.io-index" 1252 | checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" 1253 | 1254 | [[package]] 1255 | name = "yaml-rust" 1256 | version = "0.4.5" 1257 | source = "registry+https://github.com/rust-lang/crates.io-index" 1258 | checksum = "56c1936c4cc7a1c9ab21a1ebb602eb942ba868cbd44a99cb7cdc5892335e1c85" 1259 | dependencies = [ 1260 | "linked-hash-map", 1261 | ] 1262 | 1263 | [[package]] 1264 | name = "zeroize" 1265 | version = "1.5.5" 1266 | source = "registry+https://github.com/rust-lang/crates.io-index" 1267 | checksum = "94693807d016b2f2d2e14420eb3bfcca689311ff775dcf113d74ea624b7cdf07" 1268 | --------------------------------------------------------------------------------