From a8ca0018c6f7811787302148c92fac15a8f914cc Mon Sep 17 00:00:00 2001 From: Francisco Date: Fri, 4 Aug 2023 07:51:41 -0300 Subject: [PATCH 1/2] chore: remove terraform test package Signed-off-by: Francisco --- tests/TESTING.md | 8 + tests/terraform/.golangci.yaml | 80 -- tests/terraform/Dockerfile.build | 27 - tests/terraform/Makefile | 75 -- tests/terraform/README.md | 127 --- .../amd64_resource_files/clusterip.yaml | 33 - .../amd64_resource_files/daemonset.yaml | 18 - .../amd64_resource_files/dnsutils.yaml | 14 - .../amd64_resource_files/ingress.yaml | 51 - .../amd64_resource_files/loadbalancer.yaml | 36 - .../local-path-provisioner.yaml | 32 - .../amd64_resource_files/nodeport.yaml | 35 - .../amd64_resource_files/secrets.yaml | 49 - .../arm_resource_files/clusterip.yaml | 33 - .../arm_resource_files/daemonset.yaml | 18 - .../terraform/arm_resource_files/ingress.yaml | 51 - .../arm_resource_files/loadbalancer.yaml | 36 - .../local-path-provisioner.yaml | 32 - .../arm_resource_files/nodeport.yaml | 35 - tests/terraform/config.mk | 13 - .../terraform/createcluster/createcluster.go | 76 -- .../createcluster/createcluster_test.go | 344 ------ tests/terraform/go.mod | 65 -- tests/terraform/go.sum | 975 ------------------ tests/terraform/jenkinsfile | 99 -- .../modules/k3scluster/config/local.tfvars | 28 - .../modules/k3scluster/install_k3s_master.sh | 105 -- .../modules/k3scluster/join_k3s_agent.sh | 31 - .../modules/k3scluster/join_k3s_master.sh | 44 - tests/terraform/modules/k3scluster/main.tf | 54 - .../k3scluster/master/instances_server.tf | 302 ------ .../modules/k3scluster/master/outputs.tf | 18 - .../modules/k3scluster/master/providers.tf | 3 - .../modules/k3scluster/master/variables.tf | 34 - tests/terraform/modules/k3scluster/outputs.tf | 18 - .../terraform/modules/k3scluster/providers.tf | 3 - .../terraform/modules/k3scluster/variables.tf | 35 - .../k3scluster/worker/instances_worker.tf | 49 - .../modules/k3scluster/worker/outputs.tf | 12 - .../modules/k3scluster/worker/providers.tf | 3 - .../modules/k3scluster/worker/variables.tf | 22 - tests/terraform/scripts/delete_resources.sh | 101 -- tests/terraform/testutils.go | 244 ----- .../upgradecluster/upgradecluster_test.go | 592 ----------- 44 files changed, 8 insertions(+), 4052 deletions(-) delete mode 100644 tests/terraform/.golangci.yaml delete mode 100644 tests/terraform/Dockerfile.build delete mode 100644 tests/terraform/Makefile delete mode 100644 tests/terraform/README.md delete mode 100644 tests/terraform/amd64_resource_files/clusterip.yaml delete mode 100644 tests/terraform/amd64_resource_files/daemonset.yaml delete mode 100644 tests/terraform/amd64_resource_files/dnsutils.yaml delete mode 100644 tests/terraform/amd64_resource_files/ingress.yaml delete mode 100644 tests/terraform/amd64_resource_files/loadbalancer.yaml delete mode 100644 tests/terraform/amd64_resource_files/local-path-provisioner.yaml delete mode 100644 tests/terraform/amd64_resource_files/nodeport.yaml delete mode 100644 tests/terraform/amd64_resource_files/secrets.yaml delete mode 100644 tests/terraform/arm_resource_files/clusterip.yaml delete mode 100644 tests/terraform/arm_resource_files/daemonset.yaml delete mode 100644 tests/terraform/arm_resource_files/ingress.yaml delete mode 100644 tests/terraform/arm_resource_files/loadbalancer.yaml delete mode 100644 tests/terraform/arm_resource_files/local-path-provisioner.yaml delete mode 100644 tests/terraform/arm_resource_files/nodeport.yaml delete mode 100644 tests/terraform/config.mk delete mode 100644 tests/terraform/createcluster/createcluster.go delete mode 100644 tests/terraform/createcluster/createcluster_test.go delete mode 100644 tests/terraform/go.mod delete mode 100644 tests/terraform/go.sum delete mode 100644 tests/terraform/jenkinsfile delete mode 100644 tests/terraform/modules/k3scluster/config/local.tfvars delete mode 100644 tests/terraform/modules/k3scluster/install_k3s_master.sh delete mode 100644 tests/terraform/modules/k3scluster/join_k3s_agent.sh delete mode 100644 tests/terraform/modules/k3scluster/join_k3s_master.sh delete mode 100644 tests/terraform/modules/k3scluster/main.tf delete mode 100644 tests/terraform/modules/k3scluster/master/instances_server.tf delete mode 100644 tests/terraform/modules/k3scluster/master/outputs.tf delete mode 100644 tests/terraform/modules/k3scluster/master/providers.tf delete mode 100644 tests/terraform/modules/k3scluster/master/variables.tf delete mode 100644 tests/terraform/modules/k3scluster/outputs.tf delete mode 100644 tests/terraform/modules/k3scluster/providers.tf delete mode 100644 tests/terraform/modules/k3scluster/variables.tf delete mode 100644 tests/terraform/modules/k3scluster/worker/instances_worker.tf delete mode 100644 tests/terraform/modules/k3scluster/worker/outputs.tf delete mode 100644 tests/terraform/modules/k3scluster/worker/providers.tf delete mode 100644 tests/terraform/modules/k3scluster/worker/variables.tf delete mode 100755 tests/terraform/scripts/delete_resources.sh delete mode 100644 tests/terraform/testutils.go delete mode 100644 tests/terraform/upgradecluster/upgradecluster_test.go diff --git a/tests/TESTING.md b/tests/TESTING.md index 04aa6c68ff22..467d9235f03b 100644 --- a/tests/TESTING.md +++ b/tests/TESTING.md @@ -6,6 +6,7 @@ Testing in K3s comes in 5 forms: - [Smoke](#smoke-tests) - [Performance](#performance) - [End-to-End (E2E)](#end-to-end-e2e-tests) +- [Distros-test-framework](#distros-test-framework) This document will explain *when* each test should be written and *how* each test should be generated, formatted, and run. @@ -146,6 +147,13 @@ See [e2e/README.md](./e2e/README.md) for more info. ___ +## Distros Test Framework + +The acceptance tests from distros test framework are a customizable way to create clusters and perform validations on them such that the requirements of specific features and functions can be validated. + +See [distros-test-framework/README](https://github.com/rancher/distros-test-framework#readme) for more info. +___ + ## Contributing New Or Updated Tests We gladly accept new and updated tests of all types. If you wish to create diff --git a/tests/terraform/.golangci.yaml b/tests/terraform/.golangci.yaml deleted file mode 100644 index f677d9477a5c..000000000000 --- a/tests/terraform/.golangci.yaml +++ /dev/null @@ -1,80 +0,0 @@ -linters: - enable: - - gofmt - - govet - - revive - - gosec - - megacheck - - misspell - - unparam - - exportloopref - - nlreturn - - nestif - - dupl - - gci - - ginkgolinter - -linters-settings: - govet: - check-shadowing: true - check-tests: true - - nestif: - min-complexity: 4 - - revive: - confidence: 0.8 - severity: warning - ignore-generated-header: true - rules: - - name: line-length-limit - arguments: [100] - - name: cognitive-complexity - arguments: [10] - - name: empty-lines - - name: empty-block - - name: bare-return - - name: blank-imports - - name: confusing-naming - - name: confusing-results - - name: context-as-argument - - name: duplicated-imports - - name: early-return - - name: empty-block - - name: empty-lines - - name: error-naming - - name: error-return - - name: error-strings - - name: errorf - - name: exported - - name: flag-parameter - - name: get-return - - name: if-return - - name: increment-decrement - - name: indent-error-flow - - name: import-shadowing - - name: modifies-parameter - - name: modifies-value-receiver - - name: range - - name: range-val-in-closure - - name: range-val-address - - name: receiver-naming - - name: string-of-int - - name: struct-tag - - name: superfluous-else - - name: time-naming - - name: var-declaration - - name: unconditional-recursion - - name: unexported-naming - - name: unexported-return - - name: unhandled-error - arguments: ["fmt.Printf", "builder.WriteString"] - - name: unnecessary-stmt - - name: unreachable-code - - name: unused-parameter - - name: unused-receiver - -issues: - exclude-rules: - - linters: [typecheck] - text: "command-line-arguments" \ No newline at end of file diff --git a/tests/terraform/Dockerfile.build b/tests/terraform/Dockerfile.build deleted file mode 100644 index 837247160915..000000000000 --- a/tests/terraform/Dockerfile.build +++ /dev/null @@ -1,27 +0,0 @@ -FROM golang:alpine - -ARG TF_VERSION=1.4.0 -ENV TERRAFORM_VERSION $TF_VERSION - -RUN apk update && \ - apk upgrade --update-cache --available && \ - apk add --no-cache curl git jq bash openssh unzip gcc g++ make ca-certificates && \ - if [ "$(uname -m)" = "aarch64" ]; then \ - KUBE_ARCH="linux/arm64" && \ - TF_ARCH="linux_arm64"; \ - else \ - KUBE_ARCH="linux/amd64" && \ - TF_ARCH="linux_amd64"; \ - fi && \ - curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/${KUBE_ARCH}/kubectl" && \ - chmod +x ./kubectl && \ - mv ./kubectl /usr/local/bin && \ - mkdir tmp && \ - curl "https://releases.hashicorp.com/terraform/${TERRAFORM_VERSION}/terraform_${TERRAFORM_VERSION}_${TF_ARCH}.zip" -o tmp/terraform.zip && \ - unzip tmp/terraform.zip -d /usr/local/bin && \ - chmod +x /usr/local/bin/terraform && \ - rm -rf tmp - -WORKDIR $GOPATH/src/github.com/k3s-io/k3s - -COPY . . \ No newline at end of file diff --git a/tests/terraform/Makefile b/tests/terraform/Makefile deleted file mode 100644 index 12c4fdf86ace..000000000000 --- a/tests/terraform/Makefile +++ /dev/null @@ -1,75 +0,0 @@ - -##========================= Terraform Tests =========================# -include ./config.mk - -TAGNAME ?= default -tf-up: - @cd ../.. && docker build . -q -f ./tests/terraform/Dockerfile.build -t k3s-tf-${TAGNAME} - -.PHONY: tf-run -tf-run: - @docker run -d --name k3s-tf-test${IMGNAME} -t \ - -e AWS_ACCESS_KEY_ID="${AWS_ACCESS_KEY_ID}" \ - -e AWS_SECRET_ACCESS_KEY="${AWS_SECRET_ACCESS_KEY}" \ - -v ${ACCESS_KEY_LOCAL}:/go/src/github.com/k3s-io/k3s/tests/terraform/modules/k3scluster/config/.ssh/aws_key.pem \ - k3s-tf-${TAGNAME} sh -c 'cd ./tests/terraform ; \ - if [ -n "${ARGNAME}" ]; then \ - go test -v -timeout=45m \ - ./${TESTDIR}/... \ - -"${ARGNAME}"="${ARGVALUE}"; \ - elif [ -z "${TESTDIR}" ]; then \ - go test -v -timeout=45m \ - ./createcluster/...; \ - else \ - go test -v -timeout=45m \ - ./${TESTDIR}/...; \ - fi' - -.PHONY: tf-logs -tf-logs: - @docker logs -f k3s-tf-test${IMGNAME} - -.PHONY: tf-down -tf-down: - @echo "Removing containers and images" - @docker stop $$(docker ps -a -q --filter="name=k3s-tf*") - @docker rm $$(docker ps -a -q --filter="name=k3s-tf*") ; \ - docker rmi --force $$(docker images -q --filter="reference=k3s-tf*") - -tf-clean: - @./scripts/delete_resources.sh - -.PHONY: tf-complete -tf-complete: tf-clean tf-down tf-remove-state tf-up tf-run - - -#========================= Run terraform tests locally =========================# - -.PHONY: tf-create -tf-create: - @go test -timeout=45m -v ./createcluster/... - -.PHONY: tf-upgrade -tf-upgrade: - @go test -timeout=45m -v ./upgradecluster/... -${ARGNAME}=${ARGVALUE} - -.PHONY: tf-remove-state -tf-remove-state: - @rm -rf ./modules/k3scluster/.terraform - @rm -rf ./modules/k3scluster/.terraform.lock.hcl ./modules/k3scluster/terraform.tfstate ./modules/k3scluster/terraform.tfstate.backup - -.PHONY: tf-test-suite -tf-test-suite: - @make tf-remove-state && make tf-create ; sleep 5 && \ - make tf-remove-state && make tf-upgrade ${ARGNAME}=${ARGVALUE} - -.PHONY: tf-test-suite-same-cluster -tf-test-suite-same-cluster: - @make tf-create ; sleep 5 && make v ${ARGNAME}=${ARGVALUE} - - -#========================= TestCode Static Quality Check =========================# -.PHONY: vet-lint ## Run locally only inside Tests package -vet-lint: - @echo "Running go vet and lint" - @go vet ./${TESTDIR} && golangci-lint run --tests \ No newline at end of file diff --git a/tests/terraform/README.md b/tests/terraform/README.md deleted file mode 100644 index 198fb62bac64..000000000000 --- a/tests/terraform/README.md +++ /dev/null @@ -1,127 +0,0 @@ -# Terraform (TF) Tests - -Terraform (TF) tests are an additional form of End-to-End (E2E) tests that cover multi-node K3s configuration and administration: install, update, teardown, etc. across a wide range of operating systems. Terraform tests are used as part of K3s quality assurance (QA) to bring up clusters with different configurations on demand, perform specific functionality tests, and keep them up and running to perform some exploratory tests in real-world scenarios. - -## Framework -TF tests utilize [Ginkgo](https://onsi.github.io/ginkgo/) and [Gomega](https://onsi.github.io/gomega/) like the e2e tests. They rely on [Terraform](https://www.terraform.io/) to provide the underlying cluster configuration. - -## Format - -- All TF tests should be placed under `tests/terraform/`. -- All TF test functions should be named: `Test_TF`. - -See the [create cluster test](../tests/terraform/createcluster_test.go) as an example. - -## Running - -- Before running the tests, you should create local.tfvars file in `./tests/terraform/modules/k3scluster/config/local.tfvars`. There is some information there to get you started, but the empty variables should be filled in appropriately per your AWS environment. - - - -- For running tests with "etcd" cluster type, you should add the value "etcd" to the variable "cluster_type" , also you need have those variables at least empty: -``` -- external_db -- external_db_version -- instance_class -- db_group_name -``` - -- For running with external db you need the same variables above filled in with the correct data and also cluster_type= "" - - -All TF tests can be run with: -```bash -go test -timeout=60m ./tests/terraform/... -run TF -``` -Tests can be run individually with: -```bash -go test -timeout=30m ./tests/terraform/createcluster/createcluster.go ./tests/terraform/createcluster/createcluster_test.go -# OR -go test -v -timeout=30m ./tests/terraform/... -run TFClusterCreateValidation -# example with vars: -go test -timeout=30m -v ./tests/terraform/createcluster.go ./tests/terraform/createcluster_test.go -node_os=ubuntu -aws_ami=ami-02f3416038bdb17fb -cluster_type=etcd -resource_name=localrun1 -sshuser=ubuntu -sshkey="key-name" -destroy=false - -``` -Test Flags: -``` -- ${upgradeVersion} version to upgrade to -``` -We can also run tests through the Makefile through tests' directory: - -- On the first run with make and docker please delete your .terraform folder, terraform.tfstate and terraform.hcl.lock file - -```bash -Args: -*All args are optional and can be used with: - -`$make tf-run` `$make tf-logs`, -`$make vet-lint` `$make tf-complete`, -`$make tf-upgrade` `$make tf-test-suite-same-cluster`, -`$make tf-test-suite` - - -- ${IMGNAME} append any string to the end of image name -- ${TAGNAME} append any string to the end of tag name -- ${ARGNAME} name of the arg to pass to the test -- ${ARGVALUE} value of the arg to pass to the test -- ${TESTDIR} path to the test directory - -Commands: -$ make tf-up # create the image from Dockerfile.build -$ make tf-run # runs all tests if no flags or args provided -$ make tf-down # removes the image -$ make tf-clean # removes instances and resources created by tests -$ make tf-logs # prints logs from container the tests -$ make tf-complete # clean resources + remove images + run tests -$ make tf-create # runs create cluster test locally -$ make tf-upgrade # runs upgrade cluster test locally -$ make tf-test-suite-same-cluster # runs all tests locally in sequence using the same state -$ make tf-remove-state # removes terraform state dir and files -$ make tf-test-suite # runs all tests locally in sequence not using the same state -$ make vet-lint # runs go vet and go lint - - -Examples: -$ make tf-up TAGNAME=ubuntu -$ make tf-run IMGNAME=2 TAGNAME=ubuntu TESTDIR=upgradecluster ARGNAME=upgradeVersion ARGVALUE=v1.26.2+k3s1 -$ make tf-run TESTDIR=upgradecluster -$ make tf-logs IMGNAME=1 -$ make vet-lint TESTDIR=upgradecluster -``` - - -# Running tests in parallel: -- You can play around and have a lot of different test combinations like: -``` -- Build docker image with different TAGNAME="OS`s" + with different configurations( resource_name, node_os, versions, install type, nodes and etc) and have unique "IMGNAMES" - -- And in the meanwhile run also locally with different configuration while your dockers TAGNAME and IMGNAMES are running -``` - -# In between tests: -- If you want to run with same cluster do not delete ./tests/terraform/modules/terraform.tfstate + .terraform.lock.hcl file after each test. - -- if you want to use new resources then make sure to delete the ./tests/terraform/modules/terraform.tfstate + .terraform.lock.hcl file if you want to create a new cluster. - - -# Common Issues: - -- Issues related to terraform plugin please also delete the modules/.terraform folder -- In mac m1 maybe you need also to go to rke2/tests/terraform/modules and run `terraform init` to download the plugins - - - - -# Reporting: -Additionally, to generate junit reporting for the tests, the Ginkgo CLI is used. Installation instructions can be found [here.](https://onsi.github.io/ginkgo/#getting-started) - -To run the all TF tests and generate JUnit testing reports: -``` -ginkgo --junit-report=result.xml ./tests/terraform/... -``` - -Note: The `go test` default timeout is 10 minutes, thus the `-timeout` flag should be used. The `ginkgo` default timeout is 1 hour, no timeout flag is needed. - -# Debugging -The cluster and VMs can be retained after a test by passing `-destroy=false`. -To focus individual runs on specific test clauses, you can prefix with `F`. For example, in the [create cluster test](../tests/terraform/createcluster_test.go), you can update the initial creation to be: `FIt("Starts up with no issues", func() {` in order to focus the run on only that clause. \ No newline at end of file diff --git a/tests/terraform/amd64_resource_files/clusterip.yaml b/tests/terraform/amd64_resource_files/clusterip.yaml deleted file mode 100644 index f1c501e8fa88..000000000000 --- a/tests/terraform/amd64_resource_files/clusterip.yaml +++ /dev/null @@ -1,33 +0,0 @@ -apiVersion: apps/v1 -kind: Deployment -metadata: - name: test-clusterip -spec: - selector: - matchLabels: - k8s-app: nginx-app-clusterip - replicas: 2 - template: - metadata: - labels: - k8s-app: nginx-app-clusterip - spec: - containers: - - name: nginx - image: ranchertest/mytestcontainer - ports: - - containerPort: 80 ---- -apiVersion: v1 -kind: Service -metadata: - labels: - k8s-app: nginx-app-clusterip - name: nginx-clusterip-svc - namespace: default -spec: - type: ClusterIP - ports: - - port: 80 - selector: - k8s-app: nginx-app-clusterip diff --git a/tests/terraform/amd64_resource_files/daemonset.yaml b/tests/terraform/amd64_resource_files/daemonset.yaml deleted file mode 100644 index 3360f354214c..000000000000 --- a/tests/terraform/amd64_resource_files/daemonset.yaml +++ /dev/null @@ -1,18 +0,0 @@ -apiVersion: apps/v1 -kind: DaemonSet -metadata: - name: test-daemonset -spec: - selector: - matchLabels: - k8s-app: test-daemonset - template: - metadata: - labels: - k8s-app: test-daemonset - spec: - containers: - - name: webserver - image: nginx - ports: - - containerPort: 80 diff --git a/tests/terraform/amd64_resource_files/dnsutils.yaml b/tests/terraform/amd64_resource_files/dnsutils.yaml deleted file mode 100644 index 9192bf35027b..000000000000 --- a/tests/terraform/amd64_resource_files/dnsutils.yaml +++ /dev/null @@ -1,14 +0,0 @@ -apiVersion: v1 -kind: Pod -metadata: - name: dnsutils - namespace: default -spec: - containers: - - name: dnsutils - image: gcr.io/kubernetes-e2e-test-images/dnsutils:1.3 - command: - - sleep - - "3600" - imagePullPolicy: IfNotPresent - restartPolicy: Always diff --git a/tests/terraform/amd64_resource_files/ingress.yaml b/tests/terraform/amd64_resource_files/ingress.yaml deleted file mode 100644 index cf49a5064099..000000000000 --- a/tests/terraform/amd64_resource_files/ingress.yaml +++ /dev/null @@ -1,51 +0,0 @@ -apiVersion: networking.k8s.io/v1 -kind: Ingress -metadata: - name: test-ingress -spec: - rules: - - host: foo1.bar.com - http: - paths: - - backend: - service: - name: nginx-ingress-svc - port: - number: 80 - path: / - pathType: ImplementationSpecific ---- -apiVersion: v1 -kind: Service -metadata: - name: nginx-ingress-svc - labels: - k8s-app: nginx-app-ingress -spec: - ports: - - port: 80 - targetPort: 80 - protocol: TCP - name: http - selector: - k8s-app: nginx-app-ingress ---- -apiVersion: v1 -kind: ReplicationController -metadata: - name: test-ingress -spec: - replicas: 2 - selector: - k8s-app: nginx-app-ingress - template: - metadata: - labels: - k8s-app: nginx-app-ingress - spec: - terminationGracePeriodSeconds: 60 - containers: - - name: testcontainer - image: ranchertest/mytestcontainer - ports: - - containerPort: 80 diff --git a/tests/terraform/amd64_resource_files/loadbalancer.yaml b/tests/terraform/amd64_resource_files/loadbalancer.yaml deleted file mode 100644 index 0897d215aea2..000000000000 --- a/tests/terraform/amd64_resource_files/loadbalancer.yaml +++ /dev/null @@ -1,36 +0,0 @@ ---- -apiVersion: apps/v1 -kind: Deployment -metadata: - name: test-loadbalancer -spec: - selector: - matchLabels: - k8s-app: nginx-app-loadbalancer - replicas: 2 - template: - metadata: - labels: - k8s-app: nginx-app-loadbalancer - spec: - containers: - - name: nginx - image: ranchertest/mytestcontainer - ports: - - containerPort: 80 ---- -apiVersion: v1 -kind: Service -metadata: - name: nginx-loadbalancer-svc - labels: - k8s-app: nginx-app-loadbalancer -spec: - type: LoadBalancer - ports: - - port: 81 - targetPort: 80 - protocol: TCP - name: http - selector: - k8s-app: nginx-app-loadbalancer diff --git a/tests/terraform/amd64_resource_files/local-path-provisioner.yaml b/tests/terraform/amd64_resource_files/local-path-provisioner.yaml deleted file mode 100644 index 8e2b01ab8f82..000000000000 --- a/tests/terraform/amd64_resource_files/local-path-provisioner.yaml +++ /dev/null @@ -1,32 +0,0 @@ -apiVersion: v1 -kind: PersistentVolumeClaim -metadata: - name: local-path-pvc - namespace: default -spec: - accessModes: - - ReadWriteOnce - storageClassName: local-path - resources: - requests: - storage: 500Mi ---- -apiVersion: v1 -kind: Pod -metadata: - name: volume-test - namespace: default -spec: - containers: - - name: volume-test - image: nginx:stable-alpine - imagePullPolicy: IfNotPresent - volumeMounts: - - name: volv - mountPath: /data - ports: - - containerPort: 80 - volumes: - - name: volv - persistentVolumeClaim: - claimName: local-path-pvc diff --git a/tests/terraform/amd64_resource_files/nodeport.yaml b/tests/terraform/amd64_resource_files/nodeport.yaml deleted file mode 100644 index 2187b732db89..000000000000 --- a/tests/terraform/amd64_resource_files/nodeport.yaml +++ /dev/null @@ -1,35 +0,0 @@ -apiVersion: apps/v1 -kind: Deployment -metadata: - name: test-nodeport -spec: - selector: - matchLabels: - k8s-app: nginx-app-nodeport - replicas: 2 - template: - metadata: - labels: - k8s-app: nginx-app-nodeport - spec: - containers: - - name: nginx - image: ranchertest/mytestcontainer - ports: - - containerPort: 80 ---- -apiVersion: v1 -kind: Service -metadata: - labels: - k8s-app: nginx-app-nodeport - name: nginx-nodeport-svc - namespace: default -spec: - type: NodePort - ports: - - port: 80 - nodePort: 30096 - name: http - selector: - k8s-app: nginx-app-nodeport diff --git a/tests/terraform/amd64_resource_files/secrets.yaml b/tests/terraform/amd64_resource_files/secrets.yaml deleted file mode 100644 index 9dcd6d5e6dcf..000000000000 --- a/tests/terraform/amd64_resource_files/secrets.yaml +++ /dev/null @@ -1,49 +0,0 @@ -apiVersion: v1 -kind: Secret -metadata: - name: e2e-secret1 -type: Opaque -stringData: - config.yaml: | - key: "hello" - val: "world" ---- -apiVersion: v1 -kind: Secret -metadata: - name: e2e-secret2 -type: Opaque -stringData: - config.yaml: | - key: "good" - val: "day" ---- -apiVersion: v1 -kind: Secret -metadata: - name: e2e-secret3 -type: Opaque -stringData: - config.yaml: | - key: "top-secret" - val: "information" ---- -apiVersion: v1 -kind: Secret -metadata: - name: e2e-secret4 -type: Opaque -stringData: - config.yaml: | - key: "lock" - val: "key" ---- -apiVersion: v1 -kind: Secret -metadata: - name: e2e-secret5 -type: Opaque -stringData: - config.yaml: | - key: "last" - val: "call" diff --git a/tests/terraform/arm_resource_files/clusterip.yaml b/tests/terraform/arm_resource_files/clusterip.yaml deleted file mode 100644 index ae5efe6a1e08..000000000000 --- a/tests/terraform/arm_resource_files/clusterip.yaml +++ /dev/null @@ -1,33 +0,0 @@ -apiVersion: apps/v1 -kind: Deployment -metadata: - name: test-clusterip -spec: - selector: - matchLabels: - k8s-app: nginx-app-clusterip - replicas: 2 - template: - metadata: - labels: - k8s-app: nginx-app-clusterip - spec: - containers: - - name: nginx - image: shylajarancher19/shylajaarm64:v1.0 - ports: - - containerPort: 80 ---- -apiVersion: v1 -kind: Service -metadata: - labels: - k8s-app: nginx-app-clusterip - name: nginx-clusterip-svc - namespace: default -spec: - type: ClusterIP - ports: - - port: 80 - selector: - k8s-app: nginx-app-clusterip diff --git a/tests/terraform/arm_resource_files/daemonset.yaml b/tests/terraform/arm_resource_files/daemonset.yaml deleted file mode 100644 index 3360f354214c..000000000000 --- a/tests/terraform/arm_resource_files/daemonset.yaml +++ /dev/null @@ -1,18 +0,0 @@ -apiVersion: apps/v1 -kind: DaemonSet -metadata: - name: test-daemonset -spec: - selector: - matchLabels: - k8s-app: test-daemonset - template: - metadata: - labels: - k8s-app: test-daemonset - spec: - containers: - - name: webserver - image: nginx - ports: - - containerPort: 80 diff --git a/tests/terraform/arm_resource_files/ingress.yaml b/tests/terraform/arm_resource_files/ingress.yaml deleted file mode 100644 index 5d88b60fd740..000000000000 --- a/tests/terraform/arm_resource_files/ingress.yaml +++ /dev/null @@ -1,51 +0,0 @@ -apiVersion: networking.k8s.io/v1 -kind: Ingress -metadata: - name: test-ingress -spec: - rules: - - host: foo1.bar.com - http: - paths: - - backend: - service: - name: nginx-ingress-svc - port: - number: 80 - path: / - pathType: ImplementationSpecific ---- -apiVersion: v1 -kind: Service -metadata: - name: nginx-ingress-svc - labels: - k8s-app: nginx-app-ingress -spec: - ports: - - port: 80 - targetPort: 80 - protocol: TCP - name: http - selector: - k8s-app: nginx-app-ingress ---- -apiVersion: v1 -kind: ReplicationController -metadata: - name: test-ingress -spec: - replicas: 2 - selector: - k8s-app: nginx-app-ingress - template: - metadata: - labels: - k8s-app: nginx-app-ingress - spec: - terminationGracePeriodSeconds: 60 - containers: - - name: testcontainer - image: shylajarancher19/shylajaarm64:v1.0 - ports: - - containerPort: 80 diff --git a/tests/terraform/arm_resource_files/loadbalancer.yaml b/tests/terraform/arm_resource_files/loadbalancer.yaml deleted file mode 100644 index 6cc02bd898e2..000000000000 --- a/tests/terraform/arm_resource_files/loadbalancer.yaml +++ /dev/null @@ -1,36 +0,0 @@ ---- -apiVersion: apps/v1 -kind: Deployment -metadata: - name: test-loadbalancer -spec: - selector: - matchLabels: - k8s-app: nginx-app-loadbalancer - replicas: 2 - template: - metadata: - labels: - k8s-app: nginx-app-loadbalancer - spec: - containers: - - name: nginx - image: shylajarancher19/shylajaarm64:v1.0 - ports: - - containerPort: 80 ---- -apiVersion: v1 -kind: Service -metadata: - name: nginx-loadbalancer-svc - labels: - k8s-app: nginx-app-loadbalancer -spec: - type: LoadBalancer - ports: - - port: 81 - targetPort: 80 - protocol: TCP - name: http - selector: - k8s-app: nginx-app-loadbalancer diff --git a/tests/terraform/arm_resource_files/local-path-provisioner.yaml b/tests/terraform/arm_resource_files/local-path-provisioner.yaml deleted file mode 100644 index 8e2b01ab8f82..000000000000 --- a/tests/terraform/arm_resource_files/local-path-provisioner.yaml +++ /dev/null @@ -1,32 +0,0 @@ -apiVersion: v1 -kind: PersistentVolumeClaim -metadata: - name: local-path-pvc - namespace: default -spec: - accessModes: - - ReadWriteOnce - storageClassName: local-path - resources: - requests: - storage: 500Mi ---- -apiVersion: v1 -kind: Pod -metadata: - name: volume-test - namespace: default -spec: - containers: - - name: volume-test - image: nginx:stable-alpine - imagePullPolicy: IfNotPresent - volumeMounts: - - name: volv - mountPath: /data - ports: - - containerPort: 80 - volumes: - - name: volv - persistentVolumeClaim: - claimName: local-path-pvc diff --git a/tests/terraform/arm_resource_files/nodeport.yaml b/tests/terraform/arm_resource_files/nodeport.yaml deleted file mode 100644 index 8978efaebbdd..000000000000 --- a/tests/terraform/arm_resource_files/nodeport.yaml +++ /dev/null @@ -1,35 +0,0 @@ -apiVersion: apps/v1 -kind: Deployment -metadata: - name: test-nodeport -spec: - selector: - matchLabels: - k8s-app: nginx-app-nodeport - replicas: 2 - template: - metadata: - labels: - k8s-app: nginx-app-nodeport - spec: - containers: - - name: nginx - image: shylajarancher19/shylajaarm64:v1.0 - ports: - - containerPort: 80 ---- -apiVersion: v1 -kind: Service -metadata: - labels: - k8s-app: nginx-app-nodeport - name: nginx-nodeport-svc - namespace: default -spec: - type: NodePort - ports: - - port: 80 - nodePort: 30096 - name: http - selector: - k8s-app: nginx-app-nodeport diff --git a/tests/terraform/config.mk b/tests/terraform/config.mk deleted file mode 100644 index a28ee8da5f55..000000000000 --- a/tests/terraform/config.mk +++ /dev/null @@ -1,13 +0,0 @@ -SHELL := /bin/bash - -LOCAL_TFVARS_PATH := modules/k3scluster/config/local.tfvars - -ifeq ($(wildcard ${LOCAL_TFVARS_PATH}),) - RESOURCE_NAME := -else - export RESOURCE_NAME := $(shell sed -n 's/resource_name *= *"\([^"]*\)"/\1/p' ${LOCAL_TFVARS_PATH}) -endif - -export ACCESS_KEY_LOCAL -export AWS_ACCESS_KEY_ID -export AWS_SECRET_ACCESS_KEY \ No newline at end of file diff --git a/tests/terraform/createcluster/createcluster.go b/tests/terraform/createcluster/createcluster.go deleted file mode 100644 index d64bfe969acc..000000000000 --- a/tests/terraform/createcluster/createcluster.go +++ /dev/null @@ -1,76 +0,0 @@ -package createcluster - -import ( - "fmt" - "strconv" - - "path/filepath" - "testing" - - "github.com/gruntwork-io/terratest/modules/terraform" - tf "github.com/k3s-io/k3s/tests/terraform" -) - -var ( - KubeConfigFile string - MasterIPs string - WorkerIPs string - NumServers int - NumWorkers int - AwsUser string - AccessKey string - RenderedTemplate string - ExternalDb string - ClusterType string - TfVarsPath = "/tests/terraform/modules/k3scluster/config/local.tfvars" - modulesPath = "/tests/terraform/modules/k3scluster" -) - -func BuildCluster(t *testing.T, destroy bool) (string, error) { - basepath := tf.GetBasepath() - tfDir, err := filepath.Abs(basepath + modulesPath) - if err != nil { - return "", err - } - varDir, err := filepath.Abs(basepath + TfVarsPath) - if err != nil { - return "", err - } - TerraformOptions := &terraform.Options{ - TerraformDir: tfDir, - VarFiles: []string{varDir}, - } - - NumServers, err = strconv.Atoi(terraform.GetVariableAsStringFromVarFile(t, varDir, - "no_of_server_nodes")) - if err != nil { - return "", err - } - - NumWorkers, err = strconv.Atoi(terraform.GetVariableAsStringFromVarFile(t, varDir, - "no_of_worker_nodes")) - if err != nil { - return "", err - } - - ClusterType = terraform.GetVariableAsStringFromVarFile(t, varDir, "cluster_type") - ExternalDb = terraform.GetVariableAsStringFromVarFile(t, varDir, "external_db") - AwsUser = terraform.GetVariableAsStringFromVarFile(t, varDir, "aws_user") - AccessKey = terraform.GetVariableAsStringFromVarFile(t, varDir, "access_key") - - if destroy { - fmt.Printf("Cluster is being deleted") - terraform.Destroy(t, TerraformOptions) - return "cluster destroyed", err - } - - fmt.Printf("Creating Cluster") - - terraform.InitAndApply(t, TerraformOptions) - KubeConfigFile = "/tmp/" + terraform.Output(t, TerraformOptions, "kubeconfig") + "_kubeconfig" - MasterIPs = terraform.Output(t, TerraformOptions, "master_ips") - WorkerIPs = terraform.Output(t, TerraformOptions, "worker_ips") - RenderedTemplate = terraform.Output(t, TerraformOptions, "rendered_template") - - return "cluster created", err -} diff --git a/tests/terraform/createcluster/createcluster_test.go b/tests/terraform/createcluster/createcluster_test.go deleted file mode 100644 index 62075169e70f..000000000000 --- a/tests/terraform/createcluster/createcluster_test.go +++ /dev/null @@ -1,344 +0,0 @@ -package createcluster - -import ( - "flag" - "fmt" - "strings" - "testing" - - tf "github.com/k3s-io/k3s/tests/terraform" - - . "github.com/onsi/ginkgo/v2" - . "github.com/onsi/gomega" -) - -var ( - arch = flag.String("arch", "amd64", "a string") - destroy = flag.Bool("destroy", false, "a bool") - failed = false -) - -func Test_TFClusterCreateValidation(t *testing.T) { - RegisterFailHandler(Fail) - flag.Parse() - - RunSpecs(t, "Create Cluster Test Suite") -} - -var _ = Describe("Test:", func() { - Context("Build Cluster:", func() { - It("Starts up with no issues", func() { - status, err := BuildCluster(&testing.T{}, false) - - Expect(err).NotTo(HaveOccurred()) - Expect(status).To(Equal("cluster created")) - - defer GinkgoRecover() - if strings.Contains(ClusterType, "etcd") { - fmt.Println("Backend:", ClusterType) - } else { - fmt.Println("Backend:", ExternalDb) - } - - if ExternalDb != "" && ClusterType == "" { - for i := 0; i > len(MasterIPs); i++ { - cmd := "grep \"datastore-endpoint\" /etc/systemd/system/k3s.service" - res, err := tf.RunCmdOnNode(cmd, string(MasterIPs[0]), AwsUser, AccessKey) - Expect(err).NotTo(HaveOccurred()) - Expect(res).Should(ContainSubstring(RenderedTemplate)) - } - } - - tf.PrintFileContents(KubeConfigFile) - Expect(KubeConfigFile).ShouldNot(BeEmpty()) - Expect(MasterIPs).ShouldNot(BeEmpty()) - - fmt.Println("Server Node IPS:", MasterIPs) - fmt.Println("Agent Node IPS:", WorkerIPs) - - if NumWorkers > 0 { - Expect(WorkerIPs).ShouldNot(BeEmpty()) - } else { - Expect(WorkerIPs).Should(BeEmpty()) - } - }) - - It("Checks Node and Pod Status", func() { - defer func() { - _, err := tf.ParseNodes(KubeConfigFile, true) - if err != nil { - fmt.Println("Error retrieving nodes: ", err) - } - _, err = tf.ParsePods(KubeConfigFile, true) - if err != nil { - fmt.Println("Error retrieving pods: ", err) - } - }() - - expectedNodeCount := NumServers + NumWorkers - - fmt.Printf("\nFetching node status\n") - Eventually(func(g Gomega) { - nodes, err := tf.ParseNodes(KubeConfigFile, false) - - Expect(err).NotTo(HaveOccurred()) - Expect(len(nodes)).To(Equal(expectedNodeCount), - "Number of nodes should match the spec") - - for _, node := range nodes { - g.Expect(node.Status).Should(Equal("Ready"), - "Nodes should all be in Ready state") - } - }, "600s", "5s").Should(Succeed()) - - fmt.Printf("\nFetching pod status\n") - Eventually(func(g Gomega) { - pods, err := tf.ParsePods(KubeConfigFile, false) - g.Expect(err).NotTo(HaveOccurred()) - - for _, pod := range pods { - if strings.Contains(pod.Name, "helm-install") { - g.Expect(pod.Status).Should(Equal("Completed"), pod.Name) - } else { - g.Expect(pod.Status).Should(Equal("Running"), pod.Name) - g.Expect(pod.Restarts).Should(Equal("0"), pod.Name) - } - } - }, "600s", "5s").Should(Succeed()) - }) - - It("Verifies ClusterIP Service", func() { - _, err := tf.DeployWorkload("clusterip.yaml", KubeConfigFile, *arch) - Expect(err).NotTo(HaveOccurred(), "Cluster IP manifest not deployed") - - Eventually(func(g Gomega) { - cmd := "kubectl get pods -o=name -l k8s-app=nginx-app-clusterip" + - " --field-selector=status.phase=Running --kubeconfig=" + KubeConfigFile - res, err := tf.RunCommand(cmd) - - g.Expect(err).NotTo(HaveOccurred()) - g.Expect(res).Should(ContainSubstring("test-clusterip")) - }, "420s", "5s").Should(Succeed()) - - clusterip, _ := tf.FetchClusterIP(KubeConfigFile, "nginx-clusterip-svc") - cmd := "curl -sL --insecure http://" + clusterip + "/name.html" - nodeExternalIP := tf.FetchNodeExternalIP(KubeConfigFile) - - for _, ip := range nodeExternalIP { - Eventually(func(g Gomega) { - res, err := tf.RunCmdOnNode(cmd, ip, AwsUser, AccessKey) - - g.Expect(err).NotTo(HaveOccurred()) - g.Expect(res).Should(ContainSubstring("test-clusterip")) - }, "420s", "10s").Should(Succeed()) - } - }) - - It("Verifies NodePort Service", func() { - _, err := tf.DeployWorkload("nodeport.yaml", KubeConfigFile, *arch) - Expect(err).NotTo(HaveOccurred(), "NodePort manifest not deployed") - - nodeExternalIP := tf.FetchNodeExternalIP(KubeConfigFile) - cmd := "kubectl get service nginx-nodeport-svc --kubeconfig=" + KubeConfigFile + - " --output jsonpath=\"{.spec.ports[0].nodePort}\"" - nodeport, err := tf.RunCommand(cmd) - - Expect(err).NotTo(HaveOccurred()) - - for _, ip := range nodeExternalIP { - Eventually(func(g Gomega) { - cmd := "kubectl get pods -o=name -l k8s-app=nginx-app-nodeport " + - "--field-selector=status.phase=Running --kubeconfig=" + KubeConfigFile - res, err := tf.RunCommand(cmd) - - g.Expect(err).NotTo(HaveOccurred()) - g.Expect(res).Should(ContainSubstring("test-nodeport")) - }, "240s", "5s").Should(Succeed()) - - cmd = "curl -sL --insecure http://" + ip + ":" + nodeport + "/name.html" - Eventually(func(g Gomega) { - res, err := tf.RunCommand(cmd) - - g.Expect(err).NotTo(HaveOccurred()) - g.Expect(res).Should(ContainSubstring("test-nodeport")) - }, "240s", "5s").Should(Succeed()) - } - }) - - It("Verifies LoadBalancer Service", func() { - _, err := tf.DeployWorkload("loadbalancer.yaml", KubeConfigFile, *arch) - Expect(err).NotTo(HaveOccurred(), "Loadbalancer manifest not deployed") - - nodeExternalIP := tf.FetchNodeExternalIP(KubeConfigFile) - cmd := "kubectl get service nginx-loadbalancer-svc --kubeconfig=" + KubeConfigFile + - " --output jsonpath=\"{.spec.ports[0].port}\"" - port, err := tf.RunCommand(cmd) - - Expect(err).NotTo(HaveOccurred()) - - for _, ip := range nodeExternalIP { - Eventually(func(g Gomega) { - cmd := "kubectl get pods -o=name -l k8s-app=nginx-app-loadbalancer" + - " --field-selector=status.phase=Running --kubeconfig=" + KubeConfigFile - res, err := tf.RunCommand(cmd) - - g.Expect(err).NotTo(HaveOccurred()) - g.Expect(res).Should(ContainSubstring("test-loadbalancer")) - }, "240s", "5s").Should(Succeed()) - - Eventually(func(g Gomega) { - cmd = "curl -sL --insecure http://" + ip + ":" + port + "/name.html" - res, err := tf.RunCommand(cmd) - - g.Expect(err).NotTo(HaveOccurred()) - g.Expect(res).Should(ContainSubstring("test-loadbalancer")) - }, "240s", "5s").Should(Succeed()) - } - }) - - It("Verifies Ingress", func() { - _, err := tf.DeployWorkload("ingress.yaml", KubeConfigFile, *arch) - Expect(err).NotTo(HaveOccurred(), "Ingress manifest not deployed") - - Eventually(func(g Gomega) { - cmd := "kubectl get pods -o=name -l k8s-app=nginx-app-ingress " + - "--field-selector=status.phase=Running --kubeconfig=" + KubeConfigFile - res, err := tf.RunCommand(cmd) - - g.Expect(err).NotTo(HaveOccurred()) - g.Expect(res).Should(ContainSubstring("test-ingress")) - }, "240s", "5s").Should(Succeed()) - - ingressIps, err := tf.FetchIngressIP(KubeConfigFile) - Expect(err).NotTo(HaveOccurred(), "Ingress ip is not returned") - - for _, ip := range ingressIps { - cmd := "curl -s --header host:foo1.bar.com" + " http://" + ip + "/name.html" - Eventually(func(g Gomega) { - res, err := tf.RunCommand(cmd) - g.Expect(err).NotTo(HaveOccurred()) - g.Expect(res).Should(ContainSubstring("test-ingress")) - }, "240s", "5s").Should(Succeed()) - } - }) - - It("Verifies Daemonset", func() { - _, err := tf.DeployWorkload("daemonset.yaml", KubeConfigFile, *arch) - Expect(err).NotTo(HaveOccurred(), "Daemonset manifest not deployed") - - nodes, _ := tf.ParseNodes(KubeConfigFile, false) - pods, _ := tf.ParsePods(KubeConfigFile, false) - - Eventually(func(g Gomega) { - count := tf.CountOfStringInSlice("test-daemonset", pods) - g.Expect(len(nodes)).Should(Equal(count), - "Daemonset pod count does not match node count") - }, "420s", "10s").Should(Succeed()) - }) - - It("Verifies Local Path Provisioner storage ", func() { - _, err := tf.DeployWorkload("local-path-provisioner.yaml", KubeConfigFile, *arch) - Expect(err).NotTo(HaveOccurred(), "local-path-provisioner manifest not deployed") - - Eventually(func(g Gomega) { - cmd := "kubectl get pvc local-path-pvc --kubeconfig=" + KubeConfigFile - res, err := tf.RunCommand(cmd) - - g.Expect(err).NotTo(HaveOccurred()) - g.Expect(res).Should(ContainSubstring("local-path-pvc")) - g.Expect(res).Should(ContainSubstring("Bound")) - }, "420s", "2s").Should(Succeed()) - - Eventually(func(g Gomega) { - cmd := "kubectl get pod volume-test --kubeconfig=" + KubeConfigFile - res, err := tf.RunCommand(cmd) - - Expect(err).NotTo(HaveOccurred()) - g.Expect(res).Should(ContainSubstring("volume-test")) - g.Expect(res).Should(ContainSubstring("Running")) - }, "420s", "2s").Should(Succeed()) - - cmd := "kubectl --kubeconfig=" + KubeConfigFile + - " exec volume-test -- sh -c 'echo local-path-test > /data/test'" - _, err = tf.RunCommand(cmd) - Expect(err).NotTo(HaveOccurred()) - - cmd = "kubectl delete pod volume-test --kubeconfig=" + KubeConfigFile - _, err = tf.RunCommand(cmd) - Expect(err).NotTo(HaveOccurred()) - - _, err = tf.DeployWorkload("local-path-provisioner.yaml", - KubeConfigFile, *arch) - Expect(err).NotTo(HaveOccurred(), "local-path-provisioner manifest not deployed") - - Eventually(func(g Gomega) { - cmd := "kubectl get pods -o=name -l app=local-path-provisioner" + - " --field-selector=status.phase=Running -n kube-system --kubeconfig=" + KubeConfigFile - res, err := tf.RunCommand(cmd) - - Expect(err).NotTo(HaveOccurred()) - g.Expect(res).Should(ContainSubstring("pod/local-path-provisioner")) - }, "420s", "2s").Should(Succeed()) - - Eventually(func(g Gomega) { - cmd := "kubectl get pod volume-test --kubeconfig=" + KubeConfigFile - res, err := tf.RunCommand(cmd) - - g.Expect(err).NotTo(HaveOccurred()) - g.Expect(res).Should(ContainSubstring("volume-test")) - g.Expect(res).Should(ContainSubstring("Running")) - }, "420s", "2s").Should(Succeed()) - - Eventually(func(g Gomega) { - cmd := "kubectl exec volume-test --kubeconfig=" + KubeConfigFile + " -- cat /data/test" - res, err := tf.RunCommand(cmd) - - g.Expect(err).NotTo(HaveOccurred()) - g.Expect(res).Should(ContainSubstring("local-path-test")) - }, "180s", "2s").Should(Succeed()) - }) - - It("Verifies dns access", func() { - _, err := tf.DeployWorkload("dnsutils.yaml", KubeConfigFile, *arch) - Expect(err).NotTo(HaveOccurred(), "dnsutils manifest not deployed") - - Eventually(func(g Gomega) { - cmd := "kubectl get pods dnsutils --kubeconfig=" + KubeConfigFile - res, _ := tf.RunCommand(cmd) - - g.Expect(res).Should(ContainSubstring("dnsutils")) - g.Expect(res).Should(ContainSubstring("Running")) - }, "420s", "2s").Should(Succeed()) - - Eventually(func(g Gomega) { - cmd := "kubectl --kubeconfig=" + KubeConfigFile + - " exec -t dnsutils -- nslookup kubernetes.default" - res, _ := tf.RunCommand(cmd) - g.Expect(res).Should(ContainSubstring("kubernetes.default.svc.cluster.local")) - }, "420s", "2s").Should(Succeed()) - }) - }) -}) - -var _ = AfterEach(func() { - if CurrentSpecReport().Failed() { - fmt.Printf("\nFAILED! %s\n", CurrentSpecReport().FullText()) - } else { - fmt.Printf("\nPASSED! %s\n", CurrentSpecReport().FullText()) - } -}) - -var _ = BeforeEach(func() { - failed = failed || CurrentSpecReport().Failed() - if *destroy { - Skip("Cluster is being Deleted") - } -}) - -var _ = AfterSuite(func() { - if *destroy { - status, err := BuildCluster(&testing.T{}, *destroy) - Expect(err).NotTo(HaveOccurred()) - Expect(status).To(Equal("cluster destroyed")) - } -}) diff --git a/tests/terraform/go.mod b/tests/terraform/go.mod deleted file mode 100644 index f23c02ae9d7b..000000000000 --- a/tests/terraform/go.mod +++ /dev/null @@ -1,65 +0,0 @@ -module github.com/k3s-io/k3s/tests/terraform - -go 1.19 - -require ( - github.com/gruntwork-io/terratest v0.41.15 - github.com/onsi/ginkgo/v2 v2.9.0 - github.com/onsi/gomega v1.27.2 - golang.org/x/crypto v0.7.0 -) - -require ( - cloud.google.com/go v0.107.0 // indirect - cloud.google.com/go/compute v1.15.1 // indirect - cloud.google.com/go/compute/metadata v0.2.3 // indirect - cloud.google.com/go/iam v0.8.0 // indirect - cloud.google.com/go/storage v1.27.0 // indirect - github.com/agext/levenshtein v1.2.3 // indirect - github.com/apparentlymart/go-textseg/v13 v13.0.0 // indirect - github.com/aws/aws-sdk-go v1.44.122 // indirect - github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d // indirect - github.com/davecgh/go-spew v1.1.1 // indirect - github.com/go-logr/logr v1.2.3 // indirect - github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0 // indirect - github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect - github.com/golang/protobuf v1.5.2 // indirect - github.com/google/go-cmp v0.5.9 // indirect - github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1 // indirect - github.com/google/uuid v1.3.0 // indirect - github.com/googleapis/enterprise-certificate-proxy v0.2.0 // indirect - github.com/googleapis/gax-go/v2 v2.7.0 // indirect - github.com/hashicorp/errwrap v1.0.0 // indirect - github.com/hashicorp/go-cleanhttp v0.5.2 // indirect - github.com/hashicorp/go-getter v1.7.0 // indirect - github.com/hashicorp/go-multierror v1.1.0 // indirect - github.com/hashicorp/go-safetemp v1.0.0 // indirect - github.com/hashicorp/go-version v1.6.0 // indirect - github.com/hashicorp/hcl/v2 v2.9.1 // indirect - github.com/hashicorp/terraform-json v0.13.0 // indirect - github.com/jinzhu/copier v0.0.0-20190924061706-b57f9002281a // indirect - github.com/jmespath/go-jmespath v0.4.0 // indirect - github.com/klauspost/compress v1.15.11 // indirect - github.com/mattn/go-zglob v0.0.2-0.20190814121620-e3c945676326 // indirect - github.com/mitchellh/go-homedir v1.1.0 // indirect - github.com/mitchellh/go-testing-interface v1.14.1 // indirect - github.com/mitchellh/go-wordwrap v1.0.1 // indirect - github.com/pmezard/go-difflib v1.0.0 // indirect - github.com/stretchr/testify v1.8.1 // indirect - github.com/tmccombs/hcl2json v0.3.3 // indirect - github.com/ulikunitz/xz v0.5.10 // indirect - github.com/zclconf/go-cty v1.9.1 // indirect - go.opencensus.io v0.24.0 // indirect - golang.org/x/net v0.8.0 // indirect - golang.org/x/oauth2 v0.4.0 // indirect - golang.org/x/sys v0.6.0 // indirect - golang.org/x/text v0.8.0 // indirect - golang.org/x/tools v0.6.0 // indirect - golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect - google.golang.org/api v0.103.0 // indirect - google.golang.org/appengine v1.6.7 // indirect - google.golang.org/genproto v0.0.0-20230110181048-76db0878b65f // indirect - google.golang.org/grpc v1.53.0 // indirect - google.golang.org/protobuf v1.28.1 // indirect - gopkg.in/yaml.v3 v3.0.1 // indirect -) diff --git a/tests/terraform/go.sum b/tests/terraform/go.sum deleted file mode 100644 index 01adefa9a2ec..000000000000 --- a/tests/terraform/go.sum +++ /dev/null @@ -1,975 +0,0 @@ -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.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.78.0/go.mod h1:QjdrLG0uq+YwhjoVOLsS1t7TW8fs36kLs4XO5R5ECHg= -cloud.google.com/go v0.79.0/go.mod h1:3bzgcEeQlzbuEAYu4mrWhKqWjmpprinYgKJLgKHnbb8= -cloud.google.com/go v0.81.0/go.mod h1:mk/AM35KwGk/Nm2YSeZbxXdrNK3KZOYHmLkOqC2V6E0= -cloud.google.com/go v0.83.0/go.mod h1:Z7MJUsANfY0pYPdw0lbnivPx4/vhy/e2FEkSkF7vAVY= -cloud.google.com/go v0.84.0/go.mod h1:RazrYuxIK6Kb7YrzzhPoLmCVzl7Sup4NrbKPg8KHSUM= -cloud.google.com/go v0.87.0/go.mod h1:TpDYlFy7vuLzZMMZ+B6iRiELaY7z/gJPaqbMx6mlWcY= -cloud.google.com/go v0.90.0/go.mod h1:kRX0mNRHe0e2rC6oNakvwQqzyDmg57xJ+SZU1eT2aDQ= -cloud.google.com/go v0.93.3/go.mod h1:8utlLll2EF5XMAV15woO4lSbWQlk8rer9aLOfLh7+YI= -cloud.google.com/go v0.94.1/go.mod h1:qAlAugsXlC+JWO+Bke5vCtc9ONxjQT3drlTTnAplMW4= -cloud.google.com/go v0.97.0/go.mod h1:GF7l59pYBVlXQIBLx3a761cZ41F9bBH3JUlihCt2Udc= -cloud.google.com/go v0.99.0/go.mod h1:w0Xx2nLzqWJPuozYQX+hFfCSI8WioryfRDzkoI/Y2ZA= -cloud.google.com/go v0.100.2/go.mod h1:4Xra9TjzAeYHrl5+oeLlzbM2k3mjVhZh4UqTZ//w99A= -cloud.google.com/go v0.102.0/go.mod h1:oWcCzKlqJ5zgHQt9YsaeTY9KzIvjyy0ArmiBUgpQ+nc= -cloud.google.com/go v0.102.1/go.mod h1:XZ77E9qnTEnrgEOvr4xzfdX5TRo7fB4T2F4O6+34hIU= -cloud.google.com/go v0.104.0/go.mod h1:OO6xxXdJyvuJPcEPBLN9BJPD+jep5G1+2U5B5gkRYtA= -cloud.google.com/go v0.107.0 h1:qkj22L7bgkl6vIeZDlOY2po43Mx/TIa2Wsa7VR+PEww= -cloud.google.com/go v0.107.0/go.mod h1:wpc2eNrD7hXUTy8EKS10jkxpZBjASrORK7goS+3YX2I= -cloud.google.com/go/aiplatform v1.22.0/go.mod h1:ig5Nct50bZlzV6NvKaTwmplLLddFx0YReh9WfTO5jKw= -cloud.google.com/go/aiplatform v1.24.0/go.mod h1:67UUvRBKG6GTayHKV8DBv2RtR1t93YRu5B1P3x99mYY= -cloud.google.com/go/analytics v0.11.0/go.mod h1:DjEWCu41bVbYcKyvlws9Er60YE4a//bK6mnhWvQeFNI= -cloud.google.com/go/analytics v0.12.0/go.mod h1:gkfj9h6XRf9+TS4bmuhPEShsh3hH8PAZzm/41OOhQd4= -cloud.google.com/go/area120 v0.5.0/go.mod h1:DE/n4mp+iqVyvxHN41Vf1CR602GiHQjFPusMFW6bGR4= -cloud.google.com/go/area120 v0.6.0/go.mod h1:39yFJqWVgm0UZqWTOdqkLhjoC7uFfgXRC8g/ZegeAh0= -cloud.google.com/go/artifactregistry v1.6.0/go.mod h1:IYt0oBPSAGYj/kprzsBjZ/4LnG/zOcHyFHjWPCi6SAQ= -cloud.google.com/go/artifactregistry v1.7.0/go.mod h1:mqTOFOnGZx8EtSqK/ZWcsm/4U8B77rbcLP6ruDU2Ixk= -cloud.google.com/go/asset v1.5.0/go.mod h1:5mfs8UvcM5wHhqtSv8J1CtxxaQq3AdBxxQi2jGW/K4o= -cloud.google.com/go/asset v1.7.0/go.mod h1:YbENsRK4+xTiL+Ofoj5Ckf+O17kJtgp3Y3nn4uzZz5s= -cloud.google.com/go/asset v1.8.0/go.mod h1:mUNGKhiqIdbr8X7KNayoYvyc4HbbFO9URsjbytpUaW0= -cloud.google.com/go/assuredworkloads v1.5.0/go.mod h1:n8HOZ6pff6re5KYfBXcFvSViQjDwxFkAkmUFffJRbbY= -cloud.google.com/go/assuredworkloads v1.6.0/go.mod h1:yo2YOk37Yc89Rsd5QMVECvjaMKymF9OP+QXWlKXUkXw= -cloud.google.com/go/assuredworkloads v1.7.0/go.mod h1:z/736/oNmtGAyU47reJgGN+KVoYoxeLBoj4XkKYscNI= -cloud.google.com/go/automl v1.5.0/go.mod h1:34EjfoFGMZ5sgJ9EoLsRtdPSNZLcfflJR39VbVNS2M0= -cloud.google.com/go/automl v1.6.0/go.mod h1:ugf8a6Fx+zP0D59WLhqgTDsQI9w07o64uf/Is3Nh5p8= -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/bigquery v1.42.0/go.mod h1:8dRTJxhtG+vwBKzE5OseQn/hiydoQN3EedCaOdYmxRA= -cloud.google.com/go/billing v1.4.0/go.mod h1:g9IdKBEFlItS8bTtlrZdVLWSSdSyFUZKXNS02zKMOZY= -cloud.google.com/go/billing v1.5.0/go.mod h1:mztb1tBc3QekhjSgmpf/CV4LzWXLzCArwpLmP2Gm88s= -cloud.google.com/go/binaryauthorization v1.1.0/go.mod h1:xwnoWu3Y84jbuHa0zd526MJYmtnVXn0syOjaJgy4+dM= -cloud.google.com/go/binaryauthorization v1.2.0/go.mod h1:86WKkJHtRcv5ViNABtYMhhNWRrD1Vpi//uKEy7aYEfI= -cloud.google.com/go/cloudtasks v1.5.0/go.mod h1:fD92REy1x5woxkKEkLdvavGnPJGEn8Uic9nWuLzqCpY= -cloud.google.com/go/cloudtasks v1.6.0/go.mod h1:C6Io+sxuke9/KNRkbQpihnW93SWDU3uXt92nu85HkYI= -cloud.google.com/go/compute v0.1.0/go.mod h1:GAesmwr110a34z04OlxYkATPBEfVhkymfTBXtfbBFow= -cloud.google.com/go/compute v1.3.0/go.mod h1:cCZiE1NHEtai4wiufUhW8I8S1JKkAnhnQJWM7YD99wM= -cloud.google.com/go/compute v1.5.0/go.mod h1:9SMHyhJlzhlkJqrPAc839t2BZFTSk6Jdj6mkzQJeu0M= -cloud.google.com/go/compute v1.6.0/go.mod h1:T29tfhtVbq1wvAPo0E3+7vhgmkOYeXjhFvz/FMzPu0s= -cloud.google.com/go/compute v1.6.1/go.mod h1:g85FgpzFvNULZ+S8AYq87axRKuf2Kh7deLqV/jJ3thU= -cloud.google.com/go/compute v1.7.0/go.mod h1:435lt8av5oL9P3fv1OEzSbSUe+ybHXGMPQHHZWZxy9U= -cloud.google.com/go/compute v1.10.0/go.mod h1:ER5CLbMxl90o2jtNbGSbtfOpQKR0t15FOtRsugnLrlU= -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.3 h1:mg4jlk7mCAj6xXp9UJ4fjI9VUI5rubuGBW5aJ7UnBMY= -cloud.google.com/go/compute/metadata v0.2.3/go.mod h1:VAV5nSsACxMJvgaAuX6Pk2AawlZn8kiOGuCv6gTkwuA= -cloud.google.com/go/containeranalysis v0.5.1/go.mod h1:1D92jd8gRR/c0fGMlymRgxWD3Qw9C1ff6/T7mLgVL8I= -cloud.google.com/go/containeranalysis v0.6.0/go.mod h1:HEJoiEIu+lEXM+k7+qLCci0h33lX3ZqoYFdmPcoO7s4= -cloud.google.com/go/datacatalog v1.3.0/go.mod h1:g9svFY6tuR+j+hrTw3J2dNcmI0dzmSiyOzm8kpLq0a0= -cloud.google.com/go/datacatalog v1.5.0/go.mod h1:M7GPLNQeLfWqeIm3iuiruhPzkt65+Bx8dAKvScX8jvs= -cloud.google.com/go/datacatalog v1.6.0/go.mod h1:+aEyF8JKg+uXcIdAmmaMUmZ3q1b/lKLtXCmXdnc0lbc= -cloud.google.com/go/dataflow v0.6.0/go.mod h1:9QwV89cGoxjjSR9/r7eFDqqjtvbKxAK2BaYU6PVk9UM= -cloud.google.com/go/dataflow v0.7.0/go.mod h1:PX526vb4ijFMesO1o202EaUmouZKBpjHsTlCtB4parQ= -cloud.google.com/go/dataform v0.3.0/go.mod h1:cj8uNliRlHpa6L3yVhDOBrUXH+BPAO1+KFMQQNSThKo= -cloud.google.com/go/dataform v0.4.0/go.mod h1:fwV6Y4Ty2yIFL89huYlEkwUPtS7YZinZbzzj5S9FzCE= -cloud.google.com/go/datalabeling v0.5.0/go.mod h1:TGcJ0G2NzcsXSE/97yWjIZO0bXj0KbVlINXMG9ud42I= -cloud.google.com/go/datalabeling v0.6.0/go.mod h1:WqdISuk/+WIGeMkpw/1q7bK/tFEZxsrFJOJdY2bXvTQ= -cloud.google.com/go/dataqna v0.5.0/go.mod h1:90Hyk596ft3zUQ8NkFfvICSIfHFh1Bc7C4cK3vbhkeo= -cloud.google.com/go/dataqna v0.6.0/go.mod h1:1lqNpM7rqNLVgWBJyk5NF6Uen2PHym0jtVJonplVsDA= -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/datastream v1.2.0/go.mod h1:i/uTP8/fZwgATHS/XFu0TcNUhuA0twZxxQ3EyCUQMwo= -cloud.google.com/go/datastream v1.3.0/go.mod h1:cqlOX8xlyYF/uxhiKn6Hbv6WjwPPuI9W2M9SAXwaLLQ= -cloud.google.com/go/dialogflow v1.15.0/go.mod h1:HbHDWs33WOGJgn6rfzBW1Kv807BE3O1+xGbn59zZWI4= -cloud.google.com/go/dialogflow v1.16.1/go.mod h1:po6LlzGfK+smoSmTBnbkIZY2w8ffjz/RcGSS+sh1el0= -cloud.google.com/go/dialogflow v1.17.0/go.mod h1:YNP09C/kXA1aZdBgC/VtXX74G/TKn7XVCcVumTflA+8= -cloud.google.com/go/documentai v1.7.0/go.mod h1:lJvftZB5NRiFSX4moiye1SMxHx0Bc3x1+p9e/RfXYiU= -cloud.google.com/go/documentai v1.8.0/go.mod h1:xGHNEB7CtsnySCNrCFdCyyMz44RhFEEX2Q7UD0c5IhU= -cloud.google.com/go/domains v0.6.0/go.mod h1:T9Rz3GasrpYk6mEGHh4rymIhjlnIuB4ofT1wTxDeT4Y= -cloud.google.com/go/domains v0.7.0/go.mod h1:PtZeqS1xjnXuRPKE/88Iru/LdfoRyEHYA9nFQf4UKpg= -cloud.google.com/go/edgecontainer v0.1.0/go.mod h1:WgkZ9tp10bFxqO8BLPqv2LlfmQF1X8lZqwW4r1BTajk= -cloud.google.com/go/edgecontainer v0.2.0/go.mod h1:RTmLijy+lGpQ7BXuTDa4C4ssxyXT34NIuHIgKuP4s5w= -cloud.google.com/go/functions v1.6.0/go.mod h1:3H1UA3qiIPRWD7PeZKLvHZ9SaQhR26XIJcC0A5GbvAk= -cloud.google.com/go/functions v1.7.0/go.mod h1:+d+QBcWM+RsrgZfV9xo6KfA1GlzJfxcfZcRPEhDDfzg= -cloud.google.com/go/gaming v1.5.0/go.mod h1:ol7rGcxP/qHTRQE/RO4bxkXq+Fix0j6D4LFPzYTIrDM= -cloud.google.com/go/gaming v1.6.0/go.mod h1:YMU1GEvA39Qt3zWGyAVA9bpYz/yAhTvaQ1t2sK4KPUA= -cloud.google.com/go/gkeconnect v0.5.0/go.mod h1:c5lsNAg5EwAy7fkqX/+goqFsU1Da/jQFqArp+wGNr/o= -cloud.google.com/go/gkeconnect v0.6.0/go.mod h1:Mln67KyU/sHJEBY8kFZ0xTeyPtzbq9StAVvEULYK16A= -cloud.google.com/go/gkehub v0.9.0/go.mod h1:WYHN6WG8w9bXU0hqNxt8rm5uxnk8IH+lPY9J2TV7BK0= -cloud.google.com/go/gkehub v0.10.0/go.mod h1:UIPwxI0DsrpsVoWpLB0stwKCP+WFVG9+y977wO+hBH0= -cloud.google.com/go/grafeas v0.2.0/go.mod h1:KhxgtF2hb0P191HlY5besjYm6MqTSTj3LSI+M+ByZHc= -cloud.google.com/go/iam v0.3.0/go.mod h1:XzJPvDayI+9zsASAFO68Hk07u3z+f+JrT2xXNdp4bnY= -cloud.google.com/go/iam v0.5.0/go.mod h1:wPU9Vt0P4UmCux7mqtRu6jcpPAb74cP1fh50J3QpkUc= -cloud.google.com/go/iam v0.8.0 h1:E2osAkZzxI/+8pZcxVLcDtAQx/u+hZXVryUaYQ5O0Kk= -cloud.google.com/go/iam v0.8.0/go.mod h1:lga0/y3iH6CX7sYqypWJ33hf7kkfXJag67naqGESjkE= -cloud.google.com/go/language v1.4.0/go.mod h1:F9dRpNFQmJbkaop6g0JhSBXCNlO90e1KWx5iDdxbWic= -cloud.google.com/go/language v1.6.0/go.mod h1:6dJ8t3B+lUYfStgls25GusK04NLh3eDLQnWM3mdEbhI= -cloud.google.com/go/lifesciences v0.5.0/go.mod h1:3oIKy8ycWGPUyZDR/8RNnTOYevhaMLqh5vLUXs9zvT8= -cloud.google.com/go/lifesciences v0.6.0/go.mod h1:ddj6tSX/7BOnhxCSd3ZcETvtNr8NZ6t/iPhY2Tyfu08= -cloud.google.com/go/longrunning v0.3.0 h1:NjljC+FYPV3uh5/OwWT6pVU+doBqMg2x/rZlE+CamDs= -cloud.google.com/go/mediatranslation v0.5.0/go.mod h1:jGPUhGTybqsPQn91pNXw0xVHfuJ3leR1wj37oU3y1f4= -cloud.google.com/go/mediatranslation v0.6.0/go.mod h1:hHdBCTYNigsBxshbznuIMFNe5QXEowAuNmmC7h8pu5w= -cloud.google.com/go/memcache v1.4.0/go.mod h1:rTOfiGZtJX1AaFUrOgsMHX5kAzaTQ8azHiuDoTPzNsE= -cloud.google.com/go/memcache v1.5.0/go.mod h1:dk3fCK7dVo0cUU2c36jKb4VqKPS22BTkf81Xq617aWM= -cloud.google.com/go/metastore v1.5.0/go.mod h1:2ZNrDcQwghfdtCwJ33nM0+GrBGlVuh8rakL3vdPY3XY= -cloud.google.com/go/metastore v1.6.0/go.mod h1:6cyQTls8CWXzk45G55x57DVQ9gWg7RiH65+YgPsNh9s= -cloud.google.com/go/networkconnectivity v1.4.0/go.mod h1:nOl7YL8odKyAOtzNX73/M5/mGZgqqMeryi6UPZTk/rA= -cloud.google.com/go/networkconnectivity v1.5.0/go.mod h1:3GzqJx7uhtlM3kln0+x5wyFvuVH1pIBJjhCpjzSt75o= -cloud.google.com/go/networksecurity v0.5.0/go.mod h1:xS6fOCoqpVC5zx15Z/MqkfDwH4+m/61A3ODiDV1xmiQ= -cloud.google.com/go/networksecurity v0.6.0/go.mod h1:Q5fjhTr9WMI5mbpRYEbiexTzROf7ZbDzvzCrNl14nyU= -cloud.google.com/go/notebooks v1.2.0/go.mod h1:9+wtppMfVPUeJ8fIWPOq1UnATHISkGXGqTkxeieQ6UY= -cloud.google.com/go/notebooks v1.3.0/go.mod h1:bFR5lj07DtCPC7YAAJ//vHskFBxA5JzYlH68kXVdk34= -cloud.google.com/go/osconfig v1.7.0/go.mod h1:oVHeCeZELfJP7XLxcBGTMBvRO+1nQ5tFG9VQTmYS2Fs= -cloud.google.com/go/osconfig v1.8.0/go.mod h1:EQqZLu5w5XA7eKizepumcvWx+m8mJUhEwiPqWiZeEdg= -cloud.google.com/go/oslogin v1.4.0/go.mod h1:YdgMXWRaElXz/lDk1Na6Fh5orF7gvmJ0FGLIs9LId4E= -cloud.google.com/go/oslogin v1.5.0/go.mod h1:D260Qj11W2qx/HVF29zBg+0fd6YCSjSqLUkY/qEenQU= -cloud.google.com/go/phishingprotection v0.5.0/go.mod h1:Y3HZknsK9bc9dMi+oE8Bim0lczMU6hrX0UpADuMefr0= -cloud.google.com/go/phishingprotection v0.6.0/go.mod h1:9Y3LBLgy0kDTcYET8ZH3bq/7qni15yVUoAxiFxnlSUA= -cloud.google.com/go/privatecatalog v0.5.0/go.mod h1:XgosMUvvPyxDjAVNDYxJ7wBW8//hLDDYmnsNcMGq1K0= -cloud.google.com/go/privatecatalog v0.6.0/go.mod h1:i/fbkZR0hLN29eEWiiwue8Pb+GforiEIBnV9yrRUOKI= -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/recaptchaenterprise v1.3.1/go.mod h1:OdD+q+y4XGeAlxRaMn1Y7/GveP6zmq76byL6tjPE7d4= -cloud.google.com/go/recaptchaenterprise/v2 v2.1.0/go.mod h1:w9yVqajwroDNTfGuhmOjPDN//rZGySaf6PtFVcSCa7o= -cloud.google.com/go/recaptchaenterprise/v2 v2.2.0/go.mod h1:/Zu5jisWGeERrd5HnlS3EUGb/D335f9k51B/FVil0jk= -cloud.google.com/go/recaptchaenterprise/v2 v2.3.0/go.mod h1:O9LwGCjrhGHBQET5CA7dd5NwwNQUErSgEDit1DLNTdo= -cloud.google.com/go/recommendationengine v0.5.0/go.mod h1:E5756pJcVFeVgaQv3WNpImkFP8a+RptV6dDLGPILjvg= -cloud.google.com/go/recommendationengine v0.6.0/go.mod h1:08mq2umu9oIqc7tDy8sx+MNJdLG0fUi3vaSVbztHgJ4= -cloud.google.com/go/recommender v1.5.0/go.mod h1:jdoeiBIVrJe9gQjwd759ecLJbxCDED4A6p+mqoqDvTg= -cloud.google.com/go/recommender v1.6.0/go.mod h1:+yETpm25mcoiECKh9DEScGzIRyDKpZ0cEhWGo+8bo+c= -cloud.google.com/go/redis v1.7.0/go.mod h1:V3x5Jq1jzUcg+UNsRvdmsfuFnit1cfe3Z/PGyq/lm4Y= -cloud.google.com/go/redis v1.8.0/go.mod h1:Fm2szCDavWzBk2cDKxrkmWBqoCiL1+Ctwq7EyqBCA/A= -cloud.google.com/go/retail v1.8.0/go.mod h1:QblKS8waDmNUhghY2TI9O3JLlFk8jybHeV4BF19FrE4= -cloud.google.com/go/retail v1.9.0/go.mod h1:g6jb6mKuCS1QKnH/dpu7isX253absFl6iE92nHwlBUY= -cloud.google.com/go/scheduler v1.4.0/go.mod h1:drcJBmxF3aqZJRhmkHQ9b3uSSpQoltBPGPxGAWROx6s= -cloud.google.com/go/scheduler v1.5.0/go.mod h1:ri073ym49NW3AfT6DZi21vLZrG07GXr5p3H1KxN5QlI= -cloud.google.com/go/secretmanager v1.6.0/go.mod h1:awVa/OXF6IiyaU1wQ34inzQNc4ISIDIrId8qE5QGgKA= -cloud.google.com/go/security v1.5.0/go.mod h1:lgxGdyOKKjHL4YG3/YwIL2zLqMFCKs0UbQwgyZmfJl4= -cloud.google.com/go/security v1.7.0/go.mod h1:mZklORHl6Bg7CNnnjLH//0UlAlaXqiG7Lb9PsPXLfD0= -cloud.google.com/go/security v1.8.0/go.mod h1:hAQOwgmaHhztFhiQ41CjDODdWP0+AE1B3sX4OFlq+GU= -cloud.google.com/go/securitycenter v1.13.0/go.mod h1:cv5qNAqjY84FCN6Y9z28WlkKXyWsgLO832YiWwkCWcU= -cloud.google.com/go/securitycenter v1.14.0/go.mod h1:gZLAhtyKv85n52XYWt6RmeBdydyxfPeTrpToDPw4Auc= -cloud.google.com/go/servicedirectory v1.4.0/go.mod h1:gH1MUaZCgtP7qQiI+F+A+OpeKF/HQWgtAddhTbhL2bs= -cloud.google.com/go/servicedirectory v1.5.0/go.mod h1:QMKFL0NUySbpZJ1UZs3oFAmdvVxhhxB6eJ/Vlp73dfg= -cloud.google.com/go/speech v1.6.0/go.mod h1:79tcr4FHCimOp56lwC01xnt/WPJZc4v3gzyT7FoBkCM= -cloud.google.com/go/speech v1.7.0/go.mod h1:KptqL+BAQIhMsj1kOP2la5DSEEerPDuOP/2mmkhHhZQ= -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.22.1/go.mod h1:S8N1cAStu7BOeFfE8KAQzmyyLkK8p/vmRq6kuBTW58Y= -cloud.google.com/go/storage v1.23.0/go.mod h1:vOEEDNFnciUMhBeT6hsJIn3ieU5cFRmzeLgDvXzfIXc= -cloud.google.com/go/storage v1.27.0 h1:YOO045NZI9RKfCj1c5A/ZtuuENUc8OAW+gHdGnDgyMQ= -cloud.google.com/go/storage v1.27.0/go.mod h1:x9DOL8TK/ygDUMieqwfhdpQryTeEkhGKMi80i/iqR2s= -cloud.google.com/go/talent v1.1.0/go.mod h1:Vl4pt9jiHKvOgF9KoZo6Kob9oV4lwd/ZD5Cto54zDRw= -cloud.google.com/go/talent v1.2.0/go.mod h1:MoNF9bhFQbiJ6eFD3uSsg0uBALw4n4gaCaEjBw9zo8g= -cloud.google.com/go/videointelligence v1.6.0/go.mod h1:w0DIDlVRKtwPCn/C4iwZIJdvC69yInhW0cfi+p546uU= -cloud.google.com/go/videointelligence v1.7.0/go.mod h1:k8pI/1wAhjznARtVT9U1llUaFNPh7muw8QyOUpavru4= -cloud.google.com/go/vision v1.2.0/go.mod h1:SmNwgObm5DpFBme2xpyOyasvBc1aPdjvMk2bBk0tKD0= -cloud.google.com/go/vision/v2 v2.2.0/go.mod h1:uCdV4PpN1S0jyCyq8sIM42v2Y6zOLkZs+4R9LrGYwFo= -cloud.google.com/go/vision/v2 v2.3.0/go.mod h1:UO61abBx9QRMFkNBbf1D8B1LXdS2cGiiCRx0vSpZoUo= -cloud.google.com/go/webrisk v1.4.0/go.mod h1:Hn8X6Zr+ziE2aNd8SliSDWpEnSS1u4R9+xXZmFiHmGE= -cloud.google.com/go/webrisk v1.5.0/go.mod h1:iPG6fr52Tv7sGk0H6qUFzmL3HHZev1htXuWDEEsqMTg= -cloud.google.com/go/workflows v1.6.0/go.mod h1:6t9F5h/unJz41YqfBmqSASJSXccBLtD1Vwf+KmJENM0= -cloud.google.com/go/workflows v1.7.0/go.mod h1:JhSrZuVZWuiDfKEFxU0/F1PQjmpnpcoISEXH2bcHC3M= -dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= -github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= -github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= -github.com/agext/levenshtein v1.2.1/go.mod h1:JEDfjyjHDjOF/1e4FlBE/PkbqA9OfWu2ki2W0IB5558= -github.com/agext/levenshtein v1.2.3 h1:YB2fHEn0UJagG8T1rrWknE3ZQzWM06O8AMAatNn7lmo= -github.com/agext/levenshtein v1.2.3/go.mod h1:JEDfjyjHDjOF/1e4FlBE/PkbqA9OfWu2ki2W0IB5558= -github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= -github.com/apparentlymart/go-dump v0.0.0-20180507223929-23540a00eaa3/go.mod h1:oL81AME2rN47vu18xqj1S1jPIPuN7afo62yKTNn3XMM= -github.com/apparentlymart/go-textseg v1.0.0/go.mod h1:z96Txxhf3xSFMPmb5X/1W05FF/Nj9VFpLOpjS5yuumk= -github.com/apparentlymart/go-textseg/v13 v13.0.0 h1:Y+KvPE1NYz0xl601PVImeQfFyEy6iT90AvPUL1NNfNw= -github.com/apparentlymart/go-textseg/v13 v13.0.0/go.mod h1:ZK2fH7c4NqDTLtiYLvIkEghdlcqw7yxLeM89kiTRPUo= -github.com/aws/aws-sdk-go v1.44.122 h1:p6mw01WBaNpbdP2xrisz5tIkcNwzj/HysobNoaAHjgo= -github.com/aws/aws-sdk-go v1.44.122/go.mod h1:y4AeaBuwd2Lk+GepC1E9v0qOiTws0MIWAX4oIKwKHZo= -github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d h1:xDfNPAt8lFiC1UJrqV3uuy861HCTo708pDMbjHHdCas= -github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d/go.mod h1:6QX/PXZ00z/TKoufEY6K/a0k6AhaJrQKdFe6OfVXsa4= -github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= -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/cheggaaa/pb v1.0.27/go.mod h1:pQciLPpbU0oxA0h+VJYYLxO+XeDQb5pZijXscXHm81s= -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/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/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-20211001041855-01bcc9b48dfe/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= -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/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.20210217033140-668b12f5399d/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.10.2-0.20220325020618-49ff273808a1/go.mod h1:KJwIaB5Mv44NWtYuAOFCVOjcI94vtpEz2JU/D2v6IjE= -github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= -github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= -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-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-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/go-test/deep v1.0.3/go.mod h1:wGDj63lr65AM2AQyKZd/NYHGb0R+1RLqB8NKt3aSFNA= -github.com/go-test/deep v1.0.7 h1:/VSMRlnY/JSyqxQUzQLKVMAskpY/NZKFA5j2P+0pP2M= -github.com/go-test/deep v1.0.7/go.mod h1:QV8Hv/iy04NyLBxAdO9njL0iVPN1S4d/A3NVv1V36o8= -github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -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.5.0/go.mod h1:CWnOUgYIOo4TcNZ0wHX3YZCqsaM1I1Jvs6v3mP3KVu8= -github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs= -github.com/golang/protobuf v1.1.0/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.1/go.mod h1:DopwsBzvsk0Fs44TXzsVbJyPhcCPeIwnvohx4u74HPM= -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/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -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/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.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE= -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/martian v2.1.0+incompatible h1:/CP5g8u/VJHijgedC/Legn3BAbAaWPgecwXBIDzw5no= -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/martian/v3 v3.2.1 h1:d8MncMlErDFTwQGBK1xhv026j9kqhvw1Qv9IbWT1VLQ= -github.com/google/martian/v3 v3.2.1/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk= -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-20210122040257-d980be63207e/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210226084205-cbba55b83ad5/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210601050228-01bbb1931b22/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210609004039-a478d1d731e9/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1 h1:K6RDEckDVWvDI9JAJYCmNdQXq6neHJOYx3V6jnqNEec= -github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= -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.0.0-20220520183353-fd19c99a87aa/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8= -github.com/googleapis/enterprise-certificate-proxy v0.1.0/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8= -github.com/googleapis/enterprise-certificate-proxy v0.2.0 h1:y8Yozv7SZtlU//QXbezB6QkpuE6jMD2/gfzk4AftXjs= -github.com/googleapis/enterprise-certificate-proxy v0.2.0/go.mod h1:8C0jb7/mgJe/9KK8Lm7X9ctZC2t60YyIpYEI16jx0Qg= -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.1.0/go.mod h1:Q3nei7sK6ybPYH7twZdmQpAd1MKb7pfu6SK+H1/DsU0= -github.com/googleapis/gax-go/v2 v2.1.1/go.mod h1:hddJymUZASv3XPyGkUpKj8pPO47Rmb0eJc8R6ouapiM= -github.com/googleapis/gax-go/v2 v2.2.0/go.mod h1:as02EH8zWkzwUoLbBaFeQ+arQaj/OthfcblKl4IGNaM= -github.com/googleapis/gax-go/v2 v2.3.0/go.mod h1:b8LNqSzNabLiUpXKkY7HAR5jr6bIT99EXz9pXxye9YM= -github.com/googleapis/gax-go/v2 v2.4.0/go.mod h1:XOTVJ59hdnfJLIP/dh8n5CGryZR2LxK9wbMD5+iXC6c= -github.com/googleapis/gax-go/v2 v2.5.1/go.mod h1:h6B0KMMFNtI2ddbGJn3T3ZbwkeT6yqEF02fYlzkUCyo= -github.com/googleapis/gax-go/v2 v2.6.0/go.mod h1:1mjbznJAPHFpesgE5ucqfYEscaz5kMdcIDwU/6+DDoY= -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/go-type-adapters v1.0.0/go.mod h1:zHW75FOG2aur7gAO2B+MLby+cLsWGBF62rFAi7WjWO4= -github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= -github.com/gruntwork-io/terratest v0.41.15 h1:od3neRQRBuf+Zwz5SSByrf3F90iyqFanV9nFF/86uuM= -github.com/gruntwork-io/terratest v0.41.15/go.mod h1:a9QNOPa3/nbsLy1ufNGT33X9sMRknun7qsf4bIVEbPo= -github.com/hashicorp/errwrap v1.0.0 h1:hLrqtEDnRye3+sgx6z4qVLNuviH3MR5aQ0ykNJa/UYA= -github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= -github.com/hashicorp/go-cleanhttp v0.5.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9neXJWAZQ= -github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48= -github.com/hashicorp/go-getter v1.7.0 h1:bzrYP+qu/gMrL1au7/aDvkoOVGUJpeKBgbqRHACAFDY= -github.com/hashicorp/go-getter v1.7.0/go.mod h1:W7TalhMmbPmsSMdNjD0ZskARur/9GJ17cfHTRtXV744= -github.com/hashicorp/go-multierror v1.1.0 h1:B9UzwGQJehnUY1yNrnwREHc3fGbC2xefo8g4TbElacI= -github.com/hashicorp/go-multierror v1.1.0/go.mod h1:spPvp8C1qA32ftKqdAHm4hHTbPw+vmowP0z+KUhOZdA= -github.com/hashicorp/go-safetemp v1.0.0 h1:2HR189eFNrjHQyENnQMMpCiBAsRxzbTMIgBhEyExpmo= -github.com/hashicorp/go-safetemp v1.0.0/go.mod h1:oaerMy3BhqiTbVye6QuFhFtIceqFoDHxNAB65b+Rj1I= -github.com/hashicorp/go-version v1.3.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= -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/hcl/v2 v2.9.1 h1:eOy4gREY0/ZQHNItlfuEZqtcQbXIxzojlP301hDpnac= -github.com/hashicorp/hcl/v2 v2.9.1/go.mod h1:FwWsfWEjyV/CMj8s/gqAuiviY72rJ1/oayI9WftqcKg= -github.com/hashicorp/terraform-json v0.13.0 h1:Li9L+lKD1FO5RVFRM1mMMIBDoUHslOniyEi5CM+FWGY= -github.com/hashicorp/terraform-json v0.13.0/go.mod h1:y5OdLBCT+rxbwnpxZs9kGL7R9ExU76+cpdY8zHwoazk= -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/jinzhu/copier v0.0.0-20190924061706-b57f9002281a h1:zPPuIq2jAWWPTrGt70eK/BSch+gFAGrNzecsoENgu2o= -github.com/jinzhu/copier v0.0.0-20190924061706-b57f9002281a/go.mod h1:yL958EeXv8Ylng6IfnvG4oflryUi3vgA3xPs9hmII1s= -github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg= -github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= -github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGwWFoC7ycTf1rcQZHOlsJ6N8= -github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= -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/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/klauspost/compress v1.15.11 h1:Lcadnb3RKGin4FYM/orgq0qde+nc15E5Cbqg4B9Sx9c= -github.com/klauspost/compress v1.15.11/go.mod h1:QPwzmACJjUTFsnSHH934V6woptycfrDDJnH7hvFVbGM= -github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= -github.com/kr/pretty v0.2.1 h1:Fmg33tUaq4/8ym9TJN1x7sLJnHVwhP33CNkpYV/7rwI= -github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= -github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -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 v0.0.0-20170820004349-d65d576e9348/go.mod h1:B69LEHPfb2qLo0BaaOLcbitczOKLWTsrBG9LczfCD4k= -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/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= -github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= -github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= -github.com/mattn/go-zglob v0.0.2-0.20190814121620-e3c945676326 h1:ofNAzWCcyTALn2Zv40+8XitdzCgXY6e9qvXwN9W0YXg= -github.com/mattn/go-zglob v0.0.2-0.20190814121620-e3c945676326/go.mod h1:9fxibJccNxU2cnpIKLRRFA7zX7qhkJIQWBb449FYHOo= -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-testing-interface v1.14.1 h1:jrgshOhYAUVNMAJiKbEu7EqAwgJJ2JqpQmpLJOu07cU= -github.com/mitchellh/go-testing-interface v1.14.1/go.mod h1:gfgS7OtZj6MA4U1UrDRp04twqAjfvlZyCfX3sDjEym8= -github.com/mitchellh/go-wordwrap v0.0.0-20150314170334-ad45545899c7/go.mod h1:ZXFpozHsX6DPmq2I0TCekCxypsnAUbP2oI0UX1GXzOo= -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/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= -github.com/onsi/ginkgo/v2 v2.9.0 h1:Tugw2BKlNHTMfG+CheOITkYvk4LAh6MFOvikhGVnhE8= -github.com/onsi/ginkgo/v2 v2.9.0/go.mod h1:4xkjoL/tZv4SMWeww56BU5kAt19mVB47gTWxmrTcxyk= -github.com/onsi/gomega v1.27.2 h1:SKU0CXeKE/WVgIV1T61kSa3+IRE8Ekrv9rdXDwwTqnY= -github.com/onsi/gomega v1.27.2/go.mod h1:5mR3phAHpkAVIDkHEUBY6HGVsU+cpcEscrGPB4oPlZI= -github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -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/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -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/sebdah/goldie v1.0.0/go.mod h1:jXP4hmWywNEwZzhMuv2ccnqTSFpuq8iyQhtQdkkZBH4= -github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= -github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= -github.com/spf13/pflag v1.0.2/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= -github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= -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/tmccombs/hcl2json v0.3.3 h1:+DLNYqpWE0CsOQiEZu+OZm5ZBImake3wtITYxQ8uLFQ= -github.com/tmccombs/hcl2json v0.3.3/go.mod h1:Y2chtz2x9bAeRTvSibVRVgbLJhLJXKlUeIvjeVdnm4w= -github.com/ulikunitz/xz v0.5.10 h1:t92gobL9l3HE202wg3rlk19F6X+JOxl9BBrCCMYEYd8= -github.com/ulikunitz/xz v0.5.10/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= -github.com/vmihailenco/msgpack v3.3.3+incompatible/go.mod h1:fy3FlTQTDXWkZ7Bh6AcGMlsjHatGryHQYUTf1ShIgkk= -github.com/vmihailenco/msgpack/v4 v4.3.12/go.mod h1:gborTTJjAo/GWTqqRjrLCn9pgNN+NXzzngzBKDPIqw4= -github.com/vmihailenco/tagparser v0.1.1/go.mod h1:OeAg3pn3UbLjkWt+rN9oFYB6u/cQgqMEUPoW2WPyhdI= -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= -github.com/zclconf/go-cty v1.2.0/go.mod h1:hOPWgoHbaTUnI5k4D2ld+GRpFJSCe6bCM7m1q/N4PQ8= -github.com/zclconf/go-cty v1.8.0/go.mod h1:vVKLxnk3puL4qRAv72AO+W99LUD4da90g3uUAzyuvAk= -github.com/zclconf/go-cty v1.8.1/go.mod h1:vVKLxnk3puL4qRAv72AO+W99LUD4da90g3uUAzyuvAk= -github.com/zclconf/go-cty v1.9.1 h1:viqrgQwFl5UpSxc046qblj78wZXVDFnSOufaOTER+cc= -github.com/zclconf/go-cty v1.9.1/go.mod h1:vVKLxnk3puL4qRAv72AO+W99LUD4da90g3uUAzyuvAk= -github.com/zclconf/go-cty-debug v0.0.0-20191215020915-b22d67c1ba0b/go.mod h1:ZRKQfBXbGkpdV6QMzT3rU1kSTAnfu1dO8dPKjYprgj8= -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= -golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20190426145343-a29dc8fdc734/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -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-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.7.0 h1:AvwMYaRytfdeVt3u6mLaxYtErKYjxA2OXjJ1HHq6t3A= -golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU= -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/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/lint v0.0.0-20210508222113-6edffad5e616/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/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180811021610-c39426892332/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-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-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-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= -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-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-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-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-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-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc= -golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= -golang.org/x/net v0.0.0-20210503060351-7fd8e65b6420/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-20220325170049-de3da57026de/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.0.0-20220412020605-290c469a71a5/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.0.0-20220425223048-2871e0cb64e4/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.0.0-20220607020251-c690dde0001d/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/net v0.0.0-20220617184016-355a448f1bc9/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/net v0.0.0-20220624214902-1bab6f366d9e/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/net v0.0.0-20220909164309-bea034e7d591/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= -golang.org/x/net v0.0.0-20221014081412-f15817d10f9b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= -golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= -golang.org/x/net v0.8.0 h1:Zrh2ngAOFYneWTAIAPethzeaQLuHwhuBkuV6ZiRnUaQ= -golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc= -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-20210220000619-9bb904979d93/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210313182246-cd4f82c27b84/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-20210628180205-a41e5a781914/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210805134026-6f1e6394065a/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f/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.0.0-20220309155454-6242fa91716a/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= -golang.org/x/oauth2 v0.0.0-20220411215720-9780585627b5/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= -golang.org/x/oauth2 v0.0.0-20220608161450-d0670ef3b1eb/go.mod h1:jaDAt6Dkxork7LmZnYtzbRWj0W47D86a3TGe0YHBvmE= -golang.org/x/oauth2 v0.0.0-20220622183110-fd043fe589d2/go.mod h1:jaDAt6Dkxork7LmZnYtzbRWj0W47D86a3TGe0YHBvmE= -golang.org/x/oauth2 v0.0.0-20220822191816-0ebed06d0094/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= -golang.org/x/oauth2 v0.0.0-20220909003341-f21342109be1/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= -golang.org/x/oauth2 v0.0.0-20221014153046-6fdb5e3db783/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= -golang.org/x/oauth2 v0.1.0/go.mod h1:G9FE4dLTsbXUu90h/Pf85g4w1D+SSAgR+q46nJZ8M4A= -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.0.0-20220929204114-8fcdb60fdcc0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/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-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190502175342-a43fa875dd82/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-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-20191001151750-bb3f8db39f24/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-20200113162924-86b910548bc1/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-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-20200523222454-059865788121/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-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-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210305230114-8fe3ee5dd75b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/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-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210514084401-e8d321eab015/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210603125802-9665404d3644/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-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210908233432-aa78b53d3365/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211124211545-fe61309f8881/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211210111614-af8b64212486/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-20220128215802-99c3d69c2c27/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220209214540-3681064d5158/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220227234510-4e6760a101f9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220328115105-d36c6a25d886/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220502124256-b6088ccd6cba/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-20220610221304-9f5ed59c137d/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220615213510-4f61da869c0c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220624220833-87e55d714810/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-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.6.0 h1:MVltZSvRTcU2ljQOhs94SXPftV6DCNnZViHeQps87pQ= -golang.org/x/sys v0.6.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.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.6.0 h1:clScbb1cHjoCkyRbWwBEUZ5H/tIFu5TAXIqaZD0Gcjw= -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.8.0 h1:57P1ETyNKtuIjB4SRd15iJxuhj8Gc416Y78H3qgMh68= -golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= -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/tools v0.0.0-20180917221912-90fa682c2a6e/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-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-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-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-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-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-20210105154028-b0ab187a4818/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.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= -golang.org/x/tools v0.6.0 h1:BOw41kyTf3PuCW1pVQf8+Cyg8pMlkYB1oo9iJ6D/lKM= -golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= -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= -golang.org/x/xerrors v0.0.0-20220411194840-2f41105eb62f/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20220517211312-f3a8303e98df/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= -golang.org/x/xerrors v0.0.0-20220609144429-65e65417b02f/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= -golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 h1:H2TDz8ibqkAF6YGhCdN3jS9O0/s90v0rJh3X/OLHEUk= -golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= -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.41.0/go.mod h1:RkxM5lITDfTzmyKFPt+wGrCJbVfniCr2ool8kTBzRTU= -google.golang.org/api v0.43.0/go.mod h1:nQsDGjRXMo4lvh5hP0TKqF244gqhGcr/YSIykhUk/94= -google.golang.org/api v0.47.0/go.mod h1:Wbvgpq1HddcWVtzsVLyfLp8lDg6AA241LmgIL59tHXo= -google.golang.org/api v0.48.0/go.mod h1:71Pr1vy+TAZRPkPs/xlCf5SsU8WjuAWv1Pfjbtukyy4= -google.golang.org/api v0.50.0/go.mod h1:4bNT5pAuq5ji4SRZm+5QIkjny9JAyVD/3gaSihNefaw= -google.golang.org/api v0.51.0/go.mod h1:t4HdrdoNgyN5cbEfm7Lum0lcLDLiise1F8qDKX00sOU= -google.golang.org/api v0.54.0/go.mod h1:7C4bFFOvVDGXjfDTAsgGwDgAxRDeQ4X8NvUedIt6z3k= -google.golang.org/api v0.55.0/go.mod h1:38yMfeP1kfjsl8isn0tliTjIb1rJXcQi4UXlbqivdVE= -google.golang.org/api v0.56.0/go.mod h1:38yMfeP1kfjsl8isn0tliTjIb1rJXcQi4UXlbqivdVE= -google.golang.org/api v0.57.0/go.mod h1:dVPlbZyBo2/OjBpmvNdpn2GRm6rPy75jyU7bmhdrMgI= -google.golang.org/api v0.61.0/go.mod h1:xQRti5UdCmoCEqFxcz93fTl338AVqDgyaDRuOZ3hg9I= -google.golang.org/api v0.63.0/go.mod h1:gs4ij2ffTRXwuzzgJl/56BdwJaA194ijkfn++9tDuPo= -google.golang.org/api v0.67.0/go.mod h1:ShHKP8E60yPsKNw/w8w+VYaj9H6buA5UqDp8dhbQZ6g= -google.golang.org/api v0.70.0/go.mod h1:Bs4ZM2HGifEvXwd50TtW70ovgJffJYw2oRCOFU/SkfA= -google.golang.org/api v0.71.0/go.mod h1:4PyU6e6JogV1f9eA4voyrTY2batOLdgZ5qZ5HOCc4j8= -google.golang.org/api v0.74.0/go.mod h1:ZpfMZOVRMywNyvJFeqL9HRWBgAuRfSjJFpe9QtRRyDs= -google.golang.org/api v0.75.0/go.mod h1:pU9QmyHLnzlpar1Mjt4IbapUCy8J+6HD6GeELN69ljA= -google.golang.org/api v0.77.0/go.mod h1:pU9QmyHLnzlpar1Mjt4IbapUCy8J+6HD6GeELN69ljA= -google.golang.org/api v0.78.0/go.mod h1:1Sg78yoMLOhlQTeF+ARBoytAcH1NNyyl390YMy6rKmw= -google.golang.org/api v0.80.0/go.mod h1:xY3nI94gbvBrE0J6NHXhxOmW97HG7Khjkku6AFB3Hyg= -google.golang.org/api v0.84.0/go.mod h1:NTsGnUFJMYROtiquksZHBWtHfeMC7iYthki7Eq3pa8o= -google.golang.org/api v0.85.0/go.mod h1:AqZf8Ep9uZ2pyTvgL+x0D3Zt0eoT9b5E8fmzfu6FO2g= -google.golang.org/api v0.90.0/go.mod h1:+Sem1dnrKlrXMR/X0bPnMWyluQe4RsNoYfmNLhOIkzw= -google.golang.org/api v0.93.0/go.mod h1:+Sem1dnrKlrXMR/X0bPnMWyluQe4RsNoYfmNLhOIkzw= -google.golang.org/api v0.95.0/go.mod h1:eADj+UBuxkh5zlrSntJghuNeg8HwQ1w5lTKkuqaETEI= -google.golang.org/api v0.96.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= -google.golang.org/api v0.97.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= -google.golang.org/api v0.98.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= -google.golang.org/api v0.100.0/go.mod h1:ZE3Z2+ZOr87Rx7dqFsdRQkRBk36kDtp/h+QpHbB7a70= -google.golang.org/api v0.103.0 h1:9yuVqlu2JCvcLg9p8S3fcFLZij8EPSyvODIY1rkMizQ= -google.golang.org/api v0.103.0/go.mod h1:hGtW6nK1AC+d9si/UBhw8Xli+QMOf6xyNAyJw4qU9w0= -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-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-20210222152913-aa3ee6e6a81c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210303154014-9728d6b83eeb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210310155132-4ce2db91004e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210319143718-93e7006c17a6/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210329143202-679c6ae281ee/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= -google.golang.org/genproto v0.0.0-20210402141018-6c239bbf2bb1/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= -google.golang.org/genproto v0.0.0-20210513213006-bf773b8c8384/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A= -google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= -google.golang.org/genproto v0.0.0-20210604141403-392c879c8b08/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= -google.golang.org/genproto v0.0.0-20210608205507-b6d2f5bf0d7d/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= -google.golang.org/genproto v0.0.0-20210624195500-8bfb893ecb84/go.mod h1:SzzZ/N+nwJDaO1kznhnlzqS8ocJICar6hYhVyhi++24= -google.golang.org/genproto v0.0.0-20210713002101-d411969a0d9a/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k= -google.golang.org/genproto v0.0.0-20210716133855-ce7ef5c701ea/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k= -google.golang.org/genproto v0.0.0-20210728212813-7823e685a01f/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= -google.golang.org/genproto v0.0.0-20210805201207-89edb61ffb67/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= -google.golang.org/genproto v0.0.0-20210813162853-db860fec028c/go.mod h1:cFeNkxwySK631ADgubI+/XFU/xp8FD5KIVV4rj8UC5w= -google.golang.org/genproto v0.0.0-20210821163610-241b8fcbd6c8/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= -google.golang.org/genproto v0.0.0-20210828152312-66f60bf46e71/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= -google.golang.org/genproto v0.0.0-20210831024726-fe130286e0e2/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= -google.golang.org/genproto v0.0.0-20210903162649-d08c68adba83/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= -google.golang.org/genproto v0.0.0-20210909211513-a8c4777a87af/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= -google.golang.org/genproto v0.0.0-20210924002016-3dee208752a0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20211118181313-81c1377c94b1/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20211206160659-862468c7d6e0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20211208223120-3a66f561d7aa/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20211221195035-429b39de9b1c/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20220126215142-9970aeb2e350/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20220207164111-0872dc986b00/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20220218161850-94dd64e39d7c/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= -google.golang.org/genproto v0.0.0-20220222213610-43724f9ea8cf/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= -google.golang.org/genproto v0.0.0-20220304144024-325a89244dc8/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= -google.golang.org/genproto v0.0.0-20220310185008-1973136f34c6/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= -google.golang.org/genproto v0.0.0-20220324131243-acbaeb5b85eb/go.mod h1:hAL49I2IFola2sVEjAn7MEwsja0xp51I0tlGAf9hz4E= -google.golang.org/genproto v0.0.0-20220407144326-9054f6ed7bac/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= -google.golang.org/genproto v0.0.0-20220413183235-5e96e2839df9/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= -google.golang.org/genproto v0.0.0-20220414192740-2d67ff6cf2b4/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= -google.golang.org/genproto v0.0.0-20220421151946-72621c1f0bd3/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= -google.golang.org/genproto v0.0.0-20220429170224-98d788798c3e/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= -google.golang.org/genproto v0.0.0-20220502173005-c8bf987b8c21/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= -google.golang.org/genproto v0.0.0-20220505152158-f39f71e6c8f3/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= -google.golang.org/genproto v0.0.0-20220518221133-4f43b3371335/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= -google.golang.org/genproto v0.0.0-20220523171625-347a074981d8/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= -google.golang.org/genproto v0.0.0-20220608133413-ed9918b62aac/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= -google.golang.org/genproto v0.0.0-20220616135557-88e70c0c3a90/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= -google.golang.org/genproto v0.0.0-20220617124728-180714bec0ad/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= -google.golang.org/genproto v0.0.0-20220624142145-8cd45d7dbd1f/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= -google.golang.org/genproto v0.0.0-20220628213854-d9e0b6570c03/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= -google.golang.org/genproto v0.0.0-20220722212130-b98a9ff5e252/go.mod h1:GkXuJDJ6aQ7lnJcRF+SJVgFdQhypqgl3LB1C9vabdRE= -google.golang.org/genproto v0.0.0-20220801145646-83ce21fca29f/go.mod h1:iHe1svFLAZg9VWz891+QbRMwUv9O/1Ww+/mngYeThbc= -google.golang.org/genproto v0.0.0-20220815135757-37a418bb8959/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= -google.golang.org/genproto v0.0.0-20220817144833-d7fd3f11b9b1/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= -google.golang.org/genproto v0.0.0-20220822174746-9e6da59bd2fc/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= -google.golang.org/genproto v0.0.0-20220829144015-23454907ede3/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= -google.golang.org/genproto v0.0.0-20220829175752-36a9c930ecbf/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= -google.golang.org/genproto v0.0.0-20220913154956-18f8339a66a5/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= -google.golang.org/genproto v0.0.0-20220914142337-ca0e39ece12f/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= -google.golang.org/genproto v0.0.0-20220915135415-7fd63a7952de/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= -google.golang.org/genproto v0.0.0-20220916172020-2692e8806bfa/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= -google.golang.org/genproto v0.0.0-20220919141832-68c03719ef51/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= -google.golang.org/genproto v0.0.0-20220920201722-2b89144ce006/go.mod h1:ht8XFiar2npT/g4vkk7O0WYS1sHOHbdujxbEp7CJWbw= -google.golang.org/genproto v0.0.0-20220926165614-551eb538f295/go.mod h1:woMGP53BroOrRY3xTxlbr8Y3eB/nzAvvFM83q7kG2OI= -google.golang.org/genproto v0.0.0-20220926220553-6981cbe3cfce/go.mod h1:woMGP53BroOrRY3xTxlbr8Y3eB/nzAvvFM83q7kG2OI= -google.golang.org/genproto v0.0.0-20221010155953-15ba04fc1c0e/go.mod h1:3526vdqwhZAwq4wsRUaVG555sVgsNmIjRtO7t/JH29U= -google.golang.org/genproto v0.0.0-20221014173430-6e2ab493f96b/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM= -google.golang.org/genproto v0.0.0-20221014213838-99cd37c6964a/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM= -google.golang.org/genproto v0.0.0-20221025140454-527a21cfbd71/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s= -google.golang.org/genproto v0.0.0-20230110181048-76db0878b65f h1:BWUVssLB0HVOSY78gIdvk1dTVYtT1y8SBWtPYuTJ/6w= -google.golang.org/genproto v0.0.0-20230110181048-76db0878b65f/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.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= -google.golang.org/grpc v1.23.0/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.36.1/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= -google.golang.org/grpc v1.37.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= -google.golang.org/grpc v1.37.1/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= -google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= -google.golang.org/grpc v1.39.0/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE= -google.golang.org/grpc v1.39.1/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE= -google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= -google.golang.org/grpc v1.40.1/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= -google.golang.org/grpc v1.44.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= -google.golang.org/grpc v1.45.0/go.mod h1:lN7owxKUQEqMfSyQikvvk5tf/6zMPsrK+ONuO11+0rQ= -google.golang.org/grpc v1.46.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= -google.golang.org/grpc v1.46.2/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= -google.golang.org/grpc v1.47.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= -google.golang.org/grpc v1.48.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= -google.golang.org/grpc v1.49.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= -google.golang.org/grpc v1.50.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= -google.golang.org/grpc v1.50.1/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= -google.golang.org/grpc v1.53.0 h1:LAv2ds7cmFV/XTS3XG1NneeENYrXGmorPxsBbptIjNc= -google.golang.org/grpc v1.53.0/go.mod h1:OnIrk0ipVdj4N5d9IUoFUx72/VlD7+jUsHwZgwSMQpw= -google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= -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/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY= -gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/cheggaaa/pb.v1 v1.0.27/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= -gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= -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.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= -gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/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= -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= -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= diff --git a/tests/terraform/jenkinsfile b/tests/terraform/jenkinsfile deleted file mode 100644 index 4de244836279..000000000000 --- a/tests/terraform/jenkinsfile +++ /dev/null @@ -1,99 +0,0 @@ -pipeline { - agent any - environment { - setupResultsOut = "setup-results.xml" - testResultsOut = "results.xml" - - AWS_ACCESS_KEY_ID = credentials('AWS_ACCESS_KEY_ID') - AWS_SECRET_ACCESS_KEY = credentials('AWS_SECRET_ACCESS_KEY') - AWS_SSH_PEM_KEY = credentials('AWS_SSH_PEM_KEY') - } - - stages { - stage('Git Checkout') { - steps { - git branch: 'master', url: 'https://github.com/k3s-io/k3s.git' - script { - dir("${WORKSPACE}/tests/terraform") { - if (env.AWS_SSH_PEM_KEY && env.AWS_SSH_KEY_NAME) { - def decoded = new String(AWS_SSH_PEM_KEY.decodeBase64()) - writeFile file: AWS_SSH_KEY_NAME, text: decoded - } - } - } - } - } - - stage('Configure') { - steps { - sh """ - set -e -x - echo 'aws_ami="${env.AWS_AMI}" - aws_user="${env.AWS_USER}" - region="${env.REGION}" - vpc_id="${env.VPC_ID}" - subnets="${env.SUBNETS}" - qa_space="${env.QA_SPACE}" - ec2_instance_class="${env.AWS_INSTANCE_TYPE}" - access_key="/config/$AWS_SSH_KEY_NAME" - no_of_worker_nodes="${env.NO_OF_WORKER_NODES}" - key_name="jenkins-rke-validation" - server_flags="${env.K3S_SERVER_FLAGS}" - worker_flags="${env.K3S_WORKER_FLAGS}" - k3s_version="${env.K3S_VERSION}" - availability_zone="${env.AVAILABILITY_ZONE}" - sg_id="${env.SG_ID}" - install_mode="${env.K3S_INSTALL_MODE}" - resource_name="${env.RESOURCE_NAME}" - no_of_server_nodes="${env.NO_OF_SERVER_NODES}" - username="${env.RHEL_USERNAME}" - password="${env.RHEL_PASSWORD}" - db_username="${env.DB_USERNAME}" - db_password="${env.DB_PASSWORD}" - node_os="${env.NODE_OS}" - environment="${env.DB_ENVIRONMENT}" - engine_mode="${env.DB_ENGINE_MODE}" - external_db="${env.EXTERNAL_DB}" - external_db_version="${env.EXTERNAL_DB_VERSION}" - instance_class="${env.DB_INSTANCE_CLASS}" - db_group_name="${env.DB_GROUP_NAME}" - cluster_type="${env.CLUSTER_TYPE}" - create_lb=${env.CREATE_LB} - ' >${WORKSPACE}/tests/terraform/${env.NODE_OS}${env.EXTERNAL_DB}".tfvars" - """ - } - } - stage('Build Cluster') { - steps { - sh """ - - /usr/bin/docker build -f tests/terraform/Dockerfile.build -t k3s_create_cluster . - - /usr/bin/docker run -d --name ${RESOURCE_NAME}_${BUILD_NUMBER} -v ${WORKSPACE}/tests/terraform:/config \ - -t -e AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID -e AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY \ - k3s_create_cluster - - /usr/bin/docker cp "${WORKSPACE}/tests/terraform/${NODE_OS}${EXTERNAL_DB}".tfvars "${RESOURCE_NAME}_${BUILD_NUMBER}":/config - - /usr/bin/docker cp "${WORKSPACE}/tests/terraform/$AWS_SSH_KEY_NAME" "${RESOURCE_NAME}_${BUILD_NUMBER}":/config - - /usr/bin/docker exec ${RESOURCE_NAME}_${BUILD_NUMBER} /usr/local/go/bin/go test -v tests/terraform/createcluster.go \ - tests/terraform/createcluster_test.go tests/terraform/testutils.go \ - -timeout=1h -node_os=${NODE_OS} \ - -cluster_type=${CLUSTER_TYPE} -external_db=${EXTERNAL_DB} -resource_name=${RESOURCE_NAME} \ - -sshuser=${AWS_USER} -sshkey="/config/${AWS_SSH_KEY_NAME}" -destroy=false -arch=${ARCH} - - """ - } - } - - stage('Test Report') { - steps { - sh """ - /usr/bin/docker rm -f ${RESOURCE_NAME}_${BUILD_NUMBER} - /usr/bin/docker rmi -f k3s_create_cluster - """ - } - } - } - } \ No newline at end of file diff --git a/tests/terraform/modules/k3scluster/config/local.tfvars b/tests/terraform/modules/k3scluster/config/local.tfvars deleted file mode 100644 index 7ffde449413d..000000000000 --- a/tests/terraform/modules/k3scluster/config/local.tfvars +++ /dev/null @@ -1,28 +0,0 @@ -region = "us-east-2" -qa_space = "" -create_lb = false - -external_db_version = "5.7" -instance_class = "db.t2.micro" -db_group_name = "mysql5.7" -engine_mode = "provisioned" -db_username = "" -db_password = "" - -username = "" -password = "" - -ec2_instance_class = "t3a.medium" -vpc_id = "" -subnets = "" -availability_zone = "us-east-2a" -sg_id = "" - -no_of_server_nodes = 2 -no_of_worker_nodes = 1 -server_flags = "token: test" -worker_flags = "token: test" - -k3s_version = "v1.23.8+k3s2" -install_mode = "INSTALL_K3S_VERSION" -environment = "local" \ No newline at end of file diff --git a/tests/terraform/modules/k3scluster/install_k3s_master.sh b/tests/terraform/modules/k3scluster/install_k3s_master.sh deleted file mode 100644 index 0f302dc42d9c..000000000000 --- a/tests/terraform/modules/k3scluster/install_k3s_master.sh +++ /dev/null @@ -1,105 +0,0 @@ -#!/bin/bash - -mkdir -p /etc/rancher/k3s -cat << EOF >/etc/rancher/k3s/config.yaml -write-kubeconfig-mode: "0644" -tls-san: - - ${2} -EOF - -if [[ -n "$8" ]] && [[ "$8" == *":"* ]] -then - echo "$" - echo -e "$8" >> /etc/rancher/k3s/config.yaml - cat /etc/rancher/k3s/config.yaml -fi - -if [ "${1}" = "rhel" ] -then - subscription-manager register --auto-attach --username="${9}" --password="${10}" - subscription-manager repos --enable=rhel-7-server-extras-rpms -fi - -export "${3}"="${4}" - -if [ "${5}" = "etcd" ] -then - echo "CLUSTER TYPE is etcd" - if [[ "$4" == *"v1.18"* ]] || [[ "$4" == *"v1.17"* ]] && [[ -n "$8" ]] - then - echo "curl -sfL https://get.k3s.io | INSTALL_K3S_TYPE='server' sh -s - --cluster-init --node-external-ip=${6} $8" >/tmp/master_cmd - curl -sfL https://get.k3s.io | INSTALL_K3S_TYPE='server' sh -s - --cluster-init --node-external-ip="${6}" "$8" - else - echo "curl -sfL https://get.k3s.io | INSTALL_K3S_TYPE='server' sh -s - --cluster-init --node-external-ip=${6}" >/tmp/master_cmd - curl -sfL https://get.k3s.io | INSTALL_K3S_TYPE='server' sh -s - --cluster-init --node-external-ip="${6}" - fi -else - echo "CLUSTER TYPE is external db" - if [[ "$4" == *"v1.18"* ]] || [[ "$4" == *"v1.17"* ]] && [[ -n "$8" ]] - then - echo "curl -sfL https://get.k3s.io | sh -s - server --node-external-ip=${6} --datastore-endpoint=\"${7}\" $8" >/tmp/master_cmd - curl -sfL https://get.k3s.io | sh -s - server --node-external-ip="${6}" --datastore-endpoint="${7}" "$8" - else - echo "curl -sfL https://get.k3s.io | sh -s - server --node-external-ip=${6} --datastore-endpoint=\"${7}\" " >/tmp/master_cmd - curl -sfL https://get.k3s.io | sh -s - server --node-external-ip="${6}" --datastore-endpoint="${7}" - fi -fi - -export PATH=$PATH:/usr/local/bin -timeElapsed=0 -while ! $(kubectl get nodes >/dev/null 2>&1) && [[ $timeElapsed -lt 300 ]] -do - sleep 5 - timeElapsed=$(expr $timeElapsed + 5) -done - -IFS=$'\n' -timeElapsed=0 -sleep 10 -while [[ $timeElapsed -lt 420 ]] -do - notready=false - for rec in $(kubectl get nodes) - do - if [[ "$rec" == *"NotReady"* ]] - then - notready=true - fi - done - if [[ $notready == false ]] - then - break - fi - sleep 20 - timeElapsed=$(expr $timeElapsed + 20) -done - -IFS=$'\n' -timeElapsed=0 -while [[ $timeElapsed -lt 420 ]] -do - helmPodsNR=false - systemPodsNR=false - for rec in $(kubectl get pods -A --no-headers) - do - if [[ "$rec" == *"helm-install"* ]] && [[ "$rec" != *"Completed"* ]] - then - helmPodsNR=true - elif [[ "$rec" != *"helm-install"* ]] && [[ "$rec" != *"Running"* ]] - then - systemPodsNR=true - else - echo "" - fi - done - - if [[ $systemPodsNR == false ]] && [[ $helmPodsNR == false ]] - then - break - fi - sleep 20 - timeElapsed=$(expr $timeElapsed + 20) -done -cat /etc/rancher/k3s/config.yaml> /tmp/joinflags -cat /var/lib/rancher/k3s/server/node-token >/tmp/nodetoken -cat /etc/rancher/k3s/k3s.yaml >/tmp/config diff --git a/tests/terraform/modules/k3scluster/join_k3s_agent.sh b/tests/terraform/modules/k3scluster/join_k3s_agent.sh deleted file mode 100644 index 93c42fed0acd..000000000000 --- a/tests/terraform/modules/k3scluster/join_k3s_agent.sh +++ /dev/null @@ -1,31 +0,0 @@ -#!/bin/bash -# This script is used to join one or more nodes as agents - -mkdir -p /etc/rancher/k3s -cat <>/etc/rancher/k3s/config.yaml -server: https://${4}:6443 -token: "${5}" -EOF - -if [[ ! -z "$7" ]] && [[ "$7" == *":"* ]] -then - echo -e "$7" >> /etc/rancher/k3s/config.yaml - cat /etc/rancher/k3s/config.yaml -fi - -if [ ${1} = "rhel" ] -then - subscription-manager register --auto-attach --username=${8} --password=${9} - subscription-manager repos --enable=rhel-7-server-extras-rpms -fi - -export "${2}"="${3}" - if [[ "$3" == *"v1.18"* ]] || [["$3" == *"v1.17"* ]] && [[ -n "$7" ]] -then - echo "curl -sfL https://get.k3s.io | sh -s - agent --node-external-ip=${6} $7" >/tmp/agent_cmd -curl -sfL https://get.k3s.io | sh -s - agent --node-external-ip=${6} ${7} - else - -echo "curl -sfL https://get.k3s.io | sh -s - agent --node-external-ip=${6}" >/tmp/agent_cmd -curl -sfL https://get.k3s.io | sh -s - agent --node-external-ip=${6} -fi diff --git a/tests/terraform/modules/k3scluster/join_k3s_master.sh b/tests/terraform/modules/k3scluster/join_k3s_master.sh deleted file mode 100644 index 30ac201d0834..000000000000 --- a/tests/terraform/modules/k3scluster/join_k3s_master.sh +++ /dev/null @@ -1,44 +0,0 @@ -#!/bin/bash -# This script is used to join one or more nodes as masters - -mkdir -p /etc/rancher/k3s -cat <>/etc/rancher/k3s/config.yaml -write-kubeconfig-mode: "0644" -tls-san: - - ${2} -EOF - -if [[ -n "${10}" ]] && [[ "${10}" == *":"* ]] -then - echo -e "${10}" >> /etc/rancher/k3s/config.yaml - cat /etc/rancher/k3s/config.yaml -fi - -if [ "${1}" = "rhel" ] -then - subscription-manager register --auto-attach --username="${11}" --password="${12}" - subscription-manager repos --enable=rhel-7-server-extras-rpms -fi - -export "${3}"="${4}" - -if [ "${5}" = "etcd" ] -then - if [[ "$4" == *"v1.18"* ]] || [["$4" == *"v1.17"* ]] && [[ -n "$10" ]] - then - echo "curl -sfL https://get.k3s.io | INSTALL_K3S_TYPE='server' sh -s - --server https://\"${7}\":6443 --token \"${8}\" --node-external-ip=\"${6}\" ${10}" >/tmp/master_cmd - curl -sfL https://get.k3s.io | INSTALL_K3S_TYPE='server' sh -s - --server https://"${7}":6443 --token "${8}" --node-external-ip="${6} ${10}" - else - echo "curl -sfL https://get.k3s.io | INSTALL_K3S_TYPE='server' sh -s - --server https://\"${7}\":6443 --token \"${8}\" --node-external-ip=\"${6}\"" >/tmp/master_cmd - curl -sfL https://get.k3s.io | INSTALL_K3S_TYPE='server' sh -s - --server https://"${7}":6443 --token "${8}" --node-external-ip="${6}" - fi -else - if [[ "$4" == *"v1.18"* ]] || [["$4" == *"v1.17"* ]] && [[ -n "$10" ]] - then - echo "curl -sfL https://get.k3s.io | INSTALL_K3S_TYPE='server' sh -s - --node-external-ip=\"${6}\" --datastore-endpoint=\"${9}\" ${10}" >/tmp/master_cmd - curl -sfL https://get.k3s.io | INSTALL_K3S_TYPE='server' sh -s - --node-external-ip="${6}" --token="${8}" --datastore-endpoint="${9} ${10}" - else - echo "curl -sfL https://get.k3s.io | INSTALL_K3S_TYPE='server' sh -s - --node-external-ip=\"${6}\" --token \"${8}\" --datastore-endpoint=\"${9}\"" >/tmp/master_cmd - curl -sfL https://get.k3s.io | INSTALL_K3S_TYPE='server' sh -s - --node-external-ip="${6}" --token="${8}" --datastore-endpoint="${9}" - fi -fi diff --git a/tests/terraform/modules/k3scluster/main.tf b/tests/terraform/modules/k3scluster/main.tf deleted file mode 100644 index 592a5a63c469..000000000000 --- a/tests/terraform/modules/k3scluster/main.tf +++ /dev/null @@ -1,54 +0,0 @@ -module "master" { - source="./master" - aws_ami=var.aws_ami - aws_user=var.aws_user - key_name=var.key_name - no_of_server_nodes=var.no_of_server_nodes - k3s_version=var.k3s_version - install_mode=var.install_mode - region=var.region - vpc_id=var.vpc_id - subnets=var.subnets - qa_space=var.qa_space - ec2_instance_class=var.ec2_instance_class - access_key=var.access_key - cluster_type=var.cluster_type - server_flags=var.server_flags - availability_zone=var.availability_zone - sg_id=var.sg_id - resource_name=var.resource_name - node_os=var.node_os - username=var.username - password=var.password - db_username=var.db_username - db_password=var.db_password - db_group_name=var.db_group_name - external_db=var.external_db - instance_class=var.instance_class - external_db_version=var.external_db_version - engine_mode=var.engine_mode - environment=var.environment - create_lb=var.create_lb -} -module "worker" { - source="./worker" - dependency = module.master - aws_ami=var.aws_ami - aws_user=var.aws_user - key_name=var.key_name - no_of_worker_nodes=var.no_of_worker_nodes - k3s_version=var.k3s_version - install_mode=var.install_mode - region=var.region - vpc_id=var.vpc_id - subnets=var.subnets - ec2_instance_class=var.ec2_instance_class - access_key=var.access_key - worker_flags=var.worker_flags - availability_zone=var.availability_zone - sg_id=var.sg_id - resource_name=var.resource_name - node_os=var.node_os - username=var.username - password=var.password -} diff --git a/tests/terraform/modules/k3scluster/master/instances_server.tf b/tests/terraform/modules/k3scluster/master/instances_server.tf deleted file mode 100644 index 55ddb75c24d1..000000000000 --- a/tests/terraform/modules/k3scluster/master/instances_server.tf +++ /dev/null @@ -1,302 +0,0 @@ -resource "aws_db_instance" "db" { - count = (var.cluster_type == "etcd" || var.external_db == "" || var.external_db == "NULL" ? 0 : (var.external_db != "" && var.external_db != "aurora-mysql" ? 1 : 0)) - identifier = "${var.resource_name}${local.random_string}-db" - storage_type = "gp2" - allocated_storage = 20 - engine = var.external_db - engine_version = var.external_db_version - instance_class = var.instance_class - db_name = "mydb" - parameter_group_name = var.db_group_name - username = var.db_username - password = var.db_password - availability_zone = var.availability_zone - tags = { - Environment = var.environment - } - skip_final_snapshot = true -} - -resource "aws_rds_cluster" "db" { - count = (var.external_db == "aurora-mysql" && var.cluster_type == "" ? 1 : 0) - cluster_identifier = "${var.resource_name}${local.random_string}-db" - engine = var.external_db - engine_version = var.external_db_version - availability_zones = [var.availability_zone] - database_name = "mydb" - master_username = var.db_username - master_password = var.db_password - engine_mode = var.engine_mode - tags = { - Environment = var.environment - } - skip_final_snapshot = true -} - -resource "aws_rds_cluster_instance" "db" { - count = (var.external_db == "aurora-mysql" && var.cluster_type == "" ? 1 : 0) - cluster_identifier = aws_rds_cluster.db[0].id - identifier = "${var.resource_name}${local.random_string}-instance1" - instance_class = var.instance_class - engine = aws_rds_cluster.db[0].engine - engine_version = aws_rds_cluster.db[0].engine_version -} - -resource "aws_instance" "master" { - ami = var.aws_ami - instance_type = var.ec2_instance_class - connection { - type = "ssh" - user = var.aws_user - host = self.public_ip - private_key = file(var.access_key) - } - root_block_device { - volume_size = "20" - volume_type = "standard" - } - subnet_id = var.subnets - availability_zone = var.availability_zone - vpc_security_group_ids = [var.sg_id] - key_name = var.key_name - tags = { - Name = "${var.resource_name}-server" - } - provisioner "file" { - source = "install_k3s_master.sh" - destination = "/tmp/install_k3s_master.sh" - } - provisioner "remote-exec" { - inline = [ - "chmod +x /tmp/install_k3s_master.sh", - "sudo /tmp/install_k3s_master.sh ${var.node_os} ${var.create_lb ? aws_route53_record.aws_route53[0].fqdn : self.public_ip} ${var.install_mode} ${var.k3s_version} ${var.cluster_type == "" ? var.external_db : "etcd"} ${self.public_ip} \"${data.template_file.test.rendered}\" \"${var.server_flags}\" ${var.username} ${var.password}", - ] - } - provisioner "local-exec" { - command = "echo ${aws_instance.master.public_ip} >/tmp/${var.resource_name}_master_ip" - } - provisioner "local-exec" { - command = "scp -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -i ${var.access_key} ${var.aws_user}@${aws_instance.master.public_ip}:/tmp/nodetoken /tmp/${var.resource_name}_nodetoken" - } - provisioner "local-exec" { - command = "scp -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -i ${var.access_key} ${var.aws_user}@${aws_instance.master.public_ip}:/tmp/config /tmp/${var.resource_name}_config" - } - provisioner "local-exec" { - command = "scp -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -i ${var.access_key} ${var.aws_user}@${aws_instance.master.public_ip}:/tmp/joinflags /tmp/${var.resource_name}_joinflags" - } - provisioner "local-exec" { - command = "scp -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -i ${var.access_key} ${var.aws_user}@${aws_instance.master.public_ip}:/tmp/master_cmd /tmp/${var.resource_name}_master_cmd" - } - provisioner "local-exec" { - command = "sed s/127.0.0.1/\"${var.create_lb ? aws_route53_record.aws_route53[0].fqdn : aws_instance.master.public_ip}\"/g /tmp/${var.resource_name}_config >/tmp/${var.resource_name}_kubeconfig" - } -} - -data "template_file" "test" { - template = (var.cluster_type == "etcd" ? "NULL": (var.external_db == "postgres" ? "postgres://${aws_db_instance.db[0].username}:${aws_db_instance.db[0].password}@${aws_db_instance.db[0].endpoint}/${aws_db_instance.db[0].db_name}" : (var.external_db == "aurora-mysql" ? "mysql://${aws_rds_cluster.db[0].master_username}:${aws_rds_cluster.db[0].master_password}@tcp(${aws_rds_cluster.db[0].endpoint})/${aws_rds_cluster.db[0].database_name}" : "mysql://${aws_db_instance.db[0].username}:${aws_db_instance.db[0].password}@tcp(${aws_db_instance.db[0].endpoint})/${aws_db_instance.db[0].db_name}"))) - depends_on = [data.template_file.test_status] -} - -data "template_file" "test_status" { - template = (var.cluster_type == "etcd" ? "NULL": ((var.external_db == "postgres" ? aws_db_instance.db[0].endpoint : (var.external_db == "aurora-mysql" ? aws_rds_cluster_instance.db[0].endpoint : aws_db_instance.db[0].endpoint)))) -} -data "local_file" "token" { - filename = "/tmp/${var.resource_name}_nodetoken" - depends_on = [aws_instance.master] -} - -locals { - node_token = trimspace(data.local_file.token.content) -} - -resource "random_string" "suffix" { - length = 3 - upper = false - special = false -} - -locals { - random_string = random_string.suffix.result -} - -resource "aws_instance" "master2-ha" { - ami = var.aws_ami - instance_type = var.ec2_instance_class - count = var.no_of_server_nodes - 1 - connection { - type = "ssh" - user = var.aws_user - host = self.public_ip - private_key = file(var.access_key) - } - root_block_device { - volume_size = "20" - volume_type = "standard" - } - subnet_id = var.subnets - availability_zone = var.availability_zone - vpc_security_group_ids = [var.sg_id] - key_name = var.key_name - depends_on = [aws_instance.master] - tags = { - Name = "${var.resource_name}-server-ha${count.index + 1}" - } - provisioner "file" { - source = "join_k3s_master.sh" - destination = "/tmp/join_k3s_master.sh" - } - provisioner "remote-exec" { - inline = [ - "chmod +x /tmp/join_k3s_master.sh", - "sudo /tmp/join_k3s_master.sh ${var.node_os} ${var.create_lb ? aws_route53_record.aws_route53[0].fqdn : "${aws_instance.master.public_ip}"} ${var.install_mode} ${var.k3s_version} ${var.cluster_type} ${self.public_ip} ${aws_instance.master.public_ip} ${local.node_token} \"${data.template_file.test.rendered}\" \"${var.server_flags}\" ${var.username} ${var.password}", - ] - } -} - -resource "aws_lb_target_group" "aws_tg_80" { - count = var.create_lb ? 1 : 0 - port = 80 - protocol = "TCP" - vpc_id = var.vpc_id - name = "${var.resource_name}${local.random_string}-tg-80" - health_check { - protocol = "HTTP" - port = "traffic-port" - path = "/ping" - interval = 10 - timeout = 6 - healthy_threshold = 3 - unhealthy_threshold = 3 - matcher = "200-399" - } -} - -resource "aws_lb_target_group_attachment" "aws_tg_attachment_80" { - count = var.create_lb ? 1 : 0 - target_group_arn = aws_lb_target_group.aws_tg_80[0].arn - target_id = aws_instance.master.id - port = 80 - depends_on = ["aws_instance.master"] -} - -resource "aws_lb_target_group_attachment" "aws_tg_attachment_80_2" { - target_group_arn = aws_lb_target_group.aws_tg_80[0].arn - count = var.create_lb ? length(aws_instance.master2-ha) : 0 - target_id = aws_instance.master2-ha[count.index].id - port = 80 - depends_on = ["aws_instance.master"] -} - -resource "aws_lb_target_group" "aws_tg_443" { - count = var.create_lb ? 1 : 0 - port = 443 - protocol = "TCP" - vpc_id = var.vpc_id - name = "${var.resource_name}${local.random_string}-tg-443" - health_check { - protocol = "HTTP" - port = 80 - path = "/ping" - interval = 10 - timeout = 6 - healthy_threshold = 3 - unhealthy_threshold = 3 - matcher = "200-399" - } -} - -resource "aws_lb_target_group_attachment" "aws_tg_attachment_443" { - count = var.create_lb ? 1 : 0 - target_group_arn = aws_lb_target_group.aws_tg_443[0].arn - target_id = aws_instance.master.id - port = 443 - depends_on = ["aws_instance.master"] -} - -resource "aws_lb_target_group_attachment" "aws_tg_attachment_443_2" { - target_group_arn = aws_lb_target_group.aws_tg_443[0].arn - count = var.create_lb ? length(aws_instance.master2-ha) : 0 - target_id = aws_instance.master2-ha[count.index].id - port = 443 - depends_on = ["aws_instance.master"] -} - -resource "aws_lb_target_group" "aws_tg_6443" { - count = var.create_lb ? 1 : 0 - port = 6443 - protocol = "TCP" - vpc_id = var.vpc_id - name = "${var.resource_name}${local.random_string}-tg-6443" -} - -resource "aws_lb_target_group_attachment" "aws_tg_attachment_6443" { - count = var.create_lb ? 1 : 0 - target_group_arn = aws_lb_target_group.aws_tg_6443[0].arn - target_id = aws_instance.master.id - port = 6443 - depends_on = ["aws_instance.master"] -} - -resource "aws_lb_target_group_attachment" "aws_tg_attachment_6443_2" { - target_group_arn = aws_lb_target_group.aws_tg_6443[0].arn - count = var.create_lb ? length(aws_instance.master2-ha) : 0 - target_id = aws_instance.master2-ha[count.index].id - port = 6443 - depends_on = ["aws_instance.master"] -} - -resource "aws_lb" "aws_nlb" { - count = var.create_lb ? 1 : 0 - internal = false - load_balancer_type = "network" - subnets = [var.subnets] - name = "${var.resource_name}${local.random_string}-nlb" -} - -resource "aws_lb_listener" "aws_nlb_listener_80" { - count = var.create_lb ? 1 : 0 - load_balancer_arn = aws_lb.aws_nlb[0].arn - port = "80" - protocol = "TCP" - default_action { - type = "forward" - target_group_arn = aws_lb_target_group.aws_tg_80[0].arn - } -} - -resource "aws_lb_listener" "aws_nlb_listener_443" { - count = var.create_lb ? 1 : 0 - load_balancer_arn = aws_lb.aws_nlb[0].arn - port = "443" - protocol = "TCP" - default_action { - type = "forward" - target_group_arn = aws_lb_target_group.aws_tg_443[0].arn - } -} - -resource "aws_lb_listener" "aws_nlb_listener_6443" { - count = var.create_lb ? 1 : 0 - load_balancer_arn = aws_lb.aws_nlb[0].arn - port = "6443" - protocol = "TCP" - default_action { - type = "forward" - target_group_arn = aws_lb_target_group.aws_tg_6443[0].arn - } -} - -resource "aws_route53_record" "aws_route53" { - count = var.create_lb ? 1 : 0 - zone_id = data.aws_route53_zone.selected.zone_id - name = "${var.resource_name}${local.random_string}-r53" - type = "CNAME" - ttl = "300" - records = [aws_lb.aws_nlb[0].dns_name] - depends_on = ["aws_lb_listener.aws_nlb_listener_6443"] -} - -data "aws_route53_zone" "selected" { - name = var.qa_space - private_zone = false -} \ No newline at end of file diff --git a/tests/terraform/modules/k3scluster/master/outputs.tf b/tests/terraform/modules/k3scluster/master/outputs.tf deleted file mode 100644 index eb5969c8fbee..000000000000 --- a/tests/terraform/modules/k3scluster/master/outputs.tf +++ /dev/null @@ -1,18 +0,0 @@ -output "Route53_info" { - value = aws_route53_record.aws_route53.* - description = "List of DNS records" -} - -output "master_ips" { - value = join("," , aws_instance.master.*.public_ip,aws_instance.master2-ha.*.public_ip) - description = "The public IP of the AWS node" -} - -output "kubeconfig" { - value = var.resource_name - description = "kubeconfig of the cluster created" -} - -output "rendered_template" { - value = data.template_file.test.rendered -} \ No newline at end of file diff --git a/tests/terraform/modules/k3scluster/master/providers.tf b/tests/terraform/modules/k3scluster/master/providers.tf deleted file mode 100644 index 0ced9d752100..000000000000 --- a/tests/terraform/modules/k3scluster/master/providers.tf +++ /dev/null @@ -1,3 +0,0 @@ -provider "aws" { - region = "${var.region}" -} diff --git a/tests/terraform/modules/k3scluster/master/variables.tf b/tests/terraform/modules/k3scluster/master/variables.tf deleted file mode 100644 index cf48316c0152..000000000000 --- a/tests/terraform/modules/k3scluster/master/variables.tf +++ /dev/null @@ -1,34 +0,0 @@ -variable "aws_ami" {} -variable "aws_user" {} -variable "region" {} -variable "access_key" {} -variable "vpc_id" {} -variable "subnets" {} -variable "availability_zone" {} -variable "sg_id" {} -variable "qa_space" {} -variable "ec2_instance_class" {} -variable "resource_name" {} -variable "key_name" {} -variable "external_db" {} -variable "external_db_version" {} -variable "instance_class" {} -variable "db_group_name" {} -variable "username" {} -variable "password" {} -variable "k3s_version" {} -variable "no_of_server_nodes" {} -variable "server_flags" {} - -variable "cluster_type" {} -variable "node_os" {} -variable "db_username" {} -variable "db_password" {} -variable "environment" {} -variable "engine_mode" {} -variable "install_mode" {} - -variable "create_lb" { - description = "Create Network Load Balancer if set to true" - type = bool -} diff --git a/tests/terraform/modules/k3scluster/outputs.tf b/tests/terraform/modules/k3scluster/outputs.tf deleted file mode 100644 index 1474c540adaa..000000000000 --- a/tests/terraform/modules/k3scluster/outputs.tf +++ /dev/null @@ -1,18 +0,0 @@ -output "master_ips" { - value = module.master.master_ips - description = "The public IP of the AWS node" -} - -output "worker_ips" { - value = module.worker.worker_ips - description = "The public IP of the AWS node" -} - -output "kubeconfig" { - value = module.master.kubeconfig - description = "kubeconfig of the cluster created" -} - -output "rendered_template" { - value = module.master.rendered_template -} \ No newline at end of file diff --git a/tests/terraform/modules/k3scluster/providers.tf b/tests/terraform/modules/k3scluster/providers.tf deleted file mode 100644 index 0ced9d752100..000000000000 --- a/tests/terraform/modules/k3scluster/providers.tf +++ /dev/null @@ -1,3 +0,0 @@ -provider "aws" { - region = "${var.region}" -} diff --git a/tests/terraform/modules/k3scluster/variables.tf b/tests/terraform/modules/k3scluster/variables.tf deleted file mode 100644 index e0c07197d3de..000000000000 --- a/tests/terraform/modules/k3scluster/variables.tf +++ /dev/null @@ -1,35 +0,0 @@ -#variable "db" {} -variable "no_of_worker_nodes" {} -variable "aws_ami" {} -variable "aws_user" {} -variable "region" {} -variable "access_key" {} -variable "vpc_id" {} -variable "subnets" {} -variable "qa_space" {} -variable "resource_name" {} -variable "key_name" {} -variable "external_db" {} -variable "external_db_version" {} -variable "instance_class" {} -variable "ec2_instance_class" {} -variable "db_group_name" {} -variable "username" {} -variable "password" {} -variable "k3s_version" {} -variable "no_of_server_nodes" {} -variable "server_flags" {} -variable "worker_flags" {} -variable "availability_zone" {} -variable "sg_id" {} -variable "cluster_type" {} -variable "node_os" {} -variable "db_username" {} -variable "db_password" {} -variable "environment" {} -variable "engine_mode" {} -variable "install_mode" {} -variable "create_lb" { - description = "Create Network Load Balancer if set to true" - type = bool -} \ No newline at end of file diff --git a/tests/terraform/modules/k3scluster/worker/instances_worker.tf b/tests/terraform/modules/k3scluster/worker/instances_worker.tf deleted file mode 100644 index 59b40fdc625b..000000000000 --- a/tests/terraform/modules/k3scluster/worker/instances_worker.tf +++ /dev/null @@ -1,49 +0,0 @@ -resource "aws_instance" "worker" { - depends_on = [ - var.dependency - ] - ami = var.aws_ami - instance_type = var.ec2_instance_class - count = var.no_of_worker_nodes - connection { - type = "ssh" - user = var.aws_user - host = self.public_ip - private_key = file(var.access_key) - } - subnet_id = var.subnets - availability_zone = var.availability_zone - vpc_security_group_ids = [var.sg_id] - key_name = var.key_name - tags = { - Name = "${var.resource_name}-worker" - } - provisioner "file" { - source = "join_k3s_agent.sh" - destination = "/tmp/join_k3s_agent.sh" - } - provisioner "remote-exec" { - inline = [ - "chmod +x /tmp/join_k3s_agent.sh", - "sudo /tmp/join_k3s_agent.sh ${var.node_os} ${var.install_mode} ${var.k3s_version} ${local.master_ip} ${local.node_token} ${self.public_ip} \"${var.worker_flags}\" ${var.username} ${var.password} ", - ] - } -} - -data "local_file" "master_ip" { - depends_on = [var.dependency] - filename = "/tmp/${var.resource_name}_master_ip" -} - -locals { - master_ip = trimspace(data.local_file.master_ip.content) -} - -data "local_file" "token" { - depends_on = [var.dependency] - filename = "/tmp/${var.resource_name}_nodetoken" -} - -locals { - node_token = trimspace(data.local_file.token.content) -} diff --git a/tests/terraform/modules/k3scluster/worker/outputs.tf b/tests/terraform/modules/k3scluster/worker/outputs.tf deleted file mode 100644 index 145541c4c26b..000000000000 --- a/tests/terraform/modules/k3scluster/worker/outputs.tf +++ /dev/null @@ -1,12 +0,0 @@ -output "Registration_address" { - value = "${data.local_file.master_ip.content}" -} - -output "master_node_token" { - value = "${data.local_file.token.content}" -} - -output "worker_ips" { - value = join("," , aws_instance.worker.*.public_ip) - description = "The public IP of the AWS node" -} diff --git a/tests/terraform/modules/k3scluster/worker/providers.tf b/tests/terraform/modules/k3scluster/worker/providers.tf deleted file mode 100644 index 0ced9d752100..000000000000 --- a/tests/terraform/modules/k3scluster/worker/providers.tf +++ /dev/null @@ -1,3 +0,0 @@ -provider "aws" { - region = "${var.region}" -} diff --git a/tests/terraform/modules/k3scluster/worker/variables.tf b/tests/terraform/modules/k3scluster/worker/variables.tf deleted file mode 100644 index b5d697932425..000000000000 --- a/tests/terraform/modules/k3scluster/worker/variables.tf +++ /dev/null @@ -1,22 +0,0 @@ -variable "dependency" { - type = any - default = null -} -variable "region" {} -variable "aws_ami" {} -variable "aws_user" {} -variable "vpc_id" {} -variable "subnets" {} -variable "resource_name" {} -variable "access_key" {} -variable "k3s_version" {} -variable "no_of_worker_nodes" {} -variable "worker_flags" {} -variable "ec2_instance_class" {} -variable "availability_zone" {} -variable "sg_id" {} -variable "username" {} -variable "password" {} -variable "node_os" {} -variable "install_mode" {} -variable "key_name" {} diff --git a/tests/terraform/scripts/delete_resources.sh b/tests/terraform/scripts/delete_resources.sh deleted file mode 100755 index cc327d4bcc36..000000000000 --- a/tests/terraform/scripts/delete_resources.sh +++ /dev/null @@ -1,101 +0,0 @@ -#!/bin/bash - -#Get resource name from tfvarslocal && change name to make more sense in this context -RESOURCE_NAME=$(grep resource_name /dev/null 2>&1 - - -#Search for DB instances and delete them -INSTANCES=$(aws rds describe-db-instances --query "DBInstances[?starts_with(DBInstanceIdentifier, -'${NAME_PREFIX}')].DBInstanceIdentifier" --output text 2> /dev/null) -for instance in $INSTANCES; do - aws rds delete-db-instance --db-instance-identifier "$instance" --skip-final-snapshot > /dev/null 2>&1 -done - - -#Search for DB clusters and delete them -CLUSTERS=$(aws rds describe-db-clusters --query "DBClusters[?starts_with(DBClusterIdentifier, - '${NAME_PREFIX}')].DBClusterIdentifier" --output text 2> /dev/null) -for cluster in $CLUSTERS; do - aws rds delete-db-cluster --db-cluster-identifier "$cluster" --skip-final-snapshot > /dev/null 2>&1 - aws rds wait db-cluster-deleted --db-cluster-identifier "$cluster" -done - - -#Get the list of load balancer ARNs -LB_ARN_LIST=$(aws elbv2 describe-load-balancers \ - --query "LoadBalancers[?starts_with(LoadBalancerName, '${NAME_PREFIX}') && Type=='network'].LoadBalancerArn" \ - --output text) - - -#Loop through the load balancer ARNs and delete the load balancers -for LB_ARN in $LB_ARN_LIST; do - echo "Deleting load balancer $LB_ARN" - aws elbv2 delete-load-balancer --load-balancer-arn "$LB_ARN" -done - -#Get the list of target group ARNs -TG_ARN_LIST=$(aws elbv2 describe-target-groups \ - --query "TargetGroups[?starts_with(TargetGroupName, '${NAME_PREFIX}') && Protocol=='TCP'].TargetGroupArn" \ - --output text) - - -#Loop through the target group ARNs and delete the target groups -for TG_ARN in $TG_ARN_LIST; do - echo "Deleting target group $TG_ARN" - aws elbv2 delete-target-group --target-group-arn "$TG_ARN" -done - - -#Get the ID and recordName with lower case of the hosted zone that contains the Route 53 record sets -NAME_PREFIX_LOWER=$(echo "$NAME_PREFIX" | tr '[:upper:]' '[:lower:]') -R53_ZONE_ID=$(aws route53 list-hosted-zones-by-name --dns-name "${NAME_PREFIX}." \ - --query "HostedZones[0].Id" --output text) -R53_RECORD=$(aws route53 list-resource-record-sets \ - --hosted-zone-id "${R53_ZONE_ID}" \ - --query "ResourceRecordSets[?starts_with(Name, '${NAME_PREFIX_LOWER}.') && Type == 'CNAME'].Name" \ - --output text) - - -#Get ResourceRecord Value -RECORD_VALUE=$(aws route53 list-resource-record-sets \ - --hosted-zone-id "${R53_ZONE_ID}" \ - --query "ResourceRecordSets[?starts_with(Name, '${NAME_PREFIX_LOWER}.') \ - && Type == 'CNAME'].ResourceRecords[0].Value" --output text) - - -#Delete Route53 record -if [[ "$R53_RECORD" == "${NAME_PREFIX_LOWER}."* ]]; then - echo "Deleting Route53 record ${R53_RECORD}" - CHANGE_STATUS=$(aws route53 change-resource-record-sets --hosted-zone-id "${R53_ZONE_ID}" \ - --change-batch '{"Changes": [ - { - "Action": "DELETE", - "ResourceRecordSet": { - "Name": "'"${R53_RECORD}"'", - "Type": "CNAME", - "TTL": 300, - "ResourceRecords": [ - { - "Value": "'"${RECORD_VALUE}"'" - } - ] - } - } - ] - }') - STATUS_ID=$(echo "$CHANGE_STATUS" | jq -r '.ChangeInfo.Id') - #Get status from the change - aws route53 wait resource-record-sets-changed --id "$STATUS_ID" - echo "Successfully deleted Route53 record ${R53_RECORD}: status: ${STATUS_ID}" -else - echo "No Route53 record found" -fi \ No newline at end of file diff --git a/tests/terraform/testutils.go b/tests/terraform/testutils.go deleted file mode 100644 index 7f1e356978d9..000000000000 --- a/tests/terraform/testutils.go +++ /dev/null @@ -1,244 +0,0 @@ -package terraform - -import ( - "bytes" - "fmt" - "log" - "os" - "os/exec" - "path/filepath" - "runtime" - "strings" - "time" - - "golang.org/x/crypto/ssh" -) - -var config *ssh.ClientConfig - -type Node struct { - Name string - Status string - Roles string - Version string - InternalIP string - ExternalIP string -} - -type Pod struct { - NameSpace string - Name string - Ready string - Status string - Restarts string - NodeIP string - Node string -} - -func GetBasepath() string { - _, b, _, _ := runtime.Caller(0) - return filepath.Join(filepath.Dir(b), "../..") -} - -func checkError(e error) { - if e != nil { - log.Fatal(e) - } -} - -func publicKey(path string) ssh.AuthMethod { - key, err := os.ReadFile(path) - if err != nil { - panic(err) - } - signer, err := ssh.ParsePrivateKey(key) - if err != nil { - panic(err) - } - return ssh.PublicKeys(signer) -} - -func ConfigureSSH(host string, SSHUser string, SSHKey string) *ssh.Client { - config = &ssh.ClientConfig{ - User: SSHUser, - Auth: []ssh.AuthMethod{ - publicKey(SSHKey), - }, - HostKeyCallback: ssh.InsecureIgnoreHostKey(), - } - conn, err := ssh.Dial("tcp", host, config) - checkError(err) - return conn -} - -func runsshCommand(cmd string, conn *ssh.Client) (string, error) { - session, err := conn.NewSession() - if err != nil { - panic(err) - } - defer session.Close() - var stdoutBuf bytes.Buffer - var stderrBuf bytes.Buffer - session.Stdout = &stdoutBuf - session.Stderr = &stderrBuf - if err := session.Run(cmd); err != nil { - log.Println(session.Stdout) - log.Fatal("Error on command execution", err.Error()) - } - return fmt.Sprintf("%s", stdoutBuf.String()), err -} - -// RunCmdOnNode executes a command from within the given node -func RunCmdOnNode(cmd string, ServerIP string, SSHUser string, SSHKey string) (string, error) { - Server := ServerIP + ":22" - conn := ConfigureSSH(Server, SSHUser, SSHKey) - res, err := runsshCommand(cmd, conn) - res = strings.TrimSpace(res) - return res, err -} - -// RunCommand executes a command on the host -func RunCommand(cmd string) (string, error) { - c := exec.Command("bash", "-c", cmd) - out, err := c.CombinedOutput() - return string(out), err -} - -// CountOfStringInSlice Used to count the pods using prefix passed in the list of pods -func CountOfStringInSlice(str string, pods []Pod) int { - count := 0 - for _, pod := range pods { - if strings.Contains(pod.Name, str) { - count++ - } - } - return count -} - -// DeployWorkload deploys the workloads on the cluster from resource manifest files -func DeployWorkload(workload, kubeconfig string, arch string) (string, error) { - resourceDir := GetBasepath() + "/tests/terraform/amd64_resource_files" - if arch == "arm64" { - resourceDir = GetBasepath() + "/tests/terraform/arm_resource_files" - } - files, err := os.ReadDir(resourceDir) - if err != nil { - err = fmt.Errorf("%s : Unable to read resource manifest file for %s", err, workload) - return "", err - } - fmt.Println("\nDeploying", workload) - for _, f := range files { - filename := filepath.Join(resourceDir, f.Name()) - if strings.TrimSpace(f.Name()) == workload { - cmd := "kubectl apply -f " + filename + " --kubeconfig=" + kubeconfig - fmt.Println(cmd) - return RunCommand(cmd) - } - } - return "", nil -} - -func FetchClusterIP(kubeconfig string, servicename string) (string, error) { - cmd := "kubectl get svc " + servicename + " -o jsonpath='{.spec.clusterIP}' --kubeconfig=" + kubeconfig - fmt.Println(cmd) - return RunCommand(cmd) -} - -func FetchNodeExternalIP(kubeconfig string) []string { - cmd := "kubectl get node --output=jsonpath='{range .items[*]} { .status.addresses[?(@.type==\"ExternalIP\")].address}' --kubeconfig=" + kubeconfig - time.Sleep(10 * time.Second) - res, _ := RunCommand(cmd) - nodeExternalIP := strings.Trim(res, " ") - nodeExternalIPs := strings.Split(nodeExternalIP, " ") - return nodeExternalIPs -} - -func FetchIngressIP(kubeconfig string) ([]string, error) { - cmd := "kubectl get ingress -o jsonpath='{.items[0].status.loadBalancer.ingress[*].ip}' --kubeconfig=" + kubeconfig - fmt.Println(cmd) - res, err := RunCommand(cmd) - if err != nil { - return nil, err - } - ingressIP := strings.Trim(res, " ") - fmt.Println(ingressIP) - ingressIPs := strings.Split(ingressIP, " ") - return ingressIPs, nil -} - -// ParseNodes parses the nodes from the kubectl get nodes command -// and returns a list of nodes -func ParseNodes(kubeConfig string, print bool) ([]Node, error) { - nodes := make([]Node, 0, 10) - nodeList := "" - - cmd := "kubectl get nodes --no-headers -o wide -A --kubeconfig=" + kubeConfig - res, err := RunCommand(cmd) - - if err != nil { - return nil, err - } - nodeList = strings.TrimSpace(res) - split := strings.Split(nodeList, "\n") - for _, rec := range split { - if strings.TrimSpace(rec) != "" { - fields := strings.Fields(rec) - node := Node{ - Name: fields[0], - Status: fields[1], - Roles: fields[2], - Version: fields[4], - InternalIP: fields[5], - ExternalIP: fields[6], - } - nodes = append(nodes, node) - } - } - if print { - fmt.Println(nodeList) - } - return nodes, nil -} - -// ParsePods parses the pods from the kubectl get pods command -// and returns a list of pods -func ParsePods(kubeconfig string, print bool) ([]Pod, error) { - pods := make([]Pod, 0, 10) - podList := "" - - cmd := "kubectl get pods -o wide --no-headers -A --kubeconfig=" + kubeconfig - res, _ := RunCommand(cmd) - res = strings.TrimSpace(res) - podList = res - - split := strings.Split(res, "\n") - for _, rec := range split { - fields := strings.Fields(string(rec)) - pod := Pod{ - NameSpace: fields[0], - Name: fields[1], - Ready: fields[2], - Status: fields[3], - Restarts: fields[4], - NodeIP: fields[6], - Node: fields[7], - } - pods = append(pods, pod) - } - if print { - fmt.Println(podList) - } - return pods, nil -} - -func PrintFileContents(f ...string) error { - for _, file := range f { - content, err := os.ReadFile(file) - if err != nil { - return err - } - fmt.Println(string(content) + "\n") - } - - return nil -} diff --git a/tests/terraform/upgradecluster/upgradecluster_test.go b/tests/terraform/upgradecluster/upgradecluster_test.go deleted file mode 100644 index ff8dc59faad0..000000000000 --- a/tests/terraform/upgradecluster/upgradecluster_test.go +++ /dev/null @@ -1,592 +0,0 @@ -package upgradecluster - -import ( - "flag" - "fmt" - "strings" - "testing" - - tf "github.com/k3s-io/k3s/tests/terraform" - "github.com/k3s-io/k3s/tests/terraform/createcluster" - - . "github.com/onsi/ginkgo/v2" - . "github.com/onsi/gomega" -) - -var ( - arch = flag.String("arch", "amd64", "a string") - destroy = flag.Bool("destroy", false, "a bool") - failed = false - upgradeVersion = flag.String("upgradeVersion", "", "Version to upgrade the cluster to") -) - -func Test_TFClusterUpgradeValidation(t *testing.T) { - RegisterFailHandler(Fail) - flag.Parse() - RunSpecs(t, "Upgrade Cluster Test Suite") -} - -var _ = Describe("Test:", func() { - Context("Build Cluster:", func() { - It("Starts up with no issues", func() { - _, err := createcluster.BuildCluster(&testing.T{}, false) - Expect(err).NotTo(HaveOccurred()) - - defer GinkgoRecover() - if strings.Contains(createcluster.ClusterType, "etcd") { - fmt.Println("Backend:", createcluster.ClusterType) - } else { - fmt.Println("Backend:", createcluster.ExternalDb) - } - Expect(createcluster.KubeConfigFile).ShouldNot(BeEmpty()) - - if createcluster.ExternalDb != "" && createcluster.ClusterType == "" { - for i := 0; i > len(createcluster.MasterIPs); i++ { - cmd := "grep \"datastore-endpoint\" /etc/systemd/system/k3s.service" - res, err := tf.RunCmdOnNode(cmd, string(createcluster.MasterIPs[0]), createcluster.AwsUser, createcluster.AccessKey) - Expect(err).NotTo(HaveOccurred()) - Expect(res).Should(ContainSubstring(createcluster.RenderedTemplate)) - } - } - - tf.PrintFileContents(createcluster.KubeConfigFile) - Expect(createcluster.KubeConfigFile).ShouldNot(BeEmpty()) - Expect(createcluster.MasterIPs).ShouldNot(BeEmpty()) - - fmt.Println("Server Node IPS:", createcluster.MasterIPs) - fmt.Println("Agent Node IPS:", createcluster.WorkerIPs) - - if createcluster.NumWorkers > 0 { - Expect(createcluster.WorkerIPs).ShouldNot(BeEmpty()) - } else { - Expect(createcluster.WorkerIPs).Should(BeEmpty()) - } - }) - - It("Checks Node and Pod Status", func() { - defer func() { - _, err := tf.ParseNodes(createcluster.KubeConfigFile, true) - if err != nil { - fmt.Println("Error retrieving nodes: ", err) - } - _, err = tf.ParsePods(createcluster.KubeConfigFile, true) - if err != nil { - fmt.Println("Error retrieving pods: ", err) - } - }() - - expectedNodeCount := createcluster.NumServers + createcluster.NumWorkers - - fmt.Printf("\nFetching node status\n") - Eventually(func(g Gomega) { - nodes, err := tf.ParseNodes(createcluster.KubeConfigFile, false) - - Expect(err).NotTo(HaveOccurred()) - Expect(len(nodes)).To(Equal(expectedNodeCount), - "Number of nodes should match the spec") - - for _, node := range nodes { - g.Expect(node.Status).Should(Equal("Ready"), - "Nodes should all be in Ready state") - } - }, "600s", "5s").Should(Succeed()) - - fmt.Printf("\nFetching pod status\n") - Eventually(func(g Gomega) { - pods, err := tf.ParsePods(createcluster.KubeConfigFile, false) - g.Expect(err).NotTo(HaveOccurred()) - - for _, pod := range pods { - if strings.Contains(pod.Name, "helm-install") { - g.Expect(pod.Status).Should(Equal("Completed"), pod.Name) - } else { - g.Expect(pod.Status).Should(Equal("Running"), pod.Name) - g.Expect(pod.Restarts).Should(Equal("0"), pod.Name) - } - } - }, "600s", "5s").Should(Succeed()) - }) - - It("Verifies ClusterIP Service", func() { - _, err := tf.DeployWorkload("clusterip.yaml", createcluster.KubeConfigFile, *arch) - Expect(err).NotTo(HaveOccurred(), "Cluster IP manifest not deployed") - - Eventually(func(g Gomega) { - cmd := "kubectl get pods -o=name -l k8s-app=nginx-app-clusterip" + - " --field-selector=status.phase=Running --kubeconfig=" + createcluster.KubeConfigFile - res, err := tf.RunCommand(cmd) - - g.Expect(err).NotTo(HaveOccurred()) - g.Expect(res).Should(ContainSubstring("test-clusterip")) - }, "420s", "5s").Should(Succeed()) - - clusterip, _ := tf.FetchClusterIP(createcluster.KubeConfigFile, "nginx-clusterip-svc") - cmd := "curl -sL --insecure http://" + clusterip + "/name.html" - nodeExternalIP := tf.FetchNodeExternalIP(createcluster.KubeConfigFile) - - for _, ip := range nodeExternalIP { - Eventually(func(g Gomega) { - res, err := tf.RunCmdOnNode(cmd, ip, createcluster.AwsUser, createcluster.AccessKey) - - g.Expect(err).NotTo(HaveOccurred()) - g.Expect(res).Should(ContainSubstring("test-clusterip")) - }, "420s", "10s").Should(Succeed()) - } - }) - - It("Verifies NodePort Service", func() { - _, err := tf.DeployWorkload("nodeport.yaml", createcluster.KubeConfigFile, *arch) - Expect(err).NotTo(HaveOccurred(), "NodePort manifest not deployed") - - nodeExternalIP := tf.FetchNodeExternalIP(createcluster.KubeConfigFile) - cmd := "kubectl get service nginx-nodeport-svc --kubeconfig=" + createcluster.KubeConfigFile + - " --output jsonpath=\"{.spec.ports[0].nodePort}\"" - - nodeport, err := tf.RunCommand(cmd) - Expect(err).NotTo(HaveOccurred()) - - for _, ip := range nodeExternalIP { - Eventually(func(g Gomega) { - cmd := "kubectl get pods -o=name -l k8s-app=nginx-app-nodeport " + - "--field-selector=status.phase=Running --kubeconfig=" + createcluster.KubeConfigFile - res, err := tf.RunCommand(cmd) - - g.Expect(err).NotTo(HaveOccurred()) - g.Expect(res).Should(ContainSubstring("test-nodeport")) - }, "240s", "5s").Should(Succeed()) - - cmd = "curl -sL --insecure http://" + ip + ":" + nodeport + "/name.html" - Eventually(func(g Gomega) { - res, err := tf.RunCommand(cmd) - g.Expect(err).NotTo(HaveOccurred()) - g.Expect(res).Should(ContainSubstring("test-nodeport")) - }, "240s", "5s").Should(Succeed()) - } - }) - - It("Verifies LoadBalancer Service", func() { - _, err := tf.DeployWorkload("loadbalancer.yaml", createcluster.KubeConfigFile, *arch) - Expect(err).NotTo(HaveOccurred(), "Loadbalancer manifest not deployed") - - nodeExternalIP := tf.FetchNodeExternalIP(createcluster.KubeConfigFile) - cmd := "kubectl get service nginx-loadbalancer-svc --kubeconfig=" + createcluster.KubeConfigFile + - " --output jsonpath=\"{.spec.ports[0].port}\"" - - port, err := tf.RunCommand(cmd) - Expect(err).NotTo(HaveOccurred()) - - for _, ip := range nodeExternalIP { - - Eventually(func(g Gomega) { - cmd := "kubectl get pods -o=name -l k8s-app=nginx-app-loadbalancer " + - "--field-selector=status.phase=Running --kubeconfig=" + createcluster.KubeConfigFile - res, err := tf.RunCommand(cmd) - - g.Expect(err).NotTo(HaveOccurred()) - g.Expect(res).Should(ContainSubstring("test-loadbalancer")) - }, "240s", "5s").Should(Succeed()) - - Eventually(func(g Gomega) { - cmd = "curl -sL --insecure http://" + ip + ":" + port + "/name.html" - res, err := tf.RunCommand(cmd) - - g.Expect(err).NotTo(HaveOccurred()) - g.Expect(res).Should(ContainSubstring("test-loadbalancer")) - }, "240s", "5s").Should(Succeed()) - } - }) - - It("Verifies Ingress", func() { - _, err := tf.DeployWorkload("ingress.yaml", createcluster.KubeConfigFile, *arch) - Expect(err).NotTo(HaveOccurred(), "Ingress manifest not deployed") - - Eventually(func(g Gomega) { - cmd := "kubectl get pods -o=name -l k8s-app=nginx-app-ingress " + - "--field-selector=status.phase=Running --kubeconfig=" + createcluster.KubeConfigFile - res, err := tf.RunCommand(cmd) - - g.Expect(err).NotTo(HaveOccurred()) - g.Expect(res).Should(ContainSubstring("test-ingress")) - }, "240s", "5s").Should(Succeed()) - - ingressIps, err := tf.FetchIngressIP(createcluster.KubeConfigFile) - Expect(err).NotTo(HaveOccurred(), "Ingress ip is not returned") - - for _, ip := range ingressIps { - cmd := "curl -s --header host:foo1.bar.com" + " http://" + ip + "/name.html" - - Eventually(func(g Gomega) { - res, err := tf.RunCommand(cmd) - g.Expect(err).NotTo(HaveOccurred()) - g.Expect(res).Should(ContainSubstring("test-ingress")) - }, "240s", "5s").Should(Succeed()) - } - }) - - It("Verifies Daemonset", func() { - _, err := tf.DeployWorkload("daemonset.yaml", createcluster.KubeConfigFile, *arch) - Expect(err).NotTo(HaveOccurred(), "Daemonset manifest not deployed") - - nodes, _ := tf.ParseNodes(createcluster.KubeConfigFile, false) - pods, _ := tf.ParsePods(createcluster.KubeConfigFile, false) - - Eventually(func(g Gomega) { - count := tf.CountOfStringInSlice("test-daemonset", pods) - g.Expect(len(nodes)).Should(Equal(count), - "Daemonset pod count does not match node count") - }, "420s", "10s").Should(Succeed()) - }) - - It("Verifies Local Path Provisioner storage ", func() { - _, err := tf.DeployWorkload("local-path-provisioner.yaml", createcluster.KubeConfigFile, *arch) - Expect(err).NotTo(HaveOccurred(), "local-path-provisioner manifest not deployed") - - Eventually(func(g Gomega) { - cmd := "kubectl get pvc local-path-pvc --kubeconfig=" + createcluster.KubeConfigFile - res, err := tf.RunCommand(cmd) - - g.Expect(err).NotTo(HaveOccurred()) - g.Expect(res).Should(ContainSubstring("local-path-pvc")) - g.Expect(res).Should(ContainSubstring("Bound")) - }, "420s", "2s").Should(Succeed()) - - Eventually(func(g Gomega) { - cmd := "kubectl get pod volume-test --kubeconfig=" + createcluster.KubeConfigFile - res, err := tf.RunCommand(cmd) - - Expect(err).NotTo(HaveOccurred()) - g.Expect(res).Should(ContainSubstring("volume-test")) - g.Expect(res).Should(ContainSubstring("Running")) - }, "420s", "2s").Should(Succeed()) - - cmd := "kubectl --kubeconfig=" + createcluster.KubeConfigFile + " exec volume-test -- sh -c 'echo local-path-test > /data/test'" - _, err = tf.RunCommand(cmd) - Expect(err).NotTo(HaveOccurred()) - - cmd = "kubectl delete pod volume-test --kubeconfig=" + createcluster.KubeConfigFile - _, err = tf.RunCommand(cmd) - Expect(err).NotTo(HaveOccurred()) - - _, err = tf.DeployWorkload("local-path-provisioner.yaml", createcluster.KubeConfigFile, *arch) - Expect(err).NotTo(HaveOccurred(), "local-path-provisioner manifest not deployed") - - Eventually(func(g Gomega) { - cmd := "kubectl get pods -o=name -l app=local-path-provisioner " + - "--field-selector=status.phase=Running -n kube-system --kubeconfig=" + createcluster.KubeConfigFile - res, err := tf.RunCommand(cmd) - - Expect(err).NotTo(HaveOccurred()) - g.Expect(res).Should(ContainSubstring("pod/local-path-provisioner")) - }, "420s", "2s").Should(Succeed()) - - Eventually(func(g Gomega) { - cmd := "kubectl get pod volume-test --kubeconfig=" + createcluster.KubeConfigFile - res, err := tf.RunCommand(cmd) - - g.Expect(err).NotTo(HaveOccurred()) - g.Expect(res).Should(ContainSubstring("volume-test")) - g.Expect(res).Should(ContainSubstring("Running")) - }, "420s", "2s").Should(Succeed()) - - Eventually(func(g Gomega) { - cmd = "kubectl exec volume-test --kubeconfig=" + createcluster.KubeConfigFile + " -- cat /data/test" - res, err := tf.RunCommand(cmd) - - g.Expect(err).NotTo(HaveOccurred()) - g.Expect(res).Should(ContainSubstring("local-path-test")) - }, "180s", "2s").Should(Succeed()) - }) - - It("Verifies dns access", func() { - _, err := tf.DeployWorkload("dnsutils.yaml", createcluster.KubeConfigFile, *arch) - Expect(err).NotTo(HaveOccurred(), "dnsutils manifest not deployed") - - Eventually(func(g Gomega) { - cmd := "kubectl get pods dnsutils --kubeconfig=" + createcluster.KubeConfigFile - res, _ := tf.RunCommand(cmd) - - g.Expect(res).Should(ContainSubstring("dnsutils")) - g.Expect(res).Should(ContainSubstring("Running")) - }, "420s", "2s").Should(Succeed()) - - Eventually(func(g Gomega) { - cmd := "kubectl --kubeconfig=" + createcluster.KubeConfigFile + - " exec -t dnsutils -- nslookup kubernetes.default" - res, _ := tf.RunCommand(cmd) - - g.Expect(res).Should(ContainSubstring("kubernetes.default.svc.cluster.local")) - }, "420s", "2s").Should(Succeed()) - }) - - It("Verify Cluster is upgraded", func() { - MIPs := strings.Split(createcluster.MasterIPs, ",") - - for _, ip := range MIPs { - cmd := "sed -i \"s/|/| INSTALL_K3S_VERSION=" + *upgradeVersion + "/g\" /tmp/master_cmd" - Eventually(func(g Gomega) { - _, err := tf.RunCmdOnNode(cmd, ip, createcluster.AwsUser, createcluster.AccessKey) - g.Expect(err).NotTo(HaveOccurred()) - }, "420s", "2s").Should(Succeed()) - - cmd = "sudo chmod u+x /tmp/master_cmd && sudo /tmp/master_cmd" - fmt.Println(cmd) - Eventually(func(g Gomega) { - _, err := tf.RunCmdOnNode(cmd, ip, createcluster.AwsUser, createcluster.AccessKey) - g.Expect(err).NotTo(HaveOccurred()) - }, "420s", "2s").Should(Succeed()) - } - - WIPs := strings.Split(createcluster.WorkerIPs, ",") - for _, ip := range WIPs { - cmd := "sed -i \"s/|/| INSTALL_K3S_VERSION=" + *upgradeVersion + "/g\" /tmp/agent_cmd" - Eventually(func(g Gomega) { - _, err := tf.RunCmdOnNode(cmd, ip, createcluster.AwsUser, createcluster.AccessKey) - g.Expect(err).NotTo(HaveOccurred()) - }, "420s", "2s").Should(Succeed()) - - cmd = "sudo chmod u+x /tmp/agent_cmd && sudo /tmp/agent_cmd" - Eventually(func(g Gomega) { - _, err := tf.RunCmdOnNode(cmd, ip, createcluster.AwsUser, createcluster.AccessKey) - g.Expect(err).NotTo(HaveOccurred()) - }, "420s", "2s").Should(Succeed()) - } - }) - - It("Checks Node and Pod Status after upgrade", func() { - defer func() { - _, err := tf.ParseNodes(createcluster.KubeConfigFile, true) - if err != nil { - fmt.Println("Error retrieving nodes: ", err) - } - _, err = tf.ParsePods(createcluster.KubeConfigFile, true) - if err != nil { - fmt.Println("Error retrieving pods: ", err) - } - }() - - fmt.Printf("\nFetching node status\n") - - Eventually(func(g Gomega) { - expectedNodeCount := createcluster.NumServers + createcluster.NumWorkers - nodes, err := tf.ParseNodes(createcluster.KubeConfigFile, false) - - g.Expect(err).NotTo(HaveOccurred()) - g.Expect(len(nodes)).To(Equal(expectedNodeCount), - "Number of nodes should match the spec") - - for _, node := range nodes { - g.Expect(node.Status).Should(Equal("Ready"), - "Nodes should all be in Ready state") - g.Expect(node.Version).Should(ContainSubstring(*upgradeVersion)) - } - }, "420s", "5s").Should(Succeed()) - - fmt.Printf("\nFetching pod status\n") - Eventually(func(g Gomega) { - pods, err := tf.ParsePods(createcluster.KubeConfigFile, false) - g.Expect(err).NotTo(HaveOccurred()) - - for _, pod := range pods { - if strings.Contains(pod.Name, "helm-install") { - g.Expect(pod.Status).Should(Equal("Completed"), pod.Name) - } else { - g.Expect(pod.Status).Should(Equal("Running"), pod.Name) - } - } - }, "600s", "5s").Should(Succeed()) - }) - - It("Verifies ClusterIP Service after upgrade", func() { - Eventually(func(g Gomega) { - cmd := "kubectl get pods -o=name -l k8s-app=nginx-app-clusterip " + - "--field-selector=status.phase=Running --kubeconfig=" + createcluster.KubeConfigFile - res, err := tf.RunCommand(cmd) - - g.Expect(err).NotTo(HaveOccurred()) - g.Expect(res).Should(ContainSubstring("test-clusterip")) - }, "420s", "5s").Should(Succeed()) - - clusterip, _ := tf.FetchClusterIP(createcluster.KubeConfigFile, "nginx-clusterip-svc") - cmd := "curl -sL --insecure http://" + clusterip + "/name.html" - nodeExternalIP := tf.FetchNodeExternalIP(createcluster.KubeConfigFile) - - for _, ip := range nodeExternalIP { - Eventually(func(g Gomega) { - res, err := tf.RunCmdOnNode(cmd, ip, createcluster.AwsUser, createcluster.AccessKey) - - g.Expect(err).NotTo(HaveOccurred()) - g.Expect(res).Should(ContainSubstring("test-clusterip")) - - }, "420s", "10s").Should(Succeed()) - } - }) - - It("Verifies NodePort Service after upgrade", func() { - nodeExternalIP := tf.FetchNodeExternalIP(createcluster.KubeConfigFile) - cmd := "kubectl get service nginx-nodeport-svc --kubeconfig=" + createcluster.KubeConfigFile + - " --output jsonpath=\"{.spec.ports[0].nodePort}\"" - - nodeport, err := tf.RunCommand(cmd) - Expect(err).NotTo(HaveOccurred()) - - for _, ip := range nodeExternalIP { - Eventually(func(g Gomega) { - cmd := "kubectl get pods -o=name -l k8s-app=nginx-app-nodeport " + - "--field-selector=status.phase=Running --kubeconfig=" + createcluster.KubeConfigFile - res, err := tf.RunCommand(cmd) - - g.Expect(err).NotTo(HaveOccurred()) - g.Expect(res).Should(ContainSubstring("test-nodeport")) - }, "240s", "5s").Should(Succeed()) - - cmd = "curl -L --insecure http://" + ip + ":" + nodeport + "/name.html" - Eventually(func(g Gomega) { - res, err := tf.RunCommand(cmd) - - g.Expect(err).NotTo(HaveOccurred()) - g.Expect(res).Should(ContainSubstring("test-nodeport")) - }, "240s", "5s").Should(Succeed()) - } - }) - - It("Verifies LoadBalancer Service after upgrade", func() { - nodeExternalIP := tf.FetchNodeExternalIP(createcluster.KubeConfigFile) - cmd := "kubectl get service nginx-loadbalancer-svc --kubeconfig=" + - createcluster.KubeConfigFile + " --output jsonpath=\"{.spec.ports[0].port}\"" - port, err := tf.RunCommand(cmd) - - Expect(err).NotTo(HaveOccurred()) - - for _, ip := range nodeExternalIP { - Eventually(func(g Gomega) { - cmd := "kubectl get pods -o=name -l k8s-app=nginx-app-loadbalancer " + - "--field-selector=status.phase=Running --kubeconfig=" + createcluster.KubeConfigFile - res, err := tf.RunCommand(cmd) - - g.Expect(err).NotTo(HaveOccurred()) - g.Expect(res).Should(ContainSubstring("test-loadbalancer")) - }, "240s", "5s").Should(Succeed()) - - Eventually(func(g Gomega) { - cmd = "curl -sL --insecure http://" + ip + ":" + port + "/name.html" - res, err := tf.RunCommand(cmd) - - g.Expect(err).NotTo(HaveOccurred()) - g.Expect(res).Should(ContainSubstring("test-loadbalancer")) - }, "240s", "5s").Should(Succeed()) - } - }) - - It("Verifies Ingress after upgrade", func() { - Eventually(func(g Gomega) { - cmd := "kubectl get pods -o=name -l k8s-app=nginx-app-ingress " + - "--field-selector=status.phase=Running --kubeconfig=" + createcluster.KubeConfigFile - res, err := tf.RunCommand(cmd) - - g.Expect(err).NotTo(HaveOccurred()) - g.Expect(res).Should(ContainSubstring("test-ingress")) - }, "240s", "5s").Should(Succeed()) - - ingressIps, err := tf.FetchIngressIP(createcluster.KubeConfigFile) - Expect(err).NotTo(HaveOccurred(), "Ingress ip is not returned") - - for _, ip := range ingressIps { - cmd := "curl -s --header host:foo1.bar.com" + " http://" + ip + "/name.html" - Eventually(func(g Gomega) { - res, err := tf.RunCommand(cmd) - g.Expect(err).NotTo(HaveOccurred()) - g.Expect(res).Should(ContainSubstring("test-ingress")) - }, "240s", "5s").Should(Succeed()) - } - }) - - It("Verifies Daemonset after upgrade", func() { - nodes, _ := tf.ParseNodes(createcluster.KubeConfigFile, false) - pods, _ := tf.ParsePods(createcluster.KubeConfigFile, false) - - Eventually(func(g Gomega) { - count := tf.CountOfStringInSlice("test-daemonset", pods) - g.Expect(len(nodes)).Should(Equal(count), - "Daemonset pod count does not match node count") - }, "420s", "10s").Should(Succeed()) - - Eventually(func(g Gomega) { - for _, pod := range pods { - if strings.Contains(pod.Name, "test-daemonset") { - g.Expect(pod.Status).Should(Equal("Running"), pod.Name) - } - } - }, "240s", "5s").Should(Succeed()) - }) - - It("Validating Local Path Provisioner storage after upgrade", func() { - Eventually(func(g Gomega) { - cmd := "kubectl get pods -o=name -l app=local-path-provisioner" + - " --field-selector=status.phase=Running -n kube-system --kubeconfig=" + createcluster.KubeConfigFile - res, err := tf.RunCommand(cmd) - - Expect(err).NotTo(HaveOccurred()) - g.Expect(res).Should(ContainSubstring("pod/local-path-provisioner")) - }, "420s", "2s").Should(Succeed()) - - Eventually(func(g Gomega) { - cmd := "kubectl get pod volume-test --kubeconfig=" + createcluster.KubeConfigFile - res, err := tf.RunCommand(cmd) - - g.Expect(err).NotTo(HaveOccurred()) - g.Expect(res).Should(ContainSubstring("volume-test")) - g.Expect(res).Should(ContainSubstring("Running")) - }, "420s", "2s").Should(Succeed()) - - Eventually(func(g Gomega) { - cmd := "kubectl exec volume-test --kubeconfig=" + createcluster.KubeConfigFile + " -- cat /data/test" - res, err := tf.RunCommand(cmd) - - g.Expect(err).NotTo(HaveOccurred()) - g.Expect(res).Should(ContainSubstring("local-path-test")) - }, "180s", "2s").Should(Succeed()) - }) - - It("Verifies dns access after upgrade", func() { - Eventually(func(g Gomega) { - cmd := "kubectl get pods dnsutils --kubeconfig=" + createcluster.KubeConfigFile - res, _ := tf.RunCommand(cmd) - - g.Expect(res).Should(ContainSubstring("dnsutils")) - g.Expect(res).Should(ContainSubstring("Running")) - }, "420s", "2s").Should(Succeed()) - - Eventually(func(g Gomega) { - cmd := "kubectl --kubeconfig=" + createcluster.KubeConfigFile + - " exec -t dnsutils -- nslookup kubernetes.default" - res, _ := tf.RunCommand(cmd) - - g.Expect(res).Should(ContainSubstring("kubernetes.default.svc.cluster.local")) - }, "420s", "2s").Should(Succeed()) - }) - }) -}) - -var _ = BeforeEach(func() { - failed = failed || CurrentSpecReport().Failed() - if *destroy { - Skip("Cluster is being Deleted") - } -}) - -var _ = AfterEach(func() { - if CurrentSpecReport().Failed() { - fmt.Printf("\nFAILED! %s\n", CurrentSpecReport().FullText()) - } else { - fmt.Printf("\nPASSED! %s\n", CurrentSpecReport().FullText()) - } -}) - -var _ = AfterSuite(func() { - if *destroy { - status, err := createcluster.BuildCluster(&testing.T{}, *destroy) - - Expect(err).NotTo(HaveOccurred()) - Expect(status).To(Equal("cluster destroyed")) - } -}) From e69e88f59570200edd5bc53bfa22b013965c9739 Mon Sep 17 00:00:00 2001 From: Francisco Date: Tue, 28 May 2024 13:38:02 -0300 Subject: [PATCH 2/2] add qase report Signed-off-by: Francisco --- .DS_Store | Bin 0 -> 8196 bytes .github/workflows/nightly-install.yaml | 153 +++++++++++++++++++------ go.mod | 3 + go.sum | 7 +- tests/e2e/startup/startup_test.go | 3 +- tests/install/rocky-8/Vagrantfile | 10 ++ tests/install/test_results.json | 3 + 7 files changed, 140 insertions(+), 39 deletions(-) create mode 100644 .DS_Store create mode 100644 tests/install/test_results.json diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..797a55bdec428632ecd91f136e6a3ffb9a683112 GIT binary patch literal 8196 zcmeHMy=zlZ6hF5~OkzP(2hAYzrh*`19Yh2rhFGkigB5gazD#42CbsGRCIvxo5r;00 zRdDMc;3BvPii@J4yGtiG#oztNd*{B7IB5&L7v4ROdw%!*e(&6mllwwMqPo$VBPtV7 z0hhF;X;cYC`sEcXQ>NuStU!P2b>Ea`tP1W+@&?v3wqmTWEj%bfcZJnmg*jpf z-5u?o!Bvd)wbk88n8SxK%)*>dgks0@Jq0IG(bm;20xkma2*|U0mQGWLx-{bF_t}fT zH@UArsMQ+1K?7}t+}iy^@3!7tw*9S%{^4@?ZD7{lL08I;d1;w8sKMEZx}W0+uHjbs z=!;9Il!nN2`h!qOI*RKdaYpLNK~I-j)TX+v<-`Nq%XO4~&K!8St#q*dTthO#;-@9a zpP?r8sbzD|%Mmgj&imzF@cw}}eDAo|;?tYxH24OzN_SDOfw_+RCbez;saN1nL2^Aa z*XIwKIgyGE_5B@f>D9>~Z}g6!wi}%!l9f6^obXhvGFp&U<7l7@MFkpP@;9i&rP* zqM0LI%$PQ<(b4D_r}#~P($l?$PV^Dq3mI$l4fALosGEk5tPpPm1SmLkshA9k1V(axZmmu@K?BNJd!vht)bM zBC8CsM(avPlX}#(#)7JHUr#`BJx|XbALp4wWTiFqZO3p`Tt7#_y1kj z=>)h4xCs2a2#9QLu~x&>Virg$6?iR95(pF5ceLSvQNcW sUt6@G{Pzz5>X(!Lg~0du^vurlUpmU(-(CL4(6an(> $GITHUB_ENV + + ## step + + + # complete the run + COMPLETE_RUN=$(curl --request POST \ + --url https://api.qase.io/v1/run/K3SRKE2/$RUN_ID/complete \ + --header 'Token: $QASE_API_TOKEN' \ + --header 'accept: application/json' + ) + + RUN_STATUS=$(echo $COMPLETE_RUN | jq -r '.status') + if [[ $RUN_STATUS != true ]]; then + echo "Failed to complete the run" + fi + +# # make run public +# PUBLISH_RUN=$(curl --request PATCH \ +# --url https://api.qase.io/v1/run/K3SRKE2/$RUN_ID/public \ +# --header 'Token: $QASE_API_TOKEN' \ +# --header 'accept: application/json' \ +# --header 'content-type: application/json' \ +# --data '{"status":true}' +# ) +# +# REPORT_URL=$(echo $PUBLISH_RUN | jq -r '.result.url') +# if [[ -n "${REPORT_URL}" ]]; then +# echo report url: ${REPORT_URL} +# echo "## QASE Reporting" >> ${GITHUB_STEP_SUMMARY} +# echo "Public Qase report: ${REPORT_URL}" >> ${GITHUB_STEP_SUMMARY} +# fi + + - name: Run Tests and Upload Results to Qase + env: + QASE_API_TOKEN: ${{ secrets.QASE_API_TOKEN }} + QASE_RUN_ID: ${{ env.QASE_RUN_ID }} + run: | + echo "Run K3s Smoke Test" + #Example: ./run-tests.sh and capture results in a file, e.g., test-results.json + ./run-tests.sh > test-results.json + + + + + diff --git a/go.mod b/go.mod index 3cfb04b998f0..eec2b0e4760b 100644 --- a/go.mod +++ b/go.mod @@ -121,6 +121,7 @@ require ( github.com/pkg/errors v0.9.1 github.com/prometheus/client_golang v1.19.1 github.com/prometheus/common v0.49.0 + github.com/rancher-sandbox/qase-ginkgo v1.0.1 github.com/rancher/dynamiclistener v0.6.0-rc1 github.com/rancher/lasso v0.0.0-20240430201833-6f3def65ffc5 github.com/rancher/remotedialer v0.3.0 @@ -179,6 +180,7 @@ require ( github.com/Microsoft/go-winio v0.6.2 // indirect github.com/NYTimes/gziphandler v1.1.1 // indirect github.com/Rican7/retry v0.1.0 // indirect + github.com/antihax/optional v1.0.0 // indirect github.com/antlr/antlr4/runtime/Go/antlr/v4 v4.0.0-20230305170008-8188dc5388df // indirect github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e // indirect github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a // indirect @@ -430,6 +432,7 @@ require ( go.opentelemetry.io/otel/sdk v1.24.0 // indirect go.opentelemetry.io/otel/trace v1.24.0 // indirect go.opentelemetry.io/proto/otlp v1.0.0 // indirect + go.qase.io/client v0.0.0-20231114201952-65195ec001fa // indirect go.starlark.net v0.0.0-20230525235612-a134d8f9ddca // indirect go.uber.org/dig v1.17.1 // indirect go.uber.org/fx v1.20.1 // indirect diff --git a/go.sum b/go.sum index 508117fb7da4..7fd60a32e507 100644 --- a/go.sum +++ b/go.sum @@ -252,8 +252,6 @@ github.com/Microsoft/go-winio v0.6.0/go.mod h1:cTAf44im0RAYeL23bpB+fzCyDH2MJiz2B github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM= github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY= github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU= -github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY= -github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU= github.com/Microsoft/hcsshim v0.11.0 h1:7EFNIY4igHEXUdj1zXgAyU3fLc7QfOKHbkldRVTBdiM= github.com/Microsoft/hcsshim v0.11.0/go.mod h1:OEthFdQv/AD2RAdzR6Mm1N1KPCztGKDurW1Z8b8VGMM= github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ= @@ -276,6 +274,7 @@ github.com/alexflint/go-filemutex v1.2.0/go.mod h1:mYyQSWvw9Tx2/H2n9qXPb52tTYfE0 github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8= github.com/andybalholm/brotli v1.0.4/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig= github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c= +github.com/antihax/optional v1.0.0 h1:xK2lYat7ZLaVVcIuj82J8kIro4V6kDe0AUDFboUCwcg= github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= github.com/antlr/antlr4/runtime/Go/antlr/v4 v4.0.0-20230305170008-8188dc5388df h1:7RFfzj4SSt6nnvCPbCqijJi1nWCd+TqAT3bYCStRC18= github.com/antlr/antlr4/runtime/Go/antlr/v4 v4.0.0-20230305170008-8188dc5388df/go.mod h1:pSwJ0fSY5KhvocuWSx4fz3BA8OrA1bQn+K1Eli3BRwM= @@ -1401,10 +1400,14 @@ github.com/quic-go/quic-go v0.42.0 h1:uSfdap0eveIl8KXnipv9K7nlwZ5IqLlYOpJ58u5utp github.com/quic-go/quic-go v0.42.0/go.mod h1:132kz4kL3F9vxhW3CtQJLDVwcFe5wdWeJXXijhsO57M= github.com/quic-go/webtransport-go v0.6.0 h1:CvNsKqc4W2HljHJnoT+rMmbRJybShZ0YPFDD3NxaZLY= github.com/quic-go/webtransport-go v0.6.0/go.mod h1:9KjU4AEBqEQidGHNDkZrb8CAa1abRaosM2yGOyiikEc= +github.com/rancher-sandbox/qase-ginkgo v1.0.1 h1:LB9ITLavX3PmcOe0hp0Y7rwQCjJ3WpL8kG8v1MxPadE= +github.com/rancher-sandbox/qase-ginkgo v1.0.1/go.mod h1:sIF43xaLHtEzmPqADKlZZV6oatc66GHz1N6gpBNn6QY= github.com/rancher/dynamiclistener v0.6.0-rc1 h1:Emwf9o7PMLdQNv4lvFx7xJKxDuDa4Y69GvVEGU9U9Js= github.com/rancher/dynamiclistener v0.6.0-rc1/go.mod h1:BIPgJ8xFSUyuTyGvRMVt++S1qjD3+7Ptvq1TXl6hcTM= github.com/rancher/lasso v0.0.0-20240430201833-6f3def65ffc5 h1:6K4RhfmCy7uxaw9OzCljNLfFcgD/q7SeF+/2gCQ3Tvw= github.com/rancher/lasso v0.0.0-20240430201833-6f3def65ffc5/go.mod h1:7WkdfPEvWAdnHVioMUkhpZkshJzjDY62ocHVhcbw89M= +github.com/rancher/qase-go/client v0.0.0-20231114201952-65195ec001fa h1:/qeYlQVfyvsO5yY0dZmm7mRTAsDm54jACiRDx3LAwsA= +github.com/rancher/qase-go/client v0.0.0-20231114201952-65195ec001fa/go.mod h1:NP3xboG+t2p+XMnrcrJ/L384Ki0Cp3Pww/X+vm5Jcy0= github.com/rancher/remotedialer v0.3.0 h1:y1EO8JCsgZo0RcqTUp6U8FXcBAv27R+TLnWRcpvX1sM= github.com/rancher/remotedialer v0.3.0/go.mod h1:BwwztuvViX2JrLLUwDlsYt5DiyUwHLlzynRwkZLAY0Q= github.com/rancher/wharfie v0.6.4 h1:JwYB+q661n8ut/ysgsjKe0P0z6bHCCFoC+29995ME90= diff --git a/tests/e2e/startup/startup_test.go b/tests/e2e/startup/startup_test.go index 8b7fa01f7edf..75cc625655ed 100644 --- a/tests/e2e/startup/startup_test.go +++ b/tests/e2e/startup/startup_test.go @@ -7,9 +7,10 @@ import ( "strings" "testing" - "github.com/k3s-io/k3s/tests/e2e" . "github.com/onsi/ginkgo/v2" . "github.com/onsi/gomega" + + "github.com/k3s-io/k3s/tests/e2e" ) // Valid nodeOS: generic/ubuntu2310, opensuse/Leap-15.3.x86_64 diff --git a/tests/install/rocky-8/Vagrantfile b/tests/install/rocky-8/Vagrantfile index cc755ec89579..c33c112168b0 100644 --- a/tests/install/rocky-8/Vagrantfile +++ b/tests/install/rocky-8/Vagrantfile @@ -30,6 +30,16 @@ Vagrant.configure("2") do |config| YAML k3s.config_mode = '0644' # side-step https://github.com/k3s-io/k3s/issues/4321 end + + + def log_result(test_case, status) + File.open("/install/test-results.json", "a") do |f| + f.puts({case_id: test_case, status: status}.to_json) + end + end + + + waitForNodeReady(test.vm) waitForCoreDns(test.vm) diff --git a/tests/install/test_results.json b/tests/install/test_results.json new file mode 100644 index 000000000000..0e0dcd235c49 --- /dev/null +++ b/tests/install/test_results.json @@ -0,0 +1,3 @@ +{ + +} \ No newline at end of file