From f3a1c6ba32536a838ef1ce7e21a02a4f93722dc2 Mon Sep 17 00:00:00 2001 From: Kai Reichart Date: Wed, 19 May 2021 09:13:30 +0200 Subject: [PATCH 01/25] fix: jq installation arm Signed-off-by: Kai Reichart --- hack/installers/install-jq-linux.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/hack/installers/install-jq-linux.sh b/hack/installers/install-jq-linux.sh index a9e0086b98b3a..791ed566c9ed0 100755 --- a/hack/installers/install-jq-linux.sh +++ b/hack/installers/install-jq-linux.sh @@ -6,14 +6,14 @@ set -eux -o pipefail case $ARCHITECTURE in arm64) export TARGET_FILE=jq_${jq_version}-1_${ARCHITECTURE}.deb - http://ports.ubuntu.com/ubuntu-ports/pool/universe/j/jq/jq_${jq_version}-1_${ARCHITECTURE}.deb + [ -e $DOWNLOADS/${TARGET_FILE} ] || curl -sLf --retry 3 -o $DOWNLOADS/${TARGET_FILE} http://ports.ubuntu.com/ubuntu-ports/pool/universe/j/jq/jq_${jq_version}-1_${ARCHITECTURE}.deb $(dirname $0)/compare-chksum.sh - sudo dpkg --fsys-tarfile ${TARGET_FILE} | tar xOf - ./usr/bin/jq > $BIN/jq + sudo dpkg --fsys-tarfile $DOWNLOADS/${TARGET_FILE} | tar xOf - ./usr/bin/jq > $BIN/jq ;; arm) ARCHITECTURE=armhf export TARGET_FILE=jq_${jq_version}-1_${ARCHITECTURE}.deb - http://ports.ubuntu.com/ubuntu-ports/pool/universe/j/jq/jq_${jq_version}-1_${ARCHITECTURE}.deb + [ -e $DOWNLOADS/${TARGET_FILE} ] || curl -sLf --retry 3 -o $DOWNLOADS/${TARGET_FILE} http://ports.ubuntu.com/ubuntu-ports/pool/universe/j/jq/jq_${jq_version}-1_${ARCHITECTURE}.deb $(dirname $0)/compare-chksum.sh sudo dpkg --fsys-tarfile ${TARGET_FILE} | tar xOf - ./usr/bin/jq > $BIN/jq ;; From 21217e30a6cadc7f190c0fd245c939ecf3463fff Mon Sep 17 00:00:00 2001 From: Kai Reichart Date: Mon, 14 Jun 2021 12:16:06 +0200 Subject: [PATCH 02/25] added feature for external values Signed-off-by: Kai Reichart --- .github/workflows/image.yaml | 2 +- .github/workflows/release.yaml | 2 +- Dockerfile | 2 +- Makefile | 20 +- USERS.md | 8 + assets/swagger.json | 55 + .../commands/argocd_application_controller.go | 31 +- .../commands/argocd_repo_server.go | 12 +- cmd/argocd-server/commands/argocd_server.go | 27 +- cmd/argocd-util/commands/cluster.go | 198 +- cmd/argocd/commands/account.go | 4 +- cmd/argocd/commands/app.go | 8 +- cmd/util/app.go | 116 +- common/common.go | 4 + controller/appcontroller.go | 25 +- controller/appcontroller_test.go | 20 +- controller/cache/cache.go | 2 +- controller/clusterinfoupdater.go | 1 + controller/health.go | 64 + controller/health_test.go | 161 ++ controller/state.go | 21 +- controller/sync.go | 7 +- controller/testdata/configmap.yaml | 6 + .../testdata/job-failed.yaml | 0 .../testdata/pod-running-restart-always.yaml | 0 docs/cli_installation.md | 10 +- docs/developer-guide/contributing.md | 2 +- docs/developer-guide/use-gitpod.md | 6 +- docs/getting_started.md | 55 +- docs/operator-manual/application.yaml | 7 + docs/operator-manual/argocd-cm.yaml | 34 +- .../operator-manual/argocd-cmd-params-cm.yaml | 104 + docs/operator-manual/declarative-setup.md | 1 + docs/operator-manual/health.md | 34 + docs/operator-manual/rbac.md | 2 +- .../additional-configuration-method.md | 28 + .../argocd-application-controller.md | 6 +- .../argocd-util_app_generate-spec.md | 2 + .../server-commands/argocd-util_cluster.md | 1 + .../argocd-util_cluster_generate-spec.md | 3 + .../argocd-util_cluster_shards.md | 44 + docs/operator-manual/tls.md | 4 +- docs/operator-manual/upgrading/1.7-1.8.md | 6 +- docs/proposals/config-management-plugin-v2.md | 325 +++ docs/proposals/project-repos-and-clusters.md | 172 ++ docs/requirements.txt | 5 +- docs/user-guide/application-set.md | 2 +- docs/user-guide/commands/argocd_app_create.md | 2 + docs/user-guide/commands/argocd_app_logs.md | 1 + docs/user-guide/commands/argocd_app_set.md | 2 + docs/user-guide/config-management-plugins.md | 4 +- docs/user-guide/diffing.md | 12 +- docs/user-guide/sync_windows.md | 4 +- go.mod | 95 +- go.sum | 279 ++- hack/generate-proto.sh | 2 +- .../helm-v3.6.0-linux-amd64.tar.gz.sha256 | 1 + .../helm-v3.6.0-linux-arm64.tar.gz.sha256 | 1 + hack/tool-versions.sh | 4 +- hack/versions.sh | 2 +- ...cd-application-controller-statefulset.yaml | 88 +- .../base/config/argocd-cmd-params-cm.yaml | 7 + manifests/base/config/kustomization.yaml | 2 + .../dex/argocd-dex-server-network-policy.yaml | 5 +- .../argocd-repo-server-deployment.yaml | 66 + .../base/server/argocd-server-deployment.yaml | 144 +- manifests/crds/application-crd.yaml | 1238 ++++++++--- manifests/crds/appproject-crd.yaml | 131 +- manifests/ha/install.yaml | 507 ++++- manifests/ha/namespace-install.yaml | 301 ++- manifests/install.yaml | 512 ++++- manifests/namespace-install.yaml | 306 ++- mkdocs.yml | 1 + pkg/apiclient/account/account.pb.go | 70 +- pkg/apiclient/apiclient.go | 19 + pkg/apiclient/application/application.pb.go | 145 +- pkg/apiclient/certificate/certificate.pb.go | 15 +- pkg/apiclient/cluster/cluster.pb.go | 20 +- pkg/apiclient/gpgkey/gpgkey.pb.go | 20 +- pkg/apiclient/grpcproxy.go | 18 +- pkg/apiclient/project/project.pb.go | 50 +- pkg/apiclient/repocreds/repocreds.pb.go | 25 +- pkg/apiclient/repository/repository.pb.go | 45 +- pkg/apiclient/session/session.pb.go | 25 +- pkg/apiclient/settings/settings.pb.go | 44 +- pkg/apiclient/version/version.pb.go | 19 +- pkg/apiclient/version/version.pb.gw.go | 6 +- pkg/apis/api-rules/violation_exceptions.list | 5 + pkg/apis/application/v1alpha1/generated.pb.go | 1896 ++++++++++------- pkg/apis/application/v1alpha1/generated.proto | 28 + .../application/v1alpha1/openapi_generated.go | 120 +- pkg/apis/application/v1alpha1/types.go | 48 +- .../v1alpha1/zz_generated.deepcopy.go | 43 + reposerver/apiclient/repository.pb.go | 104 +- reposerver/cache/cache.go | 41 +- reposerver/cache/cache_test.go | 23 +- reposerver/repository/repository.go | 154 +- reposerver/repository/repository_test.go | 43 +- server/cache/cache.go | 8 +- server/logout/logout.go | 4 +- server/logout/logout_test.go | 52 +- server/server.go | 3 +- server/settings/oidc/claims.pb.go | 5 +- test/container/Dockerfile | 2 +- test/e2e/fixture/fixture.go | 2 +- test/e2e/helm_test.go | 23 + test/e2e/sync_waves_test.go | 2 +- .../testdata/helm-external-values/app.yaml | 26 + .../helm-external-values/chart/Chart.yaml | 3 + .../chart/templates/configmap.yaml | 22 + .../helm-external-values/chart/values.yaml | 3 + .../chart/values_external.yaml | 2 + .../chart/values_external_2.yaml | 1 + test/remote/README.md | 14 + ui/src/app/app.tsx | 4 +- .../application-details.tsx | 21 +- .../application-parameters.tsx | 15 + .../application-pod-view/pod-view.scss | 2 - .../application-pod-view/pod-view.tsx | 6 +- .../application-resource-tree.tsx | 2 +- .../applications-list/applications-list.tsx | 2 +- ui/src/app/shared/models.ts | 8 + .../app/shared/services/accounts-service.ts | 7 + .../user-info-overview/user-info-overview.tsx | 197 +- ui/yarn.lock | 64 +- util/argo/normalizers/diff_normalizer.go | 128 +- util/argo/normalizers/diff_normalizer_test.go | 67 + util/cache/appstate/cache.go | 3 +- util/cache/cache.go | 6 +- util/cli/cli.go | 17 +- util/db/cluster.go | 53 +- util/db/cluster_test.go | 98 +- util/env/env.go | 21 +- util/env/env_test.go | 17 + util/exec/exec.go | 9 +- util/git/client.go | 4 +- util/health/health.go | 59 - util/health/health_test.go | 121 -- util/helm/helmver.go | 2 +- util/kube/kubectl.go | 5 +- util/kube/portforwarder.go | 2 +- util/kustomize/kustomize.go | 12 +- util/kustomize/kustomize_test.go | 105 +- .../testdata/force_common/deployment.yaml | 23 + .../testdata/force_common/kustomization.yaml | 6 + util/log/logrus.go | 44 + util/log/logrus_test.go | 32 + util/lua/lua.go | 14 +- util/settings/settings_test.go | 26 +- util/tls/tls.go | 8 +- util/webhook/webhook.go | 40 +- util/webhook/webhook_test.go | 11 +- 152 files changed, 7305 insertions(+), 2520 deletions(-) create mode 100644 controller/health.go create mode 100644 controller/health_test.go create mode 100644 controller/testdata/configmap.yaml rename {util/health => controller}/testdata/job-failed.yaml (100%) rename {util/health => controller}/testdata/pod-running-restart-always.yaml (100%) create mode 100644 docs/operator-manual/argocd-cmd-params-cm.yaml create mode 100644 docs/operator-manual/server-commands/additional-configuration-method.md create mode 100644 docs/operator-manual/server-commands/argocd-util_cluster_shards.md create mode 100644 docs/proposals/config-management-plugin-v2.md create mode 100644 docs/proposals/project-repos-and-clusters.md create mode 100644 hack/installers/checksums/helm-v3.6.0-linux-amd64.tar.gz.sha256 create mode 100644 hack/installers/checksums/helm-v3.6.0-linux-arm64.tar.gz.sha256 create mode 100644 manifests/base/config/argocd-cmd-params-cm.yaml create mode 100644 test/e2e/testdata/helm-external-values/app.yaml create mode 100644 test/e2e/testdata/helm-external-values/chart/Chart.yaml create mode 100644 test/e2e/testdata/helm-external-values/chart/templates/configmap.yaml create mode 100644 test/e2e/testdata/helm-external-values/chart/values.yaml create mode 100644 test/e2e/testdata/helm-external-values/chart/values_external.yaml create mode 100644 test/e2e/testdata/helm-external-values/chart/values_external_2.yaml delete mode 100644 util/health/health.go delete mode 100644 util/health/health_test.go create mode 100644 util/kustomize/testdata/force_common/deployment.yaml create mode 100644 util/kustomize/testdata/force_common/kustomization.yaml create mode 100644 util/log/logrus_test.go diff --git a/.github/workflows/image.yaml b/.github/workflows/image.yaml index a3576b942af08..4ec272fcebf63 100644 --- a/.github/workflows/image.yaml +++ b/.github/workflows/image.yaml @@ -13,7 +13,7 @@ jobs: steps: - uses: actions/setup-go@v1 with: - go-version: '1.16.2' + go-version: '1.16.4' - uses: actions/checkout@master with: path: src/github.com/argoproj/argo-cd diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index e66091ea27734..42a88b65e6233 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -139,7 +139,7 @@ jobs: - name: Setup Golang uses: actions/setup-go@v1 with: - go-version: '1.16.2' + go-version: '1.16.4' - name: Setup Git author information run: | diff --git a/Dockerfile b/Dockerfile index d9c19438258e0..24563b104b215 100644 --- a/Dockerfile +++ b/Dockerfile @@ -4,7 +4,7 @@ ARG BASE_IMAGE=docker.io/library/ubuntu:20.10 # Initial stage which pulls prepares build dependencies and CLI tooling we need for our final image # Also used as the image in CI jobs so needs all dependencies #################################################################################################### -FROM docker.io/library/golang:1.16.2 as builder +FROM docker.io/library/golang:1.16.4 as builder RUN echo 'deb http://deb.debian.org/debian buster-backports main' >> /etc/apt/sources.list diff --git a/Makefile b/Makefile index fa3006c54754b..13f39574c577e 100644 --- a/Makefile +++ b/Makefile @@ -210,11 +210,11 @@ cli: test-tools-image .PHONY: cli-local cli-local: clean-debug - CGO_ENABLED=0 go build -v -i -ldflags '${LDFLAGS}' -o ${DIST_DIR}/${CLI_NAME} ./cmd + CGO_ENABLED=0 go build -v -ldflags '${LDFLAGS}' -o ${DIST_DIR}/${CLI_NAME} ./cmd .PHONY: cli-argocd cli-argocd: - go build -v -i -ldflags '${LDFLAGS}' -o ${DIST_DIR}/${CLI_NAME} ./cmd + go build -v -ldflags '${LDFLAGS}' -o ${DIST_DIR}/${CLI_NAME} ./cmd .PHONY: release-cli release-cli: clean-debug image @@ -227,7 +227,7 @@ release-cli: clean-debug image .PHONY: argocd-util argocd-util: clean-debug # Build argocd-util as a statically linked binary, so it could run within the alpine-based dex container (argoproj/argo-cd#844) - CGO_ENABLED=0 go build -v -i -ldflags '${LDFLAGS}' -o ${DIST_DIR}/${UTIL_CLI_NAME} ./cmd + CGO_ENABLED=0 go build -v -ldflags '${LDFLAGS}' -o ${DIST_DIR}/${UTIL_CLI_NAME} ./cmd # .PHONY: dev-tools-image # dev-tools-image: @@ -250,19 +250,19 @@ manifests: test-tools-image # consolidated binary for cli, util, server, repo-server, controller .PHONY: argocd-all argocd-all: clean-debug - CGO_ENABLED=0 go build -v -i -ldflags '${LDFLAGS}' -o ${DIST_DIR}/${BIN_NAME} ./cmd + CGO_ENABLED=0 go build -v -ldflags '${LDFLAGS}' -o ${DIST_DIR}/${BIN_NAME} ./cmd .PHONY: server server: clean-debug - CGO_ENABLED=0 go build -v -i -ldflags '${LDFLAGS}' -o ${DIST_DIR}/argocd-server ./cmd + CGO_ENABLED=0 go build -v -ldflags '${LDFLAGS}' -o ${DIST_DIR}/argocd-server ./cmd .PHONY: repo-server repo-server: - CGO_ENABLED=0 go build -v -i -ldflags '${LDFLAGS}' -o ${DIST_DIR}/argocd-repo-server ./cmd + CGO_ENABLED=0 go build -v -ldflags '${LDFLAGS}' -o ${DIST_DIR}/argocd-repo-server ./cmd .PHONY: controller controller: - CGO_ENABLED=0 go build -v -i -ldflags '${LDFLAGS}' -o ${DIST_DIR}/argocd-application-controller ./cmd + CGO_ENABLED=0 go build -v -ldflags '${LDFLAGS}' -o ${DIST_DIR}/argocd-application-controller ./cmd .PHONY: image ifeq ($(DEV_IMAGE), true) @@ -273,9 +273,9 @@ IMAGE_TAG="dev-$(shell git describe --always --dirty)" image: docker build -t argocd-base --target argocd-base . docker build -t argocd-ui --target argocd-ui . - CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -v -i -ldflags '${LDFLAGS}' -o ${DIST_DIR}/argocd ./cmd - CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build -v -i -ldflags '${LDFLAGS}' -o ${DIST_DIR}/argocd-darwin-amd64 ./cmd - CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build -v -i -ldflags '${LDFLAGS}' -o ${DIST_DIR}/argocd-windows-amd64.exe ./cmd + CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -v -ldflags '${LDFLAGS}' -o ${DIST_DIR}/argocd ./cmd + CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build -v -ldflags '${LDFLAGS}' -o ${DIST_DIR}/argocd-darwin-amd64 ./cmd + CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build -v -ldflags '${LDFLAGS}' -o ${DIST_DIR}/argocd-windows-amd64.exe ./cmd ln -sfn ${DIST_DIR}/argocd ${DIST_DIR}/argocd-server ln -sfn ${DIST_DIR}/argocd ${DIST_DIR}/argocd-application-controller ln -sfn ${DIST_DIR}/argocd ${DIST_DIR}/argocd-repo-server diff --git a/USERS.md b/USERS.md index 904688c80a9d9..36c53acad2989 100644 --- a/USERS.md +++ b/USERS.md @@ -26,6 +26,7 @@ Currently, the following organizations are **officially** using Argo CD: 1. [Codefresh](https://www.codefresh.io/) 1. [Codility](https://www.codility.com/) 1. [Commonbond](https://commonbond.co/) +1. [Crédit Agricole](https://www.ca-cib.com) 1. [CROZ d.o.o.](https://croz.net/) 1. [CyberAgent](https://www.cyberagent.co.jp/en/) 1. [Cybozu](https://cybozu-global.com) @@ -40,12 +41,14 @@ Currently, the following organizations are **officially** using Argo CD: 1. [Fave](https://myfave.com) 1. [Future PLC](https://www.futureplc.com/) 1. [Garner](https://www.garnercorp.com) +1. [Glovo](https://www.glovoapp.com) 1. [GMETRI](https://gmetri.com/) 1. [Gojek](https://www.gojek.io/) 1. [Greenpass](https://www.greenpass.com.br/) 1. [Handelsbanken](https://www.handelsbanken.se) 1. [Healy](https://www.healyworld.net) 1. [hipages](https://hipages.com.au/) +1. [Hiya](https://hiya.com) 1. [Honestbank](https://honestbank.com) 1. [IBM](https://www.ibm.com/) 1. [Index Exchange](https://www.indexexchange.com/) @@ -128,7 +131,12 @@ Currently, the following organizations are **officially** using Argo CD: 1. [Webstores](https://www.webstores.nl) 1. [Whitehat Berlin](https://whitehat.berlin) by Guido Maria Serra +Fenaroli 1. [Witick](https://witick.io/) +1. [WSpot](https://www.wspot.com.br/) 1. [Yieldlab](https://www.yieldlab.de/) +1. [Zimpler](https://www.zimpler.com/) 1. [Sap Labs](http://sap.com) 1. [Smilee.io](https://smilee.io) 1. [Metanet](http://www.metanet.co.kr/en/) +1. [Unifonic Inc](https://www.unifonic.com/) +1. [Tamkeen Technologies](https://tamkeentech.sa/) +1. [Kaltura](https://corp.kaltura.com/) diff --git a/assets/swagger.json b/assets/swagger.json index c2c50a672c011..aa2ad7babc012 100644 --- a/assets/swagger.json +++ b/assets/swagger.json @@ -4790,6 +4790,13 @@ "type": "object", "title": "ApplicationSourceHelm holds helm specific options", "properties": { + "externalValueFiles": { + "type": "array", + "title": "ValuesFilesExternalValueFiles is a list of Helm value files to use when generating a template that come from an external git repo", + "items": { + "$ref": "#/definitions/v1alpha1HelmExternalValue" + } + }, "fileParameters": { "type": "array", "title": "FileParameters are file parameters to the helm template", @@ -4887,6 +4894,14 @@ "type": "string" } }, + "forceCommonAnnotations": { + "type": "boolean", + "title": "ForceCommonAnnotations specifies whether to force applying common annotations to resources for Kustomize apps" + }, + "forceCommonLabels": { + "type": "boolean", + "title": "ForceCommonLabels specifies whether to force applying common labels to resources for Kustomize apps" + }, "images": { "type": "array", "title": "Images is a list of Kustomize image override specifications", @@ -5179,6 +5194,13 @@ "type": "object", "title": "ClusterInfo contains information about the cluster", "properties": { + "apiVersions": { + "type": "array", + "title": "APIVersions contains list of API versions supported by the cluster", + "items": { + "type": "string" + } + }, "applicationsCount": { "type": "string", "format": "int64", @@ -5364,6 +5386,27 @@ } } }, + "v1alpha1HelmExternalValue": { + "type": "object", + "title": "HelmExternalValue are values from other git repositories", + "properties": { + "repoURL": { + "type": "string", + "title": "RepoURL is the URL of the external git repo" + }, + "targetRevision": { + "type": "string", + "title": "TargetRevision is the revision of the git repo" + }, + "valueFiles": { + "type": "array", + "title": "FileParameters are file parameters to the helm template", + "items": { + "type": "string" + } + } + } + }, "v1alpha1HelmFileParameter": { "type": "object", "title": "HelmFileParameter is a file parameter that's passed to helm template during manifest generation", @@ -5653,6 +5696,12 @@ "items": { "type": "string" } + }, + "jqPathExpressions": { + "type": "array", + "items": { + "type": "string" + } } } }, @@ -5989,6 +6038,12 @@ "group": { "type": "string" }, + "jqPathExpressions": { + "type": "array", + "items": { + "type": "string" + } + }, "jsonPointers": { "type": "array", "items": { diff --git a/cmd/argocd-application-controller/commands/argocd_application_controller.go b/cmd/argocd-application-controller/commands/argocd_application_controller.go index c9f091603fec7..90c91e0200c91 100644 --- a/cmd/argocd-application-controller/commands/argocd_application_controller.go +++ b/cmd/argocd-application-controller/commands/argocd_application_controller.go @@ -75,7 +75,14 @@ func NewCommand() *cobra.Command { namespace, _, err := clientConfig.Namespace() errors.CheckError(err) - resyncDuration := time.Duration(appResyncPeriod) * time.Second + var resyncDuration time.Duration + if appResyncPeriod == 0 { + // Re-sync should be disabled if period is 0. Set duration to a very long duration + resyncDuration = time.Hour * 24 * 365 * 100 + } else { + resyncDuration = time.Duration(appResyncPeriod) * time.Second + } + tlsConfig := apiclient.TLSConfiguration{ DisableTLS: repoServerPlaintext, StrictValidation: repoServerStrictTLS, @@ -137,20 +144,20 @@ func NewCommand() *cobra.Command { } clientConfig = cli.AddKubectlFlagsToCmd(&command) - command.Flags().Int64Var(&appResyncPeriod, "app-resync", int64(env.ParseDurationFromEnv("ARGOCD_RECONCILIATION_TIMEOUT", defaultAppResyncPeriod, 0, math.MaxInt32).Seconds()), "Time period in seconds for application resync.") - command.Flags().StringVar(&repoServerAddress, "repo-server", common.DefaultRepoServerAddr, "Repo server address.") - command.Flags().IntVar(&repoServerTimeoutSeconds, "repo-server-timeout-seconds", 60, "Repo server RPC call timeout seconds.") - command.Flags().IntVar(&statusProcessors, "status-processors", 1, "Number of application status processors") - command.Flags().IntVar(&operationProcessors, "operation-processors", 1, "Number of application operation processors") - command.Flags().StringVar(&cmdutil.LogFormat, "logformat", "text", "Set the logging format. One of: text|json") - command.Flags().StringVar(&cmdutil.LogLevel, "loglevel", "info", "Set the logging level. One of: debug|info|warn|error") + command.Flags().Int64Var(&appResyncPeriod, "app-resync", int64(env.ParseDurationFromEnv("ARGOCD_RECONCILIATION_TIMEOUT", defaultAppResyncPeriod*time.Second, 0, math.MaxInt32).Seconds()), "Time period in seconds for application resync.") + command.Flags().StringVar(&repoServerAddress, "repo-server", env.StringFromEnv("ARGOCD_APPLICATION_CONTROLLER_REPO_SERVER", common.DefaultRepoServerAddr), "Repo server address.") + command.Flags().IntVar(&repoServerTimeoutSeconds, "repo-server-timeout-seconds", int(env.ParseDurationFromEnv("ARGOCD_APPLICATION_CONTROLLER_REPO_SERVER_TIMEOUT_SECONDS", 60*time.Second, 0, math.MaxInt32).Seconds()), "Repo server RPC call timeout seconds.") + command.Flags().IntVar(&statusProcessors, "status-processors", env.ParseNumFromEnv("ARGOCD_APPLICATION_CONTROLLER_STATUS_PROCESSORS", 20, 0, math.MaxInt32), "Number of application status processors") + command.Flags().IntVar(&operationProcessors, "operation-processors", env.ParseNumFromEnv("ARGOCD_APPLICATION_CONTROLLER_OPERATION_PROCESSORS", 10, 0, math.MaxInt32), "Number of application operation processors") + command.Flags().StringVar(&cmdutil.LogFormat, "logformat", env.StringFromEnv("ARGOCD_APPLICATION_CONTROLLER_LOGFORMAT", "text"), "Set the logging format. One of: text|json") + command.Flags().StringVar(&cmdutil.LogLevel, "loglevel", env.StringFromEnv("ARGOCD_APPLICATION_CONTROLLER_LOGLEVEL", "info"), "Set the logging level. One of: debug|info|warn|error") command.Flags().IntVar(&glogLevel, "gloglevel", 0, "Set the glog logging level") command.Flags().IntVar(&metricsPort, "metrics-port", common.DefaultPortArgoCDMetrics, "Start metrics server on given port") - command.Flags().DurationVar(&metricsCacheExpiration, "metrics-cache-expiration", 0*time.Second, "Prometheus metrics cache expiration (disabled by default. e.g. 24h0m0s)") - command.Flags().IntVar(&selfHealTimeoutSeconds, "self-heal-timeout-seconds", 5, "Specifies timeout between application self heal attempts") + command.Flags().DurationVar(&metricsCacheExpiration, "metrics-cache-expiration", env.ParseDurationFromEnv("ARGOCD_APPLICATION_CONTROLLER_METRICS_CACHE_EXPIRATION", 0*time.Second, 0, math.MaxInt32), "Prometheus metrics cache expiration (disabled by default. e.g. 24h0m0s)") + command.Flags().IntVar(&selfHealTimeoutSeconds, "self-heal-timeout-seconds", env.ParseNumFromEnv("ARGOCD_APPLICATION_CONTROLLER_SELF_HEAL_TIMEOUT_SECONDS", 5, 0, math.MaxInt32), "Specifies timeout between application self heal attempts") command.Flags().Int64Var(&kubectlParallelismLimit, "kubectl-parallelism-limit", 20, "Number of allowed concurrent kubectl fork/execs. Any value less the 1 means no limit.") - command.Flags().BoolVar(&repoServerPlaintext, "repo-server-plaintext", false, "Disable TLS on connections to repo server") - command.Flags().BoolVar(&repoServerStrictTLS, "repo-server-strict-tls", false, "Whether to use strict validation of the TLS cert presented by the repo server") + command.Flags().BoolVar(&repoServerPlaintext, "repo-server-plaintext", env.ParseBoolFromEnv("ARGOCD_APPLICATION_CONTROLLER_REPO_SERVER_PLAINTEXT", false), "Disable TLS on connections to repo server") + command.Flags().BoolVar(&repoServerStrictTLS, "repo-server-strict-tls", env.ParseBoolFromEnv("ARGOCD_APPLICATION_CONTROLLER_REPO_SERVER_STRICT_TLS", false), "Whether to use strict validation of the TLS cert presented by the repo server") cacheSrc = appstatecache.AddCacheFlagsToCmd(&command, func(client *redis.Client) { redisClient = client }) diff --git a/cmd/argocd-repo-server/commands/argocd_repo_server.go b/cmd/argocd-repo-server/commands/argocd_repo_server.go index eba1f6c72072a..5bccc7822d679 100644 --- a/cmd/argocd-repo-server/commands/argocd_repo_server.go +++ b/cmd/argocd-repo-server/commands/argocd_repo_server.go @@ -151,13 +151,15 @@ func NewCommand() *cobra.Command { return nil }, } - - command.Flags().StringVar(&cmdutil.LogFormat, "logformat", "text", "Set the logging format. One of: text|json") - command.Flags().StringVar(&cmdutil.LogLevel, "loglevel", "info", "Set the logging level. One of: debug|info|warn|error") - command.Flags().Int64Var(¶llelismLimit, "parallelismlimit", 0, "Limit on number of concurrent manifests generate requests. Any value less the 1 means no limit.") + if cmdutil.LogFormat == "" { + cmdutil.LogFormat = os.Getenv("ARGOCD_REPO_SERVER_LOGLEVEL") + } + command.Flags().StringVar(&cmdutil.LogFormat, "logformat", env.StringFromEnv("ARGOCD_REPO_SERVER_LOGFORMAT", "text"), "Set the logging format. One of: text|json") + command.Flags().StringVar(&cmdutil.LogLevel, "loglevel", env.StringFromEnv("ARGOCD_REPO_SERVER_LOGLEVEL", "info"), "Set the logging level. One of: debug|info|warn|error") + command.Flags().Int64Var(¶llelismLimit, "parallelismlimit", int64(env.ParseNumFromEnv("ARGOCD_REPO_SERVER_PARALLELISM_LIMIT", 0, 0, math.MaxInt32)), "Limit on number of concurrent manifests generate requests. Any value less the 1 means no limit.") command.Flags().IntVar(&listenPort, "port", common.DefaultPortRepoServer, "Listen on given port for incoming connections") command.Flags().IntVar(&metricsPort, "metrics-port", common.DefaultPortRepoServerMetrics, "Start metrics server on given port") - command.Flags().BoolVar(&disableTLS, "disable-tls", false, "Disable TLS on the gRPC endpoint") + command.Flags().BoolVar(&disableTLS, "disable-tls", env.ParseBoolFromEnv("ARGOCD_REPO_SERVER_DISABLE_TLS", false), "Disable TLS on the gRPC endpoint") tlsConfigCustomizerSrc = tls.AddTLSFlagsToCmd(&command) cacheSrc = reposervercache.AddCacheFlagsToCmd(&command, func(client *redis.Client) { diff --git a/cmd/argocd-server/commands/argocd_server.go b/cmd/argocd-server/commands/argocd_server.go index 128d5665e6b23..f627788fa72de 100644 --- a/cmd/argocd-server/commands/argocd_server.go +++ b/cmd/argocd-server/commands/argocd_server.go @@ -3,6 +3,7 @@ package commands import ( "context" "fmt" + "math" "time" "github.com/argoproj/pkg/stats" @@ -157,24 +158,24 @@ func NewCommand() *cobra.Command { } clientConfig = cli.AddKubectlFlagsToCmd(command) - command.Flags().BoolVar(&insecure, "insecure", false, "Run server without TLS") + command.Flags().BoolVar(&insecure, "insecure", env.ParseBoolFromEnv("ARGOCD_SERVER_INSECURE", false), "Run server without TLS") command.Flags().StringVar(&staticAssetsDir, "staticassets", "", "Static assets directory path") - command.Flags().StringVar(&baseHRef, "basehref", "/", "Value for base href in index.html. Used if Argo CD is running behind reverse proxy under subpath different from /") - command.Flags().StringVar(&rootPath, "rootpath", "", "Used if Argo CD is running behind reverse proxy under subpath different from /") - command.Flags().StringVar(&cmdutil.LogFormat, "logformat", "text", "Set the logging format. One of: text|json") - command.Flags().StringVar(&cmdutil.LogLevel, "loglevel", "info", "Set the logging level. One of: debug|info|warn|error") + command.Flags().StringVar(&baseHRef, "basehref", env.StringFromEnv("ARGOCD_SERVER_BASEHREF", "/"), "Value for base href in index.html. Used if Argo CD is running behind reverse proxy under subpath different from /") + command.Flags().StringVar(&rootPath, "rootpath", env.StringFromEnv("ARGOCD_SERVER_ROOTPATH", ""), "Used if Argo CD is running behind reverse proxy under subpath different from /") + command.Flags().StringVar(&cmdutil.LogFormat, "logformat", env.StringFromEnv("ARGOCD_SERVER_LOGFORMAT", "text"), "Set the logging format. One of: text|json") + command.Flags().StringVar(&cmdutil.LogLevel, "loglevel", env.StringFromEnv("ARGOCD_REPO_SERVER_LOGLEVEL", "info"), "Set the logging level. One of: debug|info|warn|error") command.Flags().IntVar(&glogLevel, "gloglevel", 0, "Set the glog logging level") - command.Flags().StringVar(&repoServerAddress, "repo-server", common.DefaultRepoServerAddr, "Repo server address") - command.Flags().StringVar(&dexServerAddress, "dex-server", common.DefaultDexServerAddr, "Dex server address") - command.Flags().BoolVar(&disableAuth, "disable-auth", false, "Disable client authentication") - command.Flags().BoolVar(&enableGZip, "enable-gzip", false, "Enable GZIP compression") + command.Flags().StringVar(&repoServerAddress, "repo-server", env.StringFromEnv("ARGOCD_SERVER_REPO_SERVER", common.DefaultRepoServerAddr), "Repo server address") + command.Flags().StringVar(&dexServerAddress, "dex-server", env.StringFromEnv("ARGOCD_SERVER_DEX_SERVER", common.DefaultDexServerAddr), "Dex server address") + command.Flags().BoolVar(&disableAuth, "disable-auth", env.ParseBoolFromEnv("ARGOCD_SERVER_DISABLE_AUTH", false), "Disable client authentication") + command.Flags().BoolVar(&enableGZip, "enable-gzip", env.ParseBoolFromEnv("ARGOCD_SERVER_ENABLE_GZIP", false), "Enable GZIP compression") command.AddCommand(cli.NewVersionCmd(cliName)) command.Flags().IntVar(&listenPort, "port", common.DefaultPortAPIServer, "Listen on given port") command.Flags().IntVar(&metricsPort, "metrics-port", common.DefaultPortArgoCDAPIServerMetrics, "Start metrics on given port") - command.Flags().IntVar(&repoServerTimeoutSeconds, "repo-server-timeout-seconds", 60, "Repo server RPC call timeout seconds.") - command.Flags().StringVar(&frameOptions, "x-frame-options", "sameorigin", "Set X-Frame-Options header in HTTP responses to `value`. To disable, set to \"\".") - command.Flags().BoolVar(&repoServerPlaintext, "repo-server-plaintext", false, "Use a plaintext client (non-TLS) to connect to repository server") - command.Flags().BoolVar(&repoServerStrictTLS, "repo-server-strict-tls", false, "Perform strict validation of TLS certificates when connecting to repo server") + command.Flags().IntVar(&repoServerTimeoutSeconds, "repo-server-timeout-seconds", int(env.ParseDurationFromEnv("ARGOCD_SERVER_REPO_SERVER_TIMEOUT_SECONDS", 60*time.Second, 0, math.MaxInt32).Seconds()), "Repo server RPC call timeout seconds.") + command.Flags().StringVar(&frameOptions, "x-frame-options", env.StringFromEnv("ARGOCD_SERVER_X_FRAME_OPTIONS", "sameorigin"), "Set X-Frame-Options header in HTTP responses to `value`. To disable, set to \"\".") + command.Flags().BoolVar(&repoServerPlaintext, "repo-server-plaintext", env.ParseBoolFromEnv("ARGOCD_SERVER_REPO_SERVER_PLAINTEXT", false), "Use a plaintext client (non-TLS) to connect to repository server") + command.Flags().BoolVar(&repoServerStrictTLS, "repo-server-strict-tls", env.ParseBoolFromEnv("ARGOCD_SERVER_REPO_SERVER_STRICT_TLS", false), "Perform strict validation of TLS certificates when connecting to repo server") tlsConfigCustomizerSrc = tls.AddTLSFlagsToCmd(command) cacheSrc = servercache.AddCacheFlagsToCmd(command, func(client *redis.Client) { redisClient = client diff --git a/cmd/argocd-util/commands/cluster.go b/cmd/argocd-util/commands/cluster.go index 053f23c4e0a7d..a08761b5de57c 100644 --- a/cmd/argocd-util/commands/cluster.go +++ b/cmd/argocd-util/commands/cluster.go @@ -3,6 +3,7 @@ package commands import ( "context" "fmt" + "math" "os" "text/tabwriter" "time" @@ -14,14 +15,17 @@ import ( v1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/client-go/kubernetes" "k8s.io/client-go/kubernetes/fake" + "k8s.io/client-go/rest" "k8s.io/client-go/tools/clientcmd" cmdutil "github.com/argoproj/argo-cd/v2/cmd/util" + "github.com/argoproj/argo-cd/v2/common" "github.com/argoproj/argo-cd/v2/controller/sharding" argoappv1 "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1" cacheutil "github.com/argoproj/argo-cd/v2/util/cache" appstatecache "github.com/argoproj/argo-cd/v2/util/cache/appstate" "github.com/argoproj/argo-cd/v2/util/cli" + "github.com/argoproj/argo-cd/v2/util/clusterauth" "github.com/argoproj/argo-cd/v2/util/db" "github.com/argoproj/argo-cd/v2/util/errors" kubeutil "github.com/argoproj/argo-cd/v2/util/kube" @@ -40,11 +44,79 @@ func NewClusterCommand(pathOpts *clientcmd.PathOptions) *cobra.Command { command.AddCommand(NewClusterConfig()) command.AddCommand(NewGenClusterConfigCommand(pathOpts)) command.AddCommand(NewClusterStatsCommand()) + command.AddCommand(NewClusterShardsCommand()) return command } -func NewClusterStatsCommand() *cobra.Command { +type ClusterWithInfo struct { + argoappv1.Cluster + Shard int +} + +func loadClusters(kubeClient *kubernetes.Clientset, replicas int, namespace string, portForwardRedis bool, cacheSrc func() (*appstatecache.Cache, error), shard int) ([]ClusterWithInfo, error) { + settingsMgr := settings.NewSettingsManager(context.Background(), kubeClient, namespace) + + argoDB := db.NewDB(namespace, settingsMgr, kubeClient) + clustersList, err := argoDB.ListClusters(context.Background()) + if err != nil { + return nil, err + } + var cache *appstatecache.Cache + if portForwardRedis { + overrides := clientcmd.ConfigOverrides{} + port, err := kubeutil.PortForward("app.kubernetes.io/name=argocd-redis-ha-haproxy", 6379, namespace, &overrides) + if err != nil { + return nil, err + } + client := redis.NewClient(&redis.Options{Addr: fmt.Sprintf("localhost:%d", port)}) + cache = appstatecache.NewCache(cacheutil.NewCache(cacheutil.NewRedisCache(client, time.Hour)), time.Hour) + } else { + cache, err = cacheSrc() + if err != nil { + return nil, err + } + } + + clusters := make([]ClusterWithInfo, len(clustersList.Items)) + batchSize := 10 + batchesCount := int(math.Ceil(float64(len(clusters)) / float64(batchSize))) + for batchNum := 0; batchNum < batchesCount; batchNum++ { + batchStart := batchSize * batchNum + batchEnd := batchSize * (batchNum + 1) + if batchEnd > len(clustersList.Items) { + batchEnd = len(clustersList.Items) + } + batch := clustersList.Items[batchStart:batchEnd] + _ = kube.RunAllAsync(len(batch), func(i int) error { + cluster := batch[i] + clusterShard := 0 + if replicas > 0 { + clusterShard = sharding.GetShardByID(cluster.ID, replicas) + } + + if shard != -1 && clusterShard != shard { + return nil + } + + _ = cache.GetClusterInfo(cluster.Server, &cluster.Info) + clusters[batchStart+i] = ClusterWithInfo{cluster, clusterShard} + return nil + }) + } + return clusters, nil +} + +func getControllerReplicas(kubeClient *kubernetes.Clientset, namespace string) (int, error) { + controllerPods, err := kubeClient.CoreV1().Pods(namespace).List(context.Background(), v1.ListOptions{ + LabelSelector: "app.kubernetes.io/name=argocd-application-controller"}) + if err != nil { + return 0, err + } + return len(controllerPods.Items), nil +} + +func NewClusterShardsCommand() *cobra.Command { var ( shard int replicas int @@ -53,8 +125,8 @@ func NewClusterStatsCommand() *cobra.Command { portForwardRedis bool ) var command = cobra.Command{ - Use: "stats", - Short: "Prints information cluster statistics and inferred shard number", + Use: "shards", + Short: "Print information about each controller shard and portion of Kubernetes resources it is responsible for.", Run: func(cmd *cobra.Command, args []string) { log.SetLevel(log.WarnLevel) @@ -62,48 +134,83 @@ func NewClusterStatsCommand() *cobra.Command { errors.CheckError(err) namespace, _, err := clientConfig.Namespace() errors.CheckError(err) - kubeClient := kubernetes.NewForConfigOrDie(clientCfg) + if replicas == 0 { - controllerPods, err := kubeClient.CoreV1().Pods(namespace).List(context.Background(), v1.ListOptions{ - LabelSelector: "app.kubernetes.io/name=argocd-application-controller"}) + replicas, err = getControllerReplicas(kubeClient, namespace) errors.CheckError(err) - replicas = len(controllerPods.Items) } + if replicas == 0 { + return + } + + clusters, err := loadClusters(kubeClient, replicas, namespace, portForwardRedis, cacheSrc, shard) + errors.CheckError(err) + if len(clusters) == 0 { + return + } + + printStatsSummary(clusters) + }, + } + clientConfig = cli.AddKubectlFlagsToCmd(&command) + command.Flags().IntVar(&shard, "shard", -1, "Cluster shard filter") + command.Flags().IntVar(&replicas, "replicas", 0, "Application controller replicas count. Inferred from number of running controller pods if not specified") + command.Flags().BoolVar(&portForwardRedis, "port-forward-redis", true, "Automatically port-forward ha proxy redis from current namespace?") + cacheSrc = appstatecache.AddCacheFlagsToCmd(&command) + return &command +} - settingsMgr := settings.NewSettingsManager(context.Background(), kubeClient, namespace) +func printStatsSummary(clusters []ClusterWithInfo) { + totalResourcesCount := int64(0) + resourcesCountByShard := map[int]int64{} + for _, c := range clusters { + totalResourcesCount += c.Info.CacheInfo.ResourcesCount + resourcesCountByShard[c.Shard] += c.Info.CacheInfo.ResourcesCount + } + + avgResourcesByShard := totalResourcesCount / int64(len(resourcesCountByShard)) + w := tabwriter.NewWriter(os.Stdout, 0, 0, 2, ' ', 0) + _, _ = fmt.Fprintf(w, "SHARD\tRESOURCES COUNT\n") + for shard := 0; shard < len(resourcesCountByShard); shard++ { + cnt := resourcesCountByShard[shard] + percent := (float64(cnt) / float64(avgResourcesByShard)) * 100.0 + _, _ = fmt.Fprintf(w, "%d\t%s\n", shard, fmt.Sprintf("%d (%.0f%%)", cnt, percent)) + } + _ = w.Flush() +} + +func NewClusterStatsCommand() *cobra.Command { + var ( + shard int + replicas int + clientConfig clientcmd.ClientConfig + cacheSrc func() (*appstatecache.Cache, error) + portForwardRedis bool + ) + var command = cobra.Command{ + Use: "stats", + Short: "Prints information cluster statistics and inferred shard number", + Run: func(cmd *cobra.Command, args []string) { + log.SetLevel(log.WarnLevel) - argoDB := db.NewDB(namespace, settingsMgr, kubeClient) - clusters, err := argoDB.ListClusters(context.Background()) + clientCfg, err := clientConfig.ClientConfig() errors.CheckError(err) - var cache *appstatecache.Cache - if portForwardRedis { - overrides := clientcmd.ConfigOverrides{} - port, err := kubeutil.PortForward("app.kubernetes.io/name=argocd-redis-ha-haproxy", 6379, namespace, &overrides) - errors.CheckError(err) - client := redis.NewClient(&redis.Options{Addr: fmt.Sprintf("localhost:%d", port)}) - cache = appstatecache.NewCache(cacheutil.NewCache(cacheutil.NewRedisCache(client, time.Hour)), time.Hour) - } else { - cache, err = cacheSrc() + namespace, _, err := clientConfig.Namespace() + errors.CheckError(err) + + kubeClient := kubernetes.NewForConfigOrDie(clientCfg) + if replicas == 0 { + replicas, err = getControllerReplicas(kubeClient, namespace) errors.CheckError(err) } + clusters, err := loadClusters(kubeClient, replicas, namespace, portForwardRedis, cacheSrc, shard) + errors.CheckError(err) w := tabwriter.NewWriter(os.Stdout, 0, 0, 2, ' ', 0) _, _ = fmt.Fprintf(w, "SERVER\tSHARD\tCONNECTION\tAPPS COUNT\tRESOURCES COUNT\n") - - for _, cluster := range clusters.Items { - clusterShard := 0 - if replicas > 0 { - clusterShard = sharding.GetShardByID(cluster.ID, replicas) - } - - if shard != -1 && clusterShard != shard { - continue - } - - var info argoappv1.ClusterInfo - _ = cache.GetClusterInfo(cluster.Server, &info) - _, _ = fmt.Fprintf(w, "%s\t%d\t%s\t%d\t%d\n", cluster.Server, clusterShard, info.ConnectionState.Status, info.ApplicationsCount, info.CacheInfo.ResourcesCount) + for _, cluster := range clusters { + _, _ = fmt.Fprintf(w, "%s\t%d\t%s\t%d\t%d\n", cluster.Server, cluster.Shard, cluster.Info.ConnectionState.Status, cluster.Info.ApplicationsCount, cluster.Info.CacheInfo.ResourcesCount) } _ = w.Flush() }, @@ -151,9 +258,10 @@ func NewClusterConfig() *cobra.Command { func NewGenClusterConfigCommand(pathOpts *clientcmd.PathOptions) *cobra.Command { var ( - clusterOpts cmdutil.ClusterOptions - bearerToken string - outputFormat string + clusterOpts cmdutil.ClusterOptions + bearerToken string + generateToken bool + outputFormat string ) var command = &cobra.Command{ Use: "generate-spec CONTEXT", @@ -172,6 +280,7 @@ func NewGenClusterConfigCommand(pathOpts *clientcmd.PathOptions) *cobra.Command clstContext := cfgAccess.Contexts[contextName] if clstContext == nil { log.Fatalf("Context %s does not exist in kubeconfig", contextName) + return } overrides := clientcmd.ConfigOverrides{ @@ -197,6 +306,9 @@ func NewGenClusterConfigCommand(pathOpts *clientcmd.PathOptions) *cobra.Command APIVersion: clusterOpts.ExecProviderAPIVersion, InstallHint: clusterOpts.ExecProviderInstallHint, } + } else if generateToken { + bearerToken, err = GenerateToken(clusterOpts, conf) + errors.CheckError(err) } else if bearerToken == "" { bearerToken = "bearer-token" } @@ -231,7 +343,21 @@ func NewGenClusterConfigCommand(pathOpts *clientcmd.PathOptions) *cobra.Command } command.PersistentFlags().StringVar(&pathOpts.LoadingRules.ExplicitPath, pathOpts.ExplicitFileFlag, pathOpts.LoadingRules.ExplicitPath, "use a particular kubeconfig file") command.Flags().StringVar(&bearerToken, "bearer-token", "", "Authentication token that should be used to access K8S API server") + command.Flags().BoolVar(&generateToken, "generate-bearer-token", false, "Generate authentication token that should be used to access K8S API server") + command.Flags().StringVar(&clusterOpts.ServiceAccount, "service-account", "argocd-manager", fmt.Sprintf("System namespace service account to use for kubernetes resource management. If not set then default \"%s\" SA will be used", clusterauth.ArgoCDManagerServiceAccount)) + command.Flags().StringVar(&clusterOpts.SystemNamespace, "system-namespace", common.DefaultSystemNamespace, "Use different system namespace") command.Flags().StringVarP(&outputFormat, "output", "o", "yaml", "Output format. One of: json|yaml") cmdutil.AddClusterFlags(command, &clusterOpts) return command } + +func GenerateToken(clusterOpts cmdutil.ClusterOptions, conf *rest.Config) (string, error) { + clientset, err := kubernetes.NewForConfig(conf) + errors.CheckError(err) + + bearerToken, err := clusterauth.GetServiceAccountBearerToken(clientset, clusterOpts.SystemNamespace, clusterOpts.ServiceAccount) + if err != nil { + return "", err + } + return bearerToken, nil +} diff --git a/cmd/argocd/commands/account.go b/cmd/argocd/commands/account.go index 52bbe38b3a050..31bb69245b352 100644 --- a/cmd/argocd/commands/account.go +++ b/cmd/argocd/commands/account.go @@ -14,7 +14,7 @@ import ( "github.com/ghodss/yaml" log "github.com/sirupsen/logrus" "github.com/spf13/cobra" - "golang.org/x/crypto/ssh/terminal" + "golang.org/x/term" argocdclient "github.com/argoproj/argo-cd/v2/pkg/apiclient" accountpkg "github.com/argoproj/argo-cd/v2/pkg/apiclient/account" @@ -68,7 +68,7 @@ func NewAccountUpdatePasswordCommand(clientOpts *argocdclient.ClientOptions) *co if userInfo.Iss == sessionutil.SessionManagerClaimsIssuer && currentPassword == "" { fmt.Print("*** Enter current password: ") - password, err := terminal.ReadPassword(int(os.Stdin.Fd())) + password, err := term.ReadPassword(int(os.Stdin.Fd())) errors.CheckError(err) currentPassword = string(password) fmt.Print("\n") diff --git a/cmd/argocd/commands/app.go b/cmd/argocd/commands/app.go index 6b239f03738c7..6d0a33189c5f5 100644 --- a/cmd/argocd/commands/app.go +++ b/cmd/argocd/commands/app.go @@ -275,6 +275,7 @@ func NewApplicationLogsCommand(clientOpts *argocdclient.ClientOptions) *cobra.Co sinceSeconds int64 untilTime string filter string + container string ) var command = &cobra.Command{ Use: "logs APPNAME", @@ -303,6 +304,7 @@ func NewApplicationLogsCommand(clientOpts *argocdclient.ClientOptions) *cobra.Co SinceSeconds: sinceSeconds, UntilTime: &untilTime, Filter: &filter, + Container: container, }) if err != nil { log.Fatalf("failed to get pod logs: %v", err) @@ -343,6 +345,7 @@ func NewApplicationLogsCommand(clientOpts *argocdclient.ClientOptions) *cobra.Co command.Flags().Int64Var(&sinceSeconds, "since-seconds", 0, "A relative time in seconds before the current time from which to show logs") command.Flags().StringVar(&untilTime, "until-time", "", "Show logs until this time") command.Flags().StringVar(&filter, "filter", "", "Show logs contain this string") + command.Flags().StringVar(&container, "container", "", "Optional container name") return command } @@ -670,9 +673,10 @@ func NewApplicationUnsetCommand(clientOpts *argocdclient.ClientOptions) *cobra.C } for _, env := range pluginEnvs { err = app.Spec.Source.Plugin.RemoveEnvEntry(env) - errors.CheckError(err) + if err != nil { + updated = true + } } - updated = true } if !updated { diff --git a/cmd/util/app.go b/cmd/util/app.go index fc5a492890766..505cf2176f72e 100644 --- a/cmd/util/app.go +++ b/cmd/util/app.go @@ -23,50 +23,52 @@ import ( ) type AppOptions struct { - repoURL string - appPath string - chart string - env string - revision string - revisionHistoryLimit int - destName string - destServer string - destNamespace string - Parameters []string - valuesFiles []string - values string - releaseName string - helmSets []string - helmSetStrings []string - helmSetFiles []string - helmVersion string - project string - syncPolicy string - syncOptions []string - autoPrune bool - selfHeal bool - allowEmpty bool - namePrefix string - nameSuffix string - directoryRecurse bool - configManagementPlugin string - jsonnetTlaStr []string - jsonnetTlaCode []string - jsonnetExtVarStr []string - jsonnetExtVarCode []string - jsonnetLibs []string - kustomizeImages []string - kustomizeVersion string - kustomizeCommonLabels []string - kustomizeCommonAnnotations []string - pluginEnvs []string - Validate bool - directoryExclude string - directoryInclude string - retryLimit int64 - retryBackoffDuration time.Duration - retryBackoffMaxDuration time.Duration - retryBackoffFactor int64 + repoURL string + appPath string + chart string + env string + revision string + revisionHistoryLimit int + destName string + destServer string + destNamespace string + Parameters []string + valuesFiles []string + values string + releaseName string + helmSets []string + helmSetStrings []string + helmSetFiles []string + helmVersion string + project string + syncPolicy string + syncOptions []string + autoPrune bool + selfHeal bool + allowEmpty bool + namePrefix string + nameSuffix string + directoryRecurse bool + configManagementPlugin string + jsonnetTlaStr []string + jsonnetTlaCode []string + jsonnetExtVarStr []string + jsonnetExtVarCode []string + jsonnetLibs []string + kustomizeImages []string + kustomizeVersion string + kustomizeCommonLabels []string + kustomizeCommonAnnotations []string + kustomizeForceCommonLabels bool + kustomizeForceCommonAnnotations bool + pluginEnvs []string + Validate bool + directoryExclude string + directoryInclude string + retryLimit int64 + retryBackoffDuration time.Duration + retryBackoffMaxDuration time.Duration + retryBackoffFactor int64 } func AddAppFlags(command *cobra.Command, opts *AppOptions) { @@ -108,6 +110,8 @@ func AddAppFlags(command *cobra.Command, opts *AppOptions) { command.Flags().BoolVar(&opts.Validate, "validate", true, "Validation of repo and cluster") command.Flags().StringArrayVar(&opts.kustomizeCommonLabels, "kustomize-common-label", []string{}, "Set common labels in Kustomize") command.Flags().StringArrayVar(&opts.kustomizeCommonAnnotations, "kustomize-common-annotation", []string{}, "Set common labels in Kustomize") + command.Flags().BoolVar(&opts.kustomizeForceCommonLabels, "kustomize-force-common-label", false, "Force common labels in Kustomize") + command.Flags().BoolVar(&opts.kustomizeForceCommonAnnotations, "kustomize-force-common-annotation", false, "Force common annotations in Kustomize") command.Flags().StringVar(&opts.directoryExclude, "directory-exclude", "", "Set glob expression used to exclude files from application source path") command.Flags().StringVar(&opts.directoryInclude, "directory-include", "", "Set glob expression used to include files from application source path") command.Flags().Int64Var(&opts.retryLimit, "sync-retry-limit", 0, "Max number of allowed sync retries") @@ -202,6 +206,10 @@ func SetAppSpecOptions(flags *pflag.FlagSet, spec *argoappv1.ApplicationSpec, ap parsedAnnotations, err := label.Parse(appOpts.kustomizeCommonAnnotations) errors.CheckError(err) setKustomizeOpt(&spec.Source, kustomizeOpts{commonAnnotations: parsedAnnotations}) + case "kustomize-force-common-label": + setKustomizeOpt(&spec.Source, kustomizeOpts{forceCommonLabels: appOpts.kustomizeForceCommonLabels}) + case "kustomize-force-common-annotation": + setKustomizeOpt(&spec.Source, kustomizeOpts{forceCommonAnnotations: appOpts.kustomizeForceCommonAnnotations}) case "jsonnet-tla-str": setJsonnetOpt(&spec.Source, appOpts.jsonnetTlaStr, false) case "jsonnet-tla-code": @@ -306,12 +314,14 @@ func setKsonnetOpt(src *argoappv1.ApplicationSource, env *string) { } type kustomizeOpts struct { - namePrefix string - nameSuffix string - images []string - version string - commonLabels map[string]string - commonAnnotations map[string]string + namePrefix string + nameSuffix string + images []string + version string + commonLabels map[string]string + commonAnnotations map[string]string + forceCommonLabels bool + forceCommonAnnotations bool } func setKustomizeOpt(src *argoappv1.ApplicationSource, opts kustomizeOpts) { @@ -333,6 +343,12 @@ func setKustomizeOpt(src *argoappv1.ApplicationSource, opts kustomizeOpts) { if opts.commonAnnotations != nil { src.Kustomize.CommonAnnotations = opts.commonAnnotations } + if opts.forceCommonLabels { + src.Kustomize.ForceCommonLabels = opts.forceCommonLabels + } + if opts.forceCommonAnnotations { + src.Kustomize.ForceCommonAnnotations = opts.forceCommonAnnotations + } for _, image := range opts.images { src.Kustomize.MergeImage(argoappv1.KustomizeImage(image)) } diff --git a/common/common.go b/common/common.go index 61a7b41a90c95..e1db41015aa57 100644 --- a/common/common.go +++ b/common/common.go @@ -161,6 +161,10 @@ const ( EnvHelmIndexCacheDuration = "ARGOCD_HELM_INDEX_CACHE_DURATION" // EnvRepoServerConfigPath allows to override the configuration path for repo server EnvAppConfigPath = "ARGOCD_APP_CONF_PATH" + // EnvLogFormat log format that is defined by `--logformat` option + EnvLogFormat = "ARGOCD_LOG_FORMAT" + // EnvLogLevel log level that is defined by `--loglevel` option + EnvLogLevel = "ARGOCD_LOG_LEVEL" ) const ( diff --git a/controller/appcontroller.go b/controller/appcontroller.go index 41574556e97a3..7c0248977c590 100644 --- a/controller/appcontroller.go +++ b/controller/appcontroller.go @@ -518,7 +518,7 @@ func (ctrl *ApplicationController) managedResources(comparisonResult *comparison } resDiffPtr, err := diff.Diff(target, live, diff.WithNormalizer(comparisonResult.diffNormalizer), - diff.WithLogr(logutils.NewLogrusLogger(log.New())), + diff.WithLogr(logutils.NewLogrusLogger(logutils.NewWithCurrentConfig())), diff.IgnoreAggregatedRoles(compareOptions.IgnoreAggregatedRoles)) if err != nil { return nil, err @@ -944,20 +944,6 @@ func (ctrl *ApplicationController) processRequestedAppOperation(app *appv1.Appli }() terminating := false if isOperationInProgress(app) { - // If we get here, we are about process an operation but we notice it is already in progress. - // We need to detect if the app object we pulled off the informer is stale and doesn't - // reflect the fact that the operation is completed. We don't want to perform the operation - // again. To detect this, always retrieve the latest version to ensure it is not stale. - freshApp, err := ctrl.applicationClientset.ArgoprojV1alpha1().Applications(ctrl.namespace).Get(context.Background(), app.ObjectMeta.Name, metav1.GetOptions{}) - if err != nil { - logCtx.Errorf("Failed to retrieve latest application state: %v", err) - return - } - if !isOperationInProgress(freshApp) { - logCtx.Infof("Skipping operation on stale application state") - return - } - app = freshApp state = app.Status.OperationState.DeepCopy() terminating = state.Phase == synccommon.OperationTerminating // Failed operation with retry strategy might have be in-progress and has completion time @@ -1043,7 +1029,7 @@ func (ctrl *ApplicationController) processRequestedAppOperation(app *appv1.Appli } func (ctrl *ApplicationController) setOperationState(app *appv1.Application, state *appv1.OperationState) { - kube.RetryUntilSucceed(context.Background(), updateOperationStateTimeout, "Update application operation state", logutils.NewLogrusLogger(log.New()), func() error { + kube.RetryUntilSucceed(context.Background(), updateOperationStateTimeout, "Update application operation state", logutils.NewLogrusLogger(logutils.NewWithCurrentConfig()), func() error { if state.Phase == "" { // expose any bugs where we neglect to set phase panic("no phase was set") @@ -1078,7 +1064,7 @@ func (ctrl *ApplicationController) setOperationState(app *appv1.Application, sta } appClient := ctrl.applicationClientset.ArgoprojV1alpha1().Applications(ctrl.namespace) - _, err = appClient.Patch(context.Background(), app.Name, types.MergePatchType, patchJSON, metav1.PatchOptions{}) + patchedApp, err := appClient.Patch(context.Background(), app.Name, types.MergePatchType, patchJSON, metav1.PatchOptions{}) if err != nil { // Stop retrying updating deleted application if apierr.IsNotFound(err) { @@ -1108,6 +1094,10 @@ func (ctrl *ApplicationController) setOperationState(app *appv1.Application, sta ctrl.auditLogger.LogAppEvent(app, eventInfo, strings.Join(messages, " ")) ctrl.metricsServer.IncSync(app, state) } + // write back to informer in order to avoid stale cache + if err := ctrl.appInformer.GetStore().Update(patchedApp); err != nil { + log.Warnf("Fails to update informer: %v", err) + } return nil }) } @@ -1142,7 +1132,6 @@ func (ctrl *ApplicationController) processAppRefreshQueueItem() (processNext boo } origApp = origApp.DeepCopy() needRefresh, refreshType, comparisonLevel := ctrl.needRefreshAppStatus(origApp, ctrl.statusRefreshTimeout) - if !needRefresh { return } diff --git a/controller/appcontroller_test.go b/controller/appcontroller_test.go index 0c246f4d18e8d..776deb89f9635 100644 --- a/controller/appcontroller_test.go +++ b/controller/appcontroller_test.go @@ -1065,10 +1065,12 @@ func TestProcessRequestedAppOperation_FailedNoRetries(t *testing.T) { fakeAppCs := ctrl.applicationClientset.(*appclientset.Clientset) receivedPatch := map[string]interface{}{} fakeAppCs.PrependReactor("patch", "*", func(action kubetesting.Action) (handled bool, ret runtime.Object, err error) { + patchedApp := &v1alpha1.Application{} if patchAction, ok := action.(kubetesting.PatchAction); ok { assert.NoError(t, json.Unmarshal(patchAction.GetPatch(), &receivedPatch)) + assert.NoError(t, json.Unmarshal(patchAction.GetPatch(), &patchedApp)) } - return true, nil, nil + return true, patchedApp, nil }) ctrl.processRequestedAppOperation(app) @@ -1090,10 +1092,12 @@ func TestProcessRequestedAppOperation_InvalidDestination(t *testing.T) { fakeAppCs.Lock() defer fakeAppCs.Unlock() fakeAppCs.PrependReactor("patch", "*", func(action kubetesting.Action) (handled bool, ret runtime.Object, err error) { + patchedApp := &v1alpha1.Application{} if patchAction, ok := action.(kubetesting.PatchAction); ok { assert.NoError(t, json.Unmarshal(patchAction.GetPatch(), &receivedPatch)) + assert.NoError(t, json.Unmarshal(patchAction.GetPatch(), &patchedApp)) } - return true, nil, nil + return true, patchedApp, nil }) }() @@ -1116,10 +1120,12 @@ func TestProcessRequestedAppOperation_FailedHasRetries(t *testing.T) { fakeAppCs := ctrl.applicationClientset.(*appclientset.Clientset) receivedPatch := map[string]interface{}{} fakeAppCs.PrependReactor("patch", "*", func(action kubetesting.Action) (handled bool, ret runtime.Object, err error) { + patchedApp := &v1alpha1.Application{} if patchAction, ok := action.(kubetesting.PatchAction); ok { assert.NoError(t, json.Unmarshal(patchAction.GetPatch(), &receivedPatch)) + assert.NoError(t, json.Unmarshal(patchAction.GetPatch(), &patchedApp)) } - return true, nil, nil + return true, patchedApp, nil }) ctrl.processRequestedAppOperation(app) @@ -1159,10 +1165,12 @@ func TestProcessRequestedAppOperation_RunningPreviouslyFailed(t *testing.T) { fakeAppCs := ctrl.applicationClientset.(*appclientset.Clientset) receivedPatch := map[string]interface{}{} fakeAppCs.PrependReactor("patch", "*", func(action kubetesting.Action) (handled bool, ret runtime.Object, err error) { + patchedApp := &v1alpha1.Application{} if patchAction, ok := action.(kubetesting.PatchAction); ok { assert.NoError(t, json.Unmarshal(patchAction.GetPatch(), &receivedPatch)) + assert.NoError(t, json.Unmarshal(patchAction.GetPatch(), &patchedApp)) } - return true, nil, nil + return true, patchedApp, nil }) ctrl.processRequestedAppOperation(app) @@ -1192,10 +1200,12 @@ func TestProcessRequestedAppOperation_HasRetriesTerminated(t *testing.T) { fakeAppCs := ctrl.applicationClientset.(*appclientset.Clientset) receivedPatch := map[string]interface{}{} fakeAppCs.PrependReactor("patch", "*", func(action kubetesting.Action) (handled bool, ret runtime.Object, err error) { + patchedApp := &v1alpha1.Application{} if patchAction, ok := action.(kubetesting.PatchAction); ok { assert.NoError(t, json.Unmarshal(patchAction.GetPatch(), &receivedPatch)) + assert.NoError(t, json.Unmarshal(patchAction.GetPatch(), &patchedApp)) } - return true, nil, nil + return true, patchedApp, nil }) ctrl.processRequestedAppOperation(app) diff --git a/controller/cache/cache.go b/controller/cache/cache.go index 6af23f8110e56..1650d163fb8fd 100644 --- a/controller/cache/cache.go +++ b/controller/cache/cache.go @@ -489,7 +489,7 @@ func (c *liveStateCache) Init() error { func (c *liveStateCache) Run(ctx context.Context) error { go c.watchSettings(ctx) - kube.RetryUntilSucceed(ctx, clustercache.ClusterRetryTimeout, "watch clusters", logutils.NewLogrusLogger(log.New()), func() error { + kube.RetryUntilSucceed(ctx, clustercache.ClusterRetryTimeout, "watch clusters", logutils.NewLogrusLogger(logutils.NewWithCurrentConfig()), func() error { return c.db.WatchClusters(ctx, c.handleAddEvent, c.handleModEvent, c.handleDeleteEvent) }) diff --git a/controller/clusterinfoupdater.go b/controller/clusterinfoupdater.go index 7582807891233..79760fabe8792 100644 --- a/controller/clusterinfoupdater.go +++ b/controller/clusterinfoupdater.go @@ -106,6 +106,7 @@ func (c *clusterInfoUpdater) updateClusterInfo(cluster appv1.Cluster, info *cach } if info != nil { clusterInfo.ServerVersion = info.K8SVersion + clusterInfo.APIVersions = argo.APIGroupsToVersions(info.APIGroups) if info.LastCacheSyncTime == nil { clusterInfo.ConnectionState.Status = appv1.ConnectionStatusUnknown } else if info.SyncError == nil { diff --git a/controller/health.go b/controller/health.go new file mode 100644 index 0000000000000..a5e242ca30596 --- /dev/null +++ b/controller/health.go @@ -0,0 +1,64 @@ +package controller + +import ( + "github.com/argoproj/gitops-engine/pkg/health" + hookutil "github.com/argoproj/gitops-engine/pkg/sync/hook" + "github.com/argoproj/gitops-engine/pkg/sync/ignore" + kubeutil "github.com/argoproj/gitops-engine/pkg/utils/kube" + "k8s.io/apimachinery/pkg/runtime/schema" + + "github.com/argoproj/argo-cd/v2/pkg/apis/application" + appv1 "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1" + "github.com/argoproj/argo-cd/v2/util/lua" +) + +// setApplicationHealth updates the health statuses of all resources performed in the comparison +func setApplicationHealth(resources []managedResource, statuses []appv1.ResourceStatus, resourceOverrides map[string]appv1.ResourceOverride, app *appv1.Application) (*appv1.HealthStatus, error) { + var savedErr error + appHealth := appv1.HealthStatus{Status: health.HealthStatusHealthy} + for i, res := range resources { + if res.Target != nil && hookutil.Skip(res.Target) { + continue + } + + if res.Live != nil && (hookutil.IsHook(res.Live) || ignore.Ignore(res.Live)) { + continue + } + + var healthStatus *health.HealthStatus + var err error + healthOverrides := lua.ResourceHealthOverrides(resourceOverrides) + gvk := schema.GroupVersionKind{Group: res.Group, Version: res.Version, Kind: res.Kind} + if res.Live == nil { + healthStatus = &health.HealthStatus{Status: health.HealthStatusMissing} + } else { + // App the manages itself should not affect own health + if isSelfReferencedApp(app, kubeutil.GetObjectRef(res.Live)) { + continue + } + healthStatus, err = health.GetResourceHealth(res.Live, healthOverrides) + if err != nil && savedErr == nil { + savedErr = err + } + } + if healthStatus != nil { + resHealth := appv1.HealthStatus{Status: healthStatus.Status, Message: healthStatus.Message} + statuses[i].Health = &resHealth + + // Is health status is missing but resource has not built-in/custom health check then it should not affect parent app health + if _, hasOverride := healthOverrides[lua.GetConfigMapKey(gvk)]; healthStatus.Status == health.HealthStatusMissing && !hasOverride && health.GetHealthCheckFunc(gvk) == nil { + continue + } + + // Missing or Unknown health status of child Argo CD app should not affect parent + if res.Kind == application.ApplicationKind && res.Group == application.Group && (healthStatus.Status == health.HealthStatusMissing || healthStatus.Status == health.HealthStatusUnknown) { + continue + } + + if health.IsWorse(appHealth.Status, healthStatus.Status) { + appHealth.Status = healthStatus.Status + } + } + } + return &appHealth, savedErr +} diff --git a/controller/health_test.go b/controller/health_test.go new file mode 100644 index 0000000000000..baa5b50d33011 --- /dev/null +++ b/controller/health_test.go @@ -0,0 +1,161 @@ +package controller + +import ( + "io/ioutil" + "testing" + + "github.com/argoproj/gitops-engine/pkg/health" + synccommon "github.com/argoproj/gitops-engine/pkg/sync/common" + "github.com/argoproj/gitops-engine/pkg/utils/kube" + "github.com/ghodss/yaml" + "github.com/stretchr/testify/assert" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" + "k8s.io/apimachinery/pkg/runtime/schema" + + "github.com/argoproj/argo-cd/v2/pkg/apis/application" + appv1 "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1" + "github.com/argoproj/argo-cd/v2/util/lua" +) + +var app = &appv1.Application{} + +func initStatuses(resources []managedResource) []appv1.ResourceStatus { + statuses := make([]appv1.ResourceStatus, len(resources)) + for i := range resources { + statuses[i] = appv1.ResourceStatus{Group: resources[i].Group, Kind: resources[i].Kind, Version: resources[i].Version} + } + return statuses +} + +func resourceFromFile(filePath string) unstructured.Unstructured { + yamlBytes, err := ioutil.ReadFile(filePath) + if err != nil { + panic(err) + } + var res unstructured.Unstructured + err = yaml.Unmarshal(yamlBytes, &res) + if err != nil { + panic(err) + } + return res +} + +func TestSetApplicationHealth(t *testing.T) { + failedJob := resourceFromFile("./testdata/job-failed.yaml") + runningPod := resourceFromFile("./testdata/pod-running-restart-always.yaml") + + resources := []managedResource{{ + Group: "", Version: "v1", Kind: "Pod", Live: &runningPod}, { + Group: "batch", Version: "v1", Kind: "Job", Live: &failedJob, + }} + resourceStatuses := initStatuses(resources) + + healthStatus, err := setApplicationHealth(resources, resourceStatuses, lua.ResourceHealthOverrides{}, app) + assert.NoError(t, err) + assert.Equal(t, health.HealthStatusDegraded, healthStatus.Status) + + // now mark the job as a hook and retry. it should ignore the hook and consider the app healthy + failedJob.SetAnnotations(map[string]string{synccommon.AnnotationKeyHook: "PreSync"}) + healthStatus, err = setApplicationHealth(resources, resourceStatuses, nil, app) + assert.NoError(t, err) + assert.Equal(t, health.HealthStatusHealthy, healthStatus.Status) +} + +func TestSetApplicationHealth_MissingResource(t *testing.T) { + pod := resourceFromFile("./testdata/pod-running-restart-always.yaml") + + resources := []managedResource{{ + Group: "", Version: "v1", Kind: "Pod", Target: &pod}, {}} + resourceStatuses := initStatuses(resources) + + healthStatus, err := setApplicationHealth(resources, resourceStatuses, lua.ResourceHealthOverrides{}, app) + assert.NoError(t, err) + assert.Equal(t, health.HealthStatusMissing, healthStatus.Status) +} + +func TestSetApplicationHealth_MissingResourceNoBuiltHealthCheck(t *testing.T) { + cm := resourceFromFile("./testdata/configmap.yaml") + + resources := []managedResource{{ + Group: "", Version: "v1", Kind: "ConfigMap", Target: &cm}} + resourceStatuses := initStatuses(resources) + + t.Run("NoOverride", func(t *testing.T) { + healthStatus, err := setApplicationHealth(resources, resourceStatuses, lua.ResourceHealthOverrides{}, app) + assert.NoError(t, err) + assert.Equal(t, health.HealthStatusHealthy, healthStatus.Status) + assert.Equal(t, resourceStatuses[0].Health.Status, health.HealthStatusMissing) + }) + + t.Run("HasOverride", func(t *testing.T) { + healthStatus, err := setApplicationHealth(resources, resourceStatuses, lua.ResourceHealthOverrides{ + lua.GetConfigMapKey(schema.GroupVersionKind{Version: "v1", Kind: "ConfigMap"}): appv1.ResourceOverride{ + HealthLua: "some health check", + }, + }, app) + assert.NoError(t, err) + assert.Equal(t, health.HealthStatusMissing, healthStatus.Status) + }) +} + +func newAppLiveObj(status health.HealthStatusCode) *unstructured.Unstructured { + app := appv1.Application{ + ObjectMeta: metav1.ObjectMeta{ + Name: "foo", + }, + TypeMeta: metav1.TypeMeta{ + APIVersion: "argoproj.io/v1alpha1", + Kind: "Application", + }, + Status: appv1.ApplicationStatus{ + Health: appv1.HealthStatus{ + Status: status, + }, + }, + } + + return kube.MustToUnstructured(&app) +} + +func TestChildAppHealth(t *testing.T) { + overrides := lua.ResourceHealthOverrides{ + lua.GetConfigMapKey(appv1.ApplicationSchemaGroupVersionKind): appv1.ResourceOverride{ + HealthLua: ` +hs = {} +hs.status = "Progressing" +hs.message = "" +if obj.status ~= nil then + if obj.status.health ~= nil then + hs.status = obj.status.health.status + if obj.status.health.message ~= nil then + hs.message = obj.status.health.message + end + end +end +return hs`, + }, + } + + t.Run("ChildAppDegraded", func(t *testing.T) { + degradedApp := newAppLiveObj(health.HealthStatusDegraded) + resources := []managedResource{{ + Group: application.Group, Version: "v1alpha1", Kind: application.ApplicationKind, Live: degradedApp}, {}} + resourceStatuses := initStatuses(resources) + + healthStatus, err := setApplicationHealth(resources, resourceStatuses, overrides, app) + assert.NoError(t, err) + assert.Equal(t, health.HealthStatusDegraded, healthStatus.Status) + }) + + t.Run("ChildAppMissing", func(t *testing.T) { + degradedApp := newAppLiveObj(health.HealthStatusMissing) + resources := []managedResource{{ + Group: application.Group, Version: "v1alpha1", Kind: application.ApplicationKind, Live: degradedApp}, {}} + resourceStatuses := initStatuses(resources) + + healthStatus, err := setApplicationHealth(resources, resourceStatuses, overrides, app) + assert.NoError(t, err) + assert.Equal(t, health.HealthStatusHealthy, healthStatus.Status) + }) +} diff --git a/controller/state.go b/controller/state.go index 19a6a2a1eecf3..a6819a88afb55 100644 --- a/controller/state.go +++ b/controller/state.go @@ -33,7 +33,6 @@ import ( appstatecache "github.com/argoproj/argo-cd/v2/util/cache/appstate" "github.com/argoproj/argo-cd/v2/util/db" "github.com/argoproj/argo-cd/v2/util/gpg" - argohealth "github.com/argoproj/argo-cd/v2/util/health" "github.com/argoproj/argo-cd/v2/util/io" "github.com/argoproj/argo-cd/v2/util/settings" "github.com/argoproj/argo-cd/v2/util/stats" @@ -59,20 +58,6 @@ type managedResource struct { ResourceVersion string } -func GetLiveObjsForApplicationHealth(resources []managedResource, statuses []appv1.ResourceStatus) ([]*appv1.ResourceStatus, []*unstructured.Unstructured) { - liveObjs := make([]*unstructured.Unstructured, 0) - resStatuses := make([]*appv1.ResourceStatus, 0) - for i, resource := range resources { - if resource.Target != nil && hookutil.Skip(resource.Target) { - continue - } - - liveObjs = append(liveObjs, resource.Live) - resStatuses = append(resStatuses, &statuses[i]) - } - return resStatuses, liveObjs -} - // AppStateManager defines methods which allow to compare application spec and actual application state. type AppStateManager interface { CompareAppState(app *v1alpha1.Application, project *appv1.AppProject, revision string, source v1alpha1.ApplicationSource, noCache bool, noRevisionCache bool, localObjects []string) *comparisonResult @@ -621,11 +606,7 @@ func (m *appStateManager) CompareAppState(app *v1alpha1.Application, project *ap } ts.AddCheckpoint("sync_ms") - resSumForAppHealth, liveObjsForAppHealth := GetLiveObjsForApplicationHealth(managedResources, resourceSummaries) - healthStatus, err := argohealth.SetApplicationHealth(resSumForAppHealth, liveObjsForAppHealth, resourceOverrides, func(obj *unstructured.Unstructured) bool { - return !isSelfReferencedApp(app, kubeutil.GetObjectRef(obj)) - }) - + healthStatus, err := setApplicationHealth(managedResources, resourceSummaries, resourceOverrides, app) if err != nil { conditions = append(conditions, appv1.ApplicationCondition{Type: v1alpha1.ApplicationConditionComparisonError, Message: err.Error(), LastTransitionTime: &now}) } diff --git a/controller/sync.go b/controller/sync.go index 2e2919db370f9..4da00441ac991 100644 --- a/controller/sync.go +++ b/controller/sync.go @@ -146,7 +146,7 @@ func (m *appStateManager) SyncAppState(app *v1alpha1.Application, state *v1alpha prunePropagationPolicy = v1.DeletePropagationOrphan } - syncCtx, err := sync.NewSyncContext( + syncCtx, cleanup, err := sync.NewSyncContext( compareResult.syncStatus.Revision, compareResult.reconciliationResult, restConfig, @@ -186,9 +186,12 @@ func (m *appStateManager) SyncAppState(app *v1alpha1.Application, state *v1alpha if err != nil { state.Phase = common.OperationError - state.Message = fmt.Sprintf("failed to record sync to history: %v", err) + state.Message = fmt.Sprintf("failed to initialize sync context: %v", err) + return } + defer cleanup() + start := time.Now() if state.Phase == common.OperationTerminating { diff --git a/controller/testdata/configmap.yaml b/controller/testdata/configmap.yaml new file mode 100644 index 0000000000000..b781028c394f5 --- /dev/null +++ b/controller/testdata/configmap.yaml @@ -0,0 +1,6 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: my-map +data: + foo: bar \ No newline at end of file diff --git a/util/health/testdata/job-failed.yaml b/controller/testdata/job-failed.yaml similarity index 100% rename from util/health/testdata/job-failed.yaml rename to controller/testdata/job-failed.yaml diff --git a/util/health/testdata/pod-running-restart-always.yaml b/controller/testdata/pod-running-restart-always.yaml similarity index 100% rename from util/health/testdata/pod-running-restart-always.yaml rename to controller/testdata/pod-running-restart-always.yaml diff --git a/docs/cli_installation.md b/docs/cli_installation.md index 3ed832bdaeeea..13a4d7bbc6379 100644 --- a/docs/cli_installation.md +++ b/docs/cli_installation.md @@ -2,7 +2,15 @@ You can download the latest Argo CD version from [the latest release page of this repository](https://github.com/argoproj/argo-cd/releases/latest), which will include the `argocd` CLI. -## Linux +## Linux and WSL + +### Homebrew + +```bash +brew install argocd +``` + +### Download With Curl You can view the latest version of Argo CD at the link above or run the following command to grab the version: diff --git a/docs/developer-guide/contributing.md b/docs/developer-guide/contributing.md index e5489630316b6..18cebfa76d778 100644 --- a/docs/developer-guide/contributing.md +++ b/docs/developer-guide/contributing.md @@ -23,7 +23,7 @@ The Docker version must be fairly recent, and support multi-stage builds. You sh * Obviously, you will need a `git` client for pulling source code and pushing back your changes. -* Last but not least, you will need a Go SDK and related tools (such as GNU `make`) installed and working on your development environment. The minimum required Go version for building ArgoCD is **v1.14.0**. +* Last but not least, you will need a Go SDK and related tools (such as GNU `make`) installed and working on your development environment. The minimum required Go version for building and testing ArgoCD is **v1.16**. * We will assume that your Go workspace is at `~/go`. diff --git a/docs/developer-guide/use-gitpod.md b/docs/developer-guide/use-gitpod.md index a670baf9039c1..bbea575b5ac5b 100644 --- a/docs/developer-guide/use-gitpod.md +++ b/docs/developer-guide/use-gitpod.md @@ -8,8 +8,8 @@ for Argo CD development. 1. Fork [https://github.com/argoproj/argo-cd](https://github.com/argoproj/argo-cd) repository 1. Create Gitpod workspace by opening the following url in the browser: - https://gitpod.io/#https://github.com//argo-cd - `The is your Github username` + `https://gitpod.io/#https://github.com//argo-cd` where + `` is your Github username. 1. Once workspace is created you should see VSCode editor in the browser as well as workspace initialization logs in the VSCode terminal. The initialization process downloads all backend and UI dependencies as well @@ -40,4 +40,4 @@ There are some known limitations: * Free plan provides 50 hours per month * [Envtest](https://book.kubebuilder.io/reference/envtest.html) based Kubernetes is only control plane. So you won't be able to deploy Argo CD applications that runs actual pods. -* Codegen tools are not available. E.g. you won't be able to use `make codegen-local`. \ No newline at end of file +* Codegen tools are not available. E.g. you won't be able to use `make codegen-local`. diff --git a/docs/getting_started.md b/docs/getting_started.md index eec0a8e2c975a..ae64f14874cc0 100644 --- a/docs/getting_started.md +++ b/docs/getting_started.md @@ -17,6 +17,10 @@ kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/st This will create a new namespace, `argocd`, where Argo CD services and application resources will live. +!!! warning + The installation manifests include `ClusterRoleBinding` resources that reference `argocd` namespace. If you installing Argo CD into a different + namespace then make sure to update the namespace reference. + !!! note If you are not interested in UI, SSO, multi-cluster management and just want to pull changes into the cluster then you can disable authentication using `--disable-auth` flag and access Argo CD via CLI using `--port-forward` or `--port-forward-namespace` flags @@ -28,7 +32,7 @@ This will create a new namespace, `argocd`, where Argo CD services and applicati Download the latest Argo CD version from [https://github.com/argoproj/argo-cd/releases/latest](https://github.com/argoproj/argo-cd/releases/latest). More detailed installation instructions can be found via the [CLI installation documentation](cli_installation.md). -Also available in Mac Homebrew: +Also available in Mac, Linux and WSL Homebrew: ```bash brew install argocd @@ -61,41 +65,6 @@ The API server can then be accessed using the localhost:8080 ## 4. Login Using The CLI -!!! warning - We strongly advise to change the initially generated administrative password - as soon as after your first login to the system. - -Depending on the Argo CD version you are installing, the method how to get the -initial password for the `admin` user is different. - -> Argo CD 1.8 and earlier - -The initial password is autogenerated to be the pod name of the -Argo CD API server. This can be retrieved with the command: - -```bash -kubectl get pods -n argocd -l app.kubernetes.io/name=argocd-server -o name | cut -d'/' -f 2 -``` - -Using the username `admin` and the password from above, login to Argo CD's IP or hostname: - -```bash -argocd login # e.g. localhost:8080 or argocd.example.com -``` - -Change the password using the command: - -```bash -argocd account update-password -``` - -!!! note - The initial password is set in a kubernetes secret, named `argocd-secret`, during ArgoCD's initial start up. This means if you edit - the deployment in any way which causes a new pod to be deployed, such as disabling TLS on the Argo CD API server. Take note of the initial - pod name when you first install Argo CD, or reset the password by following [these instructions](../faq/#i-forgot-the-admin-password-how-do-i-reset-it) - -> Argo CD v1.9 and later - The initial password for the `admin` account is auto-generated and stored as clear text in the field `password` in a secret named `argocd-initial-admin-secret` in your Argo CD installation namespace. You can simply retrieve this password @@ -109,6 +78,13 @@ For better readability, e.g. if you want to copy & paste the generated password, you can simply append `&& echo` to above command, which will add a newline to the output. +!!! warning + You should delete the `argocd-initial-admin-secret` from the Argo CD + namespace once you changed the password. The secret serves no other + purpose than to store the initially generated password in clear and can + safely be deleted at any time. It will be re-created on demand by Argo CD + if a new admin password must be re-generated. + Using the username `admin` and the password from above, login to Argo CD's IP or hostname: ```bash @@ -121,13 +97,6 @@ Change the password using the command: argocd account update-password ``` -!!! note - You should delete the `argocd-initial-admin-secret` from the Argo CD - namespace once you changed the password. The secret serves no other - purpose than to store the initially generated password in clear and can - safely be deleted at any time. It will be re-created on demand by Argo CD - if a new admin password must be re-generated. - ## 5. Register A Cluster To Deploy Apps To (Optional) This step registers a cluster's credentials to Argo CD, and is only necessary when deploying to diff --git a/docs/operator-manual/application.yaml b/docs/operator-manual/application.yaml index 4172e970d7fc9..3c0498e756617 100644 --- a/docs/operator-manual/application.yaml +++ b/docs/operator-manual/application.yaml @@ -35,6 +35,13 @@ spec: valueFiles: - values-prod.yaml +# # Helm value files that are stored in a different git repository +# externalValueFiles: +# - repoURL: https://git.example.gom/example.git +# targetRevision: main +# valueFiles: +# - values.yaml + # Values file as block file values: | ingress: diff --git a/docs/operator-manual/argocd-cm.yaml b/docs/operator-manual/argocd-cm.yaml index f0e01fe2afbcb..0af2ebe955c65 100644 --- a/docs/operator-manual/argocd-cm.yaml +++ b/docs/operator-manual/argocd-cm.yaml @@ -67,6 +67,8 @@ data: # Git repositories configure Argo CD with (optional). # This list is updated when configuring/removing repos from the UI/CLI # Note: 'type: helm' field is supported in v1.3+. Use 'helm.repositories' for older versions. + # Note: the last example in the list would use a repository credential template, configured under "repository.credentials" + # defined below. repositories: | - url: https://github.com/argoproj/my-private-repository passwordSecret: @@ -90,6 +92,7 @@ data: passwordSecret: name: my-secret key: password + - url: https://github.com/argoproj/private-repo # Non-standard and private Helm repositories (deprecated in 1.3). helm.repositories: | @@ -104,12 +107,41 @@ data: name: my-secret key: password + # Repository credentials, for using the same credentials in multiple repositories. + repository.credentials: | + - url: https://github.com/argoproj + passwordSecret: + name: my-secret + key: password + usernameSecret: + name: my-secret + key: username + - url: git@github.com:argoproj-labs + sshPrivateKeySecret: + name: my-secret + key: sshPrivateKey + - url: https://github.com/argoproj + githubAppID: 1 + githubAppInstallationID: 2 + githubAppPrivateKeySecret: + name: my-secret + key: githubAppPrivateKey + - url: https://ghe.example.com/argoproj + githubAppID: 1 + githubAppInstallationID: 2 + githubAppEnterpriseBaseUrl: https://ghe.example.com/api/v3 + githubAppPrivateKeySecret: + name: my-secret + key: githubAppPrivateKey + # Configuration to customize resource behavior (optional) can be configured via splitted sub keys. # Keys are in the form: resource.customizations.ignoreDifferences., resource.customizations.health. # resource.customizations.actions., resource.customizations.knownTypeFields. resource.customizations.ignoreDifferences.admissionregistration.k8s.io_MutatingWebhookConfiguration: | jsonPointers: - /webhooks/0/clientConfig/caBundle + jqPathExpressions: + - .webhooks[0].clientConfig.caBundle resource.customizations.health.certmanager.k8s.io-Certificate: | hs = {} @@ -261,6 +293,6 @@ data: ui.bannerurl: "https://argoproj.github.io" # Application reconciliation timeout is the max amount of time required to discover if a new manifests version got - # published to the repository. Three minutes by default. + # published to the repository. Reconciliation by timeout is disabled if timeout is set to 0. Three minutes by default. # > Note: argocd-repo-server deployment must be manually restarted after changing the setting. timeout.reconciliation: 180s diff --git a/docs/operator-manual/argocd-cmd-params-cm.yaml b/docs/operator-manual/argocd-cmd-params-cm.yaml new file mode 100644 index 0000000000000..c6cdeea4645cb --- /dev/null +++ b/docs/operator-manual/argocd-cmd-params-cm.yaml @@ -0,0 +1,104 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: argocd-cmd-params-cm + labels: + app.kubernetes.io/name: argocd-cmd-params-cm + app.kubernetes.io/part-of: argocd +data: + # Repo server address. (default "argocd-repo-server:8081") + repo.server: "argocd-repo-server:8081" + + # Dex server address (default "http://argocd-dex-server:5556") + dex.server: "http://argocd-dex-server:5556" + + # Redis server hostname and port (e.g. argocd-redis:6379) + redis.server: "argocd-redis:6379" + # Redis database + redis.db: + + ## Controller Properties + # Repo server RPC call timeout seconds. + controller.repo.server.timeout.seconds: "60" + # Disable TLS on connections to repo server + controller.repo.server.plaintext: "false" + # Whether to use strict validation of the TLS cert presented by the repo server + controller.repo.server.strict.tls: "false" + # Number of application status processors (default 20) + controller.status.processors: "20" + # Number of application operation processors (default 10) + controller.operation.processors: "10" + # Set the logging format. One of: text|json (default "text") + controller.log.format: "text" + # Set the logging level. One of: debug|info|warn|error (default "info") + controller.log.level: "info" + # Prometheus metrics cache expiration (disabled by default. e.g. 24h0m0s) + controller.metrics.cache.expiration: "24h0m0s" + # Specifies timeout between application self heal attempts (default 5) + controller.self.heal.timeout.seconds: "5" + # Cache expiration for app state (default 1h0m0s) + controller.app.state.cache.expiration: "1h0m0s" + # Cache expiration default (default 24h0m0s) + controller.default.cache.expiration: "24h0m0s" + + ## Server properties + # Run server without TLS + server.insecure: "false" + # Value for base href in index.html. Used if Argo CD is running behind reverse proxy under subpath different from / (default "/") + server.basehref: "/" + # Used if Argo CD is running behind reverse proxy under subpath different from / + server.rootpath: "/" + + # Set the logging format. One of: text|json (default "text") + server.log.format: "text" + # Set the logging level. One of: debug|info|warn|error (default "info") + server.log.level: "info" + # Repo server RPC call timeout seconds. (default 60) + server.repo.server.timeout.seconds: "60" + # Use a plaintext client (non-TLS) to connect to repository server + server.repo.server.plaintext: "false" + # Perform strict validation of TLS certificates when connecting to repo server + server.repo.server.strict.tls: "false" + # Disable client authentication + server.disable.auth: "false" + # Enable GZIP compression + server.enable.gzip: "false" + # Set X-Frame-Options header in HTTP responses to value. To disable, set to "". (default "sameorigin") + server.x.frame.options: "sameorigin" + # The minimum SSL/TLS version that is acceptable (one of: 1.0|1.1|1.2|1.3) (default "1.2") + server.tls.minversion: "1.2" + # The maximum SSL/TLS version that is acceptable (one of: 1.0|1.1|1.2|1.3) (default "1.3") + server.tls.maxversion: "1.3" + # The list of acceptable ciphers to be used when establishing TLS connections. Use 'list' to list available ciphers. (default "TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384:TLS_RSA_WITH_AES_256_GCM_SHA384") + server.tls.ciphers: "TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384:TLS_RSA_WITH_AES_256_GCM_SHA384" + # Cache expiration for cluster/repo connection status (default 1h0m0s) + server.connection.status.cache.expiration: "1h0m0s" + # Cache expiration for OIDC state (default 3m0s) + server.oidc.cache.expiration: "3m0s" + # Cache expiration for failed login attempts (default 24h0m0s) + server.login.attempts.expiration: "24h0m0s" + # Cache expiration for app state (default 1h0m0s) + server.app.state.cache.expiration: "1h0m0s" + # Cache expiration default (default 24h0m0s) + server.default.cache.expiration: "24h0m0s" + + ## Repo-server properties + # Set the logging format. One of: text|json (default "text") + reposerver.log.format: "text" + # Set the logging level. One of: debug|info|warn|error (default "info") + reposerver.log.level: "info" + # Limit on number of concurrent manifests generate requests. Any value less the 1 means no limit. + reposerver.parallelism.limit: "1" + # Disable TLS on the gRPC endpoint + reposerver.disable.tls: "false" + # The minimum SSL/TLS version that is acceptable (one of: 1.0|1.1|1.2|1.3) (default "1.2") + reposerver.tls.minversion: "1.2" + # The maximum SSL/TLS version that is acceptable (one of: 1.0|1.1|1.2|1.3) (default "1.3") + reposerver.tls.maxversion: "1.3" + # The list of acceptable ciphers to be used when establishing TLS connections. Use 'list' to list available ciphers. (default "TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384:TLS_RSA_WITH_AES_256_GCM_SHA384") + reposerver.tls.ciphers: "TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384:TLS_RSA_WITH_AES_256_GCM_SHA384" + # Cache expiration for repo state, incl. app lists, app details, manifest generation, revision meta-data (default 24h0m0s) + reposerver.repo.cache.expiration: "24h0m0s" + # Cache expiration default (default 24h0m0s) + reposerver.default.cache.expiration: "24h0m0s" + \ No newline at end of file diff --git a/docs/operator-manual/declarative-setup.md b/docs/operator-manual/declarative-setup.md index 79b44c1bc068a..615107b3f8d2f 100644 --- a/docs/operator-manual/declarative-setup.md +++ b/docs/operator-manual/declarative-setup.md @@ -7,6 +7,7 @@ Argo CD applications, projects and settings can be defined declaratively using K | File Name | Resource Name | Kind | Description | |-----------|---------------|------|-------------| | [`argocd-cm.yaml`](argocd-cm.yaml) | argocd-cm | ConfigMap | General Argo CD configuration | +| [`argocd-cmd-params-cm.yaml`](argocd-cmd-params-cm.yaml) | argocd-cmd-params-cm | ConfigMap | Argo CD env variables configuration | | [`argocd-secret.yaml`](argocd-secret.yaml) | argocd-secret | Secret | Password, Certificates, Signing Key | | [`argocd-rbac-cm.yaml`](argocd-rbac-cm.yaml) | argocd-rbac-cm | ConfigMap | RBAC Configuration | | [`argocd-tls-certs-cm.yaml`](argocd-tls-certs-cm.yaml) | argocd-tls-certs-cm | ConfigMap | Custom TLS certificates for connecting Git repositories via HTTPS (v1.2 and later) | diff --git a/docs/operator-manual/health.md b/docs/operator-manual/health.md index c706368bfd430..b16208bf41ef6 100644 --- a/docs/operator-manual/health.md +++ b/docs/operator-manual/health.md @@ -19,6 +19,40 @@ with at least one value for `hostname` or `IP`. ### PersistentVolumeClaim * The `status.phase` is `Bound` +### Argocd App + +The health assessement of `argoproj.io/Application` CRD has been removed in argocd 1.8 (see [#3781](https://github.com/argoproj/argo-cd/issues/3781) for more information). +You might need to restore it if you are using app-of-apps pattern and orchestrating syncronization using sync waves. Add the following resource customization in +`argocd-cm` ConfigMap: + +```yaml +--- +apiVersion: v1 +kind: ConfigMap +metadata: + name: argocd-cm + namespace: argocd + labels: + app.kubernetes.io/name: argocd-cm + app.kubernetes.io/part-of: argocd +data: + resource.customizations: | + argoproj.io/Application: + health.lua: | + hs = {} + hs.status = "Progressing" + hs.message = "" + if obj.status ~= nil then + if obj.status.health ~= nil then + hs.status = obj.status.health.status + if obj.status.health.message ~= nil then + hs.message = obj.status.health.message + end + end + end + return hs +``` + ## Custom Health Checks Argo CD supports custom health checks written in [Lua](https://www.lua.org/). This is useful if you: diff --git a/docs/operator-manual/rbac.md b/docs/operator-manual/rbac.md index 9285740b73dbf..886a60b489b6a 100644 --- a/docs/operator-manual/rbac.md +++ b/docs/operator-manual/rbac.md @@ -3,7 +3,7 @@ The RBAC feature enables restriction of access to Argo CD resources. Argo CD does not have its own user management system and has only one built-in user `admin`. The `admin` user is a superuser and it has unrestricted access to the system. RBAC requires [SSO configuration](user-management/index.md) or [one or more local users setup](user-management/index.md). -Once SSO or local users are configured, additional RBAC roles can be defined, and SSO groups or local users can man be mapped to roles. +Once SSO or local users are configured, additional RBAC roles can be defined, and SSO groups or local users can then be mapped to roles. ## Basic Built-in Roles diff --git a/docs/operator-manual/server-commands/additional-configuration-method.md b/docs/operator-manual/server-commands/additional-configuration-method.md new file mode 100644 index 0000000000000..cc80ed3aeb9c8 --- /dev/null +++ b/docs/operator-manual/server-commands/additional-configuration-method.md @@ -0,0 +1,28 @@ +## Additional configuration methods + +Additional configuration methods for configuring commands `argocd-server`, `argocd-repo-server` and `argocd-application-controller`. + + +### Synopsis + +The commands can also be configured by setting the respective flag of the available options in `argocd-cmd-params-cm.yaml`. Each component has a specific prefix associated with it. + +``` +argocd-server --> server +argocd-repo-server --> reposerver +argocd-application-controller --> controller +``` + +The flags that do not have a prefix are shared across multiple components. One such flag is `repo.server` +The list of flags that are available can be found in [argocd-cmd-params-cm.yaml](../argocd-cmd-params-cm.yaml) + + +### Example + +To set `logformat` of `argocd-application-controller`, add below entry to the config map `argocd-cmd-params-cm.yaml`. + +``` +data: + controller.log.format: "text" +``` + diff --git a/docs/operator-manual/server-commands/argocd-application-controller.md b/docs/operator-manual/server-commands/argocd-application-controller.md index 8d9f9139f11b3..02a4cab25deb3 100644 --- a/docs/operator-manual/server-commands/argocd-application-controller.md +++ b/docs/operator-manual/server-commands/argocd-application-controller.md @@ -13,7 +13,7 @@ argocd-application-controller [flags] ### Options ``` - --app-resync int Time period in seconds for application resync. + --app-resync int Time period in seconds for application resync. (default 180) --app-state-cache-expiration duration Cache expiration for app state (default 1h0m0s) --as string Username to impersonate for the operation --as-group stringArray Group to impersonate for the operation, this flag can be repeated to specify multiple groups. @@ -33,7 +33,7 @@ argocd-application-controller [flags] --metrics-cache-expiration duration Prometheus metrics cache expiration (disabled by default. e.g. 24h0m0s) --metrics-port int Start metrics server on given port (default 8082) -n, --namespace string If present, the namespace scope for this CLI request - --operation-processors int Number of application operation processors (default 1) + --operation-processors int Number of application operation processors (default 10) --password string Password for basic authentication to the API server --redis string Redis server hostname and port (e.g. argocd-redis:6379). --redisdb int Redis database. @@ -46,7 +46,7 @@ argocd-application-controller [flags] --sentinel stringArray Redis sentinel hostname and port (e.g. argocd-redis-ha-announce-0:6379). --sentinelmaster string Redis sentinel master group name. (default "master") --server string The address and port of the Kubernetes API server - --status-processors int Number of application status processors (default 1) + --status-processors int Number of application status processors (default 20) --tls-server-name string If provided, this name will be used to validate server certificate. If this is not provided, hostname used to contact the server is used. --token string Bearer token for authentication to the API server --user string The name of the kubeconfig user to use diff --git a/docs/operator-manual/server-commands/argocd-util_app_generate-spec.md b/docs/operator-manual/server-commands/argocd-util_app_generate-spec.md index 5d9c2b03fe29d..762b61af92e6a 100644 --- a/docs/operator-manual/server-commands/argocd-util_app_generate-spec.md +++ b/docs/operator-manual/server-commands/argocd-util_app_generate-spec.md @@ -57,6 +57,8 @@ argocd-util app generate-spec APPNAME [flags] --jsonnet-tla-str stringArray Jsonnet top level string arguments --kustomize-common-annotation stringArray Set common labels in Kustomize --kustomize-common-label stringArray Set common labels in Kustomize + --kustomize-force-common-annotation Force common annotations in Kustomize + --kustomize-force-common-label Force common labels in Kustomize --kustomize-image stringArray Kustomize images (e.g. --kustomize-image node:8.15.0 --kustomize-image mysql=mariadb,alpine@sha256:24a0c4b4a4c0eb97a1aabb8e29f18e917d05abfe1b7a7c07857230879ce7d3d) --kustomize-version string Kustomize version -l, --label stringArray Labels to apply to the app diff --git a/docs/operator-manual/server-commands/argocd-util_cluster.md b/docs/operator-manual/server-commands/argocd-util_cluster.md index d64d60f272dde..2d39ebae9e1f2 100644 --- a/docs/operator-manual/server-commands/argocd-util_cluster.md +++ b/docs/operator-manual/server-commands/argocd-util_cluster.md @@ -17,5 +17,6 @@ argocd-util cluster [flags] * [argocd-util](argocd-util.md) - argocd-util tools used by Argo CD * [argocd-util cluster generate-spec](argocd-util_cluster_generate-spec.md) - Generate declarative config for a cluster * [argocd-util cluster kubeconfig](argocd-util_cluster_kubeconfig.md) - Generates kubeconfig for the specified cluster +* [argocd-util cluster shards](argocd-util_cluster_shards.md) - Print information about each controller shard and portion of Kubernetes resources it is responsible for. * [argocd-util cluster stats](argocd-util_cluster_stats.md) - Prints information cluster statistics and inferred shard number diff --git a/docs/operator-manual/server-commands/argocd-util_cluster_generate-spec.md b/docs/operator-manual/server-commands/argocd-util_cluster_generate-spec.md index 780a8783f2914..77c7d70ebfb2c 100644 --- a/docs/operator-manual/server-commands/argocd-util_cluster_generate-spec.md +++ b/docs/operator-manual/server-commands/argocd-util_cluster_generate-spec.md @@ -17,13 +17,16 @@ argocd-util cluster generate-spec CONTEXT [flags] --exec-command-args stringArray Arguments to supply to the --exec-command executable --exec-command-env stringToString Environment vars to set when running the --exec-command executable (default []) --exec-command-install-hint string Text shown to the user when the --exec-command executable doesn't seem to be present + --generate-bearer-token Generate authentication token that should be used to access K8S API server -h, --help help for generate-spec --in-cluster Indicates Argo CD resides inside this cluster and should connect using the internal k8s hostname (kubernetes.default.svc) --kubeconfig string use a particular kubeconfig file --name string Overwrite the cluster name --namespace stringArray List of namespaces which are allowed to manage -o, --output string Output format. One of: json|yaml (default "yaml") + --service-account string System namespace service account to use for kubernetes resource management. If not set then default "argocd-manager" SA will be used (default "argocd-manager") --shard int Cluster shard number; inferred from hostname if not set (default -1) + --system-namespace string Use different system namespace (default "kube-system") ``` ### SEE ALSO diff --git a/docs/operator-manual/server-commands/argocd-util_cluster_shards.md b/docs/operator-manual/server-commands/argocd-util_cluster_shards.md new file mode 100644 index 0000000000000..ffe8e7c3bb292 --- /dev/null +++ b/docs/operator-manual/server-commands/argocd-util_cluster_shards.md @@ -0,0 +1,44 @@ +## argocd-util cluster shards + +Print information about each controller shard and portion of Kubernetes resources it is responsible for. + +``` +argocd-util cluster shards [flags] +``` + +### Options + +``` + --app-state-cache-expiration duration Cache expiration for app state (default 1h0m0s) + --as string Username to impersonate for the operation + --as-group stringArray Group to impersonate for the operation, this flag can be repeated to specify multiple groups. + --certificate-authority string Path to a cert file for the certificate authority + --client-certificate string Path to a client certificate file for TLS + --client-key string Path to a client key file for TLS + --cluster string The name of the kubeconfig cluster to use + --context string The name of the kubeconfig context to use + --default-cache-expiration duration Cache expiration default (default 24h0m0s) + -h, --help help for shards + --insecure-skip-tls-verify If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure + --kubeconfig string Path to a kube config. Only required if out-of-cluster + -n, --namespace string If present, the namespace scope for this CLI request + --password string Password for basic authentication to the API server + --port-forward-redis Automatically port-forward ha proxy redis from current namespace? (default true) + --redis string Redis server hostname and port (e.g. argocd-redis:6379). + --redisdb int Redis database. + --replicas int Application controller replicas count. Inferred from number of running controller pods if not specified + --request-timeout string The length of time to wait before giving up on a single server request. Non-zero values should contain a corresponding time unit (e.g. 1s, 2m, 3h). A value of zero means don't timeout requests. (default "0") + --sentinel stringArray Redis sentinel hostname and port (e.g. argocd-redis-ha-announce-0:6379). + --sentinelmaster string Redis sentinel master group name. (default "master") + --server string The address and port of the Kubernetes API server + --shard int Cluster shard filter (default -1) + --tls-server-name string If provided, this name will be used to validate server certificate. If this is not provided, hostname used to contact the server is used. + --token string Bearer token for authentication to the API server + --user string The name of the kubeconfig user to use + --username string Username for basic authentication to the API server +``` + +### SEE ALSO + +* [argocd-util cluster](argocd-util_cluster.md) - Manage clusters configuration + diff --git a/docs/operator-manual/tls.md b/docs/operator-manual/tls.md index 4014f08ddef9c..4a56d07dc677a 100644 --- a/docs/operator-manual/tls.md +++ b/docs/operator-manual/tls.md @@ -83,7 +83,7 @@ setting command line parameters. The following parameters are available: |`--tlsmaxversion`|`1.3`|The maximum TLS version to be offered to clients| |`--tlsciphers`|`TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384:TLS_RSA_WITH_AES_256_GCM_SHA384`|A colon separated list of TLS cipher suites to be offered to clients| -### Inbound TLS certificates used by argocd-sever +### Inbound TLS certificates used by argocd-repo-sever To configure the TLS certificate used by the `argocd-repo-server` workload, create a secret named `argocd-repo-server-tls` in the namespace where Argo CD @@ -161,4 +161,4 @@ In this case, you will need to: After this change, the `argocd-server` and `argocd-application-controller` will use a plain text connection to the side-car proxy, that will handle all aspects -of TLS to the `argocd-repo-server`'s TLS side-car proxy. \ No newline at end of file +of TLS to the `argocd-repo-server`'s TLS side-car proxy. diff --git a/docs/operator-manual/upgrading/1.7-1.8.md b/docs/operator-manual/upgrading/1.7-1.8.md index 95cce7803bcdd..2d4cd54182e21 100644 --- a/docs/operator-manual/upgrading/1.7-1.8.md +++ b/docs/operator-manual/upgrading/1.7-1.8.md @@ -27,12 +27,14 @@ data: argoproj.io/Application: health.lua: | hs = {} - hs.status = "Healthy" + hs.status = "Progressing" hs.message = "" if obj.status ~= nil then if obj.status.health ~= nil then hs.status = obj.status.health.status - hs.message = obj.status.health.message + if obj.status.health.message ~= nil then + hs.message = obj.status.health.message + end end end return hs diff --git a/docs/proposals/config-management-plugin-v2.md b/docs/proposals/config-management-plugin-v2.md new file mode 100644 index 0000000000000..f4c75d965a40c --- /dev/null +++ b/docs/proposals/config-management-plugin-v2.md @@ -0,0 +1,325 @@ +--- +title: Config-Management-Plugin-Enhancement +authors: + - "@kshamajain99" # Authors' github accounts here. +sponsors: + - TBD # List all intereste parties here. +reviewers: + - TBD +approvers: + - TBD + +creation-date: 2021-03-29 +last-updated: 2021-03-29 +--- + +# Config Management Plugin Enhancement + +We want to enhance config management plugin in order to improve Argo CD operator and end-user experience +for using additional tools such as cdk8s, Tanka, jkcfg, QBEC, Dhall, pulumi, etc. + +## Summary + +Currently, Argo CD provides first-class support for Helm, Kustomize, Jsonnet/YAML, and Ksonnet. The support includes: +- Bundled binaries (maintainers periodically upgrade binaries) +- An ability to override parameters using UI/CLI +- The applications are discovered in Git repository and auto-suggested during application creation in UI +- Performance optimizations. Argo CD "knows" when it is safe to generate manifests concurrently and takes advantage of it. + +We want to enhance the configuration management plugin so that it can provide similar first-class support for additional +tools such as cdk8s, Tanka, jkcfg, QBEC, Dhall, pulumi, etc. + +## Motivation + +The config management plugin feature should be improved to provide the same level of user experience as +for the natively supported tools to the additional tools such as cdk8s, Tanka, jkcfg, QBEC, Dhall, pulumi, etc., +including Argo CD operators as well as end-user experience. + +### Goals + +The goals for config management plugin enhancement are, + +#### Improve Installation Experience +The current Config Management plugin installation experience requires two changes: +- An entry in configManagementPlugins in the Argo CD configmap (i.e. argocd-cm) +- Either an init container with a volume mount that adds a new binary into Argo CD repo server pod, or a rebuild of the argocd image, which contains the necessary tooling + +The problem with this approach is that the process is error-prone, manual, and requires learning from each and every Argo CD administrator. + +The goal is to make additional tools easily accessible for installation to Argo CD operators. + +#### Provide Discovery (Auto-selection of Tool) +For Argo CD’s natively supported config management plugins (Helm, Kustomize, Ksonnet, Jsonnet), Argo CD auto-detects +and selects the appropriate tool given only the path in the Git repository. +This selection is based on the recognition of well-known files in the directory (e.g. Chart.yaml, kustomization.yaml, etc...). + +Currently, unlike natively supported tools, when a plugin is used, a user needs to explicitly specify the plugin +that should be used to render the manifests. As part of the improvements to config management plugins, + +We want to provide the same ability to auto-select the plugin based on recognized files in the path of the git repository. + +#### Parameters support in UI/CLI +Currently, configuration management plugins allow specifying only a list of environment variables via UI/CLI. + +We want to extend its functionality to provide a similar experience as for existing natively supported tools +to additional config management tools. + +### Non-Goals + +* We aren't planning on changing the existing support for native plugins as of now. + +## Proposal + +We have drafted the solution to the problem statement as **running configuration management plugin tools as sidecar in the argocd-repo-server**. + +All it means that Argo CD Config Management Plugin 2.0 will be, +- A user-supplied container image with all the necessary tooling installed in it. +- It will run as a sidecar in the repo server deployment and will have shared access to the git repositories. +- It will contain a CMP YAML specification file describing how to render manifests. +- Its entrypoint will be a lightweight CMP API server that receives requests by the main repo-server to render manifests, +based on the CMP specification file. + +This mechanism will provide the following benefits over the existing solution, +- Plugin owners control their execution environment, packaging whatever dependent binaries required. +- An Argo CD user who wants to use additional config management tools does not have to go through the hassle of building +a customized argocd-repo-server in order to install required dependencies. +- The plugin image will be running in a container separate from the main repo-server. + +### Use cases + +* UC1: As an Argo CD user, I would like to use first-class support provided for additional tools to generate and manage deployable kubernetes manifests +* UC2: As an Argo CD operator, I want to have smooth experience while installing additional tools such as cdk8s, Tanka, jkcfg, QBEC, Dhall, pulumi, etc. +* UC3: As a plugin owner, I want to have some control over the execution environment as I want to package whatever dependent binaries required. + +### Implementation Details + +Config Management Plugin v2.0 implementation and experience will be as, + +#### Installation + +To install a plugin, an operator will simply patch argocd-repo-server to run config management plugin container as a sidecar, +with argocd-cmp-server as it’s entrypoint. Operator can use either off-the-shelf or custom built plugin image as sidecar image. + +```bash +# A plugin is a container image which runs as a sidecar, with the execution environment +# necessary to render manifests. To install a plugin, +containers: +- name: cdk8s + command: [/var/run/argocd/argocd-cmp-server] + image: docker.ui/cdk8s/cdk8s:latest + volumeMounts: + - mountPath: /var/run/argocd + name: var-files +``` + +The argocd-cmp-server binary will be populated inside the plugin container via an init container in the argocd-repo-server, +which will pre-populate a volume shared between plugins and the repo-server. + +```bash +# An init container will copy the argocd static binary into the shared volume +# so that the CMP server can become the entrypoint +initContainers: +- command: + - cp + - -n + - /usr/local/bin/argocd + - /var/run/argocd/argocd-cmp-server + image: quay.io/argoproj/argocd:latest + name: copyutil + volumeMounts: + - mountPath: /var/run/argocd + name: var-files + +# var-files is a shared volume between repo-server and cmp-server which holds: +# 1) socket files that repo-server uses to communicate to each plugin +# 2) git repositories cloned by repo-server +volumes: +- emptyDir: {} + name: var-files +``` + +#### Configuration + +Plugins will be configured via a ConfigManagementPlugin manifest located inside the plugin container, placed at a +well-known location (e.g. /home/argocd/plugins/plugin.yaml). Argo CD is agnostic to the mechanism of how the plugin.yaml would be placed, +but various options can be used on how to place this file, including: +- Baking the file into the plugin image as part of docker build +- Volume mapping the file through a configmap. + +Note that, while the ConfigManagementPlugin looks like a Kubernetes object, it is not actually a custom resource. +It only follows kubernetes-style spec conventions. + +```bash +# metadata file is in the root and shell executor knows about it +apiVersion: argoproj.io/v1alpha1 +kind: ConfigManagementPlugin +metadata: + name: cdk8s +spec: + version: v1.0 + init: + command: [cdk8s, init] + generate: + command: [sh, -c, "cdk8s synth && cat dist/*.yaml"] + discovery: + find: + - command: [find . -name main.ts] + glob: "**/*/main.ts" + check: + - command: [-f ./main.ts] + glob: "main.ts" + allowConcurrency: true # enables generating multiple manifests in parallel. +``` + +#### Config Management Plugin API Server (cmp-server) +The Config Management Plugin API Server (cmp-server) will be a new Argo CD component whose sole responsibility will be +to execute `generate` commands inside the plugin environment (the sidecar container), at the request of the repo-server. + +The cmp-server will expose the following APIs to the repo-server, + +- GenerateManifests(path) - returns YAML output using plugin tooling +- IsSupported(path) - returns whether or not the given path is supported by the plugin + +At startup, cmp-server looks at the /home/argocd/cmp-server/plugin.yaml ConfigManagementPlugin specification file to understand how to perform the requests. + +#### Registration & Communication +The repo-server needs to understand what all plugins are available to render manifests. To do this, the cmp-server +sidecars will register themselves as available plugins to the argocd-repo-server by populating named socket files in the +shared volume between repo-server and cmp-server. e.g.: + +```bash +/home/argocd/plugins/ + cdk8s.sock + jkcfg.sock + pulumi.sock +``` + +The name of the socket file will indicate the plugin name. To discover the available plugins, the repo-server will list +the shared plugins directory to discover the available plugins. + +To communicate with a plugin, the repo-server will simply need to connect to the socket and make gRPC calls against the +cmp-server listening on the other side. + +#### Discovery (Auto-selection of Tool) + +- The plugin discovery will run in the main repo-server container. +- Argo CD repo-server lists the shared plugins directory and runs `discover` command from the specification file, +whichever plugin provides a positive response first will be selected. + +#### Versioning +There will be one sidecar container per version. Hence, for two different versions users will have to configure two different sidecars. + +### Security Considerations + +The use of the plugin as sidecars separate from the repo-server is already a security improvement over the current v1.8 +config management plugin mechanism, since the plugin tooling will no longer have access to the files of the argocd-repo-server image. +However additional improvements can be made to increase security. + +### Risks and Mitigations + +One issue is that currently when repositories are cloned, the repo is cloned using the same UID of the repo-server user, +and so all repository files are created using that UID. This means that a command which executes in the git repository path, +could traverse upwards and see/write files which are outside of the repository tree. + +One proposal to prevent out-of-tree access to files, is that each git repository could be cloned with unique UIDs, +different from the repo-server’s UID. When the cmp-server executes the tooling command to generate manifests, +the command could be executed using the UID of the git repository files. e.g.: + +``` +cmd := exec.Command(command, args...) +cmd.SysProcAttr = &syscall.SysProcAttr{} +cmd.SysProcAttr.Credential = &syscall.Credential{Uid: uid, Gid: gid} +``` + +This would ensure that the command could not read or write anything out-of-tree from the repository directory. + +### Upgrade / Downgrade Strategy + +The argocd-repo-server manifest will change in order to populate the argocd-cmp-server binary inside the plugin container +via an init container. + +```bash +# An init container will copy the argocd static binary into the shared volume +# so that the CMP server can become the entrypoint +initContainers: +- command: + - cp + - -n + - /usr/local/bin/argocd + - /var/run/argocd/argocd-cmp-server + image: quay.io/argoproj/argocd:latest + name: copyutil + volumeMounts: + - mountPath: /var/run/argocd + name: var-files + +# var-files is a shared volume between repo-server and cmp-server which holds: +# 1) socket files that repo-server uses to communicate to each plugin +# 2) git repositories cloned by repo-server +volumes: +- emptyDir: {} + name: var-files +``` + +After upgrading to CMP v2, an Argo CD operator will have to make following changes, + +* In order to install a plugin, an Argo CD operator will simply have to patch argocd-repo-server +to run config management plugin container as a sidecar, with argocd-cmp-server as it’s entrypoint: + +```bash +# A plugin is a container image which runs as a sidecar, with the execution environment +# necessary to render manifests. To install a plugin, +containers: +- name: cdk8s + command: [/var/run/argocd/argocd-cmp-server] + image: docker.ui/cdk8s/cdk8s:latest + volumeMounts: + - mountPath: /var/run/argocd + name: var-files +``` + +* Plugins will be configured via a ConfigManagementPlugin manifest located inside the plugin container, placed at a +well-known location (e.g. /plugin.yaml). Argo CD is agnostic to the mechanism of how the plugin.yaml would be placed, +but various options can be used on how to place this file, including: + - Baking the file into the plugin image as part of docker build + - Volume mapping the file through a configmap. +(For more details please refer to [implementation details](#configuration)) + +## Drawbacks + +There aren't any major drawbacks to this proposal. Also, the advantages supersede the minor learning curve of the new way of managing plugins. + +However following are few minor drawbacks, + +* With addition of plugin.yaml, there will be more yamls to manage +* Operators need to be aware of the modified kubernetes manifests in the subsequent version. +* The format of the CMP manifest is a new "contract" that would need to adhere the usual Argo CD compatibility promises in future. + + +## Alternatives + +1. ConfigManagementPlugin as CRD. Have a CR which the human operator creates: + +```bash +apiVersion: argoproj.io/v1alpha1 +kind: ConfigManagementPlugin +metadata: + name: cdk8s +spec: + name: cdk8s + image: docker.ui/cdk8s/cdk8s:latest + version: v1.0 + init: + command: [cdk8s, init] + generate: + command: [sh, -c, "cdk8s synth && cat dist/*.yaml"] + discovery: + find: + - command: [find . -name main.ts] + glob: "**/*/main.ts" + check: + - command: [-f ./main.ts] + glob: "main.ts" + allowConcurrency: true # enables generating multiple manifests in parallel. +``` +2. Something magically patches the relevant manifest to add the sidecar. diff --git a/docs/proposals/project-repos-and-clusters.md b/docs/proposals/project-repos-and-clusters.md new file mode 100644 index 0000000000000..1f8258f47a72b --- /dev/null +++ b/docs/proposals/project-repos-and-clusters.md @@ -0,0 +1,172 @@ +--- +title: Neat-enhancement-idea +authors: +- "@alexmt" + sponsors: +- TBD + reviewers: +- "@jessesuen" +- TBD + approvers: +- "@jessesuen" +- TBD + +creation-date: 2020-04-19 +last-updated: 2020-04-19 +--- + +# Neat Enhancement Idea + +Support project scoped Repositories and Clusters to enable self-service end-users onboarding. + +## Summary + +The Argo CD has two type of users: + +* Administrators who configure the Argo CD and manage the Argo CD projects. +* Developers who use Argo CD to manage resources in the Kubernetes clusters. + +These two roles enable sharing on the Argo CD instance in a multi-tenant environment. Typically the developer +requests a new project from an administrator. The administrator creates the project, defines which repositories +can and clusters can be used within the project which concludes the onboarding. + +The problem is that list of repositories and clusters are often not known during the onboarding process. Developers get +it later and have to again contact an administrator, somehow share repo/cluster credentials. This back and forth +process takes time and creates friction. + +We want to streamline the process of adding repositories and clusters to the project and make it self-service. The Argo CD +admins should be able to optionally enable self onboarding of repositories/clusters for some projects. + +## Motivation + +As long as the developer has the required credentials he/she should be able to add repository/cluster to the project +without involving the administrator. To archive it, we are proposing to introduce project scoped repositories and clusters. + +### Goals + +The goals of project scoped repositories and clusters are: + +#### Allow Self-Registering Repositories/Clusters in a Project + +Developer should be able to add a repository/cluster into the project without asking help from Argo CD administrator. + +### Non-Goals + +#### Simplify Management of Shared Repositories/Clusters in a Project + +The repositories and clusters that can be used across multiple projects still have to be managed by Argo CD administrator. + +## Proposal + +#### Project scoped repository/cluster + +The proposal is to introduce project scoped clusters and repositories that can be managed by a developer who has access to the project. +The only difference of project scoped repository/cluster is that it has `project` field with the project name it belongs to. Both repositories +and clusters are stored as Kubernetes Secrets, so a new field could be stored as a Secret data key: + +```yaml +apiVersion: v1 +kind: Secret +metadata: + name: argocd-example-apps + labels: + argocd.argoproj.io/secret-type: repository +type: Opaque +stringData: + project: my-project1 # new project field + name: argocd-example-apps + url: https://github.com/argoproj/argocd-example-apps.git + username: **** + password: **** +``` + +* The project scoped repository/cluster is automatically allowed in the project. + This enables developers to allow new cluster/repository without modifying the project. +* The project scoped repository/cluster still can be used in other project but it has to be allowed by admin (as normal repository/cluster). +* If another team wants to add the same repository/cluster into a different project they would have to ask admin. + +#### Project RBAC Changes + +The organization still might want to enforce certain rules so developers won't get permission to add a +project-specific repository/cluster by default. The administrator might use RBAC to control access to +the project scoped repositories cluster. The access to project scope actions will be checked using +`/` pattern. For example, to allow users to add project scoped repositories admin would have to add +the following RBAC rules: + +``` +p, proj:my-project:admin, repositories, create, my-project/*, allow +p, proj:my-project:admin, repositories, delete, my-project/*, allow +p, proj:my-project:admin, repositories, update, my-project/*, allow +``` + +This provides extra flexibility so that admin can have stricter rules. e.g.: + +``` +p, proj:my-project:admin, repositories, update, my-project/"https://github.my-company.com/*", allow +``` + +#### UI/CLI Changes + +Both User interface and CLI should get ability to optionally specify project. If project is specified than cluster/repository +is considered project scoped: + +``` +argocd repo add --name stable https://charts.helm.sh/stable --type helm --project my-project +``` + + +### Use cases + +Add a list of detailed use cases this enhancement intends to take care of. + +## Use case 1: +As a developer, I would like to register credentials of a Git repository I own so I can deploy manifests stored in that repository. + +## Use case 2: +As a developer, I would like to register credentials of a Kubernetes cluster so I can manage resources in that cluster. + +### Implementation Details/Notes/Constraints [optional] + +As of v2.0.1 Argo CD stores Repository non-sensitive metadata in `argocd-cm` ConfigMap. This is going to change in https://github.com/argoproj/argo-cd/issues/5436. +So we would have to wait for #5436 implementation. + +### Detailed examples + +### Security Considerations + +The security considerations are explained in `Project RBAC Changes` section. + +### Risks and Mitigations + +#### Deverlopers Might Overload Argo CD + +The developers are typically not responsible for Argo CD health and don't have access to Argo CD metrics. So adding too many clusters might overload Argo CD. +Two improvements are proposed to mitigate that risk: + +**Improved Cluster Metrics** + +The existing metrics should be improved so that administrators could quickly discover if the project "has" too many clusters and easily discover who added the cluster: + +* Add `project` tag to existing cluster metrics: [clustercollector.go](https://github.com/argoproj/argo-cd/blob/bfd0b155eff4212e9354a6958e329dbd64f9a69a/controller/metrics/clustercollector.go#L20). +* Document how administrator can leverage metrics to configure limits per project and get notifications when the limit is exceeded. +* Add `owner` field to the cluster (and repository for consistency ) and use it to store username of the user who added cluster/repository. The administrator can use the `owner` field to contact + the person who added the cluster and exceeded the limit. + +**Project Sharding** + +It should be possible to automatically assign project scoped clusters to the specific clusters shard. This way admin can isolate large projects from each other and limit the blast radius. + +### Upgrade / Downgrade Strategy + +In case of rollback to the previous version, the project scoped clusters/repositories will be treated as normal (non-scoped) clusters/repositories. +So it is safe to rollback and then roll forward. + +## Open Issues + +If the same cluster or repository required in multiple projects that there is no way to configure it without involving Argo CD admin. The end-user +would still have to reach out to the administrator and request Argo CD config changes. + +## Alternatives + +Don't introduce first-class support for this feature and instead create optional CRD that manages clusters and repositories. +In this case, the first-class support seems like a very natural fit into the existing design. diff --git a/docs/requirements.txt b/docs/requirements.txt index 7354216f30fc4..f3fda1b0127cb 100644 --- a/docs/requirements.txt +++ b/docs/requirements.txt @@ -1,3 +1,4 @@ -mkdocs-material -markdown_include +mkdocs==1.1.2 +mkdocs-material==7.1.7 +markdown_include==0.6.0 pygments==2.7.4 \ No newline at end of file diff --git a/docs/user-guide/application-set.md b/docs/user-guide/application-set.md index 852ac1580a48c..e3930a9713875 100644 --- a/docs/user-guide/application-set.md +++ b/docs/user-guide/application-set.md @@ -15,7 +15,7 @@ metadata: spec: generators: - list: - items: + elements: - cluster: engineering-dev url: https://1.2.3.4 - cluster: engineering-prod diff --git a/docs/user-guide/commands/argocd_app_create.md b/docs/user-guide/commands/argocd_app_create.md index f63baa8eaf729..6039c991e516f 100644 --- a/docs/user-guide/commands/argocd_app_create.md +++ b/docs/user-guide/commands/argocd_app_create.md @@ -57,6 +57,8 @@ argocd app create APPNAME [flags] --jsonnet-tla-str stringArray Jsonnet top level string arguments --kustomize-common-annotation stringArray Set common labels in Kustomize --kustomize-common-label stringArray Set common labels in Kustomize + --kustomize-force-common-annotation Force common annotations in Kustomize + --kustomize-force-common-label Force common labels in Kustomize --kustomize-image stringArray Kustomize images (e.g. --kustomize-image node:8.15.0 --kustomize-image mysql=mariadb,alpine@sha256:24a0c4b4a4c0eb97a1aabb8e29f18e917d05abfe1b7a7c07857230879ce7d3d) --kustomize-version string Kustomize version -l, --label stringArray Labels to apply to the app diff --git a/docs/user-guide/commands/argocd_app_logs.md b/docs/user-guide/commands/argocd_app_logs.md index 6e025259e4bf3..88eaeb8beedc4 100644 --- a/docs/user-guide/commands/argocd_app_logs.md +++ b/docs/user-guide/commands/argocd_app_logs.md @@ -9,6 +9,7 @@ argocd app logs APPNAME [flags] ### Options ``` + --container string Optional container name --filter string Show logs contain this string --follow Specify if the logs should be streamed --group string Resource group diff --git a/docs/user-guide/commands/argocd_app_set.md b/docs/user-guide/commands/argocd_app_set.md index 3d099a67e39e0..2d36deb6036a3 100644 --- a/docs/user-guide/commands/argocd_app_set.md +++ b/docs/user-guide/commands/argocd_app_set.md @@ -32,6 +32,8 @@ argocd app set APPNAME [flags] --jsonnet-tla-str stringArray Jsonnet top level string arguments --kustomize-common-annotation stringArray Set common labels in Kustomize --kustomize-common-label stringArray Set common labels in Kustomize + --kustomize-force-common-annotation Force common annotations in Kustomize + --kustomize-force-common-label Force common labels in Kustomize --kustomize-image stringArray Kustomize images (e.g. --kustomize-image node:8.15.0 --kustomize-image mysql=mariadb,alpine@sha256:24a0c4b4a4c0eb97a1aabb8e29f18e917d05abfe1b7a7c07857230879ce7d3d) --kustomize-version string Kustomize version --nameprefix string Kustomize nameprefix diff --git a/docs/user-guide/config-management-plugins.md b/docs/user-guide/config-management-plugins.md index 2ed6e9abc1247..c1c02c78e0b8d 100644 --- a/docs/user-guide/config-management-plugins.md +++ b/docs/user-guide/config-management-plugins.md @@ -33,7 +33,7 @@ Commands have access to 1. The system environment variables 2. [Standard build environment](build-environment.md) -3. Variables in the application spec: +3. Variables in the application spec (References to system and build variables will get interpolated in the variables' values): > v1.2 @@ -44,4 +44,6 @@ spec: env: - name: FOO value: bar + - name: REV + value: test-$ARGOCD_APP_REVISION ``` diff --git a/docs/user-guide/diffing.md b/docs/user-guide/diffing.md index 2ba1e1c848624..dac8729680d9f 100644 --- a/docs/user-guide/diffing.md +++ b/docs/user-guide/diffing.md @@ -19,7 +19,7 @@ The diffing customization can be configured for single or multiple application r ## Application Level Configuration -Argo CD allows ignoring differences at a specific JSON path, using [RFC6902 JSON patches](https://tools.ietf.org/html/rfc6902). The following sample application is configured to ignore differences in `spec.replicas` for all deployments: +Argo CD allows ignoring differences at a specific JSON path, using [RFC6902 JSON patches](https://tools.ietf.org/html/rfc6902) and [JQ path expressions](https://stedolan.github.io/jq/manual/#path(path_expression)). The following sample application is configured to ignore differences in `spec.replicas` for all deployments: ```yaml spec: @@ -43,6 +43,16 @@ spec: - /spec/replicas ``` +To ignore elements of a list, you can use JQ path expressions to identify list items based on item content: +```yaml +spec: + ignoreDifferences: + - group: apps + kind: Deployment + jqPathExpressions: + - .spec.template.spec.initContainers[] | select(.name == "injected-init-container") +``` + ## System-Level Configuration The comparison of resources with well-known issues can be customized at a system level. Ignored differences can be configured for a specified group and kind diff --git a/docs/user-guide/sync_windows.md b/docs/user-guide/sync_windows.md index 02dd37a825f4c..8d7eb672b34e2 100644 --- a/docs/user-guide/sync_windows.md +++ b/docs/user-guide/sync_windows.md @@ -7,7 +7,7 @@ of both manual and automated syncs but allow an override for manual syncs which in preventing automated syncs or if you need to temporarily override a window to perform a sync. The windows work in the following way. If there are no windows matching an application then all syncs are allowed. If there -are any `allow` windows matching an application then syncs will only be allowed when there ia an active `allow` windows. If there +are any `allow` windows matching an application then syncs will only be allowed when there is an active `allow` windows. If there are any `deny` windows matching an application then all syncs will be denied when the `deny` windows are active. If there is an active matching `allow` and an active matching `deny` then syncs will be denied as `deny` windows override `allow` windows. The UI and the CLI will both display the state of the sync windows. The UI has a panel which will display different colours depending @@ -108,4 +108,4 @@ contains default and kube-system then the new value would have to include those ```bash argocd proj windows update PROJECT ID --namespaces default,kube-system,prod1 -``` \ No newline at end of file +``` diff --git a/go.mod b/go.mod index 010bd9e66ca02..a4f64818de381 100644 --- a/go.mod +++ b/go.mod @@ -7,7 +7,7 @@ require ( github.com/TomOnTime/utfutil v0.0.0-20180511104225-09c41003ee1d github.com/alicebob/miniredis v2.5.0+incompatible github.com/alicebob/miniredis/v2 v2.14.2 - github.com/argoproj/gitops-engine v0.3.1-0.20210405221516-2a9c1448b292 + github.com/argoproj/gitops-engine v0.3.1-0.20210610000233-6884d330a049 github.com/argoproj/pkg v0.9.1-0.20210512035321-be5ba22dca5b github.com/bombsimon/logrusr v1.0.0 github.com/bradleyfalzon/ghinstallation v1.1.1 @@ -15,7 +15,6 @@ require ( github.com/chai2010/gettext-go v0.0.0-20170215093142-bf70f2a70fb1 // indirect github.com/coreos/go-oidc v2.1.0+incompatible github.com/dgrijalva/jwt-go/v4 v4.0.0-preview1 - github.com/docker/spdystream v0.0.0-20181023171402-6480d4af844c // indirect github.com/dustin/go-humanize v1.0.0 github.com/evanphx/json-patch v4.9.0+incompatible github.com/fsnotify/fsnotify v1.4.9 @@ -24,15 +23,15 @@ require ( github.com/go-logr/logr v0.4.0 github.com/go-openapi/loads v0.19.4 github.com/go-openapi/runtime v0.19.4 - github.com/go-openapi/spec v0.19.3 + github.com/go-openapi/spec v0.19.5 github.com/go-redis/cache/v8 v8.2.1 github.com/go-redis/redis/v8 v8.3.2 github.com/gobwas/glob v0.2.3 github.com/gogits/go-gogs-client v0.0.0-20190616193657-5a05380e4bc2 - github.com/gogo/protobuf v1.3.1 + github.com/gogo/protobuf v1.3.2 github.com/golang/protobuf v1.4.3 github.com/gomodule/redigo v2.0.0+incompatible // indirect - github.com/google/go-cmp v0.5.2 + github.com/google/go-cmp v0.5.4 github.com/google/go-jsonnet v0.17.0 github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 github.com/google/uuid v1.1.2 @@ -42,10 +41,10 @@ require ( github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0 github.com/grpc-ecosystem/grpc-gateway v1.16.0 github.com/improbable-eng/grpc-web v0.0.0-20181111100011-16092bd1d58a + github.com/itchyny/gojq v0.12.3 github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 github.com/malexdev/utfutil v0.0.0-20180510171754-00c8d4a8e7a8 // indirect - github.com/mattn/go-isatty v0.0.11 - github.com/moby/term v0.0.0-20201110203204-bea5bbe245bf // indirect + github.com/mattn/go-isatty v0.0.12 github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f // indirect github.com/patrickmn/go-cache v2.1.0+incompatible github.com/pkg/errors v0.9.1 @@ -53,33 +52,35 @@ require ( github.com/prometheus/client_golang v1.7.1 github.com/robfig/cron v1.1.0 github.com/rs/cors v1.6.0 // indirect - github.com/sirupsen/logrus v1.6.0 + github.com/sirupsen/logrus v1.7.0 github.com/skratchdot/open-golang v0.0.0-20160302144031-75fb7ed4208c github.com/soheilhy/cmux v0.1.4 - github.com/spf13/cobra v1.1.1 + github.com/spf13/cobra v1.1.3 github.com/spf13/pflag v1.0.5 - github.com/stretchr/testify v1.6.1 + github.com/stretchr/testify v1.7.0 github.com/undefinedlabs/go-mpatch v1.0.6 github.com/vmihailenco/msgpack/v5 v5.1.0 // indirect github.com/yuin/gopher-lua v0.0.0-20200816102855-ee81675732da - golang.org/x/crypto v0.0.0-20201002170205-7f63de1d35b0 - golang.org/x/exp v0.0.0-20200821190819-94841d0725da // indirect - golang.org/x/net v0.0.0-20201110031124-69a78807bb2b + golang.org/x/crypto v0.0.0-20210220033148-5ea612d1eb83 + golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4 golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d - golang.org/x/sync v0.0.0-20201207232520-09787c993a3a + golang.org/x/sync v0.0.0-20210220032951-036812b2e83c + golang.org/x/term v0.0.0-20210220032956-6a3ed077a48d + golang.org/x/tools v0.1.1 // indirect google.golang.org/genproto v0.0.0-20201110150050-8816d57aaa9a google.golang.org/grpc v1.33.1 + google.golang.org/protobuf v1.25.0 gopkg.in/go-playground/webhooks.v5 v5.11.0 - gopkg.in/yaml.v2 v2.3.0 - k8s.io/api v0.20.4 - k8s.io/apiextensions-apiserver v0.20.4 - k8s.io/apimachinery v0.20.4 + gopkg.in/yaml.v2 v2.4.0 + k8s.io/api v0.21.0 + k8s.io/apiextensions-apiserver v0.21.0 + k8s.io/apimachinery v0.21.0 k8s.io/client-go v11.0.1-0.20190816222228-6d55c1b1f1ca+incompatible - k8s.io/code-generator v0.20.4 - k8s.io/component-base v0.20.4 - k8s.io/klog/v2 v2.5.0 - k8s.io/kube-openapi v0.0.0-20201113171705-d219536bb9fd - k8s.io/kubectl v0.20.4 + k8s.io/code-generator v0.21.0 + k8s.io/component-base v0.21.0 + k8s.io/klog/v2 v2.8.0 + k8s.io/kube-openapi v0.0.0-20210305001622-591a79e4bda7 + k8s.io/kubectl v0.21.0 k8s.io/utils v0.0.0-20210111153108-fddb29f9d009 layeh.com/gopher-json v0.0.0-20190114024228-97fed8db8427 sigs.k8s.io/controller-runtime v0.8.3 @@ -94,28 +95,28 @@ replace ( google.golang.org/grpc => google.golang.org/grpc v1.15.0 - k8s.io/api => k8s.io/api v0.20.4 - k8s.io/apiextensions-apiserver => k8s.io/apiextensions-apiserver v0.20.4 - k8s.io/apimachinery => k8s.io/apimachinery v0.20.4 - k8s.io/apiserver => k8s.io/apiserver v0.20.4 - k8s.io/cli-runtime => k8s.io/cli-runtime v0.20.4 - k8s.io/client-go => k8s.io/client-go v0.20.4 - k8s.io/cloud-provider => k8s.io/cloud-provider v0.20.4 - k8s.io/cluster-bootstrap => k8s.io/cluster-bootstrap v0.20.4 - k8s.io/code-generator => k8s.io/code-generator v0.20.4 - k8s.io/component-base => k8s.io/component-base v0.20.4 - k8s.io/component-helpers => k8s.io/component-helpers v0.20.4 - k8s.io/controller-manager => k8s.io/controller-manager v0.20.4 - k8s.io/cri-api => k8s.io/cri-api v0.20.4 - k8s.io/csi-translation-lib => k8s.io/csi-translation-lib v0.20.4 - k8s.io/kube-aggregator => k8s.io/kube-aggregator v0.20.4 - k8s.io/kube-controller-manager => k8s.io/kube-controller-manager v0.20.4 - k8s.io/kube-proxy => k8s.io/kube-proxy v0.20.4 - k8s.io/kube-scheduler => k8s.io/kube-scheduler v0.20.4 - k8s.io/kubectl => k8s.io/kubectl v0.20.4 - k8s.io/kubelet => k8s.io/kubelet v0.20.4 - k8s.io/legacy-cloud-providers => k8s.io/legacy-cloud-providers v0.20.4 - k8s.io/metrics => k8s.io/metrics v0.20.4 - k8s.io/mount-utils => k8s.io/mount-utils v0.20.4 - k8s.io/sample-apiserver => k8s.io/sample-apiserver v0.20.4 + k8s.io/api => k8s.io/api v0.21.0 + k8s.io/apiextensions-apiserver => k8s.io/apiextensions-apiserver v0.21.0 + k8s.io/apimachinery => k8s.io/apimachinery v0.21.0 + k8s.io/apiserver => k8s.io/apiserver v0.21.0 + k8s.io/cli-runtime => k8s.io/cli-runtime v0.21.0 + k8s.io/client-go => k8s.io/client-go v0.21.0 + k8s.io/cloud-provider => k8s.io/cloud-provider v0.21.0 + k8s.io/cluster-bootstrap => k8s.io/cluster-bootstrap v0.21.0 + k8s.io/code-generator => k8s.io/code-generator v0.21.0 + k8s.io/component-base => k8s.io/component-base v0.21.0 + k8s.io/component-helpers => k8s.io/component-helpers v0.21.0 + k8s.io/controller-manager => k8s.io/controller-manager v0.21.0 + k8s.io/cri-api => k8s.io/cri-api v0.21.0 + k8s.io/csi-translation-lib => k8s.io/csi-translation-lib v0.21.0 + k8s.io/kube-aggregator => k8s.io/kube-aggregator v0.21.0 + k8s.io/kube-controller-manager => k8s.io/kube-controller-manager v0.21.0 + k8s.io/kube-proxy => k8s.io/kube-proxy v0.21.0 + k8s.io/kube-scheduler => k8s.io/kube-scheduler v0.21.0 + k8s.io/kubectl => k8s.io/kubectl v0.21.0 + k8s.io/kubelet => k8s.io/kubelet v0.21.0 + k8s.io/legacy-cloud-providers => k8s.io/legacy-cloud-providers v0.21.0 + k8s.io/metrics => k8s.io/metrics v0.21.0 + k8s.io/mount-utils => k8s.io/mount-utils v0.21.0 + k8s.io/sample-apiserver => k8s.io/sample-apiserver v0.21.0 ) diff --git a/go.sum b/go.sum index 8cf69a1099f37..67acdc1620a03 100644 --- a/go.sum +++ b/go.sum @@ -25,19 +25,18 @@ cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiy 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= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= +dmitri.shuralyov.com/gpu/mtl v0.0.0-20201218220906-28db891af037/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= github.com/Azure/azure-sdk-for-go v43.0.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78 h1:w+iIsaOQNcT7OZ575w+acHgRric5iCyQh+xv+KJ4HB8= github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8= github.com/Azure/go-autorest v14.2.0+incompatible h1:V5VMDjClD3GiElqLWO7mz2MxNAK/vTfRHdAubSIPRgs= github.com/Azure/go-autorest v14.2.0+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24= -github.com/Azure/go-autorest/autorest v0.11.1 h1:eVvIXUKiTgv++6YnWb42DUA1YL7qDugnKP0HljexdnQ= -github.com/Azure/go-autorest/autorest v0.11.1/go.mod h1:JFgpikqFJ/MleTTxwepExTKnFUKKszPS8UavbQYUMuw= -github.com/Azure/go-autorest/autorest/adal v0.9.0/go.mod h1:/c022QCutn2P7uY+/oQWWNcK9YU+MH96NgK+jErpbcg= +github.com/Azure/go-autorest/autorest v0.11.12 h1:gI8ytXbxMfI+IVbI9mP2JGCTXIuhHLgRlvQ9X4PsnHE= +github.com/Azure/go-autorest/autorest v0.11.12/go.mod h1:eipySxLmqSyC5s5k1CLupqet0PSENBEDP93LQ9a8QYw= github.com/Azure/go-autorest/autorest/adal v0.9.5 h1:Y3bBUV4rTuxenJJs41HU3qmqsb+auo+a3Lz+PlJPpL0= github.com/Azure/go-autorest/autorest/adal v0.9.5/go.mod h1:B7KF7jKIeC9Mct5spmyCB/A8CG/sEz1vwIRGv/bbw7A= github.com/Azure/go-autorest/autorest/date v0.3.0 h1:7gUk1U5M/CQbp9WoqinNzJar+8KY+LPI6wiWrP/myHw= github.com/Azure/go-autorest/autorest/date v0.3.0/go.mod h1:BI0uouVdmngYNUzGWeSYnokU+TrmwEsOqdt8Y6sso74= -github.com/Azure/go-autorest/autorest/mocks v0.4.0/go.mod h1:LTp+uSrOhSkaKrUy935gNZuuIPPVsHlr9DSOxSayd+k= github.com/Azure/go-autorest/autorest/mocks v0.4.1 h1:K0laFcLE6VLTOwNgSxaGbUcLPuGXlNkbVvq4cW4nIHk= github.com/Azure/go-autorest/autorest/mocks v0.4.1/go.mod h1:LTp+uSrOhSkaKrUy935gNZuuIPPVsHlr9DSOxSayd+k= github.com/Azure/go-autorest/autorest/to v0.2.0/go.mod h1:GunWKJp1AEqgMaGLV+iocmRAJWqST1wQYhyyjXJ3SJc= @@ -60,6 +59,7 @@ github.com/Microsoft/go-winio v0.4.15-0.20190919025122-fc70bd9a86b5/go.mod h1:tT github.com/Microsoft/go-winio v0.4.15/go.mod h1:tTuCMEN+UleMWgg9dVx4Hu52b1bJo+59jBh3ajtinzw= github.com/Microsoft/hcsshim v0.8.10-0.20200715222032-5eafd1556990/go.mod h1:ay/0dTb7NsG8QMDfsRfLHgZo/6xAJShLe1+ePPflihk= github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ= +github.com/NYTimes/gziphandler v1.1.1/go.mod h1:n/CVRwUEOgIxrgPvAQhUUr9oeUtvrhMomdKFjzJNB0c= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/PuerkitoBio/purell v1.1.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= github.com/PuerkitoBio/purell v1.1.1 h1:WEQqlqaGbrPkxLJWfBwQmfEAE1Z7ONdDLqrN38tNFfI= @@ -86,8 +86,8 @@ github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239 h1:kFOfPq6dUM1hTo4JG6LR5AXSUEsOjtdm0kw0FtQtMJA= github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c= github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= -github.com/argoproj/gitops-engine v0.3.1-0.20210405221516-2a9c1448b292 h1:ks7zpvEfF7cWwZtq9oJEJ/msBNQP70Kt7ii6Nc0cNgo= -github.com/argoproj/gitops-engine v0.3.1-0.20210405221516-2a9c1448b292/go.mod h1:IBHhAkqlC+3r/wBWUitWSidQhPzlLoSTWp2htq3dyQk= +github.com/argoproj/gitops-engine v0.3.1-0.20210610000233-6884d330a049 h1:Swa2K+be8ZB1YeyCe5s2kR/b+gyawo5jcPRMwT3L5zY= +github.com/argoproj/gitops-engine v0.3.1-0.20210610000233-6884d330a049/go.mod h1:EdFe8qIOqsmbyxRhtIydU4BUeyZ4VTsY6R3XVQhU9LA= github.com/argoproj/pkg v0.9.1-0.20210512035321-be5ba22dca5b h1:qtlM7ioAFP40LPN7A5ZqquVmAtv08LLSZTcCNYUQx8s= github.com/argoproj/pkg v0.9.1-0.20210512035321-be5ba22dca5b/go.mod h1:ra+bQPmbVAoEL+gYSKesuigt4m49i3Qa3mE/xQcjCiA= github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= @@ -134,17 +134,16 @@ github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWR github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= github.com/cilium/ebpf v0.0.0-20200110133405-4032b1d8aae3/go.mod h1:MA5e5Lr8slmEg9bt0VpxxWqJlO4iwu3FBdHUzV7wQVg= -github.com/cilium/ebpf v0.0.0-20200702112145-1c8d4c9ef775/go.mod h1:7cR51M8ViRLIdUjrmSXlK9pkrsDlLHbO8jiB8X8JnOc= +github.com/cilium/ebpf v0.2.0/go.mod h1:To2CFviqOWL/M0gIMsvSMlqe7em/l1ALkX1PyjrX2Qs= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/clusterhq/flocker-go v0.0.0-20160920122132-2b8b7259d313/go.mod h1:P1wt9Z3DP8O6W3rvwCt0REIlshg1InHImaLW0t3ObY0= github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= -github.com/codegangsta/negroni v1.0.0/go.mod h1:v0y3T5G7Y1UlFfyxFn/QLRU4a2EuNau2iZY63YTKWo0= -github.com/container-storage-interface/spec v1.2.0/go.mod h1:6URME8mwIBbpVyZV93Ce5St17xBiQJQY67NDsuohiy4= +github.com/container-storage-interface/spec v1.3.0/go.mod h1:6URME8mwIBbpVyZV93Ce5St17xBiQJQY67NDsuohiy4= github.com/containerd/cgroups v0.0.0-20200531161412-0dbf7f05ba59/go.mod h1:pA0z1pT8KYB3TCXK/ocprsh7MAkoW8bZVzPdih9snmM= github.com/containerd/console v0.0.0-20180822173158-c12b1e7919c1/go.mod h1:Tj/on1eG8kiEhd0+fhSDzsPAFESxzBBvdyEgyryXffw= -github.com/containerd/console v1.0.0/go.mod h1:8Pf4gM6VEbTNRIT26AyyU7hxdQU3MvAvxVI0sc00XBE= +github.com/containerd/console v1.0.1/go.mod h1:XUsP6YE/mKtz6bxc+I8UiKKTP04qjQL4qcS3XoQ5xkw= github.com/containerd/containerd v1.3.2/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= -github.com/containerd/containerd v1.4.1/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= +github.com/containerd/containerd v1.4.4/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= github.com/containerd/continuity v0.0.0-20190426062206-aaeac12a7ffc/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y= github.com/containerd/fifo v0.0.0-20190226154929-a9fb20d87448/go.mod h1:ODA38xgv3Kuk8dQz2ZQXpnv/UZZUHUCL7pnLehbXgQI= github.com/containerd/go-runc v0.0.0-20180907222934-5a6d9f37cfa3/go.mod h1:IV7qH3hrUgRmyYrtgEeGWJfWbgcHL9CSRruz2Vqcph0= @@ -153,7 +152,7 @@ github.com/containerd/ttrpc v1.0.2/go.mod h1:UAxOpgT9ziI0gJrmKvgcZivgxOp8iFPSk8h github.com/containerd/typeurl v0.0.0-20180627222232-a93fcdb778cd/go.mod h1:Cm3kwCdlkCfMSHURc+r6fwoGH6/F1hH3S4sg0rLFWPc= github.com/containerd/typeurl v1.0.1/go.mod h1:TB1hUtrpaiO88KEK56ijojHS1+NeF0izUACaJW2mdXg= github.com/containernetworking/cni v0.8.0/go.mod h1:LGwApLUm2FpoOfxTDEeq8T9ipbpZ61X79hmU3w8FmsY= -github.com/coredns/corefile-migration v1.0.10/go.mod h1:RMy/mXdeDlYwzt0vdMEJvT2hGJ2I86/eO0UdXmH9XNI= +github.com/coredns/corefile-migration v1.0.11/go.mod h1:RMy/mXdeDlYwzt0vdMEJvT2hGJ2I86/eO0UdXmH9XNI= github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= github.com/coreos/etcd v3.3.13+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= @@ -190,13 +189,10 @@ github.com/dnaeon/go-vcr v1.0.1/go.mod h1:aBB1+wY4s93YsC3HHjMBMrwTj2R9FHDzUr9KyG github.com/docker/distribution v2.7.1-0.20190205005809-0d3efadf0154+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= github.com/docker/distribution v2.7.1+incompatible h1:a5mlkVzth6W5A4fOsS3D2EO5BUmsJpcB+cRlLU7cSug= github.com/docker/distribution v2.7.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= -github.com/docker/docker v17.12.0-ce-rc1.0.20200916142827-bd33bbf0497b+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/docker v20.10.2+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec= github.com/docker/go-units v0.3.3/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= -github.com/docker/spdystream v0.0.0-20160310174837-449fdfce4d96/go.mod h1:Qh8CwZgvJUkLughtfhJv5dyTYa91l1fOUCrgjqmcifM= -github.com/docker/spdystream v0.0.0-20181023171402-6480d4af844c h1:ZfSZ3P3BedhKGUhzj7BQlPSU4OvT6tfOKe3DVHzOA7s= -github.com/docker/spdystream v0.0.0-20181023171402-6480d4af844c/go.mod h1:Qh8CwZgvJUkLughtfhJv5dyTYa91l1fOUCrgjqmcifM= github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE= github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4zYo= @@ -228,7 +224,6 @@ github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMo github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= github.com/fvbommel/sortorder v1.0.1/go.mod h1:uk88iVf1ovNn1iLfgUVU2F9o5eO30ui720w+kxuqRs0= -github.com/ghodss/yaml v0.0.0-20150909031657-73d445a93680/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/gliderlabs/ssh v0.2.2 h1:6zsha5zo/TWhRhwqCD3+EarCAgZ2yN28ipRnGPnwkI0= @@ -237,6 +232,8 @@ github.com/globalsign/mgo v0.0.0-20180905125535-1ca0a4f7cbcb/go.mod h1:xkRDCp4j0 github.com/globalsign/mgo v0.0.0-20181015135952-eeefdecb41b8/go.mod h1:xkRDCp4j0OGD1HRkm4kmhM+pmpv3AKq5SU7GMg4oO/Q= github.com/go-acme/lego v2.5.0+incompatible/go.mod h1:yzMNe9CasVUhkquNvti5nAtPmG94USbYxYrZfTkIn0M= github.com/go-bindata/go-bindata v3.1.1+incompatible/go.mod h1:xK8Dsgwmeed+BBsSy2XTopBn/8uK2HWuGSnA11C3Joo= +github.com/go-errors/errors v1.0.1 h1:LUHzmkK3GUKUrL/1gfBUxAHzcev3apQlezX/+O7ma6w= +github.com/go-errors/errors v1.0.1/go.mod h1:f4zRHt4oKfwPJE5k8C9vpYG+aDHdBFUsgrm6/TyX73Q= github.com/go-git/gcfg v1.5.0 h1:Q5ViNfGF8zFgyJWPqYwA7qGFoMTEiBmdlkcfRmpIMa4= github.com/go-git/gcfg v1.5.0/go.mod h1:5m20vg6GwYabIxaOonVkTdrILxQMpEShl1xiMF4ua+E= github.com/go-git/go-billy/v5 v5.0.0 h1:7NQHvd9FVid8VL4qVUMm8XifBK+2xCoZ2lSk0agRrHM= @@ -292,13 +289,15 @@ github.com/go-openapi/runtime v0.19.4/go.mod h1:X277bwSUBxVlCYR3r7xgZZGKVvBd/29g github.com/go-openapi/spec v0.17.0/go.mod h1:XkF/MOi14NmjsfZ8VtAKf8pIlbZzyoTvZsdfssdxcBI= github.com/go-openapi/spec v0.18.0/go.mod h1:XkF/MOi14NmjsfZ8VtAKf8pIlbZzyoTvZsdfssdxcBI= github.com/go-openapi/spec v0.19.2/go.mod h1:sCxk3jxKgioEJikev4fgkNmwS+3kuYdJtcsZsD5zxMY= -github.com/go-openapi/spec v0.19.3 h1:0XRyw8kguri6Yw4SxhsQA/atC88yqrk0+G4YhI2wabc= github.com/go-openapi/spec v0.19.3/go.mod h1:FpwSN1ksY1eteniUU7X0N/BgJ7a4WvBFVA8Lj9mJglo= +github.com/go-openapi/spec v0.19.5 h1:Xm0Ao53uqnk9QE/LlYV5DEU09UAgpliA85QoT9LzqPw= +github.com/go-openapi/spec v0.19.5/go.mod h1:Hm2Jr4jv8G1ciIAo+frC/Ft+rR2kQDh8JHKHb3gWUSk= github.com/go-openapi/strfmt v0.17.0/go.mod h1:P82hnJI0CXkErkXi8IKjPbNBM6lV6+5pLP5l494TcyU= github.com/go-openapi/strfmt v0.18.0/go.mod h1:P82hnJI0CXkErkXi8IKjPbNBM6lV6+5pLP5l494TcyU= github.com/go-openapi/strfmt v0.19.0/go.mod h1:+uW+93UVvGGq2qGaZxdDeJqSAqBqBdl+ZPMF/cC8nDY= -github.com/go-openapi/strfmt v0.19.3 h1:eRfyY5SkaNJCAwmmMcADjY31ow9+N7MCLW7oRkbsINA= github.com/go-openapi/strfmt v0.19.3/go.mod h1:0yX7dbo8mKIvc3XSKp7MNfxw4JytCfCD6+bY1AVL9LU= +github.com/go-openapi/strfmt v0.19.5 h1:0utjKrw+BAh8s57XE9Xz8DUBsVvPmRUB6styvl9wWIM= +github.com/go-openapi/strfmt v0.19.5/go.mod h1:eftuHTlB/dI8Uq8JJOyRlieZf+WkkxUuk0dgdHXr2Qk= github.com/go-openapi/swag v0.17.0/go.mod h1:AByQ+nYG6gQg71GINrmuDXCPWdL640yX49/kXLo40Tg= github.com/go-openapi/swag v0.18.0/go.mod h1:AByQ+nYG6gQg71GINrmuDXCPWdL640yX49/kXLo40Tg= github.com/go-openapi/swag v0.19.2/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= @@ -306,8 +305,8 @@ github.com/go-openapi/swag v0.19.5 h1:lTz6Ys4CmqqCQmZPBlbQENR1/GucA2bzYTE12Pw4tF github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= github.com/go-openapi/validate v0.18.0/go.mod h1:Uh4HdOzKt19xGIGm1qHf/ofbX1YQ4Y+MYsct2VUrAJ4= github.com/go-openapi/validate v0.19.2/go.mod h1:1tRCw7m3jtI8eNWEEliiAqUIcBztB2KDnRCRMUi7GTA= -github.com/go-openapi/validate v0.19.5 h1:QhCBKRYqZR+SKo4gl1lPhPahope8/RLt6EVgY8X80w0= -github.com/go-openapi/validate v0.19.5/go.mod h1:8DJv2CVJQ6kGNpFW6eV9N3JviE1C85nY1c2z52x1Gk4= +github.com/go-openapi/validate v0.19.8 h1:YFzsdWIDfVuLvIOF+ZmKjVg1MbPJ1QgY9PihMwei1ys= +github.com/go-openapi/validate v0.19.8/go.mod h1:8DJv2CVJQ6kGNpFW6eV9N3JviE1C85nY1c2z52x1Gk4= github.com/go-ozzo/ozzo-validation v3.5.0+incompatible/go.mod h1:gsEKFIVnabGBt6mXmxK0MoFy+cZoTJY6mu5Ll3LVLBU= github.com/go-redis/cache/v8 v8.2.1 h1:G4CtEQDT3JsiERPob1nUL/KTkiC317rAJvHx6GdWjiM= github.com/go-redis/cache/v8 v8.2.1/go.mod h1:8PFGBZrRqG2nToSHw76mSsozxgSKrn3vsZerq/NJtt8= @@ -316,6 +315,7 @@ github.com/go-redis/redis/v8 v8.3.2/go.mod h1:jszGxBCez8QA1HWSmQxJO9Y82kNibbUmeY github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= github.com/go-stack/stack v1.8.0 h1:5SgMzNM5HxrEjV0ww2lTmX6E2Izsfxas4+YHWRs3Lsk= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= +github.com/gobuffalo/here v0.6.0/go.mod h1:wAG085dHOYqUpf+Ap+WOdrPTp5IYcDAs/x7PLa8Y5fM= github.com/gobwas/glob v0.2.3 h1:A4xDbljILXROh+kObIiy5kIaPYD8e96x1tgBhUI5J+Y= github.com/gobwas/glob v0.2.3/go.mod h1:d3Ez4x06l9bZtSvzIay5+Yzi0fmZzPgnTbPcKjJAkT8= github.com/godbus/dbus/v5 v5.0.3/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= @@ -323,8 +323,9 @@ github.com/gogits/go-gogs-client v0.0.0-20190616193657-5a05380e4bc2 h1:BbwX8wsMR github.com/gogits/go-gogs-client v0.0.0-20190616193657-5a05380e4bc2/go.mod h1:cY2AIrMgHm6oOHmR7jY+9TtjzSjQ3iG7tURJG3Y6XH0= github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= -github.com/gogo/protobuf v1.3.1 h1:DqDEcV5aeaTmdFBePNpYsp3FlcVH/2ISVVM9Qf8PSls= github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= +github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= +github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= @@ -340,26 +341,26 @@ github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfb 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.4 h1:l75CXGRSwbaYNpl/Z2X1XIIAMSCquvXgpVZDhwEIJsc= github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= +github.com/golang/mock v1.5.0 h1:jlYHihg//f7RRwuPfptm04yp4s7O6Kw8EZiVYIGcH0g= +github.com/golang/mock v1.5.0/go.mod h1:CWnOUgYIOo4TcNZ0wHX3YZCqsaM1I1Jvs6v3mP3KVu8= github.com/golang/protobuf v1.4.2 h1:+Z5KGCizgyZCbGh1KZqA0fcLLkwbsjIzS4aV2v7wJX0= github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/golangplus/bytes v0.0.0-20160111154220-45c989fe5450/go.mod h1:Bk6SMAONeMXrxql8uvOKuAZSu8aM5RUGv+1C6IJaEho= -github.com/golangplus/fmt v0.0.0-20150411045040-2a5d6d7d2995/go.mod h1:lJgMEyOkYFkPcDKwRXegd+iM6E7matEszMG5HhwytU8= github.com/golangplus/testing v0.0.0-20180327235837-af21d9c3145e/go.mod h1:0AA//k/eakGydO4jKRoRL2j92ZKSzTgj9tclaCrvXHk= github.com/gomodule/redigo v2.0.0+incompatible h1:K/R+8tc58AaqLkqG2Ol3Qk+DR/TlNuhuh457pBFPtt0= github.com/gomodule/redigo v2.0.0+incompatible/go.mod h1:B4C85qUVwatsJoIUNIfCRsp7qO0iAmpGFZ4EELWSbC4= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.0 h1:0udJVsspx3VBr5FwtLhQQtuAsVc79tTq0ocGIPAU6qo= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/cadvisor v0.38.7/go.mod h1:1OFB9sOOMkBdUBGCO/1SArawTnDscgMzTodacVDe8mA= +github.com/google/cadvisor v0.39.0/go.mod h1:rjQFmK4jPCpxeUdLq9bYhNFFsjgGOtpnDmDeap0+nsw= 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.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.2 h1:X2ev0eStA3AbceY54o37/0PQ/UWqKEiiO2dKL5OPaFM= github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.4 h1:L8R9j+yAqZuZjsqh/z+F1NCffTKKLShY6zXTItVIZ8M= +github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-github/v29 v29.0.2 h1:opYN6Wc7DOz7Ku3Oh4l7prmkOMwEcQxpFtxdU8N8Pts= github.com/google/go-github/v29 v29.0.2/go.mod h1:CHKiKKPHJ0REzfwc14QMklvtHwCveD0PxlMjLlzAM5E= github.com/google/go-jsonnet v0.17.0 h1:/9NIEfhK1NQRKl3sP2536b2+x5HnZMdql7x3yK/l8JY= @@ -389,7 +390,6 @@ github.com/googleapis/gnostic v0.5.1 h1:A8Yhf6EtqTv9RMsU6MQTyrtV1TjWlR6xU9BsZIwu github.com/googleapis/gnostic v0.5.1/go.mod h1:6U4PtQXGIEt/Z3h5MAT7FNofLnw9vXk2cUuW7uA/OeU= github.com/gophercloud/gophercloud v0.1.0/go.mod h1:vxM41WHh5uqHVBMZHzuwNOHh8XEoIEcSTewFxm1c5g8= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= -github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= github.com/gorilla/handlers v1.5.1 h1:9lRY6j8DEeeBT10CvO9hGW0gmky0BprnvDI5vfhUHH4= github.com/gorilla/handlers v1.5.1/go.mod h1:t8XrUpc4KVXb7HGyJ4/cEnwQiaxrX/hz1Zv/4g96P1Q= github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= @@ -428,7 +428,7 @@ github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ= github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I= github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc= -github.com/heketi/heketi v9.0.1-0.20190917153846-c2e2a4ab7ab9+incompatible/go.mod h1:bB9ly3RchcQqsQ9CpyaQwvva7RS5ytVoSoholZQON6o= +github.com/heketi/heketi v10.2.0+incompatible/go.mod h1:bB9ly3RchcQqsQ9CpyaQwvva7RS5ytVoSoholZQON6o= github.com/heketi/tests v0.0.0-20151005000721-f3775cbcefd6/go.mod h1:xGMAM8JLi7UkZt1i4FQeQy0R2T8GLUwQhOP5M1gBhy4= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= @@ -441,6 +441,11 @@ github.com/improbable-eng/grpc-web v0.0.0-20181111100011-16092bd1d58a/go.mod h1: github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM= github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= github.com/ishidawataru/sctp v0.0.0-20190723014705-7c296d48a2b5/go.mod h1:DM4VvS+hD/kDi1U1QsX2fnZowwBhqD0Dk3bRPKF/Oc8= +github.com/itchyny/go-flags v1.5.0/go.mod h1:lenkYuCobuxLBAd/HGFE4LRoW8D3B6iXRQfWYJ+MNbA= +github.com/itchyny/gojq v0.12.3 h1:s7jTCyOk/dy5bnDIScj24YX4Cr1yhEO2iW/bQT4Pm2s= +github.com/itchyny/gojq v0.12.3/go.mod h1:mi4PdXSlFllHyByM68JKUrbiArtEdEnNEmjbwxcQKAg= +github.com/itchyny/timefmt-go v0.1.2 h1:q0Xa4P5it6K6D7ISsbLAMwx1PnWlixDcJL6/sFs93Hs= +github.com/itchyny/timefmt-go v0.1.2/go.mod h1:0osSSCQSASBJMsIZnhAaF1C2fCBTJZXrnj37mG8/c+A= github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 h1:BQSFePA1RWJOlocH6Fxy8MmwDt+yVQYULKfN0RoTN8A= github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo= github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= @@ -466,6 +471,7 @@ github.com/kevinburke/ssh_config v0.0.0-20190725054713-01f96b0aa0cd h1:Coekwdh0v github.com/kevinburke/ssh_config v0.0.0-20190725054713-01f96b0aa0cd/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= +github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/klauspost/compress v1.11.1 h1:bPb7nMRdOZYDrpPMTA3EInUQrdgoBinqUuSwlGdKDdE= github.com/klauspost/compress v1.11.1/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= @@ -473,7 +479,6 @@ github.com/klauspost/cpuid v1.2.0/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgo github.com/klauspost/cpuid v1.2.3/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/konsorten/go-windows-terminal-sequences v1.0.3 h1:CE8S1cTafDpPvMhIxNJKvHsGVBgn1xWYf1NbHQhywc8= github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= @@ -503,22 +508,26 @@ github.com/mailru/easyjson v0.7.0 h1:aizVhC/NAAcKWb+5QsU1iNOZb4Yws5UO2I+aIprQITM github.com/mailru/easyjson v0.7.0/go.mod h1:KAzv3t3aY1NaHWoQz1+4F1ccyAH66Jk7yos7ldAVICs= github.com/malexdev/utfutil v0.0.0-20180510171754-00c8d4a8e7a8 h1:A6SLdFpRzUUF5v9F/7T1fu3DERmOCgTwwP6x54eyFfU= github.com/malexdev/utfutil v0.0.0-20180510171754-00c8d4a8e7a8/go.mod h1:UtpLyb/EupVKXF/N0b4NRe1DNg+QYJsnsHQ038romhM= +github.com/markbates/pkger v0.17.1/go.mod h1:0JoVlrol20BSywW79rN3kdFFsE5xYM+rSCQDXbLhiuI= github.com/marten-seemann/qtls v0.2.3/go.mod h1:xzjG7avBwGGbdZ8dTGxlBnLArsVKLvwmjgmPuiQEcYk= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= -github.com/mattn/go-isatty v0.0.11 h1:FxPOTFNqGkuDUGi3H/qkUbQO4ZiBa2brKq5r0l8TGeM= github.com/mattn/go-isatty v0.0.11/go.mod h1:PhnuNfih5lzO57/f3n+odYbM4JtupLOxQOAqxQCu2WE= +github.com/mattn/go-isatty v0.0.12 h1:wuysRhFDzyxgEmMf5xjvJ2M9dZoWAXNNr5LSBS7uHXY= +github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= +github.com/mattn/go-runewidth v0.0.7/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= +github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369 h1:I0XW9+e1XWDxdcEniV4rQAIOPUGDq67JSCiRCgGCZLI= github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= github.com/mholt/certmagic v0.6.2-0.20190624175158-6a42ef9fe8c2/go.mod h1:g4cOPxcjV0oFq3qwpjSA30LReKD8AoIfwAY9VvG35NY= github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= github.com/miekg/dns v1.1.3/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= -github.com/miekg/dns v1.1.4/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= +github.com/miekg/dns v1.1.35/go.mod h1:KNUDUusw/aVsxyTYZM1oqvCicbwhgbNgztCETuNZ7xM= github.com/mindprince/gonvml v0.0.0-20190828220739-9ebdce4bb989/go.mod h1:2eu9pRWp8mo84xCg6KswZ+USQHjwgRhNp06sozOdsTY= github.com/minio/md5-simd v1.1.0/go.mod h1:XpBqgZULrMYD3R+M28PcmP0CkI7PEMzB3U77ZrKZ0Gw= github.com/minio/minio-go/v7 v7.0.2/go.mod h1:dJ80Mv2HeGkYLH1sqS/ksz07ON6csH3S6JUMSQ2zAns= @@ -537,10 +546,11 @@ github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:F github.com/mitchellh/mapstructure v1.1.2 h1:fmNYVwqnSfB9mZU6OS2O6GsXM+wcskZDuKQzvN1EDeE= github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/moby/ipvs v1.0.1/go.mod h1:2pngiyseZbIKXNv7hsKj3O9UEz30c53MT9005gt2hxQ= -github.com/moby/sys/mountinfo v0.1.3/go.mod h1:w2t2Avltqx8vE7gX5l+QiBKxODu2TX0+Syr3h52Tw4o= -github.com/moby/term v0.0.0-20200312100748-672ec06f55cd/go.mod h1:DdlQx2hp0Ss5/fLikoLlEeIYiATotOjgB//nb973jeo= -github.com/moby/term v0.0.0-20201110203204-bea5bbe245bf h1:Un6PNx5oMK6CCwO3QTUyPiK2mtZnPrpDl5UnZ64eCkw= -github.com/moby/term v0.0.0-20201110203204-bea5bbe245bf/go.mod h1:FBS0z0QWA44HXygs7VXDUOGoN/1TV3RuWkLO04am3wc= +github.com/moby/spdystream v0.2.0 h1:cjW1zVyyoiM0T7b6UoySUFqzXMoqRckQtXwGPiBhOM8= +github.com/moby/spdystream v0.2.0/go.mod h1:f7i0iNDQJ059oMTcWxx8MA/zKFIuD/lY+0GqbN2Wy8c= +github.com/moby/sys/mountinfo v0.4.0/go.mod h1:rEr8tzG/lsIZHBtN/JjGG+LMYx9eXgW2JI+6q0qou+A= +github.com/moby/term v0.0.0-20201216013528-df9cb8a40635 h1:rzf0wL0CHVc8CEsgyygG0Mn9CNCCPZqOPaz8RiiHYQk= +github.com/moby/term v0.0.0-20201216013528-df9cb8a40635/go.mod h1:FBS0z0QWA44HXygs7VXDUOGoN/1TV3RuWkLO04am3wc= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= @@ -548,8 +558,10 @@ github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lN github.com/modern-go/reflect2 v1.0.1 h1:9f412s+6RmYXLWZSEzVVgPGK7C2PphHj5RJrvfx9AWI= github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/mohae/deepcopy v0.0.0-20170603005431-491d3605edfb/go.mod h1:TaXosZuwdSHYgviHp1DAtfrULt5eUgsSMsZf+YrPgl8= +github.com/monochromegane/go-gitignore v0.0.0-20200626010858-205db1a8cc00 h1:n6/2gBQ3RWajuToeY6ZtZTIKv2v7ThUy5KKusIT0yc0= +github.com/monochromegane/go-gitignore v0.0.0-20200626010858-205db1a8cc00/go.mod h1:Pm3mSP3c5uWn86xMLZ5Sa7JB9GsEZySvHYXCTK4E9q4= github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc= -github.com/mrunalp/fileutils v0.0.0-20200520151820-abd8a0e76976/go.mod h1:x8F1gnqOkIEiO4rqoeEEEqQbo7HjGMTvyoq3gej4iT0= +github.com/mrunalp/fileutils v0.5.0/go.mod h1:M1WthSahJixYnrXQl/DFQuteStB1weuxD2QJNHXfbSQ= github.com/munnerz/goautoneg v0.0.0-20120707110453-a547fc61f48d/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= github.com/mvdan/xurls v1.1.0/go.mod h1:tQlNn3BED8bE/15hnSL2HLkDeLWpNPAwtw7wkEq44oU= @@ -565,6 +577,7 @@ github.com/nxadm/tail v1.4.4 h1:DQuhQpB1tVlglWS2hLQ5OV6B5r8aGxSrPc5Qo6uTN78= github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= +github.com/olekukonko/tablewriter v0.0.4/go.mod h1:zq6QwlOf5SlnkVbMSr5EoBv3636FWnp+qbPhuoO21uA= github.com/oliveagle/jsonpath v0.0.0-20180606110733-2e52cf6e6852/go.mod h1:eqOVx5Vwu4gd2mmMZvVZsgIqNSaW3xxRThUJ0k/TPk4= github.com/onsi/ginkgo v0.0.0-20170829012221-11459a886d9c/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= @@ -587,10 +600,10 @@ github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8 github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= github.com/opencontainers/image-spec v1.0.1/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0= github.com/opencontainers/runc v0.0.0-20190115041553-12f6a991201f/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U= -github.com/opencontainers/runc v1.0.0-rc92/go.mod h1:X1zlU4p7wOlX4+WRCz+hvlRv8phdL7UqbYD+vQwNMmE= +github.com/opencontainers/runc v1.0.0-rc93/go.mod h1:3NOsor4w32B2tC0Zbl8Knk4Wg84SM2ImC1fxBuqJ/H0= github.com/opencontainers/runtime-spec v1.0.2/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= -github.com/opencontainers/runtime-spec v1.0.3-0.20200728170252-4d89ac9fbff6/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= -github.com/opencontainers/selinux v1.6.0/go.mod h1:VVGKuOLlE7v4PJyT6h7mNWvq1rzqiriPsEqVhc+svHE= +github.com/opencontainers/runtime-spec v1.0.3-0.20200929063507-e6143ca7d51d/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= +github.com/opencontainers/selinux v1.8.0/go.mod h1:RScLhm78qiWa2gbVCcGkC7tCGdgk3ogry1nUQF8Evvo= github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/patrickmn/go-cache v2.1.0+incompatible h1:HRMgzkcYKYpi3C8ajMPV8OFXaaRUnok+kx1WdO15EQc= github.com/patrickmn/go-cache v2.1.0+incompatible/go.mod h1:3Qf8kWWT7OJRJbdiICTKqZju1ZixQ/KpMGzzAfe6+WQ= @@ -658,8 +671,9 @@ github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeV github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= -github.com/sirupsen/logrus v1.6.0 h1:UBcNElsrwanuuMsnGSlYmtmgbb23qDR5dG+6X6Oo89I= github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= +github.com/sirupsen/logrus v1.7.0 h1:ShrD1U9pZB12TX0cVy0DtePoCH97K8EtX+mg7ZARUtM= +github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= github.com/skratchdot/open-golang v0.0.0-20160302144031-75fb7ed4208c h1:fyKiXKO1/I/B6Y2U8T7WdQGWzwehOuGIrljPtt7YTTI= github.com/skratchdot/open-golang v0.0.0-20160302144031-75fb7ed4208c/go.mod h1:sUM3LWHvSMaG192sy56D9F7CNvL7jUJVXoqM1QKLnog= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= @@ -673,8 +687,9 @@ github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTd github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= github.com/spf13/cobra v1.0.0/go.mod h1:/6GTrnGXV9HjY+aR4k0oJ5tcvakLuG6EuKReYlHNrgE= -github.com/spf13/cobra v1.1.1 h1:KfztREH0tPxJJ+geloSLaAkaPkr4ki2Er5quFV1TDo4= github.com/spf13/cobra v1.1.1/go.mod h1:WnodtKOvamDL/PwE2M4iKs8aMDBZ5Q5klgD3qfVJQMI= +github.com/spf13/cobra v1.1.3 h1:xghbfqPkxzxP3C/f3n5DdpAbdKLj4ZE4BWQI362l53M= +github.com/spf13/cobra v1.1.3/go.mod h1:pGADOWyqRD/YMrPZigI/zbliZ2wVD/23d+is3pSWzOo= github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo= github.com/spf13/pflag v0.0.0-20170130214245-9ff6c6923cff/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= @@ -694,10 +709,11 @@ github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXf 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 h1:hDPOHmpOpP40lSULcqw7IrRb/u7w6RpDC9399XyoNd0= github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= +github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= -github.com/syndtr/gocapability v0.0.0-20180916011248-d98352740cb2/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= +github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= github.com/thecodeteam/goscaleio v0.1.0/go.mod h1:68sdkZAsK8bvEwBlbQnlLS+xU+hvLYM/iQ8KXej1AwM= github.com/tidwall/pretty v1.0.0 h1:HsD+QiTn7sK6flMKIvNmpqz1qrpP3Ps6jOKIKMooyg4= github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= @@ -724,12 +740,16 @@ github.com/vmihailenco/msgpack/v5 v5.1.0/go.mod h1:C5gboKD0TJPqWDTVTtrQNfRbiBwHZ github.com/vmihailenco/tagparser v0.1.2 h1:gnjoVuB/kljJ5wICEEOpx98oXMWPLj22G67Vbd1qPqc= github.com/vmihailenco/tagparser v0.1.2/go.mod h1:OeAg3pn3UbLjkWt+rN9oFYB6u/cQgqMEUPoW2WPyhdI= github.com/vmware/govmomi v0.20.3/go.mod h1:URlwyTFZX72RmxtxuaFL2Uj3fD1JTvZdx59bHWk6aFU= -github.com/willf/bitset v1.1.11-0.20200630133818-d5bec3311243/go.mod h1:RjeCKbqT1RxIR/KWY6phxZiaY1IyutSBfGjNPySAYV4= +github.com/willf/bitset v1.1.11/go.mod h1:83CECat5yLh5zVOf4P1ErAgKA5UDvKtgyUABdr3+MjI= github.com/xanzy/ssh-agent v0.2.1 h1:TCbipTQL2JiiCprBWx9frJ2eJlCYT00NmctrHxVAr70= github.com/xanzy/ssh-agent v0.2.1/go.mod h1:mLlQY/MoOhWBj+gOGMQkOeiEvkx+8pJSI+0Bx9h2kr4= github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= +github.com/xlab/treeprint v0.0.0-20181112141820-a009c3971eca h1:1CFlNzQhALwjS9mBAUkycX616GzgsuYUOCHA5+HSlXI= +github.com/xlab/treeprint v0.0.0-20181112141820-a009c3971eca/go.mod h1:ce1O1j6UtZfjr22oyGxGLbauSBp2YVXpARAosm7dHBg= github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= github.com/yuin/goldmark v1.1.27/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/gopher-lua v0.0.0-20200816102855-ee81675732da h1:NimzV1aGyq29m5ukMK0AMWEhFaL/lrEOaephfuoiARg= github.com/yuin/gopher-lua v0.0.0-20200816102855-ee81675732da/go.mod h1:E1AXubJBdNmFERAOucpDIxNzeGfLzg0mYh+UfMWdChA= go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= @@ -746,6 +766,8 @@ go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opentelemetry.io/otel v0.13.0 h1:2isEnyzjjJZq6r2EKMsFj4TxiQiexsM04AVhwbR/oBA= go.opentelemetry.io/otel v0.13.0/go.mod h1:dlSNewoRYikTkotEnxdmuBHgzT+k/idJSfDv/FxEnOY= +go.starlark.net v0.0.0-20200306205701-8dd3e2ee1dd5 h1:+FNtrFTmVw0YZGpBGX56XDee331t6JAXeK2bcyhLOOc= +go.starlark.net v0.0.0-20200306205701-8dd3e2ee1dd5/go.mod h1:nmDLcffg48OtT/PSW0Hg7FvpRQsQh5OSqIylirxKC7o= go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.6.0 h1:Ezj3JGmsOnG1MoRWQkPBsKLe9DwWD9QeXzTRzzldNVk= @@ -775,8 +797,9 @@ golang.org/x/crypto v0.0.0-20190617133340-57b3e21c3d56/go.mod h1:yigFU9vqHzYiE8U golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200302210943-78000ba7a073/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20201002170205-7f63de1d35b0 h1:hb9wdF1z5waM+dSIICn1l0DkLVDT3hqhhQsDNUmHPRE= golang.org/x/crypto v0.0.0-20201002170205-7f63de1d35b0/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20210220033148-5ea612d1eb83 h1:/ZScEX8SfEmUGRHs0gxpqteO5nfNW6axyZbBdw9A12g= +golang.org/x/crypto v0.0.0-20210220033148-5ea612d1eb83/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= @@ -784,6 +807,7 @@ golang.org/x/exp v0.0.0-20190125153040-c74c464bbbf2/go.mod h1:CJ0aWSM057203Lf6IL golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190312203227-4b39c73a6495/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= +golang.org/x/exp v0.0.0-20190731235908-ec7cb31e5a56/go.mod h1:JhuoJpWY28nO4Vef9tZUw9qufEGTyX1+7lmHxV5q5G4= 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= @@ -791,8 +815,8 @@ golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u0 golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= -golang.org/x/exp v0.0.0-20200821190819-94841d0725da h1:vfV2BR+q1+/jmgJR30Ms3RHbryruQ3Yd83lLAAue9cs= -golang.org/x/exp v0.0.0-20200821190819-94841d0725da/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= +golang.org/x/exp v0.0.0-20210220032938-85be41e4509f h1:GrkO5AtFUU9U/1f5ctbIBXtBGeSJbWwIYfIsTcFMaX4= +golang.org/x/exp v0.0.0-20210220032938-85be41e4509f/go.mod h1:I6l2HNBLBZEcrOoCpyKLdY2lHoRZ8lI4x60KMCQDft4= golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs= 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= @@ -808,13 +832,17 @@ golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPI golang.org/x/lint v0.0.0-20200302205851-738671d3881b/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/mobile v0.0.0-20201217150744-e6ae53a27f4f/go.mod h1:skQtrUTUwhdJvXM/2KKJzY8pDgNr9I/FOMqDVRPBUS4= 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.1.1-0.20191209134235-331c550502dd/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.3.0 h1:RM4zey1++hCTbCVQfnWeKs9/IEsaBLA8vTkd0WVtmH4= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.3.1-0.20200828183125-ce943fd02449/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.4.2 h1:Gz96sIWK3OalVv/I/qNygP42zyoKp3xptRVCWRFEBvo= +golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -838,6 +866,7 @@ golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLL golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190923162816-aa69164e4478/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20191004110552-13f9640d40b9/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-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= @@ -849,10 +878,14 @@ golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/ golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20201006153459-a7d1128ccaa0/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201022231255-08b38378de70/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201024042810-be3efd7ff127/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20201110031124-69a78807bb2b h1:uwuIcX0g4Yl1NC5XAz37xsr2lTtcqevgzYNVt49waME= golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20210224082022-3d97a244fca7/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4 h1:4nGaVu0QrbjT/AK2PRLuQfQuh6DJve+pELhqTdAj3x0= +golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= 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= @@ -866,8 +899,8 @@ golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJ 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-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20201207232520-09787c993a3a h1:DcqTD9SDLc+1P/r1EmRBwnVsrOwW+kk2vWf9n+1sGhs= -golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20210220032951-036812b2e83c h1:5KslGYwFpkhGh+Q16bwMP3cOontH8FOep7tGV86Y7SQ= +golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -896,7 +929,9 @@ golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190924154521-2837fb4f24fe/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191002063906-3421d5a6bb1c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191022100944-742c48ecaeb7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -918,12 +953,21 @@ golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200519105757-fe76b779f299/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200728102440-3e129f6d46b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200831180312-196b9ba8737a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200909081042-eff7692f9009/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200916030750-2334cc1a136f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201110211018-35f3e6cf4a65/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201112073958-5cba982894dd h1:5CtCZbICpIOFdgO940moixOPjc0178IU44m4EjOO5IY= -golang.org/x/sys v0.0.0-20201112073958-5cba982894dd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210225134936-a50acf3fe073/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210301091718-77cc2087c03b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210510120138-977fb7262007 h1:gG67DSER+11cZvqIMb8S8bt0vZtiN6xWYARwirrOSfE= +golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= +golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/term v0.0.0-20210220032956-6a3ed077a48d h1:SZxvLBoTP5yHO3Frd4z4vrF+DBX9vMVanchswa69toE= +golang.org/x/term v0.0.0-20210220032956-6a3ed077a48d/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= 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= @@ -935,8 +979,9 @@ golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxb golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20200630173020-3af7569d3a1e h1:EHBhcS0mlXEAVwNyO2dLfjToGsyY4j24pTs2ScHnX7s= golang.org/x/time v0.0.0-20200630173020-3af7569d3a1e/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20210220033141-f8bda1e9f3ba h1:O8mE0/t419eoIwhTFpKVkHiTs/Igowgfkj25AcZrtiE= +golang.org/x/time v0.0.0-20210220033141-f8bda1e9f3ba/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -970,8 +1015,10 @@ golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtn 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-20191216052735-49a3e744a425/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= 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-20200117012304-6edc0a871e69/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= @@ -981,8 +1028,11 @@ golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapK golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/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-20200505023115-26f46d2f7ef8/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200616133436-c1934b75d054 h1:HHeAlu5H9b71C+Fx0K+1dGgVFN1DM1/wz4aoGOA5qS8= -golang.org/x/tools v0.0.0-20200616133436-c1934b75d054/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= +golang.org/x/tools v0.1.1 h1:wGiQel/hW0NnEkJUk8lbzkX2gFJU6PFxf1v5OlCfuOs= +golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= 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= @@ -1075,16 +1125,20 @@ gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.7/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.3.0 h1:clyUAQHOM3G0M3f5vQj7LuJrETvjVot3Z5el9nffUtU= gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= +gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776 h1:tQIYjPdBoyREyB9XMu+nnTclpTYkz2zFM+lzLJFO4gQ= gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b h1:h8qDotaEPuJATrMmW04NCwg7v22aHH28wwpauUhK9Oo= +gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gotest.tools v2.2.0+incompatible h1:VsBPFP1AI068pPrMxtb/S8Zkgf9xEmTLJjfM+P5UIEo= gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw= -gotest.tools/v3 v3.0.2 h1:kG1BFyqVHuQoVQiR1bWGnfz/fmHvvuiSPIV7rvl360E= gotest.tools/v3 v3.0.2/go.mod h1:3SzNCllyD9/Y+b5r9JIKQ474KzkZyqLqEfYqMsX94Bk= +gotest.tools/v3 v3.0.3 h1:4AuOwCGf4lLR9u3YOe2awrHygurzhO/HeQ6laiA6Sx0= +gotest.tools/v3 v3.0.3/go.mod h1:Z7Lb0S5l+klDB31fvDQX8ss/FlKDxtlFlw3Oa8Ymbl8= honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= 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= @@ -1092,55 +1146,55 @@ honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWh 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= -k8s.io/api v0.20.4 h1:xZjKidCirayzX6tHONRQyTNDVIR55TYVqgATqo6ZULY= -k8s.io/api v0.20.4/go.mod h1:++lNL1AJMkDymriNniQsWRkMDzRaX2Y/POTUi8yvqYQ= -k8s.io/apiextensions-apiserver v0.20.4 h1:VO/Y5PwBdznMIctX/vvgSNhxffikEmcLC/V1bpbhHhU= -k8s.io/apiextensions-apiserver v0.20.4/go.mod h1:Hzebis/9c6Io5yzHp24Vg4XOkTp1ViMwKP/6gmpsfA4= -k8s.io/apimachinery v0.20.4 h1:vhxQ0PPUUU2Ns1b9r4/UFp13UPs8cw2iOoTjnY9faa0= -k8s.io/apimachinery v0.20.4/go.mod h1:WlLqWAHZGg07AeltaI0MV5uk1Omp8xaN0JGLY6gkRpU= -k8s.io/apiserver v0.20.4 h1:zMMKIgIUDIFiwK3LyY7qOV4Z4wKsHVYExL6vXY9fPX4= -k8s.io/apiserver v0.20.4/go.mod h1:Mc80thBKOyy7tbvFtB4kJv1kbdD0eIH8k8vianJcbFM= -k8s.io/cli-runtime v0.20.4 h1:jVU13lBeebHLtarHeHkoIi3uRONFzccmP7hHLzEoQ4w= -k8s.io/cli-runtime v0.20.4/go.mod h1:dz38e1CM4uuIhy8PMFUZv7qsvIdoE3ByZYlmbHNCkt4= -k8s.io/client-go v0.20.4 h1:85crgh1IotNkLpKYKZHVNI1JT86nr/iDCvq2iWKsql4= -k8s.io/client-go v0.20.4/go.mod h1:LiMv25ND1gLUdBeYxBIwKpkSC5IsozMMmOOeSJboP+k= -k8s.io/cloud-provider v0.20.4/go.mod h1:wbU+iVZIWA3+iDEK5q8Ki9de1cgIHixr2B7LzO2nAjg= -k8s.io/cluster-bootstrap v0.20.4/go.mod h1:WemJ9DOVs8DOvG+XjpQv29otMJHRazmR8gDnJPs4qA4= -k8s.io/code-generator v0.20.4 h1:FhilVnvwMFVs65SxIQjXSOznGmzJIZEk3CCk/SULBfk= -k8s.io/code-generator v0.20.4/go.mod h1:UsqdF+VX4PU2g46NC2JRs4gc+IfrctnwHb76RNbWHJg= -k8s.io/component-base v0.20.4 h1:gdvPs4G11e99meQnW4zN+oYOjH8qkLz1sURrAzvKWqc= -k8s.io/component-base v0.20.4/go.mod h1:t4p9EdiagbVCJKrQ1RsA5/V4rFQNDfRlevJajlGwgjI= -k8s.io/component-helpers v0.20.4 h1:3XJi6w+AcLd5f3ZwSRfgWuHFnUCmMAaRsUt2+NGDyQ0= -k8s.io/component-helpers v0.20.4/go.mod h1:S7jGg8zQp3kwvSzfuGtNaQAMVmvzomXDioTm5vABn9g= -k8s.io/controller-manager v0.20.4/go.mod h1:WEvFUeeywQl0dIUvorC8Zx/vSqgB8sGKrzNncUEcjlE= -k8s.io/cri-api v0.20.4/go.mod h1:2JRbKt+BFLTjtrILYVqQK5jqhI+XNdF6UiGMgczeBCI= -k8s.io/csi-translation-lib v0.20.4/go.mod h1:WisLItCdoDKB4lr6nkhzQsfgBNBJDI/TD9m4Crw92JM= +k8s.io/api v0.21.0 h1:gu5iGF4V6tfVCQ/R+8Hc0h7H1JuEhzyEi9S4R5LM8+Y= +k8s.io/api v0.21.0/go.mod h1:+YbrhBBGgsxbF6o6Kj4KJPJnBmAKuXDeS3E18bgHNVU= +k8s.io/apiextensions-apiserver v0.21.0 h1:Nd4uBuweg6ImzbxkC1W7xUNZcCV/8Vt10iTdTIVF3hw= +k8s.io/apiextensions-apiserver v0.21.0/go.mod h1:gsQGNtGkc/YoDG9loKI0V+oLZM4ljRPjc/sql5tmvzc= +k8s.io/apimachinery v0.21.0 h1:3Fx+41if+IRavNcKOz09FwEXDBG6ORh6iMsTSelhkMA= +k8s.io/apimachinery v0.21.0/go.mod h1:jbreFvJo3ov9rj7eWT7+sYiRx+qZuCYXwWT1bcDswPY= +k8s.io/apiserver v0.21.0 h1:1hWMfsz+cXxB77k6/y0XxWxwl6l9OF26PC9QneUVn1Q= +k8s.io/apiserver v0.21.0/go.mod h1:w2YSn4/WIwYuxG5zJmcqtRdtqgW/J2JRgFAqps3bBpg= +k8s.io/cli-runtime v0.21.0 h1:/V2Kkxtf6x5NI2z+Sd/mIrq4FQyQ8jzZAUD6N5RnN7Y= +k8s.io/cli-runtime v0.21.0/go.mod h1:XoaHP93mGPF37MkLbjGVYqg3S1MnsFdKtiA/RZzzxOo= +k8s.io/client-go v0.21.0 h1:n0zzzJsAQmJngpC0IhgFcApZyoGXPrDIAD601HD09ag= +k8s.io/client-go v0.21.0/go.mod h1:nNBytTF9qPFDEhoqgEPaarobC8QPae13bElIVHzIglA= +k8s.io/cloud-provider v0.21.0/go.mod h1:z17TQgu3JgUFjcgby8sj5X86YdVK5Pbt+jm/eYMZU9M= +k8s.io/cluster-bootstrap v0.21.0/go.mod h1:rs7i1JpBCa56YNmnYxFJuoUghIwpMzDidY8ZmqiRnrQ= +k8s.io/code-generator v0.21.0 h1:LGWJOvkbBNpuRBqBRXUjzfvymUh7F/iR2KDpwLnqCM4= +k8s.io/code-generator v0.21.0/go.mod h1:hUlps5+9QaTrKx+jiM4rmq7YmH8wPOIko64uZCHDh6Q= +k8s.io/component-base v0.21.0 h1:tLLGp4BBjQaCpS/KiuWh7m2xqvAdsxLm4ATxHSe5Zpg= +k8s.io/component-base v0.21.0/go.mod h1:qvtjz6X0USWXbgmbfXR+Agik4RZ3jv2Bgr5QnZzdPYw= +k8s.io/component-helpers v0.21.0 h1:SoWLsd63LI5uwofcHVSO4jtlmZEJRycfwNBKU4eAGPQ= +k8s.io/component-helpers v0.21.0/go.mod h1:tezqefP7lxfvJyR+0a+6QtVrkZ/wIkyMLK4WcQ3Cj8U= +k8s.io/controller-manager v0.21.0/go.mod h1:Ohy0GRNRKPVjB8C8G+dV+4aPn26m8HYUI6ejloUBvUA= +k8s.io/cri-api v0.21.0/go.mod h1:nJbXlTpXwYCYuGMR7v3PQb1Du4WOGj2I9085xMVjr3I= +k8s.io/csi-translation-lib v0.21.0/go.mod h1:edq+UMpgqEx3roTuGF/03uIuSOsI986jtu65+ytLlkA= k8s.io/gengo v0.0.0-20200413195148-3a45101e95ac/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= -k8s.io/gengo v0.0.0-20201113003025-83324d819ded h1:JApXBKYyB7l9xx+DK7/+mFjC7A9Bt5A93FPvFD0HIFE= -k8s.io/gengo v0.0.0-20201113003025-83324d819ded/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E= +k8s.io/gengo v0.0.0-20201214224949-b6c5ce23f027 h1:Uusb3oh8XcdzDF/ndlI4ToKTYVlkCSJP39SRY2mfRAw= +k8s.io/gengo v0.0.0-20201214224949-b6c5ce23f027/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E= k8s.io/heapster v1.2.0-beta.1/go.mod h1:h1uhptVXMwC8xtZBYsPXKVi8fpdlYkTs6k949KozGrM= k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE= k8s.io/klog/v2 v2.2.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y= -k8s.io/klog/v2 v2.4.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y= -k8s.io/klog/v2 v2.5.0 h1:8mOnjf1RmUPW6KRqQCfYSZq/K20Unmp3IhuZUhxl8KI= k8s.io/klog/v2 v2.5.0/go.mod h1:hy9LJ/NvuK+iVyP4Ehqva4HxZG/oXyIS3n3Jmire4Ec= -k8s.io/kube-aggregator v0.20.4 h1:j/SUwPy1eO+ud3XOUGmH18gISPyerqhXOoNRZDbv3fs= -k8s.io/kube-aggregator v0.20.4/go.mod h1:0ixQ9De7KXyHteXizS6nVtrnKqGa4kiuxl9rEBsNccw= -k8s.io/kube-controller-manager v0.20.4/go.mod h1:HCVTzFZhw/dtTgfeF2mEUSZZM++poC6qUhNmZ5yRELk= -k8s.io/kube-openapi v0.0.0-20201113171705-d219536bb9fd h1:sOHNzJIkytDF6qadMNKhhDRpc6ODik8lVC6nOur7B2c= -k8s.io/kube-openapi v0.0.0-20201113171705-d219536bb9fd/go.mod h1:WOJ3KddDSol4tAGcJo0Tvi+dK12EcqSLqcWsryKMpfM= -k8s.io/kube-proxy v0.20.4/go.mod h1:FU0h3UFlM/n/NorYVzchOCYZa/eGyo/VdWpvrhtkPsY= -k8s.io/kube-scheduler v0.20.4/go.mod h1:w1/IOIJ6q9K1TQ/9sQBvNDSvi9ylZgJaedkwWU5l9bA= -k8s.io/kubectl v0.20.4 h1:Y1gUiigiZM+ulcrnWeqSHlTd0/7xWcQIXjuMnjtHyoo= -k8s.io/kubectl v0.20.4/go.mod h1:yCC5lUQyXRmmtwyxfaakryh9ezzp/bT0O14LeoFLbGo= -k8s.io/kubelet v0.20.4/go.mod h1:Jtubfqr/TlXcOMaUYWoGVkuY/iM5xmZiEukcJSJs0ns= -k8s.io/kubernetes v1.20.4 h1:gPeOspTx01shAQuFhae+O7ZfU0WKlD7RE5L0pooU0g8= -k8s.io/kubernetes v1.20.4/go.mod h1:5oh+vhVyWep2o+IH61i3aU4e/Q77Yt96tcKwYOpVbvk= -k8s.io/legacy-cloud-providers v0.20.4/go.mod h1:whukzxTjXr2SclI8TObPeCFqIyWJ0IfqTb9enRi8Bs8= -k8s.io/metrics v0.20.4/go.mod h1:DDXS+Ls+2NAxRcVhXKghRPa3csljyJRjDRjPe6EOg/g= -k8s.io/mount-utils v0.20.4/go.mod h1:Jv9NRZ5L2LF87A17GaGlArD+r3JAJdZFvo4XD1cG4Kc= -k8s.io/sample-apiserver v0.20.4/go.mod h1:QoqZx37RKI+i+yQ7mUL5rEaY59OciDCmMRmoIAiKPKs= -k8s.io/system-validators v1.2.0/go.mod h1:bPldcLgkIUK22ALflnsXk8pvkTEndYdNuaHH6gRrl0Q= +k8s.io/klog/v2 v2.8.0 h1:Q3gmuM9hKEjefWFFYF0Mat+YyFJvsUyYuwyNNJ5C9Ts= +k8s.io/klog/v2 v2.8.0/go.mod h1:hy9LJ/NvuK+iVyP4Ehqva4HxZG/oXyIS3n3Jmire4Ec= +k8s.io/kube-aggregator v0.21.0 h1:my2WYu8RJcj/ZzWAjPPnmxNRELk/iCdPjMaOmsZOeBU= +k8s.io/kube-aggregator v0.21.0/go.mod h1:sIaa9L4QCBo9gjPyoGJns4cBjYVLq3s49FxF7m/1A0A= +k8s.io/kube-controller-manager v0.21.0/go.mod h1:QGJ1P7eU4FQq8evpCHN5e4QwPpcr2sbWFJBO/DKBUrw= +k8s.io/kube-openapi v0.0.0-20210305001622-591a79e4bda7 h1:vEx13qjvaZ4yfObSSXW7BrMc/KQBBT/Jyee8XtLf4x0= +k8s.io/kube-openapi v0.0.0-20210305001622-591a79e4bda7/go.mod h1:wXW5VT87nVfh/iLV8FpR2uDvrFyomxbtb1KivDbvPTE= +k8s.io/kube-proxy v0.21.0/go.mod h1:36jW3e6+5iQql9tHrLjVrmwpPsbhTywoI6OCFL7MWRs= +k8s.io/kube-scheduler v0.21.0/go.mod h1:wf1oi1NHSsFYfG7lKwxJVmnQNBnhL9vOMXztcKQu5IU= +k8s.io/kubectl v0.21.0 h1:WZXlnG/yjcE4LWO2g6ULjFxtzK6H1TKzsfaBFuVIhNg= +k8s.io/kubectl v0.21.0/go.mod h1:EU37NukZRXn1TpAkMUoy8Z/B2u6wjHDS4aInsDzVvks= +k8s.io/kubelet v0.21.0/go.mod h1:G5ZxMTVev9t4bhmsSxDAWhH6wXDYEVHVVFyYsw4laR4= +k8s.io/kubernetes v1.21.0 h1:LUUQgdFsKB+wVgKPUapmXjkvvJHSLN53CuQwre4c+mM= +k8s.io/kubernetes v1.21.0/go.mod h1:Yx6XZ8zalyqEk7but+j4+5SvLzdyH1eeqZ4cwO+5dD4= +k8s.io/legacy-cloud-providers v0.21.0/go.mod h1:bNxo7gDg+PGkBmT/MFZswLTWdSWK9kAlS1s8DJca5q4= +k8s.io/metrics v0.21.0/go.mod h1:L3Ji9EGPP1YBbfm9sPfEXSpnj8i24bfQbAFAsW0NueQ= +k8s.io/mount-utils v0.21.0/go.mod h1:dwXbIPxKtTjrBEaX1aK/CMEf1KZ8GzMHpe3NEBfdFXI= +k8s.io/sample-apiserver v0.21.0/go.mod h1:yMffYq14yQZtuVPVBGaBJ+3Scb2xHT6QeqFfk3v+AEY= +k8s.io/system-validators v1.4.0/go.mod h1:bPldcLgkIUK22ALflnsXk8pvkTEndYdNuaHH6gRrl0Q= k8s.io/utils v0.0.0-20201110183641-67b214c5f920/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= k8s.io/utils v0.0.0-20210111153108-fddb29f9d009 h1:0T5IaWHO3sJTEmCP6mUlBvMukxPKUQWqiI/YuiBNMiQ= k8s.io/utils v0.0.0-20210111153108-fddb29f9d009/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= @@ -1155,13 +1209,18 @@ rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8 rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= -sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.14/go.mod h1:LEScyzhFmoF5pso/YSeBstl57mOzx9xlU9n85RGrDQg= +sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.15/go.mod h1:LEScyzhFmoF5pso/YSeBstl57mOzx9xlU9n85RGrDQg= sigs.k8s.io/controller-runtime v0.8.3 h1:GMHvzjTmaWHQB8HadW+dIvBoJuLvZObYJ5YoZruPRao= sigs.k8s.io/controller-runtime v0.8.3/go.mod h1:U/l+DUopBc1ecfRZ5aviA9JDmGFQKvLf5YkZNx2e0sU= -sigs.k8s.io/kustomize v2.0.3+incompatible h1:JUufWFNlI44MdtnjUqVnvh29rR37PQFzPbLXqhyOyX0= -sigs.k8s.io/kustomize v2.0.3+incompatible/go.mod h1:MkjgH3RdOWrievjo6c9T245dYlB5QeXV4WCbnt/PEpU= -sigs.k8s.io/structured-merge-diff/v4 v4.0.2 h1:YHQV7Dajm86OuqnIR6zAelnDWBRjo+YhYV9PmGrh1s8= +sigs.k8s.io/kustomize/api v0.8.5 h1:bfCXGXDAbFbb/Jv5AhMj2BB8a5VAJuuQ5/KU69WtDjQ= +sigs.k8s.io/kustomize/api v0.8.5/go.mod h1:M377apnKT5ZHJS++6H4rQoCHmWtt6qTpp3mbe7p6OLY= +sigs.k8s.io/kustomize/cmd/config v0.9.7/go.mod h1:MvXCpHs77cfyxRmCNUQjIqCmZyYsbn5PyQpWiq44nW0= +sigs.k8s.io/kustomize/kustomize/v4 v4.0.5/go.mod h1:C7rYla7sI8EnxHE/xEhRBSHMNfcL91fx0uKmUlUhrBk= +sigs.k8s.io/kustomize/kyaml v0.10.15 h1:dSLgG78KyaxN4HylPXdK+7zB3k7sW6q3IcCmcfKA+aI= +sigs.k8s.io/kustomize/kyaml v0.10.15/go.mod h1:mlQFagmkm1P+W4lZJbJ/yaxMd8PqMRSC4cPcfUVt5Hg= sigs.k8s.io/structured-merge-diff/v4 v4.0.2/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw= +sigs.k8s.io/structured-merge-diff/v4 v4.1.0 h1:C4r9BgJ98vrKnnVCjwCSXcWjWe0NKcUQkmzDXZXGwH8= +sigs.k8s.io/structured-merge-diff/v4 v4.1.0/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw= sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= sigs.k8s.io/yaml v1.2.0 h1:kr/MCeFWJWTwyaHoR9c8EjH9OumOmoF9YGiZd7lFm/Q= sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc= diff --git a/hack/generate-proto.sh b/hack/generate-proto.sh index 85f8346106724..0c467c181807d 100755 --- a/hack/generate-proto.sh +++ b/hack/generate-proto.sh @@ -125,7 +125,7 @@ clean_swagger() { } echo "If additional types are added, the number of expected collisions may need to be increased" -EXPECTED_COLLISION_COUNT=55 +EXPECTED_COLLISION_COUNT=56 collect_swagger server ${EXPECTED_COLLISION_COUNT} clean_swagger server clean_swagger reposerver diff --git a/hack/installers/checksums/helm-v3.6.0-linux-amd64.tar.gz.sha256 b/hack/installers/checksums/helm-v3.6.0-linux-amd64.tar.gz.sha256 new file mode 100644 index 0000000000000..16409d83ea5d6 --- /dev/null +++ b/hack/installers/checksums/helm-v3.6.0-linux-amd64.tar.gz.sha256 @@ -0,0 +1 @@ +0a9c80b0f211791d6a9d36022abd0d6fd125139abe6d1dcf4c5bf3bc9dcec9c8 helm-v3.6.0-linux-amd64.tar.gz diff --git a/hack/installers/checksums/helm-v3.6.0-linux-arm64.tar.gz.sha256 b/hack/installers/checksums/helm-v3.6.0-linux-arm64.tar.gz.sha256 new file mode 100644 index 0000000000000..19ae029229924 --- /dev/null +++ b/hack/installers/checksums/helm-v3.6.0-linux-arm64.tar.gz.sha256 @@ -0,0 +1 @@ +8a16f23866b1e74b347bcdd7f8731ebcfa37f35fc27c75dd29b13e87aed8484c helm-v3.6.0-linux-arm64.tar.gz diff --git a/hack/tool-versions.sh b/hack/tool-versions.sh index af7a387b19c43..1b54ddc3774db 100644 --- a/hack/tool-versions.sh +++ b/hack/tool-versions.sh @@ -9,11 +9,11 @@ # SHA256 sum of the binary. ############################################################################### helm2_version=2.17.0 -helm3_version=3.5.1 +helm3_version=3.6.0 jq_version=1.6 ksonnet_version=0.13.1 kubectl_version=1.17.8 kubectx_version=0.6.3 kustomize4_version=4.1.2 protoc_version=3.7.1 -swagger_version=0.19.0 \ No newline at end of file +swagger_version=0.19.0 diff --git a/hack/versions.sh b/hack/versions.sh index b206555d0b003..88859a4ba30bc 100644 --- a/hack/versions.sh +++ b/hack/versions.sh @@ -1,7 +1,7 @@ #!/bin/sh # Update required versions of dependencies here whenever you change them in # go.mod -kube_version=v0.20.4 +kube_version=v0.21.0 grpc_version=v1.26.0 protobuf_version=v1.3.2 grpc_gateway_version=v1.16.0 diff --git a/manifests/base/application-controller/argocd-application-controller-statefulset.yaml b/manifests/base/application-controller/argocd-application-controller-statefulset.yaml index 94877b0c93317..29d0c14849f77 100644 --- a/manifests/base/application-controller/argocd-application-controller-statefulset.yaml +++ b/manifests/base/application-controller/argocd-application-controller-statefulset.yaml @@ -20,10 +20,6 @@ spec: containers: - command: - argocd-application-controller - - --status-processors - - "20" - - --operation-processors - - "10" env: - name: ARGOCD_RECONCILIATION_TIMEOUT valueFrom: @@ -31,6 +27,90 @@ spec: name: argocd-cm key: timeout.reconciliation optional: true + - name: ARGOCD_APPLICATION_CONTROLLER_REPO_SERVER + valueFrom: + configMapKeyRef: + name: argocd-cmd-params-cm + key: repo.server + optional: true + - name: ARGOCD_APPLICATION_CONTROLLER_REPO_SERVER_TIMEOUT_SECONDS + valueFrom: + configMapKeyRef: + name: argocd-cmd-params-cm + key: controller.repo.server.timeout.seconds + optional: true + - name: ARGOCD_APPLICATION_CONTROLLER_STATUS_PROCESSORS + valueFrom: + configMapKeyRef: + name: argocd-cmd-params-cm + key: controller.status.processors + optional: true + - name: ARGOCD_APPLICATION_CONTROLLER_OPERATION_PROCESSORS + valueFrom: + configMapKeyRef: + name: argocd-cmd-params-cm + key: controller.operation.processors + optional: true + - name: ARGOCD_APPLICATION_CONTROLLER_LOGFORMAT + valueFrom: + configMapKeyRef: + name: argocd-cmd-params-cm + key: controller.log.format + optional: true + - name: ARGOCD_APPLICATION_CONTROLLER_LOGLEVEL + valueFrom: + configMapKeyRef: + name: argocd-cmd-params-cm + key: controller.log.level + optional: true + - name: ARGOCD_APPLICATION_CONTROLLER_METRICS_CACHE_EXPIRATION + valueFrom: + configMapKeyRef: + name: argocd-cmd-params-cm + key: controller.metrics.cache.expiration + optional: true + - name: ARGOCD_APPLICATION_CONTROLLER_SELF_HEAL_TIMEOUT_SECONDS + valueFrom: + configMapKeyRef: + name: argocd-cmd-params-cm + key: controller.self.heal.timeout.seconds + optional: true + - name: ARGOCD_APPLICATION_CONTROLLER_REPO_SERVER_PLAINTEXT + valueFrom: + configMapKeyRef: + name: argocd-cmd-params-cm + key: controller.repo.server.plaintext + optional: true + - name: ARGOCD_APPLICATION_CONTROLLER_REPO_SERVER_STRICT_TLS + valueFrom: + configMapKeyRef: + name: argocd-cmd-params-cm + key: controller.repo.server.strict.tls + optional: true + - name: ARGOCD_APP_STATE_CACHE_EXPIRATION + valueFrom: + configMapKeyRef: + name: argocd-cmd-params-cm + key: controller.app.state.cache.expiration + optional: true + - name: REDIS_SERVER + valueFrom: + configMapKeyRef: + name: argocd-cmd-params-cm + key: redis.server + optional: true + - name: REDISDB + valueFrom: + configMapKeyRef: + name: argocd-cmd-params-cm + key: redis.db + optional: true + - name: ARGOCD_DEFAULT_CACHE_EXPIRATION + valueFrom: + configMapKeyRef: + name: argocd-cmd-params-cm + key: controller.default.cache.expiration + optional: true image: quay.io/argoproj/argocd:latest imagePullPolicy: Always name: argocd-application-controller diff --git a/manifests/base/config/argocd-cmd-params-cm.yaml b/manifests/base/config/argocd-cmd-params-cm.yaml new file mode 100644 index 0000000000000..25cd895e0a586 --- /dev/null +++ b/manifests/base/config/argocd-cmd-params-cm.yaml @@ -0,0 +1,7 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: argocd-cmd-params-cm + labels: + app.kubernetes.io/name: argocd-cmd-params-cm + app.kubernetes.io/part-of: argocd diff --git a/manifests/base/config/kustomization.yaml b/manifests/base/config/kustomization.yaml index f3678dce8e150..ae11be496195f 100644 --- a/manifests/base/config/kustomization.yaml +++ b/manifests/base/config/kustomization.yaml @@ -3,8 +3,10 @@ kind: Kustomization resources: - argocd-cm.yaml +- argocd-cmd-params-cm.yaml - argocd-secret.yaml - argocd-rbac-cm.yaml - argocd-ssh-known-hosts-cm.yaml - argocd-tls-certs-cm.yaml - argocd-gpg-keys-cm.yaml + diff --git a/manifests/base/dex/argocd-dex-server-network-policy.yaml b/manifests/base/dex/argocd-dex-server-network-policy.yaml index 44b6e6a4a89da..a80f9d2645a9c 100644 --- a/manifests/base/dex/argocd-dex-server-network-policy.yaml +++ b/manifests/base/dex/argocd-dex-server-network-policy.yaml @@ -18,5 +18,8 @@ spec: port: 5556 - protocol: TCP port: 5557 + - from: + - namespaceSelector: { } + ports: + - port: 5558 - protocol: TCP - port: 5558 \ No newline at end of file diff --git a/manifests/base/repo-server/argocd-repo-server-deployment.yaml b/manifests/base/repo-server/argocd-repo-server-deployment.yaml index 6c52aa07233be..ec1a7e675c29d 100644 --- a/manifests/base/repo-server/argocd-repo-server-deployment.yaml +++ b/manifests/base/repo-server/argocd-repo-server-deployment.yaml @@ -32,6 +32,72 @@ spec: name: argocd-cm key: timeout.reconciliation optional: true + - name: ARGOCD_REPO_SERVER_LOGFORMAT + valueFrom: + configMapKeyRef: + name: argocd-cmd-params-cm + key: reposerver.log.format + optional: true + - name: ARGOCD_REPO_SERVER_LOGLEVEL + valueFrom: + configMapKeyRef: + name: argocd-cmd-params-cm + key: reposerver.log.level + optional: true + - name: ARGOCD_REPO_SERVER_PARALLELISM_LIMIT + valueFrom: + configMapKeyRef: + name: argocd-cmd-params-cm + key: reposerver.parallelism.limit + optional: true + - name: ARGOCD_REPO_SERVER_DISABLE_TLS + valueFrom: + configMapKeyRef: + name: argocd-cmd-params-cm + key: reposerver.disable.tls + optional: true + - name: ARGOCD_TLS_MIN_VERSION + valueFrom: + configMapKeyRef: + name: argocd-cmd-params-cm + key: reposerver.tls.minversion + optional: true + - name: ARGOCD_TLS_MAX_VERSION + valueFrom: + configMapKeyRef: + name: argocd-cmd-params-cm + key: reposerver.tls.maxversion + optional: true + - name: ARGOCD_TLS_CIPHERS + valueFrom: + configMapKeyRef: + name: argocd-cmd-params-cm + key: reposerver.tls.ciphers + optional: true + - name: ARGOCD_REPO_CACHE_EXPIRATION + valueFrom: + configMapKeyRef: + name: argocd-cmd-params-cm + key: reposerver.repo.cache.expiration + optional: true + - name: REDIS_SERVER + valueFrom: + configMapKeyRef: + name: argocd-cmd-params-cm + key: redis.server + optional: true + - name: REDISDB + valueFrom: + configMapKeyRef: + name: argocd-cmd-params-cm + key: redis.db + optional: true + - name: ARGOCD_DEFAULT_CACHE_EXPIRATION + valueFrom: + configMapKeyRef: + name: argocd-cmd-params-cm + key: reposerver.default.cache.expiration + optional: true ports: - containerPort: 8081 - containerPort: 8084 diff --git a/manifests/base/server/argocd-server-deployment.yaml b/manifests/base/server/argocd-server-deployment.yaml index 4f1a2800308fe..b02dc1bd25123 100644 --- a/manifests/base/server/argocd-server-deployment.yaml +++ b/manifests/base/server/argocd-server-deployment.yaml @@ -20,7 +20,149 @@ spec: - name: argocd-server image: quay.io/argoproj/argocd:latest imagePullPolicy: Always - command: [argocd-server, --staticassets, /shared/app] + command: + - argocd-server + - --staticassets + - /shared/app + env: + - name: ARGOCD_SERVER_INSECURE + valueFrom: + configMapKeyRef: + name: argocd-cmd-params-cm + key: server.insecure + optional: true + - name: ARGOCD_SERVER_BASEHREF + valueFrom: + configMapKeyRef: + name: argocd-cmd-params-cm + key: server.basehref + optional: true + - name: ARGOCD_SERVER_ROOTPATH + valueFrom: + configMapKeyRef: + name: argocd-cmd-params-cm + key: server.rootpath + optional: true + - name: ARGOCD_SERVER_LOGFORMAT + valueFrom: + configMapKeyRef: + name: argocd-cmd-params-cm + key: server.log.format + optional: true + - name: ARGOCD_REPO_SERVER_LOGLEVEL + valueFrom: + configMapKeyRef: + name: argocd-cmd-params-cm + key: server.log.level + optional: true + - name: ARGOCD_SERVER_REPO_SERVER + valueFrom: + configMapKeyRef: + name: argocd-cmd-params-cm + key: repo.server + optional: true + - name: ARGOCD_SERVER_DEX_SERVER + valueFrom: + configMapKeyRef: + name: argocd-cmd-params-cm + key: server.dex.server + optional: true + - name: ARGOCD_SERVER_DISABLE_AUTH + valueFrom: + configMapKeyRef: + name: argocd-cmd-params-cm + key: server.disable.auth + optional: true + - name: ARGOCD_SERVER_ENABLE_GZIP + valueFrom: + configMapKeyRef: + name: argocd-cmd-params-cm + key: server.enable.gzip + optional: true + - name: ARGOCD_SERVER_REPO_SERVER_TIMEOUT_SECONDS + valueFrom: + configMapKeyRef: + name: argocd-cmd-params-cm + key: server.repo.server.timeout.seconds + optional: true + - name: ARGOCD_SERVER_X_FRAME_OPTIONS + valueFrom: + configMapKeyRef: + name: argocd-cmd-params-cm + key: server.x.frame.options + optional: true + - name: ARGOCD_SERVER_REPO_SERVER_PLAINTEXT + valueFrom: + configMapKeyRef: + name: argocd-cmd-params-cm + key: server.repo.server.plaintext + optional: true + - name: ARGOCD_SERVER_REPO_SERVER_STRICT_TLS + valueFrom: + configMapKeyRef: + name: argocd-cmd-params-cm + key: server.repo.server.strict.tls + optional: true + - name: ARGOCD_TLS_MIN_VERSION + valueFrom: + configMapKeyRef: + name: argocd-cmd-params-cm + key: server.tls.minversion + optional: true + - name: ARGOCD_TLS_MAX_VERSION + valueFrom: + configMapKeyRef: + name: argocd-cmd-params-cm + key: server.tls.maxversion + optional: true + - name: ARGOCD_TLS_CIPHERS + valueFrom: + configMapKeyRef: + name: argocd-cmd-params-cm + key: server.tls.ciphers + optional: true + - name: ARGOCD_SERVER_CONNECTION_STATUS_CACHE_EXPIRATION + valueFrom: + configMapKeyRef: + name: argocd-cmd-params-cm + key: server.connection.status.cache.expiration + optional: true + - name: ARGOCD_SERVER_OIDC_CACHE_EXPIRATION + valueFrom: + configMapKeyRef: + name: argocd-cmd-params-cm + key: server.oidc.cache.expiration + optional: true + - name: ARGOCD_SERVER_LOGIN_ATTEMPTS_EXPIRATION + valueFrom: + configMapKeyRef: + name: argocd-cmd-params-cm + key: server.login.attempts.expiration + optional: true + - name: ARGOCD_APP_STATE_CACHE_EXPIRATION + valueFrom: + configMapKeyRef: + name: argocd-cmd-params-cm + key: server.app.state.cache.expiration + optional: true + - name: REDIS_SERVER + valueFrom: + configMapKeyRef: + name: argocd-cmd-params-cm + key: redis.server + optional: true + - name: REDISDB + valueFrom: + configMapKeyRef: + name: argocd-cmd-params-cm + key: redis.db + optional: true + - name: ARGOCD_DEFAULT_CACHE_EXPIRATION + valueFrom: + configMapKeyRef: + name: argocd-cmd-params-cm + key: server.default.cache.expiration + optional: true volumeMounts: - name: ssh-known-hosts mountPath: /app/config/ssh diff --git a/manifests/crds/application-crd.yaml b/manifests/crds/application-crd.yaml index 74364ae4e6ad5..b421c2cc574f8 100644 --- a/manifests/crds/application-crd.yaml +++ b/manifests/crds/application-crd.yaml @@ -34,15 +34,20 @@ spec: description: Application is a definition of Application resource. properties: apiVersion: - description: 'APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' type: string kind: - description: 'Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' type: string metadata: type: object operation: - description: Operation contains information about a requested or running operation + description: Operation contains information about a requested or running + operation properties: info: description: Info is a list of informational items for this operation @@ -58,34 +63,42 @@ spec: type: object type: array initiatedBy: - description: InitiatedBy contains information about who initiated the operations + description: InitiatedBy contains information about who initiated + the operations properties: automated: - description: Automated is set to true if operation was initiated automatically by the application controller. + description: Automated is set to true if operation was initiated + automatically by the application controller. type: boolean username: - description: Username contains the name of a user who started operation + description: Username contains the name of a user who started + operation type: string type: object retry: description: Retry controls the strategy to apply if a sync fails properties: backoff: - description: Backoff controls how to backoff on subsequent retries of failed syncs + description: Backoff controls how to backoff on subsequent retries + of failed syncs properties: duration: - description: Duration is the amount to back off. Default unit is seconds, but could also be a duration (e.g. "2m", "1h") + description: Duration is the amount to back off. Default unit + is seconds, but could also be a duration (e.g. "2m", "1h") type: string factor: - description: Factor is a factor to multiply the base duration after each failed retry + description: Factor is a factor to multiply the base duration + after each failed retry format: int64 type: integer maxDuration: - description: MaxDuration is the maximum amount of time allowed for the backoff strategy + description: MaxDuration is the maximum amount of time allowed + for the backoff strategy type: string type: object limit: - description: Limit is the maximum number of attempts for retrying a failed sync. If set to 0, no retries will be performed. + description: Limit is the maximum number of attempts for retrying + a failed sync. If set to 0, no retries will be performed. format: int64 type: integer type: object @@ -93,18 +106,22 @@ spec: description: Sync contains parameters for the operation properties: dryRun: - description: DryRun specifies to perform a `kubectl apply --dry-run` without actually performing the sync + description: DryRun specifies to perform a `kubectl apply --dry-run` + without actually performing the sync type: boolean manifests: - description: Manifests is an optional field that overrides sync source with a local directory for development + description: Manifests is an optional field that overrides sync + source with a local directory for development items: type: string type: array prune: - description: Prune specifies to delete resources from the cluster that are no longer tracked in git + description: Prune specifies to delete resources from the cluster + that are no longer tracked in git type: boolean resources: - description: Resources describes which resources shall be part of the sync + description: Resources describes which resources shall be part + of the sync items: description: SyncOperationResource contains resources to sync. properties: @@ -122,30 +139,41 @@ spec: type: object type: array revision: - description: Revision is the revision (Git) or chart version (Helm) which to sync the application to If omitted, will use the revision specified in app spec. + description: Revision is the revision (Git) or chart version (Helm) + which to sync the application to If omitted, will use the revision + specified in app spec. type: string source: - description: Source overrides the source definition set in the application. This is typically set in a Rollback operation and is nil during a Sync operation + description: Source overrides the source definition set in the + application. This is typically set in a Rollback operation and + is nil during a Sync operation properties: chart: - description: Chart is a Helm chart name, and must be specified for applications sourced from a Helm repo. + description: Chart is a Helm chart name, and must be specified + for applications sourced from a Helm repo. type: string directory: description: Directory holds path/directory specific options properties: exclude: - description: Exclude contains a glob pattern to match paths against that should be explicitly excluded from being used during manifest generation + description: Exclude contains a glob pattern to match + paths against that should be explicitly excluded from + being used during manifest generation type: string include: - description: Include contains a glob pattern to match paths against that should be explicitly included during manifest generation + description: Include contains a glob pattern to match + paths against that should be explicitly included during + manifest generation type: string jsonnet: description: Jsonnet holds options specific to Jsonnet properties: extVars: - description: ExtVars is a list of Jsonnet External Variables + description: ExtVars is a list of Jsonnet External + Variables items: - description: JsonnetVar represents a variable to be passed to jsonnet during manifest generation + description: JsonnetVar represents a variable to + be passed to jsonnet during manifest generation properties: code: type: boolean @@ -166,7 +194,8 @@ spec: tlas: description: TLAS is a list of Jsonnet Top-level Arguments items: - description: JsonnetVar represents a variable to be passed to jsonnet during manifest generation + description: JsonnetVar represents a variable to + be passed to jsonnet during manifest generation properties: code: type: boolean @@ -181,32 +210,64 @@ spec: type: array type: object recurse: - description: Recurse specifies whether to scan a directory recursively for manifests + description: Recurse specifies whether to scan a directory + recursively for manifests type: boolean type: object helm: description: Helm holds helm specific options properties: + externalValueFiles: + description: ValuesFilesExternalValueFiles is a list of + Helm value files to use when generating a template that + come from an external git repo + items: + description: HelmExternalValue are values from other + git repositories + properties: + repoURL: + description: RepoURL is the URL of the external + git repo + type: string + targetRevision: + description: TargetRevision is the revision of the + git repo + type: string + valueFiles: + description: FileParameters are file parameters + to the helm template + items: + type: string + type: array + type: object + type: array fileParameters: - description: FileParameters are file parameters to the helm template + description: FileParameters are file parameters to the + helm template items: - description: HelmFileParameter is a file parameter that's passed to helm template during manifest generation + description: HelmFileParameter is a file parameter that's + passed to helm template during manifest generation properties: name: description: Name is the name of the Helm parameter type: string path: - description: Path is the path to the file containing the values for the Helm parameter + description: Path is the path to the file containing + the values for the Helm parameter type: string type: object type: array parameters: - description: Parameters is a list of Helm parameters which are passed to the helm template command upon manifest generation + description: Parameters is a list of Helm parameters which + are passed to the helm template command upon manifest + generation items: - description: HelmParameter is a parameter that's passed to helm template during manifest generation + description: HelmParameter is a parameter that's passed + to helm template during manifest generation properties: forceString: - description: ForceString determines whether to tell Helm to interpret booleans and numbers as strings + description: ForceString determines whether to tell + Helm to interpret booleans and numbers as strings type: boolean name: description: Name is the name of the Helm parameter @@ -217,30 +278,37 @@ spec: type: object type: array releaseName: - description: ReleaseName is the Helm release name to use. If omitted it will use the application name + description: ReleaseName is the Helm release name to use. + If omitted it will use the application name type: string valueFiles: - description: ValuesFiles is a list of Helm value files to use when generating a template + description: ValuesFiles is a list of Helm value files + to use when generating a template items: type: string type: array values: - description: Values specifies Helm values to be passed to helm template, typically defined as a block + description: Values specifies Helm values to be passed + to helm template, typically defined as a block type: string version: - description: Version is the Helm version to use for templating (either "2" or "3") + description: Version is the Helm version to use for templating + (either "2" or "3") type: string type: object ksonnet: description: Ksonnet holds ksonnet specific options properties: environment: - description: Environment is a ksonnet application environment name + description: Environment is a ksonnet application environment + name type: string parameters: - description: Parameters are a list of ksonnet component parameter override values + description: Parameters are a list of ksonnet component + parameter override values items: - description: KsonnetParameter is a ksonnet component parameter + description: KsonnetParameter is a ksonnet component + parameter properties: component: type: string @@ -260,42 +328,62 @@ spec: commonAnnotations: additionalProperties: type: string - description: CommonAnnotations is a list of additional annotations to add to rendered manifests + description: CommonAnnotations is a list of additional + annotations to add to rendered manifests type: object commonLabels: additionalProperties: type: string - description: CommonLabels is a list of additional labels to add to rendered manifests + description: CommonLabels is a list of additional labels + to add to rendered manifests type: object + forceCommonAnnotations: + description: ForceCommonAnnotations specifies whether + to force applying common annotations to resources for + Kustomize apps + type: boolean + forceCommonLabels: + description: ForceCommonLabels specifies whether to force + applying common labels to resources for Kustomize apps + type: boolean images: - description: Images is a list of Kustomize image override specifications + description: Images is a list of Kustomize image override + specifications items: - description: KustomizeImage represents a Kustomize image definition in the format [old_image_name=]: + description: KustomizeImage represents a Kustomize image + definition in the format [old_image_name=]: type: string type: array namePrefix: - description: NamePrefix is a prefix appended to resources for Kustomize apps + description: NamePrefix is a prefix appended to resources + for Kustomize apps type: string nameSuffix: - description: NameSuffix is a suffix appended to resources for Kustomize apps + description: NameSuffix is a suffix appended to resources + for Kustomize apps type: string version: - description: Version controls which version of Kustomize to use for rendering manifests + description: Version controls which version of Kustomize + to use for rendering manifests type: string type: object path: - description: Path is a directory path within the Git repository, and is only valid for applications sourced from Git. + description: Path is a directory path within the Git repository, + and is only valid for applications sourced from Git. type: string plugin: - description: ConfigManagementPlugin holds config management plugin specific options + description: ConfigManagementPlugin holds config management + plugin specific options properties: env: description: Env is a list of environment variable entries items: - description: EnvEntry represents an entry in the application's environment + description: EnvEntry represents an entry in the application's + environment properties: name: - description: Name is the name of the variable, usually expressed in uppercase + description: Name is the name of the variable, usually + expressed in uppercase type: string value: description: Value is the value of the variable @@ -309,10 +397,14 @@ spec: type: string type: object repoURL: - description: RepoURL is the URL to the repository (Git or Helm) that contains the application manifests + description: RepoURL is the URL to the repository (Git or + Helm) that contains the application manifests type: string targetRevision: - description: TargetRevision defines the revision of the source to sync the application to. In case of Git, this can be commit, tag, or branch. If omitted, will equal to HEAD. In case of Helm, this is a semver tag for the Chart's version. + description: TargetRevision defines the revision of the source + to sync the application to. In case of Git, this can be + commit, tag, or branch. If omitted, will equal to HEAD. + In case of Helm, this is a semver tag for the Chart's version. type: string required: - repoURL @@ -326,45 +418,67 @@ spec: description: SyncStrategy describes how to perform the sync properties: apply: - description: Apply will perform a `kubectl apply` to perform the sync. + description: Apply will perform a `kubectl apply` to perform + the sync. properties: force: - description: Force indicates whether or not to supply the --force flag to `kubectl apply`. The --force flag deletes and re-create the resource, when PATCH encounters conflict and has retried for 5 times. + description: Force indicates whether or not to supply + the --force flag to `kubectl apply`. The --force flag + deletes and re-create the resource, when PATCH encounters + conflict and has retried for 5 times. type: boolean type: object hook: - description: Hook will submit any referenced resources to perform the sync. This is the default strategy + description: Hook will submit any referenced resources to + perform the sync. This is the default strategy properties: force: - description: Force indicates whether or not to supply the --force flag to `kubectl apply`. The --force flag deletes and re-create the resource, when PATCH encounters conflict and has retried for 5 times. + description: Force indicates whether or not to supply + the --force flag to `kubectl apply`. The --force flag + deletes and re-create the resource, when PATCH encounters + conflict and has retried for 5 times. type: boolean type: object type: object type: object type: object spec: - description: ApplicationSpec represents desired application state. Contains link to repository with application definition and additional parameters link definition revision. + description: ApplicationSpec represents desired application state. Contains + link to repository with application definition and additional parameters + link definition revision. properties: destination: - description: Destination is a reference to the target Kubernetes server and namespace + description: Destination is a reference to the target Kubernetes server + and namespace properties: name: - description: Name is an alternate way of specifying the target cluster by its symbolic name + description: Name is an alternate way of specifying the target + cluster by its symbolic name type: string namespace: - description: Namespace specifies the target namespace for the application's resources. The namespace will only be set for namespace-scoped resources that have not set a value for .metadata.namespace + description: Namespace specifies the target namespace for the + application's resources. The namespace will only be set for + namespace-scoped resources that have not set a value for .metadata.namespace type: string server: - description: Server specifies the URL of the target cluster and must be set to the Kubernetes control plane API + description: Server specifies the URL of the target cluster and + must be set to the Kubernetes control plane API type: string type: object ignoreDifferences: - description: IgnoreDifferences is a list of resources and their fields which should be ignored during comparison + description: IgnoreDifferences is a list of resources and their fields + which should be ignored during comparison items: - description: ResourceIgnoreDifferences contains resource filter and list of json paths which should be ignored during comparison with live state. + description: ResourceIgnoreDifferences contains resource filter + and list of json paths which should be ignored during comparison + with live state. properties: group: type: string + jqPathExpressions: + items: + type: string + type: array jsonPointers: items: type: string @@ -376,12 +490,12 @@ spec: namespace: type: string required: - - jsonPointers - kind type: object type: array info: - description: Info contains a list of information (URLs, email addresses, and plain text) that relates to the application + description: Info contains a list of information (URLs, email addresses, + and plain text) that relates to the application items: properties: name: @@ -394,26 +508,40 @@ spec: type: object type: array project: - description: Project is a reference to the project this application belongs to. The empty string means that application belongs to the 'default' project. + description: Project is a reference to the project this application + belongs to. The empty string means that application belongs to the + 'default' project. type: string revisionHistoryLimit: - description: RevisionHistoryLimit limits the number of items kept in the application's revision history, which is used for informational purposes as well as for rollbacks to previous versions. This should only be changed in exceptional circumstances. Setting to zero will store no history. This will reduce storage used. Increasing will increase the space used to store the history, so we do not recommend increasing it. Default is 10. + description: RevisionHistoryLimit limits the number of items kept + in the application's revision history, which is used for informational + purposes as well as for rollbacks to previous versions. This should + only be changed in exceptional circumstances. Setting to zero will + store no history. This will reduce storage used. Increasing will + increase the space used to store the history, so we do not recommend + increasing it. Default is 10. format: int64 type: integer source: - description: Source is a reference to the location of the application's manifests or chart + description: Source is a reference to the location of the application's + manifests or chart properties: chart: - description: Chart is a Helm chart name, and must be specified for applications sourced from a Helm repo. + description: Chart is a Helm chart name, and must be specified + for applications sourced from a Helm repo. type: string directory: description: Directory holds path/directory specific options properties: exclude: - description: Exclude contains a glob pattern to match paths against that should be explicitly excluded from being used during manifest generation + description: Exclude contains a glob pattern to match paths + against that should be explicitly excluded from being used + during manifest generation type: string include: - description: Include contains a glob pattern to match paths against that should be explicitly included during manifest generation + description: Include contains a glob pattern to match paths + against that should be explicitly included during manifest + generation type: string jsonnet: description: Jsonnet holds options specific to Jsonnet @@ -421,7 +549,8 @@ spec: extVars: description: ExtVars is a list of Jsonnet External Variables items: - description: JsonnetVar represents a variable to be passed to jsonnet during manifest generation + description: JsonnetVar represents a variable to be + passed to jsonnet during manifest generation properties: code: type: boolean @@ -442,7 +571,8 @@ spec: tlas: description: TLAS is a list of Jsonnet Top-level Arguments items: - description: JsonnetVar represents a variable to be passed to jsonnet during manifest generation + description: JsonnetVar represents a variable to be + passed to jsonnet during manifest generation properties: code: type: boolean @@ -457,32 +587,63 @@ spec: type: array type: object recurse: - description: Recurse specifies whether to scan a directory recursively for manifests + description: Recurse specifies whether to scan a directory + recursively for manifests type: boolean type: object helm: description: Helm holds helm specific options properties: + externalValueFiles: + description: ValuesFilesExternalValueFiles is a list of Helm + value files to use when generating a template that come + from an external git repo + items: + description: HelmExternalValue are values from other git + repositories + properties: + repoURL: + description: RepoURL is the URL of the external git + repo + type: string + targetRevision: + description: TargetRevision is the revision of the git + repo + type: string + valueFiles: + description: FileParameters are file parameters to the + helm template + items: + type: string + type: array + type: object + type: array fileParameters: - description: FileParameters are file parameters to the helm template + description: FileParameters are file parameters to the helm + template items: - description: HelmFileParameter is a file parameter that's passed to helm template during manifest generation + description: HelmFileParameter is a file parameter that's + passed to helm template during manifest generation properties: name: description: Name is the name of the Helm parameter type: string path: - description: Path is the path to the file containing the values for the Helm parameter + description: Path is the path to the file containing + the values for the Helm parameter type: string type: object type: array parameters: - description: Parameters is a list of Helm parameters which are passed to the helm template command upon manifest generation + description: Parameters is a list of Helm parameters which + are passed to the helm template command upon manifest generation items: - description: HelmParameter is a parameter that's passed to helm template during manifest generation + description: HelmParameter is a parameter that's passed + to helm template during manifest generation properties: forceString: - description: ForceString determines whether to tell Helm to interpret booleans and numbers as strings + description: ForceString determines whether to tell + Helm to interpret booleans and numbers as strings type: boolean name: description: Name is the name of the Helm parameter @@ -493,28 +654,34 @@ spec: type: object type: array releaseName: - description: ReleaseName is the Helm release name to use. If omitted it will use the application name + description: ReleaseName is the Helm release name to use. + If omitted it will use the application name type: string valueFiles: - description: ValuesFiles is a list of Helm value files to use when generating a template + description: ValuesFiles is a list of Helm value files to + use when generating a template items: type: string type: array values: - description: Values specifies Helm values to be passed to helm template, typically defined as a block + description: Values specifies Helm values to be passed to + helm template, typically defined as a block type: string version: - description: Version is the Helm version to use for templating (either "2" or "3") + description: Version is the Helm version to use for templating + (either "2" or "3") type: string type: object ksonnet: description: Ksonnet holds ksonnet specific options properties: environment: - description: Environment is a ksonnet application environment name + description: Environment is a ksonnet application environment + name type: string parameters: - description: Parameters are a list of ksonnet component parameter override values + description: Parameters are a list of ksonnet component parameter + override values items: description: KsonnetParameter is a ksonnet component parameter properties: @@ -536,42 +703,61 @@ spec: commonAnnotations: additionalProperties: type: string - description: CommonAnnotations is a list of additional annotations to add to rendered manifests + description: CommonAnnotations is a list of additional annotations + to add to rendered manifests type: object commonLabels: additionalProperties: type: string - description: CommonLabels is a list of additional labels to add to rendered manifests + description: CommonLabels is a list of additional labels to + add to rendered manifests type: object + forceCommonAnnotations: + description: ForceCommonAnnotations specifies whether to force + applying common annotations to resources for Kustomize apps + type: boolean + forceCommonLabels: + description: ForceCommonLabels specifies whether to force + applying common labels to resources for Kustomize apps + type: boolean images: - description: Images is a list of Kustomize image override specifications + description: Images is a list of Kustomize image override + specifications items: - description: KustomizeImage represents a Kustomize image definition in the format [old_image_name=]: + description: KustomizeImage represents a Kustomize image + definition in the format [old_image_name=]: type: string type: array namePrefix: - description: NamePrefix is a prefix appended to resources for Kustomize apps + description: NamePrefix is a prefix appended to resources + for Kustomize apps type: string nameSuffix: - description: NameSuffix is a suffix appended to resources for Kustomize apps + description: NameSuffix is a suffix appended to resources + for Kustomize apps type: string version: - description: Version controls which version of Kustomize to use for rendering manifests + description: Version controls which version of Kustomize to + use for rendering manifests type: string type: object path: - description: Path is a directory path within the Git repository, and is only valid for applications sourced from Git. + description: Path is a directory path within the Git repository, + and is only valid for applications sourced from Git. type: string plugin: - description: ConfigManagementPlugin holds config management plugin specific options + description: ConfigManagementPlugin holds config management plugin + specific options properties: env: description: Env is a list of environment variable entries items: - description: EnvEntry represents an entry in the application's environment + description: EnvEntry represents an entry in the application's + environment properties: name: - description: Name is the name of the variable, usually expressed in uppercase + description: Name is the name of the variable, usually + expressed in uppercase type: string value: description: Value is the value of the variable @@ -585,10 +771,14 @@ spec: type: string type: object repoURL: - description: RepoURL is the URL to the repository (Git or Helm) that contains the application manifests + description: RepoURL is the URL to the repository (Git or Helm) + that contains the application manifests type: string targetRevision: - description: TargetRevision defines the revision of the source to sync the application to. In case of Git, this can be commit, tag, or branch. If omitted, will equal to HEAD. In case of Helm, this is a semver tag for the Chart's version. + description: TargetRevision defines the revision of the source + to sync the application to. In case of Git, this can be commit, + tag, or branch. If omitted, will equal to HEAD. In case of Helm, + this is a semver tag for the Chart's version. type: string required: - repoURL @@ -597,37 +787,49 @@ spec: description: SyncPolicy controls when and how a sync will be performed properties: automated: - description: Automated will keep an application synced to the target revision + description: Automated will keep an application synced to the + target revision properties: allowEmpty: - description: 'AllowEmpty allows apps have zero live resources (default: false)' + description: 'AllowEmpty allows apps have zero live resources + (default: false)' type: boolean prune: - description: 'Prune specifies whether to delete resources from the cluster that are not found in the sources anymore as part of automated sync (default: false)' + description: 'Prune specifies whether to delete resources + from the cluster that are not found in the sources anymore + as part of automated sync (default: false)' type: boolean selfHeal: - description: 'SelfHeal specifes whether to revert resources back to their desired state upon modification in the cluster (default: false)' + description: 'SelfHeal specifes whether to revert resources + back to their desired state upon modification in the cluster + (default: false)' type: boolean type: object retry: description: Retry controls failed sync retry behavior properties: backoff: - description: Backoff controls how to backoff on subsequent retries of failed syncs + description: Backoff controls how to backoff on subsequent + retries of failed syncs properties: duration: - description: Duration is the amount to back off. Default unit is seconds, but could also be a duration (e.g. "2m", "1h") + description: Duration is the amount to back off. Default + unit is seconds, but could also be a duration (e.g. + "2m", "1h") type: string factor: - description: Factor is a factor to multiply the base duration after each failed retry + description: Factor is a factor to multiply the base duration + after each failed retry format: int64 type: integer maxDuration: - description: MaxDuration is the maximum amount of time allowed for the backoff strategy + description: MaxDuration is the maximum amount of time + allowed for the backoff strategy type: string type: object limit: - description: Limit is the maximum number of attempts for retrying a failed sync. If set to 0, no retries will be performed. + description: Limit is the maximum number of attempts for retrying + a failed sync. If set to 0, no retries will be performed. format: int64 type: integer type: object @@ -646,16 +848,20 @@ spec: description: ApplicationStatus contains status information for the application properties: conditions: - description: Conditions is a list of currently observed application conditions + description: Conditions is a list of currently observed application + conditions items: - description: ApplicationCondition contains details about an application condition, which is usally an error or warning + description: ApplicationCondition contains details about an application + condition, which is usally an error or warning properties: lastTransitionTime: - description: LastTransitionTime is the time the condition was last observed + description: LastTransitionTime is the time the condition was + last observed format: date-time type: string message: - description: Message contains human-readable message indicating details about condition + description: Message contains human-readable message indicating + details about condition type: string type: description: Type is an application condition type @@ -666,22 +872,28 @@ spec: type: object type: array health: - description: Health contains information about the application's current health status + description: Health contains information about the application's current + health status properties: message: - description: Message is a human-readable informational message describing the health status + description: Message is a human-readable informational message + describing the health status type: string status: - description: Status holds the status code of the application or resource + description: Status holds the status code of the application or + resource type: string type: object history: - description: History contains information about the application's sync history + description: History contains information about the application's + sync history items: - description: RevisionHistory contains history information about a previous sync + description: RevisionHistory contains history information about + a previous sync properties: deployStartedAt: - description: DeployStartedAt holds the time the sync operation started + description: DeployStartedAt holds the time the sync operation + started format: date-time type: string deployedAt: @@ -693,30 +905,39 @@ spec: format: int64 type: integer revision: - description: Revision holds the revision the sync was performed against + description: Revision holds the revision the sync was performed + against type: string source: - description: Source is a reference to the application source used for the sync operation + description: Source is a reference to the application source + used for the sync operation properties: chart: - description: Chart is a Helm chart name, and must be specified for applications sourced from a Helm repo. + description: Chart is a Helm chart name, and must be specified + for applications sourced from a Helm repo. type: string directory: description: Directory holds path/directory specific options properties: exclude: - description: Exclude contains a glob pattern to match paths against that should be explicitly excluded from being used during manifest generation + description: Exclude contains a glob pattern to match + paths against that should be explicitly excluded from + being used during manifest generation type: string include: - description: Include contains a glob pattern to match paths against that should be explicitly included during manifest generation + description: Include contains a glob pattern to match + paths against that should be explicitly included during + manifest generation type: string jsonnet: description: Jsonnet holds options specific to Jsonnet properties: extVars: - description: ExtVars is a list of Jsonnet External Variables + description: ExtVars is a list of Jsonnet External + Variables items: - description: JsonnetVar represents a variable to be passed to jsonnet during manifest generation + description: JsonnetVar represents a variable + to be passed to jsonnet during manifest generation properties: code: type: boolean @@ -735,9 +956,11 @@ spec: type: string type: array tlas: - description: TLAS is a list of Jsonnet Top-level Arguments + description: TLAS is a list of Jsonnet Top-level + Arguments items: - description: JsonnetVar represents a variable to be passed to jsonnet during manifest generation + description: JsonnetVar represents a variable + to be passed to jsonnet during manifest generation properties: code: type: boolean @@ -752,32 +975,65 @@ spec: type: array type: object recurse: - description: Recurse specifies whether to scan a directory recursively for manifests + description: Recurse specifies whether to scan a directory + recursively for manifests type: boolean type: object helm: description: Helm holds helm specific options properties: + externalValueFiles: + description: ValuesFilesExternalValueFiles is a list + of Helm value files to use when generating a template + that come from an external git repo + items: + description: HelmExternalValue are values from other + git repositories + properties: + repoURL: + description: RepoURL is the URL of the external + git repo + type: string + targetRevision: + description: TargetRevision is the revision of + the git repo + type: string + valueFiles: + description: FileParameters are file parameters + to the helm template + items: + type: string + type: array + type: object + type: array fileParameters: - description: FileParameters are file parameters to the helm template + description: FileParameters are file parameters to the + helm template items: - description: HelmFileParameter is a file parameter that's passed to helm template during manifest generation + description: HelmFileParameter is a file parameter + that's passed to helm template during manifest generation properties: name: description: Name is the name of the Helm parameter type: string path: - description: Path is the path to the file containing the values for the Helm parameter + description: Path is the path to the file containing + the values for the Helm parameter type: string type: object type: array parameters: - description: Parameters is a list of Helm parameters which are passed to the helm template command upon manifest generation + description: Parameters is a list of Helm parameters + which are passed to the helm template command upon + manifest generation items: - description: HelmParameter is a parameter that's passed to helm template during manifest generation + description: HelmParameter is a parameter that's passed + to helm template during manifest generation properties: forceString: - description: ForceString determines whether to tell Helm to interpret booleans and numbers as strings + description: ForceString determines whether to + tell Helm to interpret booleans and numbers + as strings type: boolean name: description: Name is the name of the Helm parameter @@ -788,30 +1044,37 @@ spec: type: object type: array releaseName: - description: ReleaseName is the Helm release name to use. If omitted it will use the application name + description: ReleaseName is the Helm release name to + use. If omitted it will use the application name type: string valueFiles: - description: ValuesFiles is a list of Helm value files to use when generating a template + description: ValuesFiles is a list of Helm value files + to use when generating a template items: type: string type: array values: - description: Values specifies Helm values to be passed to helm template, typically defined as a block + description: Values specifies Helm values to be passed + to helm template, typically defined as a block type: string version: - description: Version is the Helm version to use for templating (either "2" or "3") + description: Version is the Helm version to use for + templating (either "2" or "3") type: string type: object ksonnet: description: Ksonnet holds ksonnet specific options properties: environment: - description: Environment is a ksonnet application environment name + description: Environment is a ksonnet application environment + name type: string parameters: - description: Parameters are a list of ksonnet component parameter override values + description: Parameters are a list of ksonnet component + parameter override values items: - description: KsonnetParameter is a ksonnet component parameter + description: KsonnetParameter is a ksonnet component + parameter properties: component: type: string @@ -831,42 +1094,63 @@ spec: commonAnnotations: additionalProperties: type: string - description: CommonAnnotations is a list of additional annotations to add to rendered manifests + description: CommonAnnotations is a list of additional + annotations to add to rendered manifests type: object commonLabels: additionalProperties: type: string - description: CommonLabels is a list of additional labels to add to rendered manifests + description: CommonLabels is a list of additional labels + to add to rendered manifests type: object + forceCommonAnnotations: + description: ForceCommonAnnotations specifies whether + to force applying common annotations to resources + for Kustomize apps + type: boolean + forceCommonLabels: + description: ForceCommonLabels specifies whether to + force applying common labels to resources for Kustomize + apps + type: boolean images: - description: Images is a list of Kustomize image override specifications + description: Images is a list of Kustomize image override + specifications items: - description: KustomizeImage represents a Kustomize image definition in the format [old_image_name=]: + description: KustomizeImage represents a Kustomize + image definition in the format [old_image_name=]: type: string type: array namePrefix: - description: NamePrefix is a prefix appended to resources for Kustomize apps + description: NamePrefix is a prefix appended to resources + for Kustomize apps type: string nameSuffix: - description: NameSuffix is a suffix appended to resources for Kustomize apps + description: NameSuffix is a suffix appended to resources + for Kustomize apps type: string version: - description: Version controls which version of Kustomize to use for rendering manifests + description: Version controls which version of Kustomize + to use for rendering manifests type: string type: object path: - description: Path is a directory path within the Git repository, and is only valid for applications sourced from Git. + description: Path is a directory path within the Git repository, + and is only valid for applications sourced from Git. type: string plugin: - description: ConfigManagementPlugin holds config management plugin specific options + description: ConfigManagementPlugin holds config management + plugin specific options properties: env: description: Env is a list of environment variable entries items: - description: EnvEntry represents an entry in the application's environment + description: EnvEntry represents an entry in the application's + environment properties: name: - description: Name is the name of the variable, usually expressed in uppercase + description: Name is the name of the variable, + usually expressed in uppercase type: string value: description: Value is the value of the variable @@ -880,10 +1164,15 @@ spec: type: string type: object repoURL: - description: RepoURL is the URL to the repository (Git or Helm) that contains the application manifests + description: RepoURL is the URL to the repository (Git or + Helm) that contains the application manifests type: string targetRevision: - description: TargetRevision defines the revision of the source to sync the application to. In case of Git, this can be commit, tag, or branch. If omitted, will equal to HEAD. In case of Helm, this is a semver tag for the Chart's version. + description: TargetRevision defines the revision of the + source to sync the application to. In case of Git, this + can be commit, tag, or branch. If omitted, will equal + to HEAD. In case of Helm, this is a semver tag for the + Chart's version. type: string required: - repoURL @@ -895,24 +1184,29 @@ spec: type: object type: array observedAt: - description: 'ObservedAt indicates when the application state was updated without querying latest git state Deprecated: controller no longer updates ObservedAt field' + description: 'ObservedAt indicates when the application state was + updated without querying latest git state Deprecated: controller + no longer updates ObservedAt field' format: date-time type: string operationState: - description: OperationState contains information about any ongoing operations, such as a sync + description: OperationState contains information about any ongoing + operations, such as a sync properties: finishedAt: description: FinishedAt contains time of operation completion format: date-time type: string message: - description: Message holds any pertinent messages when attempting to perform operation (typically errors). + description: Message holds any pertinent messages when attempting + to perform operation (typically errors). type: string operation: description: Operation is the original requested operation properties: info: - description: Info is a list of informational items for this operation + description: Info is a list of informational items for this + operation items: properties: name: @@ -925,34 +1219,45 @@ spec: type: object type: array initiatedBy: - description: InitiatedBy contains information about who initiated the operations + description: InitiatedBy contains information about who initiated + the operations properties: automated: - description: Automated is set to true if operation was initiated automatically by the application controller. + description: Automated is set to true if operation was + initiated automatically by the application controller. type: boolean username: - description: Username contains the name of a user who started operation + description: Username contains the name of a user who + started operation type: string type: object retry: - description: Retry controls the strategy to apply if a sync fails + description: Retry controls the strategy to apply if a sync + fails properties: backoff: - description: Backoff controls how to backoff on subsequent retries of failed syncs + description: Backoff controls how to backoff on subsequent + retries of failed syncs properties: duration: - description: Duration is the amount to back off. Default unit is seconds, but could also be a duration (e.g. "2m", "1h") + description: Duration is the amount to back off. Default + unit is seconds, but could also be a duration (e.g. + "2m", "1h") type: string factor: - description: Factor is a factor to multiply the base duration after each failed retry + description: Factor is a factor to multiply the base + duration after each failed retry format: int64 type: integer maxDuration: - description: MaxDuration is the maximum amount of time allowed for the backoff strategy + description: MaxDuration is the maximum amount of + time allowed for the backoff strategy type: string type: object limit: - description: Limit is the maximum number of attempts for retrying a failed sync. If set to 0, no retries will be performed. + description: Limit is the maximum number of attempts for + retrying a failed sync. If set to 0, no retries will + be performed. format: int64 type: integer type: object @@ -960,20 +1265,25 @@ spec: description: Sync contains parameters for the operation properties: dryRun: - description: DryRun specifies to perform a `kubectl apply --dry-run` without actually performing the sync + description: DryRun specifies to perform a `kubectl apply + --dry-run` without actually performing the sync type: boolean manifests: - description: Manifests is an optional field that overrides sync source with a local directory for development + description: Manifests is an optional field that overrides + sync source with a local directory for development items: type: string type: array prune: - description: Prune specifies to delete resources from the cluster that are no longer tracked in git + description: Prune specifies to delete resources from + the cluster that are no longer tracked in git type: boolean resources: - description: Resources describes which resources shall be part of the sync + description: Resources describes which resources shall + be part of the sync items: - description: SyncOperationResource contains resources to sync. + description: SyncOperationResource contains resources + to sync. properties: group: type: string @@ -989,30 +1299,45 @@ spec: type: object type: array revision: - description: Revision is the revision (Git) or chart version (Helm) which to sync the application to If omitted, will use the revision specified in app spec. + description: Revision is the revision (Git) or chart version + (Helm) which to sync the application to If omitted, + will use the revision specified in app spec. type: string source: - description: Source overrides the source definition set in the application. This is typically set in a Rollback operation and is nil during a Sync operation + description: Source overrides the source definition set + in the application. This is typically set in a Rollback + operation and is nil during a Sync operation properties: chart: - description: Chart is a Helm chart name, and must be specified for applications sourced from a Helm repo. + description: Chart is a Helm chart name, and must + be specified for applications sourced from a Helm + repo. type: string directory: - description: Directory holds path/directory specific options + description: Directory holds path/directory specific + options properties: exclude: - description: Exclude contains a glob pattern to match paths against that should be explicitly excluded from being used during manifest generation + description: Exclude contains a glob pattern to + match paths against that should be explicitly + excluded from being used during manifest generation type: string include: - description: Include contains a glob pattern to match paths against that should be explicitly included during manifest generation + description: Include contains a glob pattern to + match paths against that should be explicitly + included during manifest generation type: string jsonnet: - description: Jsonnet holds options specific to Jsonnet + description: Jsonnet holds options specific to + Jsonnet properties: extVars: - description: ExtVars is a list of Jsonnet External Variables + description: ExtVars is a list of Jsonnet + External Variables items: - description: JsonnetVar represents a variable to be passed to jsonnet during manifest generation + description: JsonnetVar represents a variable + to be passed to jsonnet during manifest + generation properties: code: type: boolean @@ -1031,9 +1356,12 @@ spec: type: string type: array tlas: - description: TLAS is a list of Jsonnet Top-level Arguments + description: TLAS is a list of Jsonnet Top-level + Arguments items: - description: JsonnetVar represents a variable to be passed to jsonnet during manifest generation + description: JsonnetVar represents a variable + to be passed to jsonnet during manifest + generation properties: code: type: boolean @@ -1048,66 +1376,112 @@ spec: type: array type: object recurse: - description: Recurse specifies whether to scan a directory recursively for manifests + description: Recurse specifies whether to scan + a directory recursively for manifests type: boolean type: object helm: description: Helm holds helm specific options properties: + externalValueFiles: + description: ValuesFilesExternalValueFiles is + a list of Helm value files to use when generating + a template that come from an external git repo + items: + description: HelmExternalValue are values from + other git repositories + properties: + repoURL: + description: RepoURL is the URL of the external + git repo + type: string + targetRevision: + description: TargetRevision is the revision + of the git repo + type: string + valueFiles: + description: FileParameters are file parameters + to the helm template + items: + type: string + type: array + type: object + type: array fileParameters: - description: FileParameters are file parameters to the helm template + description: FileParameters are file parameters + to the helm template items: - description: HelmFileParameter is a file parameter that's passed to helm template during manifest generation + description: HelmFileParameter is a file parameter + that's passed to helm template during manifest + generation properties: name: - description: Name is the name of the Helm parameter + description: Name is the name of the Helm + parameter type: string path: - description: Path is the path to the file containing the values for the Helm parameter + description: Path is the path to the file + containing the values for the Helm parameter type: string type: object type: array parameters: - description: Parameters is a list of Helm parameters which are passed to the helm template command upon manifest generation + description: Parameters is a list of Helm parameters + which are passed to the helm template command + upon manifest generation items: - description: HelmParameter is a parameter that's passed to helm template during manifest generation + description: HelmParameter is a parameter that's + passed to helm template during manifest generation properties: forceString: - description: ForceString determines whether to tell Helm to interpret booleans and numbers as strings + description: ForceString determines whether + to tell Helm to interpret booleans and + numbers as strings type: boolean name: - description: Name is the name of the Helm parameter + description: Name is the name of the Helm + parameter type: string value: - description: Value is the value for the Helm parameter + description: Value is the value for the + Helm parameter type: string type: object type: array releaseName: - description: ReleaseName is the Helm release name to use. If omitted it will use the application name + description: ReleaseName is the Helm release name + to use. If omitted it will use the application + name type: string valueFiles: - description: ValuesFiles is a list of Helm value files to use when generating a template + description: ValuesFiles is a list of Helm value + files to use when generating a template items: type: string type: array values: - description: Values specifies Helm values to be passed to helm template, typically defined as a block + description: Values specifies Helm values to be + passed to helm template, typically defined as + a block type: string version: - description: Version is the Helm version to use for templating (either "2" or "3") + description: Version is the Helm version to use + for templating (either "2" or "3") type: string type: object ksonnet: description: Ksonnet holds ksonnet specific options properties: environment: - description: Environment is a ksonnet application environment name + description: Environment is a ksonnet application + environment name type: string parameters: - description: Parameters are a list of ksonnet component parameter override values + description: Parameters are a list of ksonnet + component parameter override values items: - description: KsonnetParameter is a ksonnet component parameter + description: KsonnetParameter is a ksonnet component + parameter properties: component: type: string @@ -1127,42 +1501,65 @@ spec: commonAnnotations: additionalProperties: type: string - description: CommonAnnotations is a list of additional annotations to add to rendered manifests + description: CommonAnnotations is a list of additional + annotations to add to rendered manifests type: object commonLabels: additionalProperties: type: string - description: CommonLabels is a list of additional labels to add to rendered manifests + description: CommonLabels is a list of additional + labels to add to rendered manifests type: object + forceCommonAnnotations: + description: ForceCommonAnnotations specifies + whether to force applying common annotations + to resources for Kustomize apps + type: boolean + forceCommonLabels: + description: ForceCommonLabels specifies whether + to force applying common labels to resources + for Kustomize apps + type: boolean images: - description: Images is a list of Kustomize image override specifications + description: Images is a list of Kustomize image + override specifications items: - description: KustomizeImage represents a Kustomize image definition in the format [old_image_name=]: + description: KustomizeImage represents a Kustomize + image definition in the format [old_image_name=]: type: string type: array namePrefix: - description: NamePrefix is a prefix appended to resources for Kustomize apps + description: NamePrefix is a prefix appended to + resources for Kustomize apps type: string nameSuffix: - description: NameSuffix is a suffix appended to resources for Kustomize apps + description: NameSuffix is a suffix appended to + resources for Kustomize apps type: string version: - description: Version controls which version of Kustomize to use for rendering manifests + description: Version controls which version of + Kustomize to use for rendering manifests type: string type: object path: - description: Path is a directory path within the Git repository, and is only valid for applications sourced from Git. + description: Path is a directory path within the Git + repository, and is only valid for applications sourced + from Git. type: string plugin: - description: ConfigManagementPlugin holds config management plugin specific options + description: ConfigManagementPlugin holds config management + plugin specific options properties: env: - description: Env is a list of environment variable entries + description: Env is a list of environment variable + entries items: - description: EnvEntry represents an entry in the application's environment + description: EnvEntry represents an entry in + the application's environment properties: name: - description: Name is the name of the variable, usually expressed in uppercase + description: Name is the name of the variable, + usually expressed in uppercase type: string value: description: Value is the value of the variable @@ -1176,34 +1573,51 @@ spec: type: string type: object repoURL: - description: RepoURL is the URL to the repository (Git or Helm) that contains the application manifests + description: RepoURL is the URL to the repository + (Git or Helm) that contains the application manifests type: string targetRevision: - description: TargetRevision defines the revision of the source to sync the application to. In case of Git, this can be commit, tag, or branch. If omitted, will equal to HEAD. In case of Helm, this is a semver tag for the Chart's version. + description: TargetRevision defines the revision of + the source to sync the application to. In case of + Git, this can be commit, tag, or branch. If omitted, + will equal to HEAD. In case of Helm, this is a semver + tag for the Chart's version. type: string required: - repoURL type: object syncOptions: - description: SyncOptions provide per-sync sync-options, e.g. Validate=false + description: SyncOptions provide per-sync sync-options, + e.g. Validate=false items: type: string type: array syncStrategy: - description: SyncStrategy describes how to perform the sync + description: SyncStrategy describes how to perform the + sync properties: apply: - description: Apply will perform a `kubectl apply` to perform the sync. + description: Apply will perform a `kubectl apply` + to perform the sync. properties: force: - description: Force indicates whether or not to supply the --force flag to `kubectl apply`. The --force flag deletes and re-create the resource, when PATCH encounters conflict and has retried for 5 times. + description: Force indicates whether or not to + supply the --force flag to `kubectl apply`. + The --force flag deletes and re-create the resource, + when PATCH encounters conflict and has retried + for 5 times. type: boolean type: object hook: - description: Hook will submit any referenced resources to perform the sync. This is the default strategy + description: Hook will submit any referenced resources + to perform the sync. This is the default strategy properties: force: - description: Force indicates whether or not to supply the --force flag to `kubectl apply`. The --force flag deletes and re-create the resource, when PATCH encounters conflict and has retried for 5 times. + description: Force indicates whether or not to + supply the --force flag to `kubectl apply`. + The --force flag deletes and re-create the resource, + when PATCH encounters conflict and has retried + for 5 times. type: boolean type: object type: object @@ -1224,39 +1638,50 @@ spec: description: SyncResult is the result of a Sync operation properties: resources: - description: Resources contains a list of sync result items for each individual resource in a sync operation + description: Resources contains a list of sync result items + for each individual resource in a sync operation items: - description: ResourceResult holds the operation result details of a specific resource + description: ResourceResult holds the operation result details + of a specific resource properties: group: description: Group specifies the API group of the resource type: string hookPhase: - description: HookPhase contains the state of any operation associated with this resource OR hook This can also contain values for non-hook resources. + description: HookPhase contains the state of any operation + associated with this resource OR hook This can also + contain values for non-hook resources. type: string hookType: - description: HookType specifies the type of the hook. Empty for non-hook resources + description: HookType specifies the type of the hook. + Empty for non-hook resources type: string kind: description: Kind specifies the API kind of the resource type: string message: - description: Message contains an informational or error message for the last sync OR operation + description: Message contains an informational or error + message for the last sync OR operation type: string name: description: Name specifies the name of the resource type: string namespace: - description: Namespace specifies the target namespace of the resource + description: Namespace specifies the target namespace + of the resource type: string status: - description: Status holds the final result of the sync. Will be empty if the resources is yet to be applied/pruned and is always zero-value for hooks + description: Status holds the final result of the sync. + Will be empty if the resources is yet to be applied/pruned + and is always zero-value for hooks type: string syncPhase: - description: SyncPhase indicates the particular phase of the sync that this result was acquired in + description: SyncPhase indicates the particular phase + of the sync that this result was acquired in type: string version: - description: Version specifies the API version of the resource + description: Version specifies the API version of the + resource type: string required: - group @@ -1267,30 +1692,39 @@ spec: type: object type: array revision: - description: Revision holds the revision this sync operation was performed to + description: Revision holds the revision this sync operation + was performed to type: string source: - description: Source records the application source information of the sync, used for comparing auto-sync + description: Source records the application source information + of the sync, used for comparing auto-sync properties: chart: - description: Chart is a Helm chart name, and must be specified for applications sourced from a Helm repo. + description: Chart is a Helm chart name, and must be specified + for applications sourced from a Helm repo. type: string directory: description: Directory holds path/directory specific options properties: exclude: - description: Exclude contains a glob pattern to match paths against that should be explicitly excluded from being used during manifest generation + description: Exclude contains a glob pattern to match + paths against that should be explicitly excluded + from being used during manifest generation type: string include: - description: Include contains a glob pattern to match paths against that should be explicitly included during manifest generation + description: Include contains a glob pattern to match + paths against that should be explicitly included + during manifest generation type: string jsonnet: description: Jsonnet holds options specific to Jsonnet properties: extVars: - description: ExtVars is a list of Jsonnet External Variables + description: ExtVars is a list of Jsonnet External + Variables items: - description: JsonnetVar represents a variable to be passed to jsonnet during manifest generation + description: JsonnetVar represents a variable + to be passed to jsonnet during manifest generation properties: code: type: boolean @@ -1309,9 +1743,11 @@ spec: type: string type: array tlas: - description: TLAS is a list of Jsonnet Top-level Arguments + description: TLAS is a list of Jsonnet Top-level + Arguments items: - description: JsonnetVar represents a variable to be passed to jsonnet during manifest generation + description: JsonnetVar represents a variable + to be passed to jsonnet during manifest generation properties: code: type: boolean @@ -1326,66 +1762,108 @@ spec: type: array type: object recurse: - description: Recurse specifies whether to scan a directory recursively for manifests + description: Recurse specifies whether to scan a directory + recursively for manifests type: boolean type: object helm: description: Helm holds helm specific options properties: + externalValueFiles: + description: ValuesFilesExternalValueFiles is a list + of Helm value files to use when generating a template + that come from an external git repo + items: + description: HelmExternalValue are values from other + git repositories + properties: + repoURL: + description: RepoURL is the URL of the external + git repo + type: string + targetRevision: + description: TargetRevision is the revision + of the git repo + type: string + valueFiles: + description: FileParameters are file parameters + to the helm template + items: + type: string + type: array + type: object + type: array fileParameters: - description: FileParameters are file parameters to the helm template + description: FileParameters are file parameters to + the helm template items: - description: HelmFileParameter is a file parameter that's passed to helm template during manifest generation + description: HelmFileParameter is a file parameter + that's passed to helm template during manifest + generation properties: name: description: Name is the name of the Helm parameter type: string path: - description: Path is the path to the file containing the values for the Helm parameter + description: Path is the path to the file containing + the values for the Helm parameter type: string type: object type: array parameters: - description: Parameters is a list of Helm parameters which are passed to the helm template command upon manifest generation + description: Parameters is a list of Helm parameters + which are passed to the helm template command upon + manifest generation items: - description: HelmParameter is a parameter that's passed to helm template during manifest generation + description: HelmParameter is a parameter that's + passed to helm template during manifest generation properties: forceString: - description: ForceString determines whether to tell Helm to interpret booleans and numbers as strings + description: ForceString determines whether + to tell Helm to interpret booleans and numbers + as strings type: boolean name: description: Name is the name of the Helm parameter type: string value: - description: Value is the value for the Helm parameter + description: Value is the value for the Helm + parameter type: string type: object type: array releaseName: - description: ReleaseName is the Helm release name to use. If omitted it will use the application name + description: ReleaseName is the Helm release name + to use. If omitted it will use the application name type: string valueFiles: - description: ValuesFiles is a list of Helm value files to use when generating a template + description: ValuesFiles is a list of Helm value files + to use when generating a template items: type: string type: array values: - description: Values specifies Helm values to be passed to helm template, typically defined as a block + description: Values specifies Helm values to be passed + to helm template, typically defined as a block type: string version: - description: Version is the Helm version to use for templating (either "2" or "3") + description: Version is the Helm version to use for + templating (either "2" or "3") type: string type: object ksonnet: description: Ksonnet holds ksonnet specific options properties: environment: - description: Environment is a ksonnet application environment name + description: Environment is a ksonnet application + environment name type: string parameters: - description: Parameters are a list of ksonnet component parameter override values + description: Parameters are a list of ksonnet component + parameter override values items: - description: KsonnetParameter is a ksonnet component parameter + description: KsonnetParameter is a ksonnet component + parameter properties: component: type: string @@ -1405,42 +1883,64 @@ spec: commonAnnotations: additionalProperties: type: string - description: CommonAnnotations is a list of additional annotations to add to rendered manifests + description: CommonAnnotations is a list of additional + annotations to add to rendered manifests type: object commonLabels: additionalProperties: type: string - description: CommonLabels is a list of additional labels to add to rendered manifests + description: CommonLabels is a list of additional + labels to add to rendered manifests type: object + forceCommonAnnotations: + description: ForceCommonAnnotations specifies whether + to force applying common annotations to resources + for Kustomize apps + type: boolean + forceCommonLabels: + description: ForceCommonLabels specifies whether to + force applying common labels to resources for Kustomize + apps + type: boolean images: - description: Images is a list of Kustomize image override specifications + description: Images is a list of Kustomize image override + specifications items: - description: KustomizeImage represents a Kustomize image definition in the format [old_image_name=]: + description: KustomizeImage represents a Kustomize + image definition in the format [old_image_name=]: type: string type: array namePrefix: - description: NamePrefix is a prefix appended to resources for Kustomize apps + description: NamePrefix is a prefix appended to resources + for Kustomize apps type: string nameSuffix: - description: NameSuffix is a suffix appended to resources for Kustomize apps + description: NameSuffix is a suffix appended to resources + for Kustomize apps type: string version: - description: Version controls which version of Kustomize to use for rendering manifests + description: Version controls which version of Kustomize + to use for rendering manifests type: string type: object path: - description: Path is a directory path within the Git repository, and is only valid for applications sourced from Git. + description: Path is a directory path within the Git repository, + and is only valid for applications sourced from Git. type: string plugin: - description: ConfigManagementPlugin holds config management plugin specific options + description: ConfigManagementPlugin holds config management + plugin specific options properties: env: - description: Env is a list of environment variable entries + description: Env is a list of environment variable + entries items: - description: EnvEntry represents an entry in the application's environment + description: EnvEntry represents an entry in the + application's environment properties: name: - description: Name is the name of the variable, usually expressed in uppercase + description: Name is the name of the variable, + usually expressed in uppercase type: string value: description: Value is the value of the variable @@ -1454,10 +1954,15 @@ spec: type: string type: object repoURL: - description: RepoURL is the URL to the repository (Git or Helm) that contains the application manifests + description: RepoURL is the URL to the repository (Git + or Helm) that contains the application manifests type: string targetRevision: - description: TargetRevision defines the revision of the source to sync the application to. In case of Git, this can be commit, tag, or branch. If omitted, will equal to HEAD. In case of Helm, this is a semver tag for the Chart's version. + description: TargetRevision defines the revision of the + source to sync the application to. In case of Git, this + can be commit, tag, or branch. If omitted, will equal + to HEAD. In case of Helm, this is a semver tag for the + Chart's version. type: string required: - repoURL @@ -1471,24 +1976,30 @@ spec: - startedAt type: object reconciledAt: - description: ReconciledAt indicates when the application state was reconciled using the latest git version + description: ReconciledAt indicates when the application state was + reconciled using the latest git version format: date-time type: string resources: - description: Resources is a list of Kubernetes resources managed by this application + description: Resources is a list of Kubernetes resources managed by + this application items: - description: 'ResourceStatus holds the current sync and health status of a resource TODO: describe members of this type' + description: 'ResourceStatus holds the current sync and health status + of a resource TODO: describe members of this type' properties: group: type: string health: - description: HealthStatus contains information about the currently observed health state of an application or resource + description: HealthStatus contains information about the currently + observed health state of an application or resource properties: message: - description: Message is a human-readable informational message describing the health status + description: Message is a human-readable informational message + describing the health status type: string status: - description: Status holds the status code of the application or resource + description: Status holds the status code of the application + or resource type: string type: object hook: @@ -1502,7 +2013,8 @@ spec: requiresPruning: type: boolean status: - description: SyncStatusCode is a type which represents possible comparison results + description: SyncStatusCode is a type which represents possible + comparison results type: string version: type: string @@ -1512,10 +2024,12 @@ spec: description: SourceType specifies the type of this application type: string summary: - description: Summary contains a list of URLs and container images used by this application + description: Summary contains a list of URLs and container images + used by this application properties: externalURLs: - description: ExternalURLs holds all external URLs of application child resources. + description: ExternalURLs holds all external URLs of application + child resources. items: type: string type: array @@ -1526,46 +2040,62 @@ spec: type: array type: object sync: - description: Sync contains information about the application's current sync status + description: Sync contains information about the application's current + sync status properties: comparedTo: - description: ComparedTo contains information about what has been compared + description: ComparedTo contains information about what has been + compared properties: destination: - description: Destination is a reference to the application's destination used for comparison + description: Destination is a reference to the application's + destination used for comparison properties: name: - description: Name is an alternate way of specifying the target cluster by its symbolic name + description: Name is an alternate way of specifying the + target cluster by its symbolic name type: string namespace: - description: Namespace specifies the target namespace for the application's resources. The namespace will only be set for namespace-scoped resources that have not set a value for .metadata.namespace + description: Namespace specifies the target namespace + for the application's resources. The namespace will + only be set for namespace-scoped resources that have + not set a value for .metadata.namespace type: string server: - description: Server specifies the URL of the target cluster and must be set to the Kubernetes control plane API + description: Server specifies the URL of the target cluster + and must be set to the Kubernetes control plane API type: string type: object source: - description: Source is a reference to the application's source used for comparison + description: Source is a reference to the application's source + used for comparison properties: chart: - description: Chart is a Helm chart name, and must be specified for applications sourced from a Helm repo. + description: Chart is a Helm chart name, and must be specified + for applications sourced from a Helm repo. type: string directory: description: Directory holds path/directory specific options properties: exclude: - description: Exclude contains a glob pattern to match paths against that should be explicitly excluded from being used during manifest generation + description: Exclude contains a glob pattern to match + paths against that should be explicitly excluded + from being used during manifest generation type: string include: - description: Include contains a glob pattern to match paths against that should be explicitly included during manifest generation + description: Include contains a glob pattern to match + paths against that should be explicitly included + during manifest generation type: string jsonnet: description: Jsonnet holds options specific to Jsonnet properties: extVars: - description: ExtVars is a list of Jsonnet External Variables + description: ExtVars is a list of Jsonnet External + Variables items: - description: JsonnetVar represents a variable to be passed to jsonnet during manifest generation + description: JsonnetVar represents a variable + to be passed to jsonnet during manifest generation properties: code: type: boolean @@ -1584,9 +2114,11 @@ spec: type: string type: array tlas: - description: TLAS is a list of Jsonnet Top-level Arguments + description: TLAS is a list of Jsonnet Top-level + Arguments items: - description: JsonnetVar represents a variable to be passed to jsonnet during manifest generation + description: JsonnetVar represents a variable + to be passed to jsonnet during manifest generation properties: code: type: boolean @@ -1601,66 +2133,108 @@ spec: type: array type: object recurse: - description: Recurse specifies whether to scan a directory recursively for manifests + description: Recurse specifies whether to scan a directory + recursively for manifests type: boolean type: object helm: description: Helm holds helm specific options properties: + externalValueFiles: + description: ValuesFilesExternalValueFiles is a list + of Helm value files to use when generating a template + that come from an external git repo + items: + description: HelmExternalValue are values from other + git repositories + properties: + repoURL: + description: RepoURL is the URL of the external + git repo + type: string + targetRevision: + description: TargetRevision is the revision + of the git repo + type: string + valueFiles: + description: FileParameters are file parameters + to the helm template + items: + type: string + type: array + type: object + type: array fileParameters: - description: FileParameters are file parameters to the helm template + description: FileParameters are file parameters to + the helm template items: - description: HelmFileParameter is a file parameter that's passed to helm template during manifest generation + description: HelmFileParameter is a file parameter + that's passed to helm template during manifest + generation properties: name: description: Name is the name of the Helm parameter type: string path: - description: Path is the path to the file containing the values for the Helm parameter + description: Path is the path to the file containing + the values for the Helm parameter type: string type: object type: array parameters: - description: Parameters is a list of Helm parameters which are passed to the helm template command upon manifest generation + description: Parameters is a list of Helm parameters + which are passed to the helm template command upon + manifest generation items: - description: HelmParameter is a parameter that's passed to helm template during manifest generation + description: HelmParameter is a parameter that's + passed to helm template during manifest generation properties: forceString: - description: ForceString determines whether to tell Helm to interpret booleans and numbers as strings + description: ForceString determines whether + to tell Helm to interpret booleans and numbers + as strings type: boolean name: description: Name is the name of the Helm parameter type: string value: - description: Value is the value for the Helm parameter + description: Value is the value for the Helm + parameter type: string type: object type: array releaseName: - description: ReleaseName is the Helm release name to use. If omitted it will use the application name + description: ReleaseName is the Helm release name + to use. If omitted it will use the application name type: string valueFiles: - description: ValuesFiles is a list of Helm value files to use when generating a template + description: ValuesFiles is a list of Helm value files + to use when generating a template items: type: string type: array values: - description: Values specifies Helm values to be passed to helm template, typically defined as a block + description: Values specifies Helm values to be passed + to helm template, typically defined as a block type: string version: - description: Version is the Helm version to use for templating (either "2" or "3") + description: Version is the Helm version to use for + templating (either "2" or "3") type: string type: object ksonnet: description: Ksonnet holds ksonnet specific options properties: environment: - description: Environment is a ksonnet application environment name + description: Environment is a ksonnet application + environment name type: string parameters: - description: Parameters are a list of ksonnet component parameter override values + description: Parameters are a list of ksonnet component + parameter override values items: - description: KsonnetParameter is a ksonnet component parameter + description: KsonnetParameter is a ksonnet component + parameter properties: component: type: string @@ -1680,42 +2254,64 @@ spec: commonAnnotations: additionalProperties: type: string - description: CommonAnnotations is a list of additional annotations to add to rendered manifests + description: CommonAnnotations is a list of additional + annotations to add to rendered manifests type: object commonLabels: additionalProperties: type: string - description: CommonLabels is a list of additional labels to add to rendered manifests + description: CommonLabels is a list of additional + labels to add to rendered manifests type: object + forceCommonAnnotations: + description: ForceCommonAnnotations specifies whether + to force applying common annotations to resources + for Kustomize apps + type: boolean + forceCommonLabels: + description: ForceCommonLabels specifies whether to + force applying common labels to resources for Kustomize + apps + type: boolean images: - description: Images is a list of Kustomize image override specifications + description: Images is a list of Kustomize image override + specifications items: - description: KustomizeImage represents a Kustomize image definition in the format [old_image_name=]: + description: KustomizeImage represents a Kustomize + image definition in the format [old_image_name=]: type: string type: array namePrefix: - description: NamePrefix is a prefix appended to resources for Kustomize apps + description: NamePrefix is a prefix appended to resources + for Kustomize apps type: string nameSuffix: - description: NameSuffix is a suffix appended to resources for Kustomize apps + description: NameSuffix is a suffix appended to resources + for Kustomize apps type: string version: - description: Version controls which version of Kustomize to use for rendering manifests + description: Version controls which version of Kustomize + to use for rendering manifests type: string type: object path: - description: Path is a directory path within the Git repository, and is only valid for applications sourced from Git. + description: Path is a directory path within the Git repository, + and is only valid for applications sourced from Git. type: string plugin: - description: ConfigManagementPlugin holds config management plugin specific options + description: ConfigManagementPlugin holds config management + plugin specific options properties: env: - description: Env is a list of environment variable entries + description: Env is a list of environment variable + entries items: - description: EnvEntry represents an entry in the application's environment + description: EnvEntry represents an entry in the + application's environment properties: name: - description: Name is the name of the variable, usually expressed in uppercase + description: Name is the name of the variable, + usually expressed in uppercase type: string value: description: Value is the value of the variable @@ -1729,10 +2325,15 @@ spec: type: string type: object repoURL: - description: RepoURL is the URL to the repository (Git or Helm) that contains the application manifests + description: RepoURL is the URL to the repository (Git + or Helm) that contains the application manifests type: string targetRevision: - description: TargetRevision defines the revision of the source to sync the application to. In case of Git, this can be commit, tag, or branch. If omitted, will equal to HEAD. In case of Helm, this is a semver tag for the Chart's version. + description: TargetRevision defines the revision of the + source to sync the application to. In case of Git, this + can be commit, tag, or branch. If omitted, will equal + to HEAD. In case of Helm, this is a semver tag for the + Chart's version. type: string required: - repoURL @@ -1742,7 +2343,8 @@ spec: - source type: object revision: - description: Revision contains information about the revision the comparison has been performed to + description: Revision contains information about the revision + the comparison has been performed to type: string status: description: Status is the sync state of the comparison diff --git a/manifests/crds/appproject-crd.yaml b/manifests/crds/appproject-crd.yaml index 7bb09652dfea3..a048c656238d6 100644 --- a/manifests/crds/appproject-crd.yaml +++ b/manifests/crds/appproject-crd.yaml @@ -20,13 +20,22 @@ spec: - name: v1alpha1 schema: openAPIV3Schema: - description: 'AppProject provides a logical grouping of applications, providing controls for: * where the apps may deploy to (cluster whitelist) * what may be deployed (repository whitelist, resource whitelist/blacklist) * who can access these applications (roles, OIDC group claims bindings) * and what they can do (RBAC policies) * automation access to these roles (JWT tokens)' + description: 'AppProject provides a logical grouping of applications, providing + controls for: * where the apps may deploy to (cluster whitelist) * what + may be deployed (repository whitelist, resource whitelist/blacklist) * who + can access these applications (roles, OIDC group claims bindings) * and + what they can do (RBAC policies) * automation access to these roles (JWT + tokens)' properties: apiVersion: - description: 'APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' type: string kind: - description: 'Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' type: string metadata: type: object @@ -34,9 +43,12 @@ spec: description: AppProjectSpec is the specification of an AppProject properties: clusterResourceBlacklist: - description: ClusterResourceBlacklist contains list of blacklisted cluster level resources + description: ClusterResourceBlacklist contains list of blacklisted + cluster level resources items: - description: GroupKind specifies a Group and a Kind, but does not force a version. This is useful for identifying concepts during lookup stages without having partially valid types + description: GroupKind specifies a Group and a Kind, but does not + force a version. This is useful for identifying concepts during + lookup stages without having partially valid types properties: group: type: string @@ -48,9 +60,12 @@ spec: type: object type: array clusterResourceWhitelist: - description: ClusterResourceWhitelist contains list of whitelisted cluster level resources + description: ClusterResourceWhitelist contains list of whitelisted + cluster level resources items: - description: GroupKind specifies a Group and a Kind, but does not force a version. This is useful for identifying concepts during lookup stages without having partially valid types + description: GroupKind specifies a Group and a Kind, but does not + force a version. This is useful for identifying concepts during + lookup stages without having partially valid types properties: group: type: string @@ -65,25 +80,34 @@ spec: description: Description contains optional project description type: string destinations: - description: Destinations contains list of destinations available for deployment + description: Destinations contains list of destinations available + for deployment items: - description: ApplicationDestination holds information about the application's destination + description: ApplicationDestination holds information about the + application's destination properties: name: - description: Name is an alternate way of specifying the target cluster by its symbolic name + description: Name is an alternate way of specifying the target + cluster by its symbolic name type: string namespace: - description: Namespace specifies the target namespace for the application's resources. The namespace will only be set for namespace-scoped resources that have not set a value for .metadata.namespace + description: Namespace specifies the target namespace for the + application's resources. The namespace will only be set for + namespace-scoped resources that have not set a value for .metadata.namespace type: string server: - description: Server specifies the URL of the target cluster and must be set to the Kubernetes control plane API + description: Server specifies the URL of the target cluster + and must be set to the Kubernetes control plane API type: string type: object type: array namespaceResourceBlacklist: - description: NamespaceResourceBlacklist contains list of blacklisted namespace level resources + description: NamespaceResourceBlacklist contains list of blacklisted + namespace level resources items: - description: GroupKind specifies a Group and a Kind, but does not force a version. This is useful for identifying concepts during lookup stages without having partially valid types + description: GroupKind specifies a Group and a Kind, but does not + force a version. This is useful for identifying concepts during + lookup stages without having partially valid types properties: group: type: string @@ -95,9 +119,12 @@ spec: type: object type: array namespaceResourceWhitelist: - description: NamespaceResourceWhitelist contains list of whitelisted namespace level resources + description: NamespaceResourceWhitelist contains list of whitelisted + namespace level resources items: - description: GroupKind specifies a Group and a Kind, but does not force a version. This is useful for identifying concepts during lookup stages without having partially valid types + description: GroupKind specifies a Group and a Kind, but does not + force a version. This is useful for identifying concepts during + lookup stages without having partially valid types properties: group: type: string @@ -109,12 +136,15 @@ spec: type: object type: array orphanedResources: - description: OrphanedResources specifies if controller should monitor orphaned resources of apps in this project + description: OrphanedResources specifies if controller should monitor + orphaned resources of apps in this project properties: ignore: - description: Ignore contains a list of resources that are to be excluded from orphaned resources monitoring + description: Ignore contains a list of resources that are to be + excluded from orphaned resources monitoring items: - description: OrphanedResourceKey is a reference to a resource to be ignored from + description: OrphanedResourceKey is a reference to a resource + to be ignored from properties: group: type: string @@ -125,26 +155,32 @@ spec: type: object type: array warn: - description: Warn indicates if warning condition should be created for apps which have orphaned resources + description: Warn indicates if warning condition should be created + for apps which have orphaned resources type: boolean type: object roles: - description: Roles are user defined RBAC roles associated with this project + description: Roles are user defined RBAC roles associated with this + project items: - description: ProjectRole represents a role that has access to a project + description: ProjectRole represents a role that has access to a + project properties: description: description: Description is a description of the role type: string groups: - description: Groups are a list of OIDC group claims bound to this role + description: Groups are a list of OIDC group claims bound to + this role items: type: string type: array jwtTokens: - description: JWTTokens are a list of generated JWT tokens bound to this role + description: JWTTokens are a list of generated JWT tokens bound + to this role items: - description: JWTToken holds the issuedAt and expiresAt values of a token + description: JWTToken holds the issuedAt and expiresAt values + of a token properties: exp: format: int64 @@ -162,7 +198,8 @@ spec: description: Name is a name for this role type: string policies: - description: Policies Stores a list of casbin formated strings that define access policies for the role in the project + description: Policies Stores a list of casbin formated strings + that define access policies for the role in the project items: type: string type: array @@ -171,9 +208,11 @@ spec: type: object type: array signatureKeys: - description: SignatureKeys contains a list of PGP key IDs that commits in Git must be signed with in order to be allowed for sync + description: SignatureKeys contains a list of PGP key IDs that commits + in Git must be signed with in order to be allowed for sync items: - description: SignatureKey is the specification of a key required to verify commit signatures with + description: SignatureKey is the specification of a key required + to verify commit signatures with properties: keyID: description: The ID of the key in hexadecimal notation @@ -183,47 +222,57 @@ spec: type: object type: array sourceRepos: - description: SourceRepos contains list of repository URLs which can be used for deployment + description: SourceRepos contains list of repository URLs which can + be used for deployment items: type: string type: array syncWindows: - description: SyncWindows controls when syncs can be run for apps in this project + description: SyncWindows controls when syncs can be run for apps in + this project items: - description: SyncWindow contains the kind, time, duration and attributes that are used to assign the syncWindows to apps + description: SyncWindow contains the kind, time, duration and attributes + that are used to assign the syncWindows to apps properties: applications: - description: Applications contains a list of applications that the window will apply to + description: Applications contains a list of applications that + the window will apply to items: type: string type: array clusters: - description: Clusters contains a list of clusters that the window will apply to + description: Clusters contains a list of clusters that the window + will apply to items: type: string type: array duration: - description: Duration is the amount of time the sync window will be open + description: Duration is the amount of time the sync window + will be open type: string kind: description: Kind defines if the window allows or blocks syncs type: string manualSync: - description: ManualSync enables manual syncs when they would otherwise be blocked + description: ManualSync enables manual syncs when they would + otherwise be blocked type: boolean namespaces: - description: Namespaces contains a list of namespaces that the window will apply to + description: Namespaces contains a list of namespaces that the + window will apply to items: type: string type: array schedule: - description: Schedule is the time the window will begin, specified in cron format + description: Schedule is the time the window will begin, specified + in cron format type: string type: object type: array type: object status: - description: AppProjectStatus contains status information for AppProject CRs + description: AppProjectStatus contains status information for AppProject + CRs properties: jwtTokensByRole: additionalProperties: @@ -231,7 +280,8 @@ spec: properties: items: items: - description: JWTToken holds the issuedAt and expiresAt values of a token + description: JWTToken holds the issuedAt and expiresAt values + of a token properties: exp: format: int64 @@ -246,7 +296,8 @@ spec: type: object type: array type: object - description: JWTTokensByRole contains a list of JWT tokens issued for a given role + description: JWTTokensByRole contains a list of JWT tokens issued + for a given role type: object type: object required: diff --git a/manifests/ha/install.yaml b/manifests/ha/install.yaml index a8189b2b55525..431061f32bd0d 100644 --- a/manifests/ha/install.yaml +++ b/manifests/ha/install.yaml @@ -218,6 +218,30 @@ spec: helm: description: Helm holds helm specific options properties: + externalValueFiles: + description: ValuesFilesExternalValueFiles is a list of + Helm value files to use when generating a template that + come from an external git repo + items: + description: HelmExternalValue are values from other + git repositories + properties: + repoURL: + description: RepoURL is the URL of the external + git repo + type: string + targetRevision: + description: TargetRevision is the revision of the + git repo + type: string + valueFiles: + description: FileParameters are file parameters + to the helm template + items: + type: string + type: array + type: object + type: array fileParameters: description: FileParameters are file parameters to the helm template @@ -314,6 +338,15 @@ spec: description: CommonLabels is a list of additional labels to add to rendered manifests type: object + forceCommonAnnotations: + description: ForceCommonAnnotations specifies whether + to force applying common annotations to resources for + Kustomize apps + type: boolean + forceCommonLabels: + description: ForceCommonLabels specifies whether to force + applying common labels to resources for Kustomize apps + type: boolean images: description: Images is a list of Kustomize image override specifications @@ -443,6 +476,10 @@ spec: properties: group: type: string + jqPathExpressions: + items: + type: string + type: array jsonPointers: items: type: string @@ -454,7 +491,6 @@ spec: namespace: type: string required: - - jsonPointers - kind type: object type: array @@ -559,6 +595,30 @@ spec: helm: description: Helm holds helm specific options properties: + externalValueFiles: + description: ValuesFilesExternalValueFiles is a list of Helm + value files to use when generating a template that come + from an external git repo + items: + description: HelmExternalValue are values from other git + repositories + properties: + repoURL: + description: RepoURL is the URL of the external git + repo + type: string + targetRevision: + description: TargetRevision is the revision of the git + repo + type: string + valueFiles: + description: FileParameters are file parameters to the + helm template + items: + type: string + type: array + type: object + type: array fileParameters: description: FileParameters are file parameters to the helm template @@ -653,6 +713,14 @@ spec: description: CommonLabels is a list of additional labels to add to rendered manifests type: object + forceCommonAnnotations: + description: ForceCommonAnnotations specifies whether to force + applying common annotations to resources for Kustomize apps + type: boolean + forceCommonLabels: + description: ForceCommonLabels specifies whether to force + applying common labels to resources for Kustomize apps + type: boolean images: description: Images is a list of Kustomize image override specifications @@ -915,6 +983,30 @@ spec: helm: description: Helm holds helm specific options properties: + externalValueFiles: + description: ValuesFilesExternalValueFiles is a list + of Helm value files to use when generating a template + that come from an external git repo + items: + description: HelmExternalValue are values from other + git repositories + properties: + repoURL: + description: RepoURL is the URL of the external + git repo + type: string + targetRevision: + description: TargetRevision is the revision of + the git repo + type: string + valueFiles: + description: FileParameters are file parameters + to the helm template + items: + type: string + type: array + type: object + type: array fileParameters: description: FileParameters are file parameters to the helm template @@ -1012,6 +1104,16 @@ spec: description: CommonLabels is a list of additional labels to add to rendered manifests type: object + forceCommonAnnotations: + description: ForceCommonAnnotations specifies whether + to force applying common annotations to resources + for Kustomize apps + type: boolean + forceCommonLabels: + description: ForceCommonLabels specifies whether to + force applying common labels to resources for Kustomize + apps + type: boolean images: description: Images is a list of Kustomize image override specifications @@ -1282,6 +1384,30 @@ spec: helm: description: Helm holds helm specific options properties: + externalValueFiles: + description: ValuesFilesExternalValueFiles is + a list of Helm value files to use when generating + a template that come from an external git repo + items: + description: HelmExternalValue are values from + other git repositories + properties: + repoURL: + description: RepoURL is the URL of the external + git repo + type: string + targetRevision: + description: TargetRevision is the revision + of the git repo + type: string + valueFiles: + description: FileParameters are file parameters + to the helm template + items: + type: string + type: array + type: object + type: array fileParameters: description: FileParameters are file parameters to the helm template @@ -1385,6 +1511,16 @@ spec: description: CommonLabels is a list of additional labels to add to rendered manifests type: object + forceCommonAnnotations: + description: ForceCommonAnnotations specifies + whether to force applying common annotations + to resources for Kustomize apps + type: boolean + forceCommonLabels: + description: ForceCommonLabels specifies whether + to force applying common labels to resources + for Kustomize apps + type: boolean images: description: Images is a list of Kustomize image override specifications @@ -1634,6 +1770,30 @@ spec: helm: description: Helm holds helm specific options properties: + externalValueFiles: + description: ValuesFilesExternalValueFiles is a list + of Helm value files to use when generating a template + that come from an external git repo + items: + description: HelmExternalValue are values from other + git repositories + properties: + repoURL: + description: RepoURL is the URL of the external + git repo + type: string + targetRevision: + description: TargetRevision is the revision + of the git repo + type: string + valueFiles: + description: FileParameters are file parameters + to the helm template + items: + type: string + type: array + type: object + type: array fileParameters: description: FileParameters are file parameters to the helm template @@ -1733,6 +1893,16 @@ spec: description: CommonLabels is a list of additional labels to add to rendered manifests type: object + forceCommonAnnotations: + description: ForceCommonAnnotations specifies whether + to force applying common annotations to resources + for Kustomize apps + type: boolean + forceCommonLabels: + description: ForceCommonLabels specifies whether to + force applying common labels to resources for Kustomize + apps + type: boolean images: description: Images is a list of Kustomize image override specifications @@ -1971,6 +2141,30 @@ spec: helm: description: Helm holds helm specific options properties: + externalValueFiles: + description: ValuesFilesExternalValueFiles is a list + of Helm value files to use when generating a template + that come from an external git repo + items: + description: HelmExternalValue are values from other + git repositories + properties: + repoURL: + description: RepoURL is the URL of the external + git repo + type: string + targetRevision: + description: TargetRevision is the revision + of the git repo + type: string + valueFiles: + description: FileParameters are file parameters + to the helm template + items: + type: string + type: array + type: object + type: array fileParameters: description: FileParameters are file parameters to the helm template @@ -2070,6 +2264,16 @@ spec: description: CommonLabels is a list of additional labels to add to rendered manifests type: object + forceCommonAnnotations: + description: ForceCommonAnnotations specifies whether + to force applying common annotations to resources + for Kustomize apps + type: boolean + forceCommonLabels: + description: ForceCommonLabels specifies whether to + force applying common labels to resources for Kustomize + apps + type: boolean images: description: Images is a list of Kustomize image override specifications @@ -2824,6 +3028,14 @@ metadata: --- apiVersion: v1 kind: ConfigMap +metadata: + labels: + app.kubernetes.io/name: argocd-cmd-params-cm + app.kubernetes.io/part-of: argocd + name: argocd-cmd-params-cm +--- +apiVersion: v1 +kind: ConfigMap metadata: labels: app.kubernetes.io/name: argocd-gpg-keys-cm @@ -3761,6 +3973,72 @@ spec: key: timeout.reconciliation name: argocd-cm optional: true + - name: ARGOCD_REPO_SERVER_LOGFORMAT + valueFrom: + configMapKeyRef: + key: reposerver.log.format + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_REPO_SERVER_LOGLEVEL + valueFrom: + configMapKeyRef: + key: reposerver.log.level + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_REPO_SERVER_PARALLELISM_LIMIT + valueFrom: + configMapKeyRef: + key: reposerver.parallelism.limit + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_REPO_SERVER_DISABLE_TLS + valueFrom: + configMapKeyRef: + key: reposerver.disable.tls + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_TLS_MIN_VERSION + valueFrom: + configMapKeyRef: + key: reposerver.tls.minversion + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_TLS_MAX_VERSION + valueFrom: + configMapKeyRef: + key: reposerver.tls.maxversion + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_TLS_CIPHERS + valueFrom: + configMapKeyRef: + key: reposerver.tls.ciphers + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_REPO_CACHE_EXPIRATION + valueFrom: + configMapKeyRef: + key: reposerver.repo.cache.expiration + name: argocd-cmd-params-cm + optional: true + - name: REDIS_SERVER + valueFrom: + configMapKeyRef: + key: redis.server + name: argocd-cmd-params-cm + optional: true + - name: REDISDB + valueFrom: + configMapKeyRef: + key: redis.db + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_DEFAULT_CACHE_EXPIRATION + valueFrom: + configMapKeyRef: + key: reposerver.default.cache.expiration + name: argocd-cmd-params-cm + optional: true image: quay.io/argoproj/argocd:latest imagePullPolicy: Always livenessProbe: @@ -3868,6 +4146,144 @@ spec: env: - name: ARGOCD_API_SERVER_REPLICAS value: "2" + - name: ARGOCD_SERVER_INSECURE + valueFrom: + configMapKeyRef: + key: server.insecure + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_SERVER_BASEHREF + valueFrom: + configMapKeyRef: + key: server.basehref + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_SERVER_ROOTPATH + valueFrom: + configMapKeyRef: + key: server.rootpath + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_SERVER_LOGFORMAT + valueFrom: + configMapKeyRef: + key: server.log.format + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_REPO_SERVER_LOGLEVEL + valueFrom: + configMapKeyRef: + key: server.log.level + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_SERVER_REPO_SERVER + valueFrom: + configMapKeyRef: + key: repo.server + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_SERVER_DEX_SERVER + valueFrom: + configMapKeyRef: + key: server.dex.server + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_SERVER_DISABLE_AUTH + valueFrom: + configMapKeyRef: + key: server.disable.auth + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_SERVER_ENABLE_GZIP + valueFrom: + configMapKeyRef: + key: server.enable.gzip + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_SERVER_REPO_SERVER_TIMEOUT_SECONDS + valueFrom: + configMapKeyRef: + key: server.repo.server.timeout.seconds + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_SERVER_X_FRAME_OPTIONS + valueFrom: + configMapKeyRef: + key: server.x.frame.options + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_SERVER_REPO_SERVER_PLAINTEXT + valueFrom: + configMapKeyRef: + key: server.repo.server.plaintext + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_SERVER_REPO_SERVER_STRICT_TLS + valueFrom: + configMapKeyRef: + key: server.repo.server.strict.tls + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_TLS_MIN_VERSION + valueFrom: + configMapKeyRef: + key: server.tls.minversion + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_TLS_MAX_VERSION + valueFrom: + configMapKeyRef: + key: server.tls.maxversion + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_TLS_CIPHERS + valueFrom: + configMapKeyRef: + key: server.tls.ciphers + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_SERVER_CONNECTION_STATUS_CACHE_EXPIRATION + valueFrom: + configMapKeyRef: + key: server.connection.status.cache.expiration + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_SERVER_OIDC_CACHE_EXPIRATION + valueFrom: + configMapKeyRef: + key: server.oidc.cache.expiration + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_SERVER_LOGIN_ATTEMPTS_EXPIRATION + valueFrom: + configMapKeyRef: + key: server.login.attempts.expiration + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_APP_STATE_CACHE_EXPIRATION + valueFrom: + configMapKeyRef: + key: server.app.state.cache.expiration + name: argocd-cmd-params-cm + optional: true + - name: REDIS_SERVER + valueFrom: + configMapKeyRef: + key: redis.server + name: argocd-cmd-params-cm + optional: true + - name: REDISDB + valueFrom: + configMapKeyRef: + key: redis.db + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_DEFAULT_CACHE_EXPIRATION + valueFrom: + configMapKeyRef: + key: server.default.cache.expiration + name: argocd-cmd-params-cm + optional: true image: quay.io/argoproj/argocd:latest imagePullPolicy: Always livenessProbe: @@ -3980,6 +4396,90 @@ spec: key: timeout.reconciliation name: argocd-cm optional: true + - name: ARGOCD_APPLICATION_CONTROLLER_REPO_SERVER + valueFrom: + configMapKeyRef: + key: repo.server + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_APPLICATION_CONTROLLER_REPO_SERVER_TIMEOUT_SECONDS + valueFrom: + configMapKeyRef: + key: controller.repo.server.timeout.seconds + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_APPLICATION_CONTROLLER_STATUS_PROCESSORS + valueFrom: + configMapKeyRef: + key: controller.status.processors + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_APPLICATION_CONTROLLER_OPERATION_PROCESSORS + valueFrom: + configMapKeyRef: + key: controller.operation.processors + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_APPLICATION_CONTROLLER_LOGFORMAT + valueFrom: + configMapKeyRef: + key: controller.log.format + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_APPLICATION_CONTROLLER_LOGLEVEL + valueFrom: + configMapKeyRef: + key: controller.log.level + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_APPLICATION_CONTROLLER_METRICS_CACHE_EXPIRATION + valueFrom: + configMapKeyRef: + key: controller.metrics.cache.expiration + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_APPLICATION_CONTROLLER_SELF_HEAL_TIMEOUT_SECONDS + valueFrom: + configMapKeyRef: + key: controller.self.heal.timeout.seconds + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_APPLICATION_CONTROLLER_REPO_SERVER_PLAINTEXT + valueFrom: + configMapKeyRef: + key: controller.repo.server.plaintext + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_APPLICATION_CONTROLLER_REPO_SERVER_STRICT_TLS + valueFrom: + configMapKeyRef: + key: controller.repo.server.strict.tls + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_APP_STATE_CACHE_EXPIRATION + valueFrom: + configMapKeyRef: + key: controller.app.state.cache.expiration + name: argocd-cmd-params-cm + optional: true + - name: REDIS_SERVER + valueFrom: + configMapKeyRef: + key: redis.server + name: argocd-cmd-params-cm + optional: true + - name: REDISDB + valueFrom: + configMapKeyRef: + key: redis.db + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_DEFAULT_CACHE_EXPIRATION + valueFrom: + configMapKeyRef: + key: controller.default.cache.expiration + name: argocd-cmd-params-cm + optional: true image: quay.io/argoproj/argocd:latest imagePullPolicy: Always livenessProbe: @@ -4200,8 +4700,11 @@ spec: protocol: TCP - port: 5557 protocol: TCP + - from: + - namespaceSelector: {} + ports: - port: 5558 - protocol: TCP + - protocol: TCP podSelector: matchLabels: app.kubernetes.io/name: argocd-dex-server diff --git a/manifests/ha/namespace-install.yaml b/manifests/ha/namespace-install.yaml index a5726ab403c3a..975e6e69cb898 100644 --- a/manifests/ha/namespace-install.yaml +++ b/manifests/ha/namespace-install.yaml @@ -271,6 +271,14 @@ metadata: --- apiVersion: v1 kind: ConfigMap +metadata: + labels: + app.kubernetes.io/name: argocd-cmd-params-cm + app.kubernetes.io/part-of: argocd + name: argocd-cmd-params-cm +--- +apiVersion: v1 +kind: ConfigMap metadata: labels: app.kubernetes.io/name: argocd-gpg-keys-cm @@ -1208,6 +1216,72 @@ spec: key: timeout.reconciliation name: argocd-cm optional: true + - name: ARGOCD_REPO_SERVER_LOGFORMAT + valueFrom: + configMapKeyRef: + key: reposerver.log.format + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_REPO_SERVER_LOGLEVEL + valueFrom: + configMapKeyRef: + key: reposerver.log.level + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_REPO_SERVER_PARALLELISM_LIMIT + valueFrom: + configMapKeyRef: + key: reposerver.parallelism.limit + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_REPO_SERVER_DISABLE_TLS + valueFrom: + configMapKeyRef: + key: reposerver.disable.tls + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_TLS_MIN_VERSION + valueFrom: + configMapKeyRef: + key: reposerver.tls.minversion + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_TLS_MAX_VERSION + valueFrom: + configMapKeyRef: + key: reposerver.tls.maxversion + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_TLS_CIPHERS + valueFrom: + configMapKeyRef: + key: reposerver.tls.ciphers + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_REPO_CACHE_EXPIRATION + valueFrom: + configMapKeyRef: + key: reposerver.repo.cache.expiration + name: argocd-cmd-params-cm + optional: true + - name: REDIS_SERVER + valueFrom: + configMapKeyRef: + key: redis.server + name: argocd-cmd-params-cm + optional: true + - name: REDISDB + valueFrom: + configMapKeyRef: + key: redis.db + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_DEFAULT_CACHE_EXPIRATION + valueFrom: + configMapKeyRef: + key: reposerver.default.cache.expiration + name: argocd-cmd-params-cm + optional: true image: quay.io/argoproj/argocd:latest imagePullPolicy: Always livenessProbe: @@ -1315,6 +1389,144 @@ spec: env: - name: ARGOCD_API_SERVER_REPLICAS value: "2" + - name: ARGOCD_SERVER_INSECURE + valueFrom: + configMapKeyRef: + key: server.insecure + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_SERVER_BASEHREF + valueFrom: + configMapKeyRef: + key: server.basehref + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_SERVER_ROOTPATH + valueFrom: + configMapKeyRef: + key: server.rootpath + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_SERVER_LOGFORMAT + valueFrom: + configMapKeyRef: + key: server.log.format + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_REPO_SERVER_LOGLEVEL + valueFrom: + configMapKeyRef: + key: server.log.level + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_SERVER_REPO_SERVER + valueFrom: + configMapKeyRef: + key: repo.server + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_SERVER_DEX_SERVER + valueFrom: + configMapKeyRef: + key: server.dex.server + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_SERVER_DISABLE_AUTH + valueFrom: + configMapKeyRef: + key: server.disable.auth + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_SERVER_ENABLE_GZIP + valueFrom: + configMapKeyRef: + key: server.enable.gzip + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_SERVER_REPO_SERVER_TIMEOUT_SECONDS + valueFrom: + configMapKeyRef: + key: server.repo.server.timeout.seconds + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_SERVER_X_FRAME_OPTIONS + valueFrom: + configMapKeyRef: + key: server.x.frame.options + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_SERVER_REPO_SERVER_PLAINTEXT + valueFrom: + configMapKeyRef: + key: server.repo.server.plaintext + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_SERVER_REPO_SERVER_STRICT_TLS + valueFrom: + configMapKeyRef: + key: server.repo.server.strict.tls + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_TLS_MIN_VERSION + valueFrom: + configMapKeyRef: + key: server.tls.minversion + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_TLS_MAX_VERSION + valueFrom: + configMapKeyRef: + key: server.tls.maxversion + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_TLS_CIPHERS + valueFrom: + configMapKeyRef: + key: server.tls.ciphers + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_SERVER_CONNECTION_STATUS_CACHE_EXPIRATION + valueFrom: + configMapKeyRef: + key: server.connection.status.cache.expiration + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_SERVER_OIDC_CACHE_EXPIRATION + valueFrom: + configMapKeyRef: + key: server.oidc.cache.expiration + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_SERVER_LOGIN_ATTEMPTS_EXPIRATION + valueFrom: + configMapKeyRef: + key: server.login.attempts.expiration + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_APP_STATE_CACHE_EXPIRATION + valueFrom: + configMapKeyRef: + key: server.app.state.cache.expiration + name: argocd-cmd-params-cm + optional: true + - name: REDIS_SERVER + valueFrom: + configMapKeyRef: + key: redis.server + name: argocd-cmd-params-cm + optional: true + - name: REDISDB + valueFrom: + configMapKeyRef: + key: redis.db + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_DEFAULT_CACHE_EXPIRATION + valueFrom: + configMapKeyRef: + key: server.default.cache.expiration + name: argocd-cmd-params-cm + optional: true image: quay.io/argoproj/argocd:latest imagePullPolicy: Always livenessProbe: @@ -1427,6 +1639,90 @@ spec: key: timeout.reconciliation name: argocd-cm optional: true + - name: ARGOCD_APPLICATION_CONTROLLER_REPO_SERVER + valueFrom: + configMapKeyRef: + key: repo.server + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_APPLICATION_CONTROLLER_REPO_SERVER_TIMEOUT_SECONDS + valueFrom: + configMapKeyRef: + key: controller.repo.server.timeout.seconds + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_APPLICATION_CONTROLLER_STATUS_PROCESSORS + valueFrom: + configMapKeyRef: + key: controller.status.processors + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_APPLICATION_CONTROLLER_OPERATION_PROCESSORS + valueFrom: + configMapKeyRef: + key: controller.operation.processors + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_APPLICATION_CONTROLLER_LOGFORMAT + valueFrom: + configMapKeyRef: + key: controller.log.format + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_APPLICATION_CONTROLLER_LOGLEVEL + valueFrom: + configMapKeyRef: + key: controller.log.level + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_APPLICATION_CONTROLLER_METRICS_CACHE_EXPIRATION + valueFrom: + configMapKeyRef: + key: controller.metrics.cache.expiration + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_APPLICATION_CONTROLLER_SELF_HEAL_TIMEOUT_SECONDS + valueFrom: + configMapKeyRef: + key: controller.self.heal.timeout.seconds + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_APPLICATION_CONTROLLER_REPO_SERVER_PLAINTEXT + valueFrom: + configMapKeyRef: + key: controller.repo.server.plaintext + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_APPLICATION_CONTROLLER_REPO_SERVER_STRICT_TLS + valueFrom: + configMapKeyRef: + key: controller.repo.server.strict.tls + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_APP_STATE_CACHE_EXPIRATION + valueFrom: + configMapKeyRef: + key: controller.app.state.cache.expiration + name: argocd-cmd-params-cm + optional: true + - name: REDIS_SERVER + valueFrom: + configMapKeyRef: + key: redis.server + name: argocd-cmd-params-cm + optional: true + - name: REDISDB + valueFrom: + configMapKeyRef: + key: redis.db + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_DEFAULT_CACHE_EXPIRATION + valueFrom: + configMapKeyRef: + key: controller.default.cache.expiration + name: argocd-cmd-params-cm + optional: true image: quay.io/argoproj/argocd:latest imagePullPolicy: Always livenessProbe: @@ -1647,8 +1943,11 @@ spec: protocol: TCP - port: 5557 protocol: TCP + - from: + - namespaceSelector: {} + ports: - port: 5558 - protocol: TCP + - protocol: TCP podSelector: matchLabels: app.kubernetes.io/name: argocd-dex-server diff --git a/manifests/install.yaml b/manifests/install.yaml index f76c65199e777..6ff286c735b82 100644 --- a/manifests/install.yaml +++ b/manifests/install.yaml @@ -218,6 +218,30 @@ spec: helm: description: Helm holds helm specific options properties: + externalValueFiles: + description: ValuesFilesExternalValueFiles is a list of + Helm value files to use when generating a template that + come from an external git repo + items: + description: HelmExternalValue are values from other + git repositories + properties: + repoURL: + description: RepoURL is the URL of the external + git repo + type: string + targetRevision: + description: TargetRevision is the revision of the + git repo + type: string + valueFiles: + description: FileParameters are file parameters + to the helm template + items: + type: string + type: array + type: object + type: array fileParameters: description: FileParameters are file parameters to the helm template @@ -314,6 +338,15 @@ spec: description: CommonLabels is a list of additional labels to add to rendered manifests type: object + forceCommonAnnotations: + description: ForceCommonAnnotations specifies whether + to force applying common annotations to resources for + Kustomize apps + type: boolean + forceCommonLabels: + description: ForceCommonLabels specifies whether to force + applying common labels to resources for Kustomize apps + type: boolean images: description: Images is a list of Kustomize image override specifications @@ -443,6 +476,10 @@ spec: properties: group: type: string + jqPathExpressions: + items: + type: string + type: array jsonPointers: items: type: string @@ -454,7 +491,6 @@ spec: namespace: type: string required: - - jsonPointers - kind type: object type: array @@ -559,6 +595,30 @@ spec: helm: description: Helm holds helm specific options properties: + externalValueFiles: + description: ValuesFilesExternalValueFiles is a list of Helm + value files to use when generating a template that come + from an external git repo + items: + description: HelmExternalValue are values from other git + repositories + properties: + repoURL: + description: RepoURL is the URL of the external git + repo + type: string + targetRevision: + description: TargetRevision is the revision of the git + repo + type: string + valueFiles: + description: FileParameters are file parameters to the + helm template + items: + type: string + type: array + type: object + type: array fileParameters: description: FileParameters are file parameters to the helm template @@ -653,6 +713,14 @@ spec: description: CommonLabels is a list of additional labels to add to rendered manifests type: object + forceCommonAnnotations: + description: ForceCommonAnnotations specifies whether to force + applying common annotations to resources for Kustomize apps + type: boolean + forceCommonLabels: + description: ForceCommonLabels specifies whether to force + applying common labels to resources for Kustomize apps + type: boolean images: description: Images is a list of Kustomize image override specifications @@ -915,6 +983,30 @@ spec: helm: description: Helm holds helm specific options properties: + externalValueFiles: + description: ValuesFilesExternalValueFiles is a list + of Helm value files to use when generating a template + that come from an external git repo + items: + description: HelmExternalValue are values from other + git repositories + properties: + repoURL: + description: RepoURL is the URL of the external + git repo + type: string + targetRevision: + description: TargetRevision is the revision of + the git repo + type: string + valueFiles: + description: FileParameters are file parameters + to the helm template + items: + type: string + type: array + type: object + type: array fileParameters: description: FileParameters are file parameters to the helm template @@ -1012,6 +1104,16 @@ spec: description: CommonLabels is a list of additional labels to add to rendered manifests type: object + forceCommonAnnotations: + description: ForceCommonAnnotations specifies whether + to force applying common annotations to resources + for Kustomize apps + type: boolean + forceCommonLabels: + description: ForceCommonLabels specifies whether to + force applying common labels to resources for Kustomize + apps + type: boolean images: description: Images is a list of Kustomize image override specifications @@ -1282,6 +1384,30 @@ spec: helm: description: Helm holds helm specific options properties: + externalValueFiles: + description: ValuesFilesExternalValueFiles is + a list of Helm value files to use when generating + a template that come from an external git repo + items: + description: HelmExternalValue are values from + other git repositories + properties: + repoURL: + description: RepoURL is the URL of the external + git repo + type: string + targetRevision: + description: TargetRevision is the revision + of the git repo + type: string + valueFiles: + description: FileParameters are file parameters + to the helm template + items: + type: string + type: array + type: object + type: array fileParameters: description: FileParameters are file parameters to the helm template @@ -1385,6 +1511,16 @@ spec: description: CommonLabels is a list of additional labels to add to rendered manifests type: object + forceCommonAnnotations: + description: ForceCommonAnnotations specifies + whether to force applying common annotations + to resources for Kustomize apps + type: boolean + forceCommonLabels: + description: ForceCommonLabels specifies whether + to force applying common labels to resources + for Kustomize apps + type: boolean images: description: Images is a list of Kustomize image override specifications @@ -1634,6 +1770,30 @@ spec: helm: description: Helm holds helm specific options properties: + externalValueFiles: + description: ValuesFilesExternalValueFiles is a list + of Helm value files to use when generating a template + that come from an external git repo + items: + description: HelmExternalValue are values from other + git repositories + properties: + repoURL: + description: RepoURL is the URL of the external + git repo + type: string + targetRevision: + description: TargetRevision is the revision + of the git repo + type: string + valueFiles: + description: FileParameters are file parameters + to the helm template + items: + type: string + type: array + type: object + type: array fileParameters: description: FileParameters are file parameters to the helm template @@ -1733,6 +1893,16 @@ spec: description: CommonLabels is a list of additional labels to add to rendered manifests type: object + forceCommonAnnotations: + description: ForceCommonAnnotations specifies whether + to force applying common annotations to resources + for Kustomize apps + type: boolean + forceCommonLabels: + description: ForceCommonLabels specifies whether to + force applying common labels to resources for Kustomize + apps + type: boolean images: description: Images is a list of Kustomize image override specifications @@ -1971,6 +2141,30 @@ spec: helm: description: Helm holds helm specific options properties: + externalValueFiles: + description: ValuesFilesExternalValueFiles is a list + of Helm value files to use when generating a template + that come from an external git repo + items: + description: HelmExternalValue are values from other + git repositories + properties: + repoURL: + description: RepoURL is the URL of the external + git repo + type: string + targetRevision: + description: TargetRevision is the revision + of the git repo + type: string + valueFiles: + description: FileParameters are file parameters + to the helm template + items: + type: string + type: array + type: object + type: array fileParameters: description: FileParameters are file parameters to the helm template @@ -2070,6 +2264,16 @@ spec: description: CommonLabels is a list of additional labels to add to rendered manifests type: object + forceCommonAnnotations: + description: ForceCommonAnnotations specifies whether + to force applying common annotations to resources + for Kustomize apps + type: boolean + forceCommonLabels: + description: ForceCommonLabels specifies whether to + force applying common labels to resources for Kustomize + apps + type: boolean images: description: Images is a list of Kustomize image override specifications @@ -2763,6 +2967,14 @@ metadata: --- apiVersion: v1 kind: ConfigMap +metadata: + labels: + app.kubernetes.io/name: argocd-cmd-params-cm + app.kubernetes.io/part-of: argocd + name: argocd-cmd-params-cm +--- +apiVersion: v1 +kind: ConfigMap metadata: labels: app.kubernetes.io/name: argocd-gpg-keys-cm @@ -3090,6 +3302,72 @@ spec: key: timeout.reconciliation name: argocd-cm optional: true + - name: ARGOCD_REPO_SERVER_LOGFORMAT + valueFrom: + configMapKeyRef: + key: reposerver.log.format + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_REPO_SERVER_LOGLEVEL + valueFrom: + configMapKeyRef: + key: reposerver.log.level + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_REPO_SERVER_PARALLELISM_LIMIT + valueFrom: + configMapKeyRef: + key: reposerver.parallelism.limit + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_REPO_SERVER_DISABLE_TLS + valueFrom: + configMapKeyRef: + key: reposerver.disable.tls + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_TLS_MIN_VERSION + valueFrom: + configMapKeyRef: + key: reposerver.tls.minversion + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_TLS_MAX_VERSION + valueFrom: + configMapKeyRef: + key: reposerver.tls.maxversion + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_TLS_CIPHERS + valueFrom: + configMapKeyRef: + key: reposerver.tls.ciphers + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_REPO_CACHE_EXPIRATION + valueFrom: + configMapKeyRef: + key: reposerver.repo.cache.expiration + name: argocd-cmd-params-cm + optional: true + - name: REDIS_SERVER + valueFrom: + configMapKeyRef: + key: redis.server + name: argocd-cmd-params-cm + optional: true + - name: REDISDB + valueFrom: + configMapKeyRef: + key: redis.db + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_DEFAULT_CACHE_EXPIRATION + valueFrom: + configMapKeyRef: + key: reposerver.default.cache.expiration + name: argocd-cmd-params-cm + optional: true image: quay.io/argoproj/argocd:latest imagePullPolicy: Always livenessProbe: @@ -3192,6 +3470,145 @@ spec: - argocd-server - --staticassets - /shared/app + env: + - name: ARGOCD_SERVER_INSECURE + valueFrom: + configMapKeyRef: + key: server.insecure + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_SERVER_BASEHREF + valueFrom: + configMapKeyRef: + key: server.basehref + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_SERVER_ROOTPATH + valueFrom: + configMapKeyRef: + key: server.rootpath + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_SERVER_LOGFORMAT + valueFrom: + configMapKeyRef: + key: server.log.format + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_REPO_SERVER_LOGLEVEL + valueFrom: + configMapKeyRef: + key: server.log.level + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_SERVER_REPO_SERVER + valueFrom: + configMapKeyRef: + key: repo.server + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_SERVER_DEX_SERVER + valueFrom: + configMapKeyRef: + key: server.dex.server + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_SERVER_DISABLE_AUTH + valueFrom: + configMapKeyRef: + key: server.disable.auth + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_SERVER_ENABLE_GZIP + valueFrom: + configMapKeyRef: + key: server.enable.gzip + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_SERVER_REPO_SERVER_TIMEOUT_SECONDS + valueFrom: + configMapKeyRef: + key: server.repo.server.timeout.seconds + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_SERVER_X_FRAME_OPTIONS + valueFrom: + configMapKeyRef: + key: server.x.frame.options + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_SERVER_REPO_SERVER_PLAINTEXT + valueFrom: + configMapKeyRef: + key: server.repo.server.plaintext + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_SERVER_REPO_SERVER_STRICT_TLS + valueFrom: + configMapKeyRef: + key: server.repo.server.strict.tls + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_TLS_MIN_VERSION + valueFrom: + configMapKeyRef: + key: server.tls.minversion + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_TLS_MAX_VERSION + valueFrom: + configMapKeyRef: + key: server.tls.maxversion + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_TLS_CIPHERS + valueFrom: + configMapKeyRef: + key: server.tls.ciphers + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_SERVER_CONNECTION_STATUS_CACHE_EXPIRATION + valueFrom: + configMapKeyRef: + key: server.connection.status.cache.expiration + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_SERVER_OIDC_CACHE_EXPIRATION + valueFrom: + configMapKeyRef: + key: server.oidc.cache.expiration + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_SERVER_LOGIN_ATTEMPTS_EXPIRATION + valueFrom: + configMapKeyRef: + key: server.login.attempts.expiration + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_APP_STATE_CACHE_EXPIRATION + valueFrom: + configMapKeyRef: + key: server.app.state.cache.expiration + name: argocd-cmd-params-cm + optional: true + - name: REDIS_SERVER + valueFrom: + configMapKeyRef: + key: redis.server + name: argocd-cmd-params-cm + optional: true + - name: REDISDB + valueFrom: + configMapKeyRef: + key: redis.db + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_DEFAULT_CACHE_EXPIRATION + valueFrom: + configMapKeyRef: + key: server.default.cache.expiration + name: argocd-cmd-params-cm + optional: true image: quay.io/argoproj/argocd:latest imagePullPolicy: Always livenessProbe: @@ -3291,10 +3708,6 @@ spec: containers: - command: - argocd-application-controller - - --status-processors - - "20" - - --operation-processors - - "10" env: - name: ARGOCD_RECONCILIATION_TIMEOUT valueFrom: @@ -3302,6 +3715,90 @@ spec: key: timeout.reconciliation name: argocd-cm optional: true + - name: ARGOCD_APPLICATION_CONTROLLER_REPO_SERVER + valueFrom: + configMapKeyRef: + key: repo.server + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_APPLICATION_CONTROLLER_REPO_SERVER_TIMEOUT_SECONDS + valueFrom: + configMapKeyRef: + key: controller.repo.server.timeout.seconds + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_APPLICATION_CONTROLLER_STATUS_PROCESSORS + valueFrom: + configMapKeyRef: + key: controller.status.processors + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_APPLICATION_CONTROLLER_OPERATION_PROCESSORS + valueFrom: + configMapKeyRef: + key: controller.operation.processors + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_APPLICATION_CONTROLLER_LOGFORMAT + valueFrom: + configMapKeyRef: + key: controller.log.format + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_APPLICATION_CONTROLLER_LOGLEVEL + valueFrom: + configMapKeyRef: + key: controller.log.level + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_APPLICATION_CONTROLLER_METRICS_CACHE_EXPIRATION + valueFrom: + configMapKeyRef: + key: controller.metrics.cache.expiration + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_APPLICATION_CONTROLLER_SELF_HEAL_TIMEOUT_SECONDS + valueFrom: + configMapKeyRef: + key: controller.self.heal.timeout.seconds + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_APPLICATION_CONTROLLER_REPO_SERVER_PLAINTEXT + valueFrom: + configMapKeyRef: + key: controller.repo.server.plaintext + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_APPLICATION_CONTROLLER_REPO_SERVER_STRICT_TLS + valueFrom: + configMapKeyRef: + key: controller.repo.server.strict.tls + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_APP_STATE_CACHE_EXPIRATION + valueFrom: + configMapKeyRef: + key: controller.app.state.cache.expiration + name: argocd-cmd-params-cm + optional: true + - name: REDIS_SERVER + valueFrom: + configMapKeyRef: + key: redis.server + name: argocd-cmd-params-cm + optional: true + - name: REDISDB + valueFrom: + configMapKeyRef: + key: redis.db + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_DEFAULT_CACHE_EXPIRATION + valueFrom: + configMapKeyRef: + key: controller.default.cache.expiration + name: argocd-cmd-params-cm + optional: true image: quay.io/argoproj/argocd:latest imagePullPolicy: Always livenessProbe: @@ -3374,8 +3871,11 @@ spec: protocol: TCP - port: 5557 protocol: TCP + - from: + - namespaceSelector: {} + ports: - port: 5558 - protocol: TCP + - protocol: TCP podSelector: matchLabels: app.kubernetes.io/name: argocd-dex-server diff --git a/manifests/namespace-install.yaml b/manifests/namespace-install.yaml index 4552bb698c29a..545727ac5cf27 100644 --- a/manifests/namespace-install.yaml +++ b/manifests/namespace-install.yaml @@ -210,6 +210,14 @@ metadata: --- apiVersion: v1 kind: ConfigMap +metadata: + labels: + app.kubernetes.io/name: argocd-cmd-params-cm + app.kubernetes.io/part-of: argocd + name: argocd-cmd-params-cm +--- +apiVersion: v1 +kind: ConfigMap metadata: labels: app.kubernetes.io/name: argocd-gpg-keys-cm @@ -537,6 +545,72 @@ spec: key: timeout.reconciliation name: argocd-cm optional: true + - name: ARGOCD_REPO_SERVER_LOGFORMAT + valueFrom: + configMapKeyRef: + key: reposerver.log.format + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_REPO_SERVER_LOGLEVEL + valueFrom: + configMapKeyRef: + key: reposerver.log.level + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_REPO_SERVER_PARALLELISM_LIMIT + valueFrom: + configMapKeyRef: + key: reposerver.parallelism.limit + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_REPO_SERVER_DISABLE_TLS + valueFrom: + configMapKeyRef: + key: reposerver.disable.tls + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_TLS_MIN_VERSION + valueFrom: + configMapKeyRef: + key: reposerver.tls.minversion + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_TLS_MAX_VERSION + valueFrom: + configMapKeyRef: + key: reposerver.tls.maxversion + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_TLS_CIPHERS + valueFrom: + configMapKeyRef: + key: reposerver.tls.ciphers + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_REPO_CACHE_EXPIRATION + valueFrom: + configMapKeyRef: + key: reposerver.repo.cache.expiration + name: argocd-cmd-params-cm + optional: true + - name: REDIS_SERVER + valueFrom: + configMapKeyRef: + key: redis.server + name: argocd-cmd-params-cm + optional: true + - name: REDISDB + valueFrom: + configMapKeyRef: + key: redis.db + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_DEFAULT_CACHE_EXPIRATION + valueFrom: + configMapKeyRef: + key: reposerver.default.cache.expiration + name: argocd-cmd-params-cm + optional: true image: quay.io/argoproj/argocd:latest imagePullPolicy: Always livenessProbe: @@ -639,6 +713,145 @@ spec: - argocd-server - --staticassets - /shared/app + env: + - name: ARGOCD_SERVER_INSECURE + valueFrom: + configMapKeyRef: + key: server.insecure + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_SERVER_BASEHREF + valueFrom: + configMapKeyRef: + key: server.basehref + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_SERVER_ROOTPATH + valueFrom: + configMapKeyRef: + key: server.rootpath + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_SERVER_LOGFORMAT + valueFrom: + configMapKeyRef: + key: server.log.format + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_REPO_SERVER_LOGLEVEL + valueFrom: + configMapKeyRef: + key: server.log.level + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_SERVER_REPO_SERVER + valueFrom: + configMapKeyRef: + key: repo.server + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_SERVER_DEX_SERVER + valueFrom: + configMapKeyRef: + key: server.dex.server + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_SERVER_DISABLE_AUTH + valueFrom: + configMapKeyRef: + key: server.disable.auth + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_SERVER_ENABLE_GZIP + valueFrom: + configMapKeyRef: + key: server.enable.gzip + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_SERVER_REPO_SERVER_TIMEOUT_SECONDS + valueFrom: + configMapKeyRef: + key: server.repo.server.timeout.seconds + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_SERVER_X_FRAME_OPTIONS + valueFrom: + configMapKeyRef: + key: server.x.frame.options + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_SERVER_REPO_SERVER_PLAINTEXT + valueFrom: + configMapKeyRef: + key: server.repo.server.plaintext + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_SERVER_REPO_SERVER_STRICT_TLS + valueFrom: + configMapKeyRef: + key: server.repo.server.strict.tls + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_TLS_MIN_VERSION + valueFrom: + configMapKeyRef: + key: server.tls.minversion + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_TLS_MAX_VERSION + valueFrom: + configMapKeyRef: + key: server.tls.maxversion + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_TLS_CIPHERS + valueFrom: + configMapKeyRef: + key: server.tls.ciphers + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_SERVER_CONNECTION_STATUS_CACHE_EXPIRATION + valueFrom: + configMapKeyRef: + key: server.connection.status.cache.expiration + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_SERVER_OIDC_CACHE_EXPIRATION + valueFrom: + configMapKeyRef: + key: server.oidc.cache.expiration + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_SERVER_LOGIN_ATTEMPTS_EXPIRATION + valueFrom: + configMapKeyRef: + key: server.login.attempts.expiration + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_APP_STATE_CACHE_EXPIRATION + valueFrom: + configMapKeyRef: + key: server.app.state.cache.expiration + name: argocd-cmd-params-cm + optional: true + - name: REDIS_SERVER + valueFrom: + configMapKeyRef: + key: redis.server + name: argocd-cmd-params-cm + optional: true + - name: REDISDB + valueFrom: + configMapKeyRef: + key: redis.db + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_DEFAULT_CACHE_EXPIRATION + valueFrom: + configMapKeyRef: + key: server.default.cache.expiration + name: argocd-cmd-params-cm + optional: true image: quay.io/argoproj/argocd:latest imagePullPolicy: Always livenessProbe: @@ -738,10 +951,6 @@ spec: containers: - command: - argocd-application-controller - - --status-processors - - "20" - - --operation-processors - - "10" env: - name: ARGOCD_RECONCILIATION_TIMEOUT valueFrom: @@ -749,6 +958,90 @@ spec: key: timeout.reconciliation name: argocd-cm optional: true + - name: ARGOCD_APPLICATION_CONTROLLER_REPO_SERVER + valueFrom: + configMapKeyRef: + key: repo.server + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_APPLICATION_CONTROLLER_REPO_SERVER_TIMEOUT_SECONDS + valueFrom: + configMapKeyRef: + key: controller.repo.server.timeout.seconds + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_APPLICATION_CONTROLLER_STATUS_PROCESSORS + valueFrom: + configMapKeyRef: + key: controller.status.processors + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_APPLICATION_CONTROLLER_OPERATION_PROCESSORS + valueFrom: + configMapKeyRef: + key: controller.operation.processors + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_APPLICATION_CONTROLLER_LOGFORMAT + valueFrom: + configMapKeyRef: + key: controller.log.format + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_APPLICATION_CONTROLLER_LOGLEVEL + valueFrom: + configMapKeyRef: + key: controller.log.level + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_APPLICATION_CONTROLLER_METRICS_CACHE_EXPIRATION + valueFrom: + configMapKeyRef: + key: controller.metrics.cache.expiration + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_APPLICATION_CONTROLLER_SELF_HEAL_TIMEOUT_SECONDS + valueFrom: + configMapKeyRef: + key: controller.self.heal.timeout.seconds + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_APPLICATION_CONTROLLER_REPO_SERVER_PLAINTEXT + valueFrom: + configMapKeyRef: + key: controller.repo.server.plaintext + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_APPLICATION_CONTROLLER_REPO_SERVER_STRICT_TLS + valueFrom: + configMapKeyRef: + key: controller.repo.server.strict.tls + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_APP_STATE_CACHE_EXPIRATION + valueFrom: + configMapKeyRef: + key: controller.app.state.cache.expiration + name: argocd-cmd-params-cm + optional: true + - name: REDIS_SERVER + valueFrom: + configMapKeyRef: + key: redis.server + name: argocd-cmd-params-cm + optional: true + - name: REDISDB + valueFrom: + configMapKeyRef: + key: redis.db + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_DEFAULT_CACHE_EXPIRATION + valueFrom: + configMapKeyRef: + key: controller.default.cache.expiration + name: argocd-cmd-params-cm + optional: true image: quay.io/argoproj/argocd:latest imagePullPolicy: Always livenessProbe: @@ -821,8 +1114,11 @@ spec: protocol: TCP - port: 5557 protocol: TCP + - from: + - namespaceSelector: {} + ports: - port: 5558 - protocol: TCP + - protocol: TCP podSelector: matchLabels: app.kubernetes.io/name: argocd-dex-server diff --git a/mkdocs.yml b/mkdocs.yml index 81795c19c1a9e..303e646f4347f 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -62,6 +62,7 @@ nav: - operator-manual/server-commands/argocd-application-controller.md - operator-manual/server-commands/argocd-repo-server.md - operator-manual/server-commands/argocd-dex.md + - operator-manual/server-commands/additional-configuration-method.md - argocd-util Tools: operator-manual/server-commands/argocd-util.md - Upgrading: - operator-manual/upgrading/overview.md diff --git a/pkg/apiclient/account/account.pb.go b/pkg/apiclient/account/account.pb.go index cf0df3475b596..d7015a3c31556 100644 --- a/pkg/apiclient/account/account.pb.go +++ b/pkg/apiclient/account/account.pb.go @@ -2072,10 +2072,7 @@ func (m *UpdatePasswordRequest) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthAccount - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthAccount } if (iNdEx + skippy) > l { @@ -2126,10 +2123,7 @@ func (m *UpdatePasswordResponse) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthAccount - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthAccount } if (iNdEx + skippy) > l { @@ -2276,10 +2270,7 @@ func (m *CanIRequest) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthAccount - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthAccount } if (iNdEx + skippy) > l { @@ -2362,10 +2353,7 @@ func (m *CanIResponse) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthAccount - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthAccount } if (iNdEx + skippy) > l { @@ -2448,10 +2436,7 @@ func (m *GetAccountRequest) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthAccount - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthAccount } if (iNdEx + skippy) > l { @@ -2620,10 +2605,7 @@ func (m *Account) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthAccount - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthAccount } if (iNdEx + skippy) > l { @@ -2708,10 +2690,7 @@ func (m *AccountsList) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthAccount - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthAccount } if (iNdEx + skippy) > l { @@ -2832,10 +2811,7 @@ func (m *Token) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthAccount - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthAccount } if (iNdEx + skippy) > l { @@ -2920,10 +2896,7 @@ func (m *TokensList) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthAccount - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthAccount } if (iNdEx + skippy) > l { @@ -3057,10 +3030,7 @@ func (m *CreateTokenRequest) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthAccount - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthAccount } if (iNdEx + skippy) > l { @@ -3143,10 +3113,7 @@ func (m *CreateTokenResponse) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthAccount - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthAccount } if (iNdEx + skippy) > l { @@ -3261,10 +3228,7 @@ func (m *DeleteTokenRequest) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthAccount - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthAccount } if (iNdEx + skippy) > l { @@ -3315,10 +3279,7 @@ func (m *ListAccountRequest) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthAccount - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthAccount } if (iNdEx + skippy) > l { @@ -3369,10 +3330,7 @@ func (m *EmptyResponse) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthAccount - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthAccount } if (iNdEx + skippy) > l { diff --git a/pkg/apiclient/apiclient.go b/pkg/apiclient/apiclient.go index 656c322745a79..5d5a7fe2e719a 100644 --- a/pkg/apiclient/apiclient.go +++ b/pkg/apiclient/apiclient.go @@ -19,6 +19,8 @@ import ( "github.com/coreos/go-oidc" "github.com/dgrijalva/jwt-go/v4" "github.com/golang/protobuf/ptypes/empty" + grpc_middleware "github.com/grpc-ecosystem/go-grpc-middleware" + grpc_retry "github.com/grpc-ecosystem/go-grpc-middleware/retry" log "github.com/sirupsen/logrus" "golang.org/x/oauth2" "google.golang.org/grpc" @@ -133,6 +135,7 @@ type client struct { proxyListener net.Listener proxyServer *grpc.Server proxyUsersCount int + httpClient *http.Client } // NewClient creates a new API client from a set of config options. @@ -252,6 +255,16 @@ func NewClient(opts *ClientOptions) (Client, error) { if opts.GRPCWebRootPath != "" { c.GRPCWebRootPath = opts.GRPCWebRootPath } + c.httpClient = &http.Client{} + if !c.PlainText { + tlsConfig, err := c.tlsConfig() + if err != nil { + return nil, err + } + c.httpClient.Transport = &http.Transport{ + TLSClientConfig: tlsConfig, + } + } if !c.GRPCWeb { //test if we need to set it to true //if a call to grpc failed, then try again with GRPCWeb @@ -471,9 +484,15 @@ func (c *client) newConn() (*grpc.ClientConn, io.Closer, error) { endpointCredentials := jwtCredentials{ Token: c.AuthToken, } + retryOpts := []grpc_retry.CallOption{ + grpc_retry.WithMax(3), + grpc_retry.WithBackoff(grpc_retry.BackoffLinear(1000 * time.Millisecond)), + } var dialOpts []grpc.DialOption dialOpts = append(dialOpts, grpc.WithPerRPCCredentials(endpointCredentials)) dialOpts = append(dialOpts, grpc.WithDefaultCallOptions(grpc.MaxCallRecvMsgSize(MaxGRPCMessageSize), grpc.MaxCallSendMsgSize(MaxGRPCMessageSize))) + dialOpts = append(dialOpts, grpc.WithStreamInterceptor(grpc_retry.StreamClientInterceptor(retryOpts...))) + dialOpts = append(dialOpts, grpc.WithUnaryInterceptor(grpc_middleware.ChainUnaryClient(grpc_retry.UnaryClientInterceptor(retryOpts...)))) ctx := context.Background() diff --git a/pkg/apiclient/application/application.pb.go b/pkg/apiclient/application/application.pb.go index 5845a91a80b04..beeed65a0544e 100644 --- a/pkg/apiclient/application/application.pb.go +++ b/pkg/apiclient/application/application.pb.go @@ -5806,10 +5806,7 @@ func (m *ApplicationQuery) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthApplication - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthApplication } if (iNdEx + skippy) > l { @@ -5893,10 +5890,7 @@ func (m *NodeQuery) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthApplication - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthApplication } if (iNdEx + skippy) > l { @@ -6016,10 +6010,7 @@ func (m *RevisionMetadataQuery) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthApplication - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthApplication } if (iNdEx + skippy) > l { @@ -6210,10 +6201,7 @@ func (m *ApplicationResourceEventsQuery) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthApplication - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthApplication } if (iNdEx + skippy) > l { @@ -6343,10 +6331,7 @@ func (m *ApplicationManifestQuery) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthApplication - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthApplication } if (iNdEx + skippy) > l { @@ -6400,10 +6385,7 @@ func (m *ApplicationResponse) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthApplication - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthApplication } if (iNdEx + skippy) > l { @@ -6531,10 +6513,7 @@ func (m *ApplicationCreateRequest) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthApplication - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthApplication } if (iNdEx + skippy) > l { @@ -6647,10 +6626,7 @@ func (m *ApplicationUpdateRequest) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthApplication - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthApplication } if (iNdEx + skippy) > l { @@ -6793,10 +6769,7 @@ func (m *ApplicationDeleteRequest) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthApplication - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthApplication } if (iNdEx + skippy) > l { @@ -6882,10 +6855,7 @@ func (m *SyncOptions) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthApplication - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthApplication } if (iNdEx + skippy) > l { @@ -7251,10 +7221,7 @@ func (m *ApplicationSyncRequest) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthApplication - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthApplication } if (iNdEx + skippy) > l { @@ -7398,10 +7365,7 @@ func (m *ApplicationUpdateSpecRequest) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthApplication - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthApplication } if (iNdEx + skippy) > l { @@ -7559,10 +7523,7 @@ func (m *ApplicationPatchRequest) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthApplication - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthApplication } if (iNdEx + skippy) > l { @@ -7717,10 +7678,7 @@ func (m *ApplicationRollbackRequest) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthApplication - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthApplication } if (iNdEx + skippy) > l { @@ -7977,10 +7935,7 @@ func (m *ApplicationResourceRequest) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthApplication - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthApplication } if (iNdEx + skippy) > l { @@ -8315,10 +8270,7 @@ func (m *ApplicationResourcePatchRequest) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthApplication - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthApplication } if (iNdEx + skippy) > l { @@ -8635,10 +8587,7 @@ func (m *ApplicationResourceDeleteRequest) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthApplication - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthApplication } if (iNdEx + skippy) > l { @@ -8940,10 +8889,7 @@ func (m *ResourceActionRunRequest) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthApplication - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthApplication } if (iNdEx + skippy) > l { @@ -9049,10 +8995,7 @@ func (m *ResourceActionsListResponse) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthApplication - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthApplication } if (iNdEx + skippy) > l { @@ -9137,10 +9080,7 @@ func (m *ApplicationResourceResponse) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthApplication - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthApplication } if (iNdEx + skippy) > l { @@ -9590,10 +9530,7 @@ func (m *ApplicationPodLogsQuery) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthApplication - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthApplication } if (iNdEx + skippy) > l { @@ -9817,10 +9754,7 @@ func (m *LogEntry) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthApplication - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthApplication } if (iNdEx + skippy) > l { @@ -9921,10 +9855,7 @@ func (m *OperationTerminateRequest) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthApplication - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthApplication } if (iNdEx + skippy) > l { @@ -10013,10 +9944,7 @@ func (m *ApplicationSyncWindowsQuery) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthApplication - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthApplication } if (iNdEx + skippy) > l { @@ -10161,10 +10089,7 @@ func (m *ApplicationSyncWindowsResponse) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthApplication - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthApplication } if (iNdEx + skippy) > l { @@ -10343,10 +10268,7 @@ func (m *ApplicationSyncWindow) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthApplication - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthApplication } if (iNdEx + skippy) > l { @@ -10409,10 +10331,7 @@ func (m *OperationTerminateResponse) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthApplication - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthApplication } if (iNdEx + skippy) > l { @@ -10658,10 +10577,7 @@ func (m *ResourcesQuery) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthApplication - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthApplication } if (iNdEx + skippy) > l { @@ -10749,10 +10665,7 @@ func (m *ManagedResourcesResponse) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthApplication - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthApplication } if (iNdEx + skippy) > l { diff --git a/pkg/apiclient/certificate/certificate.pb.go b/pkg/apiclient/certificate/certificate.pb.go index 11247f6fff66e..e4cb34b386de0 100644 --- a/pkg/apiclient/certificate/certificate.pb.go +++ b/pkg/apiclient/certificate/certificate.pb.go @@ -726,10 +726,7 @@ func (m *RepositoryCertificateQuery) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthCertificate - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthCertificate } if (iNdEx + skippy) > l { @@ -836,10 +833,7 @@ func (m *RepositoryCertificateCreateRequest) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthCertificate - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthCertificate } if (iNdEx + skippy) > l { @@ -890,10 +884,7 @@ func (m *RepositoryCertificateResponse) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthCertificate - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthCertificate } if (iNdEx + skippy) > l { diff --git a/pkg/apiclient/cluster/cluster.pb.go b/pkg/apiclient/cluster/cluster.pb.go index 1d1e09f5a1c07..0c2dd04afde33 100644 --- a/pkg/apiclient/cluster/cluster.pb.go +++ b/pkg/apiclient/cluster/cluster.pb.go @@ -952,10 +952,7 @@ func (m *ClusterQuery) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthCluster - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthCluster } if (iNdEx + skippy) > l { @@ -1006,10 +1003,7 @@ func (m *ClusterResponse) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthCluster - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthCluster } if (iNdEx + skippy) > l { @@ -1116,10 +1110,7 @@ func (m *ClusterCreateRequest) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthCluster - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthCluster } if (iNdEx + skippy) > l { @@ -1238,10 +1229,7 @@ func (m *ClusterUpdateRequest) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthCluster - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthCluster } if (iNdEx + skippy) > l { diff --git a/pkg/apiclient/gpgkey/gpgkey.pb.go b/pkg/apiclient/gpgkey/gpgkey.pb.go index 7d79ec26b0055..0b75ebd145843 100644 --- a/pkg/apiclient/gpgkey/gpgkey.pb.go +++ b/pkg/apiclient/gpgkey/gpgkey.pb.go @@ -789,10 +789,7 @@ func (m *GnuPGPublicKeyQuery) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGpgkey - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGpgkey } if (iNdEx + skippy) > l { @@ -899,10 +896,7 @@ func (m *GnuPGPublicKeyCreateRequest) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGpgkey - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGpgkey } if (iNdEx + skippy) > l { @@ -1021,10 +1015,7 @@ func (m *GnuPGPublicKeyCreateResponse) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGpgkey - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGpgkey } if (iNdEx + skippy) > l { @@ -1075,10 +1066,7 @@ func (m *GnuPGPublicKeyResponse) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGpgkey - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGpgkey } if (iNdEx + skippy) > l { diff --git a/pkg/apiclient/grpcproxy.go b/pkg/apiclient/grpcproxy.go index 13c0fcb5cbf5e..be1bf08a37dd9 100644 --- a/pkg/apiclient/grpcproxy.go +++ b/pkg/apiclient/grpcproxy.go @@ -77,18 +77,7 @@ func (c *client) executeRequest(fullMethodName string, msg []byte, md metadata.M } req.Header.Set("content-type", "application/grpc-web+proto") - client := &http.Client{} - if !c.PlainText { - tlsConfig, err := c.tlsConfig() - if err != nil { - return nil, err - } - client.Transport = &http.Transport{ - TLSClientConfig: tlsConfig, - } - } - - resp, err := client.Do(req) + resp, err := c.httpClient.Do(req) if err != nil { return nil, err } @@ -125,7 +114,7 @@ func (c *client) startGRPCProxy() (*grpc.Server, net.Listener, error) { return fmt.Errorf("Unable to get method name from stream context.") } msg := make([]byte, 0) - err = stream.RecvMsg(&msg) + err := stream.RecvMsg(&msg) if err != nil { return err } @@ -149,10 +138,11 @@ func (c *client) startGRPCProxy() (*grpc.Server, net.Listener, error) { argoio.Close(resp.Body) }() defer argoio.Close(resp.Body) + c.httpClient.CloseIdleConnections() for { header := make([]byte, frameHeaderLength) - if _, err := resp.Body.Read(header); err != nil { + if _, err := io.ReadAtLeast(resp.Body, header, frameHeaderLength); err != nil { if err == io.EOF { err = io.ErrUnexpectedEOF } diff --git a/pkg/apiclient/project/project.pb.go b/pkg/apiclient/project/project.pb.go index 30c670bb8f279..86171d8edde12 100644 --- a/pkg/apiclient/project/project.pb.go +++ b/pkg/apiclient/project/project.pb.go @@ -1774,10 +1774,7 @@ func (m *ProjectCreateRequest) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthProject - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthProject } if (iNdEx + skippy) > l { @@ -1943,10 +1940,7 @@ func (m *ProjectTokenDeleteRequest) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthProject - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthProject } if (iNdEx + skippy) > l { @@ -2144,10 +2138,7 @@ func (m *ProjectTokenCreateRequest) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthProject - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthProject } if (iNdEx + skippy) > l { @@ -2230,10 +2221,7 @@ func (m *ProjectTokenResponse) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthProject - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthProject } if (iNdEx + skippy) > l { @@ -2316,10 +2304,7 @@ func (m *ProjectQuery) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthProject - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthProject } if (iNdEx + skippy) > l { @@ -2406,10 +2391,7 @@ func (m *ProjectUpdateRequest) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthProject - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthProject } if (iNdEx + skippy) > l { @@ -2460,10 +2442,7 @@ func (m *EmptyResponse) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthProject - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthProject } if (iNdEx + skippy) > l { @@ -2546,10 +2525,7 @@ func (m *SyncWindowsQuery) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthProject - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthProject } if (iNdEx + skippy) > l { @@ -2634,10 +2610,7 @@ func (m *SyncWindowsResponse) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthProject - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthProject } if (iNdEx + skippy) > l { @@ -2722,10 +2695,7 @@ func (m *GlobalProjectsResponse) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthProject - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthProject } if (iNdEx + skippy) > l { diff --git a/pkg/apiclient/repocreds/repocreds.pb.go b/pkg/apiclient/repocreds/repocreds.pb.go index 24d8cd7936dc3..74d47ea1699ae 100644 --- a/pkg/apiclient/repocreds/repocreds.pb.go +++ b/pkg/apiclient/repocreds/repocreds.pb.go @@ -864,10 +864,7 @@ func (m *RepoCredsQuery) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthRepocreds - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthRepocreds } if (iNdEx + skippy) > l { @@ -950,10 +947,7 @@ func (m *RepoCredsDeleteRequest) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthRepocreds - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthRepocreds } if (iNdEx + skippy) > l { @@ -1004,10 +998,7 @@ func (m *RepoCredsResponse) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthRepocreds - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthRepocreds } if (iNdEx + skippy) > l { @@ -1114,10 +1105,7 @@ func (m *RepoCredsCreateRequest) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthRepocreds - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthRepocreds } if (iNdEx + skippy) > l { @@ -1204,10 +1192,7 @@ func (m *RepoCredsUpdateRequest) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthRepocreds - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthRepocreds } if (iNdEx + skippy) > l { diff --git a/pkg/apiclient/repository/repository.pb.go b/pkg/apiclient/repository/repository.pb.go index 5e5488352313c..ff0239297c84d 100644 --- a/pkg/apiclient/repository/repository.pb.go +++ b/pkg/apiclient/repository/repository.pb.go @@ -2086,10 +2086,7 @@ func (m *RepoAppsQuery) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthRepository - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthRepository } if (iNdEx + skippy) > l { @@ -2204,10 +2201,7 @@ func (m *AppInfo) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthRepository - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthRepository } if (iNdEx + skippy) > l { @@ -2326,10 +2320,7 @@ func (m *RepoAppDetailsQuery) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthRepository - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthRepository } if (iNdEx + skippy) > l { @@ -2414,10 +2405,7 @@ func (m *RepoAppsResponse) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthRepository - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthRepository } if (iNdEx + skippy) > l { @@ -2520,10 +2508,7 @@ func (m *RepoQuery) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthRepository - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthRepository } if (iNdEx + skippy) > l { @@ -2972,10 +2957,7 @@ func (m *RepoAccessQuery) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthRepository - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthRepository } if (iNdEx + skippy) > l { @@ -3026,10 +3008,7 @@ func (m *RepoResponse) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthRepository - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthRepository } if (iNdEx + skippy) > l { @@ -3156,10 +3135,7 @@ func (m *RepoCreateRequest) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthRepository - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthRepository } if (iNdEx + skippy) > l { @@ -3246,10 +3222,7 @@ func (m *RepoUpdateRequest) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthRepository - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthRepository } if (iNdEx + skippy) > l { diff --git a/pkg/apiclient/session/session.pb.go b/pkg/apiclient/session/session.pb.go index fbf5c8a8cfa03..59ec68cf2a2c7 100644 --- a/pkg/apiclient/session/session.pb.go +++ b/pkg/apiclient/session/session.pb.go @@ -931,10 +931,7 @@ func (m *SessionCreateRequest) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthSession - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthSession } if (iNdEx + skippy) > l { @@ -985,10 +982,7 @@ func (m *SessionDeleteRequest) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthSession - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthSession } if (iNdEx + skippy) > l { @@ -1071,10 +1065,7 @@ func (m *SessionResponse) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthSession - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthSession } if (iNdEx + skippy) > l { @@ -1125,10 +1116,7 @@ func (m *GetUserInfoRequest) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthSession - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthSession } if (iNdEx + skippy) > l { @@ -1295,10 +1283,7 @@ func (m *GetUserInfoResponse) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthSession - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthSession } if (iNdEx + skippy) > l { diff --git a/pkg/apiclient/settings/settings.pb.go b/pkg/apiclient/settings/settings.pb.go index fed4b8fb90a88..ae457848ee6b1 100644 --- a/pkg/apiclient/settings/settings.pb.go +++ b/pkg/apiclient/settings/settings.pb.go @@ -1573,10 +1573,7 @@ func (m *SettingsQuery) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthSettings - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthSettings } if (iNdEx + skippy) > l { @@ -1875,7 +1872,7 @@ func (m *Settings) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthSettings } if (iNdEx + skippy) > postIndex { @@ -2236,10 +2233,7 @@ func (m *Settings) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthSettings - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthSettings } if (iNdEx + skippy) > l { @@ -2342,10 +2336,7 @@ func (m *GoogleAnalyticsConfig) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthSettings - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthSettings } if (iNdEx + skippy) > l { @@ -2460,10 +2451,7 @@ func (m *Help) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthSettings - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthSettings } if (iNdEx + skippy) > l { @@ -2546,10 +2534,7 @@ func (m *Plugin) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthSettings - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthSettings } if (iNdEx + skippy) > l { @@ -2634,10 +2619,7 @@ func (m *DexConfig) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthSettings - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthSettings } if (iNdEx + skippy) > l { @@ -2752,10 +2734,7 @@ func (m *Connector) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthSettings - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthSettings } if (iNdEx + skippy) > l { @@ -3078,7 +3057,7 @@ func (m *OIDCConfig) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthSettings } if (iNdEx + skippy) > postIndex { @@ -3095,10 +3074,7 @@ func (m *OIDCConfig) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthSettings - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthSettings } if (iNdEx + skippy) > l { diff --git a/pkg/apiclient/version/version.pb.go b/pkg/apiclient/version/version.pb.go index fcfa285bf7fc1..78a7be47ca2ff 100644 --- a/pkg/apiclient/version/version.pb.go +++ b/pkg/apiclient/version/version.pb.go @@ -11,11 +11,11 @@ import ( context "context" fmt "fmt" proto "github.com/gogo/protobuf/proto" - empty "github.com/golang/protobuf/ptypes/empty" _ "google.golang.org/genproto/googleapis/api/annotations" grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" status "google.golang.org/grpc/status" + emptypb "google.golang.org/protobuf/types/known/emptypb" io "io" math "math" math_bits "math/bits" @@ -225,7 +225,7 @@ const _ = grpc.SupportPackageIsVersion4 // For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. type VersionServiceClient interface { // Version returns version information of the API server - Version(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*VersionMessage, error) + Version(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*VersionMessage, error) } type versionServiceClient struct { @@ -236,7 +236,7 @@ func NewVersionServiceClient(cc *grpc.ClientConn) VersionServiceClient { return &versionServiceClient{cc} } -func (c *versionServiceClient) Version(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*VersionMessage, error) { +func (c *versionServiceClient) Version(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*VersionMessage, error) { out := new(VersionMessage) err := c.cc.Invoke(ctx, "/version.VersionService/Version", in, out, opts...) if err != nil { @@ -248,14 +248,14 @@ func (c *versionServiceClient) Version(ctx context.Context, in *empty.Empty, opt // VersionServiceServer is the server API for VersionService service. type VersionServiceServer interface { // Version returns version information of the API server - Version(context.Context, *empty.Empty) (*VersionMessage, error) + Version(context.Context, *emptypb.Empty) (*VersionMessage, error) } // UnimplementedVersionServiceServer can be embedded to have forward compatible implementations. type UnimplementedVersionServiceServer struct { } -func (*UnimplementedVersionServiceServer) Version(ctx context.Context, req *empty.Empty) (*VersionMessage, error) { +func (*UnimplementedVersionServiceServer) Version(ctx context.Context, req *emptypb.Empty) (*VersionMessage, error) { return nil, status.Errorf(codes.Unimplemented, "method Version not implemented") } @@ -264,7 +264,7 @@ func RegisterVersionServiceServer(s *grpc.Server, srv VersionServiceServer) { } func _VersionService_Version_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(empty.Empty) + in := new(emptypb.Empty) if err := dec(in); err != nil { return nil, err } @@ -276,7 +276,7 @@ func _VersionService_Version_Handler(srv interface{}, ctx context.Context, dec f FullMethod: "/version.VersionService/Version", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(VersionServiceServer).Version(ctx, req.(*empty.Empty)) + return srv.(VersionServiceServer).Version(ctx, req.(*emptypb.Empty)) } return interceptor(ctx, in, info, handler) } @@ -944,10 +944,7 @@ func (m *VersionMessage) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthVersion - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthVersion } if (iNdEx + skippy) > l { diff --git a/pkg/apiclient/version/version.pb.gw.go b/pkg/apiclient/version/version.pb.gw.go index da205bd1116c4..e1fabc7541c3e 100644 --- a/pkg/apiclient/version/version.pb.gw.go +++ b/pkg/apiclient/version/version.pb.gw.go @@ -15,7 +15,6 @@ import ( "github.com/golang/protobuf/descriptor" "github.com/golang/protobuf/proto" - "github.com/golang/protobuf/ptypes/empty" "github.com/grpc-ecosystem/grpc-gateway/runtime" "github.com/grpc-ecosystem/grpc-gateway/utilities" "google.golang.org/grpc" @@ -23,6 +22,7 @@ import ( "google.golang.org/grpc/grpclog" "google.golang.org/grpc/metadata" "google.golang.org/grpc/status" + "google.golang.org/protobuf/types/known/emptypb" ) // Suppress "imported and not used" errors @@ -35,7 +35,7 @@ var _ = descriptor.ForMessage var _ = metadata.Join func request_VersionService_Version_0(ctx context.Context, marshaler runtime.Marshaler, client VersionServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq empty.Empty + var protoReq emptypb.Empty var metadata runtime.ServerMetadata msg, err := client.Version(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) @@ -44,7 +44,7 @@ func request_VersionService_Version_0(ctx context.Context, marshaler runtime.Mar } func local_request_VersionService_Version_0(ctx context.Context, marshaler runtime.Marshaler, server VersionServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq empty.Empty + var protoReq emptypb.Empty var metadata runtime.ServerMetadata msg, err := server.Version(ctx, &protoReq) diff --git a/pkg/apis/api-rules/violation_exceptions.list b/pkg/apis/api-rules/violation_exceptions.list index 06b064afd43ca..4125e681e1caf 100644 --- a/pkg/apis/api-rules/violation_exceptions.list +++ b/pkg/apis/api-rules/violation_exceptions.list @@ -6,6 +6,7 @@ API rule violation: list_type_missing,github.com/argoproj/argo-cd/v2/pkg/apis/ap API rule violation: list_type_missing,github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1,AppProjectSpec,Roles API rule violation: list_type_missing,github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1,AppProjectSpec,SignatureKeys API rule violation: list_type_missing,github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1,AppProjectSpec,SourceRepos +API rule violation: list_type_missing,github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1,ApplicationSourceHelm,ExternalValueFiles API rule violation: list_type_missing,github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1,ApplicationSourceHelm,FileParameters API rule violation: list_type_missing,github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1,ApplicationSourceHelm,Parameters API rule violation: list_type_missing,github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1,ApplicationSourceHelm,ValueFiles @@ -23,13 +24,16 @@ API rule violation: list_type_missing,github.com/argoproj/argo-cd/v2/pkg/apis/ap API rule violation: list_type_missing,github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1,ApplicationTree,Nodes API rule violation: list_type_missing,github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1,ApplicationTree,OrphanedNodes API rule violation: list_type_missing,github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1,Cluster,Namespaces +API rule violation: list_type_missing,github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1,ClusterInfo,APIVersions API rule violation: list_type_missing,github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1,Command,Args API rule violation: list_type_missing,github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1,Command,Command API rule violation: list_type_missing,github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1,ExecProviderConfig,Args +API rule violation: list_type_missing,github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1,HelmExternalValue,ValueFiles API rule violation: list_type_missing,github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1,HostInfo,ResourcesInfo API rule violation: list_type_missing,github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1,JWTTokens,Items API rule violation: list_type_missing,github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1,Operation,Info API rule violation: list_type_missing,github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1,OrphanedResourcesMonitorSettings,Ignore +API rule violation: list_type_missing,github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1,OverrideIgnoreDiff,JQPathExpressions API rule violation: list_type_missing,github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1,OverrideIgnoreDiff,JSONPointers API rule violation: list_type_missing,github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1,ProjectRole,Groups API rule violation: list_type_missing,github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1,ProjectRole,JWTTokens @@ -37,6 +41,7 @@ API rule violation: list_type_missing,github.com/argoproj/argo-cd/v2/pkg/apis/ap API rule violation: list_type_missing,github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1,RepositoryCertificate,CertData API rule violation: list_type_missing,github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1,ResourceAction,Params API rule violation: list_type_missing,github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1,ResourceActions,Definitions +API rule violation: list_type_missing,github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1,ResourceIgnoreDifferences,JQPathExpressions API rule violation: list_type_missing,github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1,ResourceIgnoreDifferences,JSONPointers API rule violation: list_type_missing,github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1,ResourceNetworkingInfo,ExternalURLs API rule violation: list_type_missing,github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1,ResourceNetworkingInfo,Ingress diff --git a/pkg/apis/application/v1alpha1/generated.pb.go b/pkg/apis/application/v1alpha1/generated.pb.go index 2270d54f393f2..62a3ea4bccb17 100644 --- a/pkg/apis/application/v1alpha1/generated.pb.go +++ b/pkg/apis/application/v1alpha1/generated.pb.go @@ -1072,10 +1072,38 @@ func (m *HealthStatus) XXX_DiscardUnknown() { var xxx_messageInfo_HealthStatus proto.InternalMessageInfo +func (m *HelmExternalValue) Reset() { *m = HelmExternalValue{} } +func (*HelmExternalValue) ProtoMessage() {} +func (*HelmExternalValue) Descriptor() ([]byte, []int) { + return fileDescriptor_030104ce3b95bcac, []int{37} +} +func (m *HelmExternalValue) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *HelmExternalValue) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *HelmExternalValue) XXX_Merge(src proto.Message) { + xxx_messageInfo_HelmExternalValue.Merge(m, src) +} +func (m *HelmExternalValue) XXX_Size() int { + return m.Size() +} +func (m *HelmExternalValue) XXX_DiscardUnknown() { + xxx_messageInfo_HelmExternalValue.DiscardUnknown(m) +} + +var xxx_messageInfo_HelmExternalValue proto.InternalMessageInfo + func (m *HelmFileParameter) Reset() { *m = HelmFileParameter{} } func (*HelmFileParameter) ProtoMessage() {} func (*HelmFileParameter) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{37} + return fileDescriptor_030104ce3b95bcac, []int{38} } func (m *HelmFileParameter) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1103,7 +1131,7 @@ var xxx_messageInfo_HelmFileParameter proto.InternalMessageInfo func (m *HelmParameter) Reset() { *m = HelmParameter{} } func (*HelmParameter) ProtoMessage() {} func (*HelmParameter) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{38} + return fileDescriptor_030104ce3b95bcac, []int{39} } func (m *HelmParameter) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1131,7 +1159,7 @@ var xxx_messageInfo_HelmParameter proto.InternalMessageInfo func (m *HostInfo) Reset() { *m = HostInfo{} } func (*HostInfo) ProtoMessage() {} func (*HostInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{39} + return fileDescriptor_030104ce3b95bcac, []int{40} } func (m *HostInfo) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1159,7 +1187,7 @@ var xxx_messageInfo_HostInfo proto.InternalMessageInfo func (m *HostResourceInfo) Reset() { *m = HostResourceInfo{} } func (*HostResourceInfo) ProtoMessage() {} func (*HostResourceInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{40} + return fileDescriptor_030104ce3b95bcac, []int{41} } func (m *HostResourceInfo) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1187,7 +1215,7 @@ var xxx_messageInfo_HostResourceInfo proto.InternalMessageInfo func (m *Info) Reset() { *m = Info{} } func (*Info) ProtoMessage() {} func (*Info) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{41} + return fileDescriptor_030104ce3b95bcac, []int{42} } func (m *Info) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1215,7 +1243,7 @@ var xxx_messageInfo_Info proto.InternalMessageInfo func (m *InfoItem) Reset() { *m = InfoItem{} } func (*InfoItem) ProtoMessage() {} func (*InfoItem) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{42} + return fileDescriptor_030104ce3b95bcac, []int{43} } func (m *InfoItem) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1243,7 +1271,7 @@ var xxx_messageInfo_InfoItem proto.InternalMessageInfo func (m *JWTToken) Reset() { *m = JWTToken{} } func (*JWTToken) ProtoMessage() {} func (*JWTToken) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{43} + return fileDescriptor_030104ce3b95bcac, []int{44} } func (m *JWTToken) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1271,7 +1299,7 @@ var xxx_messageInfo_JWTToken proto.InternalMessageInfo func (m *JWTTokens) Reset() { *m = JWTTokens{} } func (*JWTTokens) ProtoMessage() {} func (*JWTTokens) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{44} + return fileDescriptor_030104ce3b95bcac, []int{45} } func (m *JWTTokens) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1299,7 +1327,7 @@ var xxx_messageInfo_JWTTokens proto.InternalMessageInfo func (m *JsonnetVar) Reset() { *m = JsonnetVar{} } func (*JsonnetVar) ProtoMessage() {} func (*JsonnetVar) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{45} + return fileDescriptor_030104ce3b95bcac, []int{46} } func (m *JsonnetVar) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1327,7 +1355,7 @@ var xxx_messageInfo_JsonnetVar proto.InternalMessageInfo func (m *KnownTypeField) Reset() { *m = KnownTypeField{} } func (*KnownTypeField) ProtoMessage() {} func (*KnownTypeField) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{46} + return fileDescriptor_030104ce3b95bcac, []int{47} } func (m *KnownTypeField) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1355,7 +1383,7 @@ var xxx_messageInfo_KnownTypeField proto.InternalMessageInfo func (m *KsonnetParameter) Reset() { *m = KsonnetParameter{} } func (*KsonnetParameter) ProtoMessage() {} func (*KsonnetParameter) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{47} + return fileDescriptor_030104ce3b95bcac, []int{48} } func (m *KsonnetParameter) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1383,7 +1411,7 @@ var xxx_messageInfo_KsonnetParameter proto.InternalMessageInfo func (m *KustomizeOptions) Reset() { *m = KustomizeOptions{} } func (*KustomizeOptions) ProtoMessage() {} func (*KustomizeOptions) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{48} + return fileDescriptor_030104ce3b95bcac, []int{49} } func (m *KustomizeOptions) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1411,7 +1439,7 @@ var xxx_messageInfo_KustomizeOptions proto.InternalMessageInfo func (m *Operation) Reset() { *m = Operation{} } func (*Operation) ProtoMessage() {} func (*Operation) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{49} + return fileDescriptor_030104ce3b95bcac, []int{50} } func (m *Operation) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1439,7 +1467,7 @@ var xxx_messageInfo_Operation proto.InternalMessageInfo func (m *OperationInitiator) Reset() { *m = OperationInitiator{} } func (*OperationInitiator) ProtoMessage() {} func (*OperationInitiator) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{50} + return fileDescriptor_030104ce3b95bcac, []int{51} } func (m *OperationInitiator) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1467,7 +1495,7 @@ var xxx_messageInfo_OperationInitiator proto.InternalMessageInfo func (m *OperationState) Reset() { *m = OperationState{} } func (*OperationState) ProtoMessage() {} func (*OperationState) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{51} + return fileDescriptor_030104ce3b95bcac, []int{52} } func (m *OperationState) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1495,7 +1523,7 @@ var xxx_messageInfo_OperationState proto.InternalMessageInfo func (m *OrphanedResourceKey) Reset() { *m = OrphanedResourceKey{} } func (*OrphanedResourceKey) ProtoMessage() {} func (*OrphanedResourceKey) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{52} + return fileDescriptor_030104ce3b95bcac, []int{53} } func (m *OrphanedResourceKey) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1523,7 +1551,7 @@ var xxx_messageInfo_OrphanedResourceKey proto.InternalMessageInfo func (m *OrphanedResourcesMonitorSettings) Reset() { *m = OrphanedResourcesMonitorSettings{} } func (*OrphanedResourcesMonitorSettings) ProtoMessage() {} func (*OrphanedResourcesMonitorSettings) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{53} + return fileDescriptor_030104ce3b95bcac, []int{54} } func (m *OrphanedResourcesMonitorSettings) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1551,7 +1579,7 @@ var xxx_messageInfo_OrphanedResourcesMonitorSettings proto.InternalMessageInfo func (m *OverrideIgnoreDiff) Reset() { *m = OverrideIgnoreDiff{} } func (*OverrideIgnoreDiff) ProtoMessage() {} func (*OverrideIgnoreDiff) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{54} + return fileDescriptor_030104ce3b95bcac, []int{55} } func (m *OverrideIgnoreDiff) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1579,7 +1607,7 @@ var xxx_messageInfo_OverrideIgnoreDiff proto.InternalMessageInfo func (m *ProjectRole) Reset() { *m = ProjectRole{} } func (*ProjectRole) ProtoMessage() {} func (*ProjectRole) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{55} + return fileDescriptor_030104ce3b95bcac, []int{56} } func (m *ProjectRole) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1607,7 +1635,7 @@ var xxx_messageInfo_ProjectRole proto.InternalMessageInfo func (m *RepoCreds) Reset() { *m = RepoCreds{} } func (*RepoCreds) ProtoMessage() {} func (*RepoCreds) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{56} + return fileDescriptor_030104ce3b95bcac, []int{57} } func (m *RepoCreds) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1635,7 +1663,7 @@ var xxx_messageInfo_RepoCreds proto.InternalMessageInfo func (m *RepoCredsList) Reset() { *m = RepoCredsList{} } func (*RepoCredsList) ProtoMessage() {} func (*RepoCredsList) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{57} + return fileDescriptor_030104ce3b95bcac, []int{58} } func (m *RepoCredsList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1663,7 +1691,7 @@ var xxx_messageInfo_RepoCredsList proto.InternalMessageInfo func (m *Repository) Reset() { *m = Repository{} } func (*Repository) ProtoMessage() {} func (*Repository) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{58} + return fileDescriptor_030104ce3b95bcac, []int{59} } func (m *Repository) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1691,7 +1719,7 @@ var xxx_messageInfo_Repository proto.InternalMessageInfo func (m *RepositoryCertificate) Reset() { *m = RepositoryCertificate{} } func (*RepositoryCertificate) ProtoMessage() {} func (*RepositoryCertificate) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{59} + return fileDescriptor_030104ce3b95bcac, []int{60} } func (m *RepositoryCertificate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1719,7 +1747,7 @@ var xxx_messageInfo_RepositoryCertificate proto.InternalMessageInfo func (m *RepositoryCertificateList) Reset() { *m = RepositoryCertificateList{} } func (*RepositoryCertificateList) ProtoMessage() {} func (*RepositoryCertificateList) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{60} + return fileDescriptor_030104ce3b95bcac, []int{61} } func (m *RepositoryCertificateList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1747,7 +1775,7 @@ var xxx_messageInfo_RepositoryCertificateList proto.InternalMessageInfo func (m *RepositoryList) Reset() { *m = RepositoryList{} } func (*RepositoryList) ProtoMessage() {} func (*RepositoryList) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{61} + return fileDescriptor_030104ce3b95bcac, []int{62} } func (m *RepositoryList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1775,7 +1803,7 @@ var xxx_messageInfo_RepositoryList proto.InternalMessageInfo func (m *ResourceAction) Reset() { *m = ResourceAction{} } func (*ResourceAction) ProtoMessage() {} func (*ResourceAction) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{62} + return fileDescriptor_030104ce3b95bcac, []int{63} } func (m *ResourceAction) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1803,7 +1831,7 @@ var xxx_messageInfo_ResourceAction proto.InternalMessageInfo func (m *ResourceActionDefinition) Reset() { *m = ResourceActionDefinition{} } func (*ResourceActionDefinition) ProtoMessage() {} func (*ResourceActionDefinition) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{63} + return fileDescriptor_030104ce3b95bcac, []int{64} } func (m *ResourceActionDefinition) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1831,7 +1859,7 @@ var xxx_messageInfo_ResourceActionDefinition proto.InternalMessageInfo func (m *ResourceActionParam) Reset() { *m = ResourceActionParam{} } func (*ResourceActionParam) ProtoMessage() {} func (*ResourceActionParam) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{64} + return fileDescriptor_030104ce3b95bcac, []int{65} } func (m *ResourceActionParam) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1859,7 +1887,7 @@ var xxx_messageInfo_ResourceActionParam proto.InternalMessageInfo func (m *ResourceActions) Reset() { *m = ResourceActions{} } func (*ResourceActions) ProtoMessage() {} func (*ResourceActions) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{65} + return fileDescriptor_030104ce3b95bcac, []int{66} } func (m *ResourceActions) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1887,7 +1915,7 @@ var xxx_messageInfo_ResourceActions proto.InternalMessageInfo func (m *ResourceDiff) Reset() { *m = ResourceDiff{} } func (*ResourceDiff) ProtoMessage() {} func (*ResourceDiff) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{66} + return fileDescriptor_030104ce3b95bcac, []int{67} } func (m *ResourceDiff) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1915,7 +1943,7 @@ var xxx_messageInfo_ResourceDiff proto.InternalMessageInfo func (m *ResourceIgnoreDifferences) Reset() { *m = ResourceIgnoreDifferences{} } func (*ResourceIgnoreDifferences) ProtoMessage() {} func (*ResourceIgnoreDifferences) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{67} + return fileDescriptor_030104ce3b95bcac, []int{68} } func (m *ResourceIgnoreDifferences) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1943,7 +1971,7 @@ var xxx_messageInfo_ResourceIgnoreDifferences proto.InternalMessageInfo func (m *ResourceNetworkingInfo) Reset() { *m = ResourceNetworkingInfo{} } func (*ResourceNetworkingInfo) ProtoMessage() {} func (*ResourceNetworkingInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{68} + return fileDescriptor_030104ce3b95bcac, []int{69} } func (m *ResourceNetworkingInfo) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1971,7 +1999,7 @@ var xxx_messageInfo_ResourceNetworkingInfo proto.InternalMessageInfo func (m *ResourceNode) Reset() { *m = ResourceNode{} } func (*ResourceNode) ProtoMessage() {} func (*ResourceNode) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{69} + return fileDescriptor_030104ce3b95bcac, []int{70} } func (m *ResourceNode) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1999,7 +2027,7 @@ var xxx_messageInfo_ResourceNode proto.InternalMessageInfo func (m *ResourceOverride) Reset() { *m = ResourceOverride{} } func (*ResourceOverride) ProtoMessage() {} func (*ResourceOverride) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{70} + return fileDescriptor_030104ce3b95bcac, []int{71} } func (m *ResourceOverride) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2027,7 +2055,7 @@ var xxx_messageInfo_ResourceOverride proto.InternalMessageInfo func (m *ResourceRef) Reset() { *m = ResourceRef{} } func (*ResourceRef) ProtoMessage() {} func (*ResourceRef) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{71} + return fileDescriptor_030104ce3b95bcac, []int{72} } func (m *ResourceRef) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2055,7 +2083,7 @@ var xxx_messageInfo_ResourceRef proto.InternalMessageInfo func (m *ResourceResult) Reset() { *m = ResourceResult{} } func (*ResourceResult) ProtoMessage() {} func (*ResourceResult) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{72} + return fileDescriptor_030104ce3b95bcac, []int{73} } func (m *ResourceResult) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2083,7 +2111,7 @@ var xxx_messageInfo_ResourceResult proto.InternalMessageInfo func (m *ResourceStatus) Reset() { *m = ResourceStatus{} } func (*ResourceStatus) ProtoMessage() {} func (*ResourceStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{73} + return fileDescriptor_030104ce3b95bcac, []int{74} } func (m *ResourceStatus) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2111,7 +2139,7 @@ var xxx_messageInfo_ResourceStatus proto.InternalMessageInfo func (m *RetryStrategy) Reset() { *m = RetryStrategy{} } func (*RetryStrategy) ProtoMessage() {} func (*RetryStrategy) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{74} + return fileDescriptor_030104ce3b95bcac, []int{75} } func (m *RetryStrategy) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2139,7 +2167,7 @@ var xxx_messageInfo_RetryStrategy proto.InternalMessageInfo func (m *RevisionHistory) Reset() { *m = RevisionHistory{} } func (*RevisionHistory) ProtoMessage() {} func (*RevisionHistory) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{75} + return fileDescriptor_030104ce3b95bcac, []int{76} } func (m *RevisionHistory) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2167,7 +2195,7 @@ var xxx_messageInfo_RevisionHistory proto.InternalMessageInfo func (m *RevisionMetadata) Reset() { *m = RevisionMetadata{} } func (*RevisionMetadata) ProtoMessage() {} func (*RevisionMetadata) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{76} + return fileDescriptor_030104ce3b95bcac, []int{77} } func (m *RevisionMetadata) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2195,7 +2223,7 @@ var xxx_messageInfo_RevisionMetadata proto.InternalMessageInfo func (m *SignatureKey) Reset() { *m = SignatureKey{} } func (*SignatureKey) ProtoMessage() {} func (*SignatureKey) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{77} + return fileDescriptor_030104ce3b95bcac, []int{78} } func (m *SignatureKey) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2223,7 +2251,7 @@ var xxx_messageInfo_SignatureKey proto.InternalMessageInfo func (m *SyncOperation) Reset() { *m = SyncOperation{} } func (*SyncOperation) ProtoMessage() {} func (*SyncOperation) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{78} + return fileDescriptor_030104ce3b95bcac, []int{79} } func (m *SyncOperation) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2251,7 +2279,7 @@ var xxx_messageInfo_SyncOperation proto.InternalMessageInfo func (m *SyncOperationResource) Reset() { *m = SyncOperationResource{} } func (*SyncOperationResource) ProtoMessage() {} func (*SyncOperationResource) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{79} + return fileDescriptor_030104ce3b95bcac, []int{80} } func (m *SyncOperationResource) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2279,7 +2307,7 @@ var xxx_messageInfo_SyncOperationResource proto.InternalMessageInfo func (m *SyncOperationResult) Reset() { *m = SyncOperationResult{} } func (*SyncOperationResult) ProtoMessage() {} func (*SyncOperationResult) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{80} + return fileDescriptor_030104ce3b95bcac, []int{81} } func (m *SyncOperationResult) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2307,7 +2335,7 @@ var xxx_messageInfo_SyncOperationResult proto.InternalMessageInfo func (m *SyncPolicy) Reset() { *m = SyncPolicy{} } func (*SyncPolicy) ProtoMessage() {} func (*SyncPolicy) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{81} + return fileDescriptor_030104ce3b95bcac, []int{82} } func (m *SyncPolicy) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2335,7 +2363,7 @@ var xxx_messageInfo_SyncPolicy proto.InternalMessageInfo func (m *SyncPolicyAutomated) Reset() { *m = SyncPolicyAutomated{} } func (*SyncPolicyAutomated) ProtoMessage() {} func (*SyncPolicyAutomated) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{82} + return fileDescriptor_030104ce3b95bcac, []int{83} } func (m *SyncPolicyAutomated) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2363,7 +2391,7 @@ var xxx_messageInfo_SyncPolicyAutomated proto.InternalMessageInfo func (m *SyncStatus) Reset() { *m = SyncStatus{} } func (*SyncStatus) ProtoMessage() {} func (*SyncStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{83} + return fileDescriptor_030104ce3b95bcac, []int{84} } func (m *SyncStatus) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2391,7 +2419,7 @@ var xxx_messageInfo_SyncStatus proto.InternalMessageInfo func (m *SyncStrategy) Reset() { *m = SyncStrategy{} } func (*SyncStrategy) ProtoMessage() {} func (*SyncStrategy) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{84} + return fileDescriptor_030104ce3b95bcac, []int{85} } func (m *SyncStrategy) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2419,7 +2447,7 @@ var xxx_messageInfo_SyncStrategy proto.InternalMessageInfo func (m *SyncStrategyApply) Reset() { *m = SyncStrategyApply{} } func (*SyncStrategyApply) ProtoMessage() {} func (*SyncStrategyApply) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{85} + return fileDescriptor_030104ce3b95bcac, []int{86} } func (m *SyncStrategyApply) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2447,7 +2475,7 @@ var xxx_messageInfo_SyncStrategyApply proto.InternalMessageInfo func (m *SyncStrategyHook) Reset() { *m = SyncStrategyHook{} } func (*SyncStrategyHook) ProtoMessage() {} func (*SyncStrategyHook) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{86} + return fileDescriptor_030104ce3b95bcac, []int{87} } func (m *SyncStrategyHook) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2475,7 +2503,7 @@ var xxx_messageInfo_SyncStrategyHook proto.InternalMessageInfo func (m *SyncWindow) Reset() { *m = SyncWindow{} } func (*SyncWindow) ProtoMessage() {} func (*SyncWindow) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{87} + return fileDescriptor_030104ce3b95bcac, []int{88} } func (m *SyncWindow) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2503,7 +2531,7 @@ var xxx_messageInfo_SyncWindow proto.InternalMessageInfo func (m *TLSClientConfig) Reset() { *m = TLSClientConfig{} } func (*TLSClientConfig) ProtoMessage() {} func (*TLSClientConfig) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{88} + return fileDescriptor_030104ce3b95bcac, []int{89} } func (m *TLSClientConfig) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2570,6 +2598,7 @@ func init() { proto.RegisterType((*GnuPGPublicKey)(nil), "github.com.argoproj.argo_cd.v2.pkg.apis.application.v1alpha1.GnuPGPublicKey") proto.RegisterType((*GnuPGPublicKeyList)(nil), "github.com.argoproj.argo_cd.v2.pkg.apis.application.v1alpha1.GnuPGPublicKeyList") proto.RegisterType((*HealthStatus)(nil), "github.com.argoproj.argo_cd.v2.pkg.apis.application.v1alpha1.HealthStatus") + proto.RegisterType((*HelmExternalValue)(nil), "github.com.argoproj.argo_cd.v2.pkg.apis.application.v1alpha1.HelmExternalValue") proto.RegisterType((*HelmFileParameter)(nil), "github.com.argoproj.argo_cd.v2.pkg.apis.application.v1alpha1.HelmFileParameter") proto.RegisterType((*HelmParameter)(nil), "github.com.argoproj.argo_cd.v2.pkg.apis.application.v1alpha1.HelmParameter") proto.RegisterType((*HostInfo)(nil), "github.com.argoproj.argo_cd.v2.pkg.apis.application.v1alpha1.HostInfo") @@ -2631,415 +2660,424 @@ func init() { } var fileDescriptor_030104ce3b95bcac = []byte{ - // 6517 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x7d, 0x6b, 0x6c, 0x24, 0xd9, - 0x55, 0xf0, 0x56, 0xb7, 0xdb, 0xee, 0x3e, 0x7e, 0xcc, 0xf8, 0xce, 0xcc, 0xae, 0xe3, 0x6f, 0x33, - 0x1e, 0xd5, 0x2a, 0xc9, 0x7e, 0x5f, 0x12, 0xfb, 0xdb, 0x61, 0x09, 0x4b, 0x36, 0x24, 0xb8, 0xed, - 0x79, 0x78, 0xc6, 0x63, 0x7b, 0xaf, 0x3d, 0x33, 0xe4, 0x41, 0xd8, 0x72, 0xf5, 0xed, 0xee, 0x1a, - 0x77, 0x57, 0xf5, 0xd6, 0xad, 0xf6, 0xb8, 0x13, 0xf2, 0x42, 0x81, 0xac, 0xc8, 0x53, 0x49, 0x24, - 0x12, 0x09, 0x41, 0x78, 0x08, 0xc4, 0x8f, 0x08, 0xf1, 0x0b, 0x10, 0xe2, 0x4f, 0x7e, 0x05, 0x90, - 0x42, 0x24, 0x50, 0x12, 0x14, 0x61, 0x92, 0x21, 0x88, 0x97, 0x40, 0x02, 0xf2, 0x87, 0xf9, 0x85, - 0xee, 0xfb, 0x56, 0x75, 0xf7, 0xd8, 0x9e, 0xae, 0x99, 0x44, 0x11, 0xff, 0xdc, 0xe7, 0x9c, 0x3a, - 0xe7, 0xdc, 0xd7, 0xb9, 0xe7, 0x9e, 0x73, 0xee, 0x35, 0xac, 0x37, 0x82, 0xa4, 0xd9, 0xdd, 0x5d, - 0xf4, 0xa3, 0xf6, 0x92, 0x17, 0x37, 0xa2, 0x4e, 0x1c, 0xdd, 0xe1, 0x7f, 0xbc, 0xd9, 0xaf, 0x2d, - 0xed, 0x5f, 0x5c, 0xea, 0xec, 0x35, 0x96, 0xbc, 0x4e, 0x40, 0x97, 0xbc, 0x4e, 0xa7, 0x15, 0xf8, - 0x5e, 0x12, 0x44, 0xe1, 0xd2, 0xfe, 0x73, 0x5e, 0xab, 0xd3, 0xf4, 0x9e, 0x5b, 0x6a, 0x90, 0x90, - 0xc4, 0x5e, 0x42, 0x6a, 0x8b, 0x9d, 0x38, 0x4a, 0x22, 0xf4, 0x36, 0xc3, 0x6d, 0x51, 0x71, 0xe3, - 0x7f, 0xfc, 0x9c, 0x5f, 0x5b, 0xdc, 0xbf, 0xb8, 0xd8, 0xd9, 0x6b, 0x2c, 0x32, 0x6e, 0x8b, 0x16, - 0xb7, 0x45, 0xc5, 0x6d, 0xfe, 0xcd, 0x96, 0x2e, 0x8d, 0xa8, 0x11, 0x2d, 0x71, 0xa6, 0xbb, 0xdd, - 0x3a, 0xff, 0xc5, 0x7f, 0xf0, 0xbf, 0x84, 0xb0, 0x79, 0x77, 0xef, 0x05, 0xba, 0x18, 0x44, 0x4c, - 0xbd, 0x25, 0x3f, 0x8a, 0xc9, 0xd2, 0x7e, 0x9f, 0x42, 0xf3, 0xcf, 0x1b, 0x9a, 0xb6, 0xe7, 0x37, - 0x83, 0x90, 0xc4, 0x3d, 0xd3, 0xa6, 0x36, 0x49, 0xbc, 0x41, 0x5f, 0x2d, 0x0d, 0xfb, 0x2a, 0xee, - 0x86, 0x49, 0xd0, 0x26, 0x7d, 0x1f, 0xbc, 0xe5, 0xa8, 0x0f, 0xa8, 0xdf, 0x24, 0x6d, 0x2f, 0xfb, - 0x9d, 0xfb, 0x0a, 0x4c, 0x2f, 0xdf, 0xde, 0x5e, 0xee, 0x26, 0xcd, 0x95, 0x28, 0xac, 0x07, 0x0d, - 0xf4, 0xe3, 0x30, 0xe9, 0xb7, 0xba, 0x34, 0x21, 0xf1, 0x86, 0xd7, 0x26, 0x73, 0xce, 0x05, 0xe7, - 0xd9, 0x4a, 0xf5, 0xcc, 0x57, 0x0f, 0x17, 0x9e, 0xb8, 0x77, 0xb8, 0x30, 0xb9, 0x62, 0x50, 0xd8, - 0xa6, 0x43, 0xff, 0x17, 0x26, 0xe2, 0xa8, 0x45, 0x96, 0xf1, 0xc6, 0x5c, 0x81, 0x7f, 0x72, 0x4a, - 0x7e, 0x32, 0x81, 0x05, 0x18, 0x2b, 0xbc, 0xfb, 0x8d, 0x02, 0xc0, 0x72, 0xa7, 0xb3, 0x15, 0x47, - 0x77, 0x88, 0x9f, 0xa0, 0x97, 0xa1, 0xcc, 0x7a, 0xa1, 0xe6, 0x25, 0x1e, 0x97, 0x36, 0x79, 0xf1, - 0xff, 0x2f, 0x8a, 0xc6, 0x2c, 0xda, 0x8d, 0x31, 0x23, 0xc7, 0xa8, 0x17, 0xf7, 0x9f, 0x5b, 0xdc, - 0xdc, 0x65, 0xdf, 0xdf, 0x20, 0x89, 0x57, 0x45, 0x52, 0x18, 0x18, 0x18, 0xd6, 0x5c, 0x51, 0x08, - 0x63, 0xb4, 0x43, 0x7c, 0xae, 0xd8, 0xe4, 0xc5, 0xf5, 0xc5, 0x51, 0xa6, 0xc8, 0xa2, 0xd1, 0x7c, - 0xbb, 0x43, 0xfc, 0xea, 0x94, 0x94, 0x3c, 0xc6, 0x7e, 0x61, 0x2e, 0x07, 0xed, 0xc3, 0x38, 0x4d, - 0xbc, 0xa4, 0x4b, 0xe7, 0x8a, 0x5c, 0xe2, 0x46, 0x6e, 0x12, 0x39, 0xd7, 0xea, 0x8c, 0x94, 0x39, - 0x2e, 0x7e, 0x63, 0x29, 0xcd, 0xfd, 0x5b, 0x07, 0x66, 0x0c, 0xf1, 0x7a, 0x40, 0x13, 0xf4, 0x9e, - 0xbe, 0xce, 0x5d, 0x3c, 0x5e, 0xe7, 0xb2, 0xaf, 0x79, 0xd7, 0x9e, 0x96, 0xc2, 0xca, 0x0a, 0x62, - 0x75, 0x6c, 0x1b, 0x4a, 0x41, 0x42, 0xda, 0x74, 0xae, 0x70, 0xa1, 0xf8, 0xec, 0xe4, 0xc5, 0xab, - 0x79, 0xb5, 0xb3, 0x3a, 0x2d, 0x85, 0x96, 0xd6, 0x18, 0x7b, 0x2c, 0xa4, 0xb8, 0xdf, 0x07, 0xbb, - 0x7d, 0xac, 0xc3, 0xd1, 0x73, 0x30, 0x49, 0xa3, 0x6e, 0xec, 0x13, 0x4c, 0x3a, 0x11, 0x9d, 0x73, - 0x2e, 0x14, 0xd9, 0xd4, 0x63, 0x33, 0x75, 0xdb, 0x80, 0xb1, 0x4d, 0x83, 0x3e, 0xe5, 0xc0, 0x54, - 0x8d, 0xd0, 0x24, 0x08, 0xb9, 0x7c, 0xa5, 0xfc, 0xce, 0xc8, 0xca, 0x2b, 0xe0, 0xaa, 0x61, 0x5e, - 0x3d, 0x2b, 0x1b, 0x32, 0x65, 0x01, 0x29, 0x4e, 0xc9, 0x67, 0x2b, 0xae, 0x46, 0xa8, 0x1f, 0x07, - 0x1d, 0xf6, 0x9b, 0xcf, 0x19, 0x6b, 0xc5, 0xad, 0x1a, 0x14, 0xb6, 0xe9, 0x50, 0x08, 0x25, 0xb6, - 0xa2, 0xe8, 0xdc, 0x18, 0xd7, 0x7f, 0x6d, 0x34, 0xfd, 0x65, 0xa7, 0xb2, 0xc5, 0x6a, 0x7a, 0x9f, - 0xfd, 0xa2, 0x58, 0x88, 0x41, 0x9f, 0x74, 0x60, 0x4e, 0xae, 0x78, 0x4c, 0x44, 0x87, 0xde, 0x6e, - 0x06, 0x09, 0x69, 0x05, 0x34, 0x99, 0x2b, 0x71, 0x1d, 0x96, 0x8e, 0x37, 0xb7, 0xae, 0xc4, 0x51, - 0xb7, 0x73, 0x3d, 0x08, 0x6b, 0xd5, 0x0b, 0x52, 0xd2, 0xdc, 0xca, 0x10, 0xc6, 0x78, 0xa8, 0x48, - 0xf4, 0x39, 0x07, 0xe6, 0x43, 0xaf, 0x4d, 0x68, 0xc7, 0x63, 0x43, 0x2b, 0xd0, 0xd5, 0x96, 0xe7, - 0xef, 0x71, 0x8d, 0xc6, 0x1f, 0x4e, 0x23, 0x57, 0x6a, 0x34, 0xbf, 0x31, 0x94, 0x35, 0x7e, 0x80, - 0x58, 0xf4, 0x5b, 0x0e, 0xcc, 0x46, 0x71, 0xa7, 0xe9, 0x85, 0xa4, 0xa6, 0xb0, 0x74, 0x6e, 0x82, - 0x2f, 0xbd, 0xf7, 0x8e, 0x36, 0x44, 0x9b, 0x59, 0xb6, 0x37, 0xa2, 0x30, 0x48, 0xa2, 0x78, 0x9b, - 0x24, 0x49, 0x10, 0x36, 0x68, 0xf5, 0xdc, 0xbd, 0xc3, 0x85, 0xd9, 0x3e, 0x2a, 0xdc, 0xaf, 0x0f, - 0x7a, 0x3f, 0x4c, 0xd2, 0x5e, 0xe8, 0xdf, 0x0e, 0xc2, 0x5a, 0x74, 0x97, 0xce, 0x95, 0xf3, 0x58, - 0xbe, 0xdb, 0x9a, 0xa1, 0x5c, 0x80, 0x46, 0x00, 0xb6, 0xa5, 0x0d, 0x1e, 0x38, 0x33, 0x95, 0x2a, - 0x79, 0x0f, 0x9c, 0x99, 0x4c, 0x0f, 0x10, 0x8b, 0x3e, 0xe6, 0xc0, 0x34, 0x0d, 0x1a, 0xa1, 0x97, - 0x74, 0x63, 0x72, 0x9d, 0xf4, 0xe8, 0x1c, 0x70, 0x45, 0xae, 0x8d, 0xd8, 0x2b, 0x16, 0xcb, 0xea, - 0x39, 0xa9, 0xe3, 0xb4, 0x0d, 0xa5, 0x38, 0x2d, 0x77, 0xd0, 0x42, 0x33, 0xd3, 0x7a, 0x32, 0xdf, - 0x85, 0x66, 0x26, 0xf5, 0x50, 0x91, 0xee, 0x9f, 0x15, 0xe0, 0x74, 0x76, 0x0f, 0x42, 0xbf, 0xe3, - 0xc0, 0xa9, 0x3b, 0x77, 0x93, 0x9d, 0x68, 0x8f, 0x84, 0xb4, 0xda, 0x63, 0x96, 0x82, 0x5b, 0xdf, - 0xc9, 0x8b, 0x7e, 0xbe, 0xbb, 0xdd, 0xe2, 0xb5, 0xb4, 0x94, 0x4b, 0x61, 0x12, 0xf7, 0xaa, 0x4f, - 0xc9, 0xf6, 0x9c, 0xba, 0x76, 0x7b, 0xc7, 0xc6, 0xe2, 0xac, 0x52, 0xf3, 0x1f, 0x77, 0xe0, 0xec, - 0x20, 0x16, 0xe8, 0x34, 0x14, 0xf7, 0x48, 0x4f, 0x38, 0x38, 0x98, 0xfd, 0x89, 0x7e, 0x16, 0x4a, - 0xfb, 0x5e, 0xab, 0x4b, 0xa4, 0xa3, 0x70, 0x65, 0xb4, 0x86, 0x68, 0xcd, 0xb0, 0xe0, 0xfa, 0xd6, - 0xc2, 0x0b, 0x8e, 0xfb, 0x97, 0x45, 0x98, 0xb4, 0xb6, 0x8a, 0xc7, 0xe0, 0xfc, 0x44, 0x29, 0xe7, - 0xe7, 0x46, 0x6e, 0xbb, 0xdc, 0x50, 0xef, 0xe7, 0x6e, 0xc6, 0xfb, 0xd9, 0xcc, 0x4f, 0xe4, 0x03, - 0xdd, 0x1f, 0x94, 0x40, 0x25, 0xea, 0x30, 0xe7, 0x96, 0xed, 0xa2, 0x63, 0x79, 0x0c, 0xe1, 0xa6, - 0x62, 0x57, 0x9d, 0xbe, 0x77, 0xb8, 0x50, 0xd1, 0x3f, 0xb1, 0x11, 0xe4, 0x7e, 0xd3, 0x81, 0xb3, - 0x96, 0x8e, 0x2b, 0x51, 0x58, 0x0b, 0xf8, 0xd0, 0x5e, 0x80, 0xb1, 0xa4, 0xd7, 0x51, 0x1e, 0xb4, - 0xee, 0xa9, 0x9d, 0x5e, 0x87, 0x60, 0x8e, 0x61, 0x3e, 0x73, 0x9b, 0x50, 0xea, 0x35, 0x48, 0xd6, - 0x67, 0xbe, 0x21, 0xc0, 0x58, 0xe1, 0x51, 0x0c, 0xa8, 0xe5, 0xd1, 0x64, 0x27, 0xf6, 0x42, 0xca, - 0xd9, 0xef, 0x04, 0x6d, 0x22, 0x3b, 0xf8, 0xff, 0x1d, 0x6f, 0xc6, 0xb0, 0x2f, 0xaa, 0x4f, 0xde, - 0x3b, 0x5c, 0x40, 0xeb, 0x7d, 0x9c, 0xf0, 0x00, 0xee, 0xee, 0xe7, 0x1c, 0x78, 0x72, 0xb0, 0x5b, - 0x83, 0x5e, 0x0f, 0xe3, 0x94, 0xc4, 0xfb, 0x24, 0x96, 0xad, 0x33, 0x43, 0xc2, 0xa1, 0x58, 0x62, - 0xd1, 0x12, 0x54, 0xb4, 0xc9, 0x95, 0x6d, 0x9c, 0x95, 0xa4, 0x15, 0x63, 0xa7, 0x0d, 0x0d, 0xeb, - 0x34, 0xf6, 0x43, 0x3a, 0x41, 0xba, 0xd3, 0xf8, 0x79, 0x83, 0x63, 0xdc, 0xbf, 0x73, 0xe0, 0x94, - 0xa5, 0xd5, 0x63, 0xf0, 0x72, 0xc3, 0xb4, 0x97, 0xbb, 0x96, 0xdb, 0x7c, 0x1e, 0xe2, 0xe6, 0x7e, - 0x65, 0x1c, 0x66, 0xed, 0x59, 0xcf, 0xcd, 0x31, 0x3f, 0x60, 0x91, 0x4e, 0x74, 0x13, 0xaf, 0xcb, - 0x3e, 0x37, 0x07, 0x2c, 0x01, 0xc6, 0x0a, 0xcf, 0x3a, 0xb1, 0xe3, 0x25, 0x4d, 0xd9, 0xe1, 0xba, - 0x13, 0xb7, 0xbc, 0xa4, 0x89, 0x39, 0x06, 0xbd, 0x1d, 0x66, 0x12, 0x2f, 0x6e, 0x90, 0x04, 0x93, - 0xfd, 0x80, 0xaa, 0xf5, 0x52, 0xa9, 0x3e, 0x29, 0x69, 0x67, 0x76, 0x52, 0x58, 0x9c, 0xa1, 0x46, - 0xaf, 0xc0, 0x58, 0x93, 0xb4, 0xda, 0xd2, 0xaf, 0xd9, 0xce, 0x6f, 0x85, 0xf3, 0xb6, 0x5e, 0x25, - 0xad, 0x76, 0xb5, 0xcc, 0x54, 0x66, 0x7f, 0x61, 0x2e, 0x0a, 0xfd, 0xa2, 0x03, 0x95, 0xbd, 0x2e, - 0x4d, 0xa2, 0x76, 0xf0, 0x3e, 0x32, 0x57, 0xe6, 0x82, 0x7f, 0x26, 0x67, 0xc1, 0xd7, 0x15, 0x7f, - 0xb1, 0xde, 0xf5, 0x4f, 0x6c, 0x24, 0xa3, 0x0f, 0xc0, 0xc4, 0x1e, 0x8d, 0xc2, 0x90, 0x30, 0x4f, - 0x85, 0x29, 0x71, 0x2b, 0x6f, 0x25, 0x04, 0xf7, 0xea, 0x24, 0x1b, 0x5b, 0xf9, 0x03, 0x2b, 0x99, - 0xbc, 0x1b, 0x6a, 0x41, 0x4c, 0xfc, 0x24, 0x8a, 0x7b, 0x73, 0xf0, 0x48, 0xba, 0x61, 0x55, 0xf1, - 0x17, 0xdd, 0xa0, 0x7f, 0x62, 0x23, 0x19, 0xf5, 0x60, 0xbc, 0xd3, 0xea, 0x36, 0x82, 0x70, 0x6e, - 0x92, 0xeb, 0x70, 0x33, 0x67, 0x1d, 0xb6, 0x38, 0xf3, 0x2a, 0x30, 0xa3, 0x22, 0xfe, 0xc6, 0x52, - 0x20, 0x7a, 0x06, 0x4a, 0x7e, 0xd3, 0x8b, 0x93, 0xb9, 0x29, 0x3e, 0x67, 0xf5, 0x22, 0x5a, 0x61, - 0x40, 0x2c, 0x70, 0xee, 0x6f, 0x14, 0x60, 0x7e, 0x78, 0xc3, 0xc4, 0x6a, 0xf2, 0xbb, 0x31, 0x15, - 0xf6, 0xb9, 0x6c, 0xaf, 0x26, 0x0e, 0xc6, 0x0a, 0x8f, 0x3e, 0xe2, 0xc0, 0xc4, 0x1d, 0x39, 0xe2, - 0x85, 0x47, 0x32, 0xe2, 0xd7, 0xe4, 0x88, 0x6b, 0x1d, 0xae, 0xa9, 0x51, 0x97, 0x72, 0x99, 0xba, - 0xe4, 0xc0, 0x6f, 0x75, 0x6b, 0xca, 0x32, 0x6a, 0xd2, 0x4b, 0x02, 0x8c, 0x15, 0x9e, 0x91, 0x06, - 0xa1, 0x20, 0x1d, 0x4b, 0x93, 0xae, 0x85, 0x92, 0x54, 0xe2, 0xdd, 0xef, 0x15, 0xe1, 0xdc, 0xc0, - 0xc5, 0x87, 0x16, 0x01, 0xb8, 0xcf, 0x72, 0x39, 0x60, 0x07, 0x4c, 0x71, 0xaa, 0x9e, 0x61, 0x2e, - 0xc6, 0x2d, 0x0d, 0xc5, 0x16, 0x05, 0xfa, 0x10, 0x40, 0xc7, 0x8b, 0xbd, 0x36, 0x49, 0x48, 0xac, - 0xec, 0xe4, 0xf5, 0xd1, 0x7a, 0x89, 0xe9, 0xb1, 0xa5, 0x78, 0x1a, 0x1f, 0x47, 0x83, 0x28, 0xb6, - 0x44, 0xb2, 0x33, 0x74, 0x4c, 0x5a, 0xc4, 0xa3, 0x64, 0xc3, 0x6c, 0x1f, 0xfa, 0x0c, 0x8d, 0x0d, - 0x0a, 0xdb, 0x74, 0x6c, 0x1f, 0xe3, 0xad, 0xa0, 0xb2, 0xaf, 0xf4, 0x3e, 0xc6, 0xdb, 0x49, 0xb1, - 0xc4, 0xa2, 0x4f, 0x3b, 0x30, 0x53, 0x0f, 0x5a, 0xc4, 0x48, 0x97, 0x27, 0xde, 0xcd, 0xd1, 0x1b, - 0x79, 0xd9, 0xe6, 0x6b, 0x2c, 0x70, 0x0a, 0x4c, 0x71, 0x46, 0x3c, 0x1b, 0xe6, 0x7d, 0x12, 0x73, - 0xd3, 0x3d, 0x9e, 0x1e, 0xe6, 0x5b, 0x02, 0x8c, 0x15, 0xde, 0xfd, 0x62, 0x01, 0xe6, 0x86, 0xcd, - 0x39, 0x44, 0xd9, 0xcc, 0x4a, 0x6e, 0x79, 0x31, 0x95, 0xee, 0xfb, 0x88, 0xa7, 0x40, 0xc9, 0xf7, - 0x96, 0x17, 0xdb, 0x73, 0x94, 0x0b, 0xc0, 0x4a, 0x12, 0xba, 0x03, 0x63, 0x49, 0xcb, 0xcb, 0x29, - 0x6c, 0x64, 0x49, 0x34, 0x4e, 0xd6, 0xfa, 0x32, 0xc5, 0x5c, 0x06, 0x7a, 0x1a, 0xc6, 0x5a, 0xc1, - 0x2e, 0x73, 0x46, 0xd9, 0x24, 0xe6, 0xbb, 0xca, 0x7a, 0xb0, 0x4b, 0x31, 0x87, 0xba, 0xdf, 0x70, - 0x06, 0xf4, 0x8d, 0x34, 0xba, 0x6c, 0x52, 0x91, 0x70, 0x3f, 0x88, 0xa3, 0xb0, 0x4d, 0xc2, 0x24, - 0x1b, 0x0a, 0xbd, 0x64, 0x50, 0xd8, 0xa6, 0x43, 0xbf, 0xe0, 0x0c, 0x58, 0x0d, 0x23, 0xc6, 0x00, - 0xa5, 0x4a, 0xc7, 0x5e, 0x10, 0xee, 0xd7, 0x4a, 0x03, 0xec, 0x9f, 0xde, 0xd0, 0xd0, 0x45, 0x00, - 0xe6, 0x4d, 0x6d, 0xc5, 0xa4, 0x1e, 0x1c, 0xc8, 0x96, 0x69, 0x96, 0x1b, 0x1a, 0x83, 0x2d, 0x2a, - 0xf5, 0xcd, 0x76, 0xb7, 0xce, 0xbe, 0x29, 0xf4, 0x7f, 0x23, 0x30, 0xd8, 0xa2, 0x42, 0xcf, 0xc3, - 0x78, 0xd0, 0xf6, 0x1a, 0x44, 0xf5, 0xff, 0xd3, 0x6c, 0x71, 0xad, 0x71, 0xc8, 0xfd, 0xc3, 0x85, - 0x19, 0xad, 0x10, 0x07, 0x61, 0x49, 0x8b, 0x7e, 0xdb, 0x81, 0x29, 0x3f, 0x6a, 0xb7, 0xa3, 0x70, - 0xdd, 0xdb, 0x25, 0x2d, 0x15, 0xe2, 0xba, 0xf3, 0xa8, 0xb6, 0xfb, 0xc5, 0x15, 0x4b, 0x98, 0x38, - 0x60, 0xea, 0xc0, 0x9d, 0x8d, 0xc2, 0x29, 0xad, 0xec, 0x35, 0x58, 0x7a, 0xf0, 0x1a, 0x44, 0x7f, - 0xe4, 0xc0, 0xac, 0xf8, 0x76, 0x39, 0x0c, 0xa3, 0x44, 0x46, 0x1e, 0x45, 0x8c, 0x2a, 0x7a, 0xc4, - 0xcd, 0xb2, 0x24, 0x8a, 0xb6, 0xbd, 0x46, 0xaa, 0x39, 0xdb, 0x87, 0xc7, 0xfd, 0x4a, 0xce, 0xbf, - 0x03, 0x66, 0xfb, 0xba, 0x67, 0xc0, 0xe1, 0xf9, 0xac, 0x7d, 0x78, 0xae, 0x58, 0x67, 0xde, 0xf9, - 0x55, 0x78, 0x72, 0xb0, 0x22, 0x27, 0xe1, 0xe2, 0xfe, 0x9a, 0x03, 0x4f, 0x0d, 0xf1, 0x12, 0xf4, - 0xa9, 0xc1, 0x19, 0x76, 0x6a, 0x40, 0x1e, 0x14, 0x49, 0xb8, 0x2f, 0xd7, 0xe2, 0xe5, 0xd1, 0x3a, - 0xfc, 0x52, 0xb8, 0x2f, 0xfa, 0x71, 0xe2, 0xde, 0xe1, 0x42, 0xf1, 0x52, 0xb8, 0x8f, 0x19, 0x6f, - 0xf7, 0xf3, 0xe3, 0xa9, 0x83, 0xc9, 0xb6, 0x3a, 0x0b, 0x73, 0x45, 0xe5, 0xb1, 0x64, 0x33, 0xe7, - 0xa1, 0xb6, 0x0e, 0x5e, 0x22, 0xc2, 0x2d, 0xc5, 0xa1, 0x8f, 0x3b, 0x3c, 0xa8, 0xac, 0x0e, 0x6c, - 0xd2, 0x71, 0x79, 0x34, 0x31, 0x6e, 0x3b, 0x54, 0xad, 0x80, 0xd8, 0x96, 0xce, 0x16, 0x4a, 0x47, - 0xc4, 0x74, 0xb2, 0xee, 0x8b, 0x0a, 0x3b, 0x2b, 0x3c, 0x3a, 0x00, 0xa0, 0xbd, 0xd0, 0xdf, 0x8a, - 0x5a, 0x81, 0xdf, 0x93, 0xa7, 0xf8, 0x1c, 0x02, 0x93, 0x82, 0x9f, 0xf0, 0x61, 0xcc, 0x6f, 0x6c, - 0xc9, 0x42, 0x5f, 0x72, 0x60, 0x36, 0x68, 0x84, 0x51, 0x4c, 0x56, 0x83, 0x7a, 0x9d, 0xc4, 0x24, - 0xf4, 0x89, 0xda, 0xe6, 0x6f, 0x8f, 0xa6, 0x81, 0x8a, 0xa9, 0xad, 0x65, 0xd9, 0x9b, 0xa5, 0xd8, - 0x87, 0xc2, 0xfd, 0xca, 0xa0, 0x1a, 0x8c, 0x05, 0x61, 0x3d, 0x92, 0x76, 0xa3, 0x3a, 0x9a, 0x52, - 0x6b, 0x61, 0x3d, 0x32, 0x6b, 0x85, 0xfd, 0xc2, 0x9c, 0x3b, 0x5a, 0x87, 0xb3, 0xb1, 0x3c, 0xe8, - 0x5d, 0x0d, 0x28, 0x73, 0x97, 0xd7, 0x83, 0x76, 0x90, 0xf0, 0xc3, 0x5e, 0xb1, 0x3a, 0x77, 0xef, - 0x70, 0xe1, 0x2c, 0x1e, 0x80, 0xc7, 0x03, 0xbf, 0x72, 0x5f, 0xad, 0xa4, 0x4f, 0xb3, 0x22, 0x56, - 0xf3, 0x01, 0xa8, 0xc4, 0x3a, 0x3a, 0x2e, 0x1c, 0x8f, 0xf5, 0x7c, 0xfa, 0x58, 0x06, 0x89, 0x74, - 0x98, 0xc1, 0xc4, 0xc1, 0x8d, 0x44, 0xe6, 0x80, 0xb0, 0x91, 0x97, 0xcb, 0x22, 0x87, 0xf9, 0x25, - 0xa5, 0x9a, 0x78, 0x58, 0x2f, 0xf4, 0x31, 0x97, 0x81, 0x62, 0x18, 0x6f, 0x12, 0xaf, 0x95, 0x34, - 0x65, 0xb8, 0xe6, 0xda, 0xa8, 0x2e, 0x23, 0xe3, 0x95, 0x0d, 0x85, 0x09, 0x28, 0x96, 0x92, 0xd0, - 0x01, 0x4c, 0x34, 0xc5, 0x20, 0xc8, 0xad, 0xf3, 0xc6, 0xa8, 0x9d, 0x9b, 0x1a, 0x59, 0xb3, 0x7e, - 0x25, 0x00, 0x2b, 0x71, 0xe8, 0x97, 0x1c, 0x00, 0x5f, 0xc5, 0xc0, 0xd4, 0xf2, 0xc1, 0xb9, 0xd9, - 0x1d, 0x1d, 0x5e, 0x33, 0x9e, 0x87, 0x06, 0x51, 0x6c, 0x49, 0x46, 0x2f, 0xc3, 0x54, 0x4c, 0xfc, - 0x28, 0xf4, 0x83, 0x16, 0xa9, 0x2d, 0x27, 0xdc, 0x4b, 0x3e, 0x59, 0xac, 0xec, 0x34, 0xdb, 0xfe, - 0xb1, 0xc5, 0x03, 0xa7, 0x38, 0xa2, 0x57, 0x1d, 0x98, 0xd1, 0x71, 0x40, 0x36, 0x20, 0x44, 0xc6, - 0x43, 0xd6, 0x73, 0x8a, 0x3a, 0x72, 0x9e, 0x55, 0xc4, 0x4e, 0x03, 0x69, 0x18, 0xce, 0xc8, 0x45, - 0xef, 0x02, 0x88, 0x76, 0x79, 0xcc, 0x8d, 0x35, 0xb5, 0x7c, 0xe2, 0xa6, 0xce, 0x88, 0xf0, 0xb1, - 0xe2, 0x80, 0x2d, 0x6e, 0xe8, 0x3a, 0x80, 0x58, 0x36, 0x3b, 0xbd, 0x0e, 0xe1, 0x31, 0x8f, 0x4a, - 0xf5, 0x8d, 0xaa, 0xf3, 0xb7, 0x35, 0xe6, 0xfe, 0xe1, 0x42, 0xff, 0x61, 0x92, 0x07, 0x3b, 0xad, - 0xcf, 0xd1, 0xfb, 0x61, 0x82, 0x76, 0xdb, 0x6d, 0x4f, 0xc7, 0x2e, 0xb6, 0xf2, 0xdb, 0x11, 0x05, - 0x5f, 0x33, 0x37, 0x25, 0x00, 0x2b, 0x89, 0x6e, 0x08, 0xa8, 0x9f, 0x1e, 0x3d, 0x0f, 0x53, 0xe4, - 0x20, 0x21, 0x71, 0xe8, 0xb5, 0x6e, 0xe2, 0x75, 0x75, 0xda, 0xe5, 0x83, 0x7f, 0xc9, 0x82, 0xe3, - 0x14, 0x15, 0x72, 0xb5, 0x63, 0x5b, 0xe0, 0xf4, 0x60, 0x1c, 0x5b, 0xe5, 0xc6, 0xba, 0xff, 0x5d, - 0x48, 0x79, 0x04, 0x3b, 0x31, 0x21, 0x28, 0x82, 0x52, 0x18, 0xd5, 0xb4, 0xd1, 0xbb, 0x96, 0x8f, - 0xd1, 0xdb, 0x88, 0x6a, 0x56, 0xda, 0x96, 0xfd, 0xa2, 0x58, 0xc8, 0xe1, 0x79, 0x2d, 0x95, 0x00, - 0xe4, 0x08, 0xe9, 0x04, 0xe5, 0x29, 0x59, 0xe7, 0xb5, 0x36, 0x6d, 0x41, 0x38, 0x2d, 0x17, 0xed, - 0x41, 0xa9, 0x19, 0xd1, 0x44, 0x1c, 0x05, 0x46, 0xf6, 0xc2, 0xae, 0x46, 0x34, 0xe1, 0x5b, 0x98, - 0x6e, 0x36, 0x83, 0x50, 0x2c, 0x64, 0xb8, 0xff, 0xe8, 0xa4, 0x62, 0x1b, 0xb7, 0xbd, 0xc4, 0x6f, - 0x5e, 0xda, 0x67, 0xc7, 0xb3, 0xeb, 0xa9, 0xb8, 0xfc, 0x4f, 0xd8, 0x71, 0xf9, 0xfb, 0x87, 0x0b, - 0x6f, 0x18, 0x56, 0x47, 0x73, 0x97, 0x71, 0x58, 0xe4, 0x2c, 0xac, 0x10, 0xfe, 0x87, 0x1d, 0x98, - 0xb4, 0xd4, 0x93, 0x1b, 0x4a, 0x8e, 0x21, 0x62, 0xed, 0x5c, 0x59, 0x40, 0x6c, 0x8b, 0x74, 0x3f, - 0xeb, 0xc0, 0x44, 0xd5, 0xf3, 0xf7, 0xa2, 0x7a, 0x1d, 0xbd, 0x09, 0xca, 0xb5, 0xae, 0xcc, 0x80, - 0x88, 0xf6, 0xe9, 0xc0, 0xf6, 0xaa, 0x84, 0x63, 0x4d, 0xc1, 0xe6, 0x70, 0xdd, 0xf3, 0x93, 0x28, - 0xe6, 0x6a, 0x17, 0xc5, 0x1c, 0xbe, 0xcc, 0x21, 0x58, 0x62, 0xd8, 0x19, 0xb8, 0xed, 0x1d, 0xa8, - 0x8f, 0xb3, 0x81, 0x95, 0x1b, 0x06, 0x85, 0x6d, 0x3a, 0xf7, 0xcf, 0x4b, 0x30, 0x21, 0x53, 0x8d, - 0xc7, 0x4e, 0x16, 0x28, 0x2f, 0xbe, 0x30, 0xd4, 0x8b, 0xa7, 0x30, 0xee, 0xf3, 0x2a, 0x25, 0xb9, - 0x95, 0x8e, 0x18, 0x62, 0x92, 0x0a, 0x8a, 0xc2, 0x27, 0xa3, 0x96, 0xf8, 0x8d, 0xa5, 0x28, 0xf4, - 0x19, 0x07, 0x4e, 0xf9, 0xec, 0xf4, 0xed, 0x1b, 0x3b, 0x3f, 0x96, 0x47, 0x32, 0x6d, 0x25, 0xcd, - 0xd4, 0xe4, 0x34, 0x33, 0x08, 0x9c, 0x15, 0x8f, 0x5e, 0x84, 0x69, 0xd1, 0x67, 0xb7, 0x52, 0xc7, - 0x4f, 0x93, 0x5e, 0xb6, 0x91, 0x38, 0x4d, 0x8b, 0x16, 0xc5, 0x31, 0x9e, 0xe7, 0x5b, 0xc4, 0x11, - 0x54, 0xc6, 0xf6, 0x74, 0x42, 0x86, 0x62, 0x8b, 0x02, 0xc5, 0x80, 0x62, 0x52, 0x8f, 0x09, 0x6d, - 0x62, 0xf2, 0x4a, 0x97, 0xd0, 0x84, 0xef, 0x31, 0x13, 0x0f, 0x97, 0x7a, 0xc2, 0x7d, 0x9c, 0xf0, - 0x00, 0xee, 0x68, 0x4f, 0x3a, 0xba, 0xe5, 0x3c, 0x96, 0x93, 0x1c, 0xe6, 0xa1, 0xfe, 0xee, 0x02, - 0x94, 0x68, 0xd3, 0x8b, 0x6b, 0x7c, 0x6f, 0x2b, 0x56, 0x2b, 0xcc, 0x96, 0x6c, 0x33, 0x00, 0x16, - 0x70, 0xf7, 0xfb, 0x0e, 0x9c, 0x56, 0x73, 0xc5, 0xf3, 0x9b, 0x84, 0x7d, 0x8b, 0xde, 0x0e, 0x33, - 0xda, 0x9f, 0x5c, 0x89, 0xba, 0x32, 0x3e, 0x54, 0x34, 0x01, 0x3c, 0x9c, 0xc2, 0xe2, 0x0c, 0x35, - 0x5a, 0x82, 0x0a, 0x53, 0x59, 0x7c, 0x2a, 0xd6, 0x9f, 0xf6, 0x59, 0x97, 0xb7, 0xd6, 0xe4, 0x57, - 0x86, 0x06, 0x45, 0x30, 0xdb, 0xf2, 0x68, 0xc2, 0x35, 0x60, 0xee, 0xe5, 0x43, 0x66, 0x00, 0x79, - 0x91, 0xc8, 0x7a, 0x96, 0x11, 0xee, 0xe7, 0xed, 0x7e, 0x73, 0x0c, 0xa6, 0x53, 0x4b, 0x84, 0x99, - 0x97, 0x2e, 0x65, 0x7b, 0xa0, 0x3e, 0x6b, 0x6b, 0xf3, 0x72, 0x53, 0xc2, 0xb1, 0xa6, 0x60, 0xd4, - 0x1d, 0x8f, 0xd2, 0xbb, 0x51, 0x5c, 0x93, 0x6b, 0x5a, 0x53, 0x6f, 0x49, 0x38, 0xd6, 0x14, 0xcc, - 0xd0, 0xec, 0x12, 0x2f, 0x26, 0x31, 0x4f, 0x9a, 0x67, 0x0d, 0x4d, 0xd5, 0xa0, 0xb0, 0x4d, 0xc7, - 0x57, 0x67, 0xd2, 0xa2, 0x2b, 0xad, 0x80, 0x84, 0x89, 0x50, 0x33, 0x9f, 0xd5, 0xb9, 0xb3, 0xbe, - 0x6d, 0x33, 0x35, 0xab, 0x33, 0x83, 0xc0, 0x59, 0xf1, 0xe8, 0xa3, 0x0e, 0x4c, 0x7b, 0x77, 0xa9, - 0xa9, 0xa9, 0xe4, 0xcb, 0x73, 0x64, 0x6b, 0x95, 0x2a, 0xd3, 0xac, 0xce, 0xb2, 0x75, 0x9e, 0x02, - 0xe1, 0xb4, 0x50, 0xf4, 0x05, 0x07, 0x10, 0x39, 0x20, 0xfe, 0x56, 0x1c, 0xed, 0x07, 0x35, 0x35, - 0x86, 0xd2, 0x0f, 0x1e, 0xd1, 0xed, 0xba, 0xd4, 0xc7, 0x57, 0x2c, 0xef, 0x7e, 0x38, 0x1e, 0xa0, - 0x83, 0xfb, 0xbb, 0x45, 0x98, 0xb4, 0x56, 0xe5, 0x40, 0x13, 0xeb, 0xfc, 0x90, 0x99, 0xd8, 0xc2, - 0x09, 0x4c, 0xec, 0x87, 0xa0, 0xe2, 0x2b, 0x43, 0x91, 0x4f, 0x0d, 0x68, 0xd6, 0xfc, 0x18, 0x5b, - 0xa1, 0x41, 0xd8, 0xc8, 0x44, 0x57, 0x60, 0xd6, 0x62, 0x23, 0x8d, 0xcc, 0x18, 0x37, 0x32, 0x3a, - 0xe2, 0xb0, 0x9c, 0x25, 0xc0, 0xfd, 0xdf, 0xb8, 0xdf, 0x74, 0xf4, 0x48, 0x3d, 0x86, 0x4c, 0xfb, - 0x9d, 0x74, 0xa6, 0xfd, 0x52, 0x2e, 0x7d, 0x36, 0x24, 0xcb, 0xbe, 0x01, 0x13, 0x2b, 0x51, 0xbb, - 0xed, 0x85, 0x35, 0xf4, 0x3a, 0x98, 0xf0, 0xc5, 0x9f, 0xd2, 0xf9, 0xe7, 0xa9, 0x57, 0x89, 0xc5, - 0x0a, 0x87, 0x9e, 0x86, 0x31, 0x2f, 0x6e, 0x28, 0x87, 0x9f, 0x67, 0x12, 0x96, 0xe3, 0x06, 0xc5, - 0x1c, 0xea, 0x7e, 0xae, 0x00, 0xb0, 0x12, 0xb5, 0x3b, 0x5e, 0x4c, 0x6a, 0x3b, 0xd1, 0xff, 0x46, - 0xfe, 0x84, 0x1f, 0xf8, 0x09, 0x07, 0x10, 0xeb, 0x95, 0x28, 0x24, 0xa1, 0xc9, 0x5e, 0xb0, 0xcd, - 0xcf, 0x57, 0x50, 0xb9, 0x93, 0x98, 0x09, 0xad, 0x10, 0xd8, 0xd0, 0x1c, 0xc3, 0x37, 0x7c, 0x46, - 0x45, 0x8e, 0x8b, 0xe9, 0xac, 0x30, 0xcf, 0xe4, 0xc9, 0x40, 0xb2, 0xfb, 0xf9, 0x02, 0x3c, 0x29, - 0x6c, 0xd0, 0x0d, 0x2f, 0xf4, 0x1a, 0xa4, 0xcd, 0xb4, 0x3a, 0x6e, 0x0c, 0xd9, 0x67, 0x4e, 0x49, - 0xa0, 0x92, 0xc0, 0xa3, 0x4e, 0x4e, 0x31, 0xa9, 0xc4, 0x34, 0x5a, 0x0b, 0x83, 0x04, 0x73, 0xe6, - 0x88, 0x42, 0x59, 0x95, 0xe8, 0x4b, 0xcb, 0x91, 0x93, 0x20, 0xbd, 0xee, 0xae, 0x48, 0xf6, 0x58, - 0x0b, 0x72, 0xbf, 0xe2, 0x40, 0xd6, 0x22, 0x72, 0xaf, 0x5d, 0x94, 0x71, 0x65, 0xbd, 0xf6, 0x74, - 0xd5, 0xd5, 0x09, 0x8a, 0x98, 0xde, 0x03, 0x93, 0x5e, 0x92, 0x90, 0x76, 0x47, 0xb8, 0x90, 0xc5, - 0x87, 0x0b, 0x53, 0xdc, 0x88, 0x6a, 0x41, 0x3d, 0xe0, 0xae, 0xa3, 0xcd, 0xce, 0x7d, 0x09, 0xca, - 0x2a, 0x32, 0x7f, 0x8c, 0xc1, 0x7c, 0x26, 0x95, 0x68, 0x18, 0x32, 0x5d, 0xee, 0x17, 0x60, 0xc0, - 0x96, 0xc6, 0x9a, 0x6c, 0xec, 0x45, 0xaa, 0xc9, 0x27, 0xb3, 0x19, 0xe8, 0x40, 0x64, 0x25, 0xc4, - 0x79, 0xf8, 0x9d, 0x79, 0x6f, 0xc9, 0x26, 0x51, 0x31, 0x29, 0xf5, 0xd3, 0xc9, 0x0a, 0x74, 0x11, - 0xc0, 0xeb, 0x04, 0x6a, 0x6f, 0x1b, 0x4b, 0xe7, 0xf2, 0x96, 0xb7, 0xd6, 0xd4, 0xc6, 0x66, 0x51, - 0x31, 0x0f, 0x2d, 0x08, 0x69, 0xe2, 0xb5, 0x5a, 0x57, 0x83, 0x30, 0x91, 0x67, 0x0e, 0x6d, 0x02, - 0xd6, 0x0c, 0x0a, 0xdb, 0x74, 0xf3, 0x6f, 0xb1, 0xc6, 0xe5, 0x24, 0x09, 0x9f, 0x4f, 0x14, 0x60, - 0xe6, 0x4a, 0xd8, 0xdd, 0xba, 0xb2, 0xd5, 0xdd, 0x6d, 0x05, 0xfe, 0x75, 0xd2, 0x63, 0x83, 0xb6, - 0x47, 0x7a, 0x6b, 0xab, 0xb2, 0xdb, 0xf5, 0xa0, 0x5d, 0x67, 0x40, 0x2c, 0x70, 0x4c, 0xcd, 0x7a, - 0x10, 0x36, 0x48, 0xdc, 0x89, 0x03, 0xe9, 0x5a, 0x5b, 0x6a, 0x5e, 0x36, 0x28, 0x6c, 0xd3, 0x31, - 0xde, 0xd1, 0xdd, 0x90, 0xc4, 0x59, 0xfb, 0xb1, 0xc9, 0x80, 0x58, 0xe0, 0x18, 0x51, 0x12, 0x77, - 0x69, 0x22, 0x7b, 0x4c, 0x13, 0xed, 0x30, 0x20, 0x16, 0x38, 0x36, 0x3d, 0x68, 0x77, 0x97, 0x47, - 0xcb, 0x32, 0x69, 0xc1, 0x6d, 0x01, 0xc6, 0x0a, 0xcf, 0x48, 0xf7, 0x48, 0x6f, 0x95, 0xed, 0xa6, - 0x99, 0x2c, 0xfe, 0x75, 0x01, 0xc6, 0x0a, 0xef, 0xfe, 0x83, 0x03, 0x28, 0xdd, 0x1d, 0x8f, 0x61, - 0x43, 0x7e, 0x25, 0xbd, 0x21, 0x8f, 0x18, 0xd8, 0x4c, 0xab, 0x3f, 0x64, 0x5f, 0xfe, 0x4d, 0x07, - 0xa6, 0xec, 0x18, 0x37, 0x6a, 0x64, 0x0c, 0xd1, 0x66, 0xda, 0x10, 0xdd, 0x3f, 0x5c, 0xf8, 0xa9, - 0x41, 0x37, 0xc8, 0x1a, 0x41, 0x12, 0x75, 0xe8, 0x9b, 0x49, 0xd8, 0x08, 0x42, 0xc2, 0x23, 0x38, - 0x22, 0x36, 0x9e, 0x0a, 0xa0, 0xaf, 0x44, 0x35, 0xf2, 0x10, 0x96, 0xcc, 0xbd, 0x0d, 0xb3, 0x7d, - 0xa5, 0x1b, 0xc7, 0x30, 0x3a, 0x47, 0x16, 0xe6, 0xb9, 0x9f, 0x74, 0x60, 0x3a, 0x55, 0xf9, 0x92, - 0x93, 0x29, 0xe3, 0xab, 0x22, 0xe2, 0xe9, 0x91, 0x38, 0x08, 0x45, 0xfc, 0xa4, 0x6c, 0xad, 0x0a, - 0x83, 0xc2, 0x36, 0x9d, 0xfb, 0xd9, 0x02, 0x94, 0x55, 0xa4, 0xed, 0x18, 0xaa, 0x7c, 0xdc, 0x81, - 0x69, 0x7d, 0xce, 0xe5, 0xde, 0x6f, 0x2e, 0xd5, 0x0f, 0x4c, 0x03, 0x9d, 0x43, 0x63, 0xde, 0xaf, - 0x76, 0xc3, 0xb1, 0x2d, 0x0c, 0xa7, 0x65, 0xa3, 0x5b, 0x00, 0xb4, 0x47, 0x13, 0xd2, 0xb6, 0xfc, - 0x70, 0xd7, 0x5a, 0x1d, 0x8b, 0x7e, 0x14, 0x13, 0xb6, 0x16, 0x36, 0xa2, 0x1a, 0xd9, 0xd6, 0x94, - 0xc6, 0x10, 0x1a, 0x18, 0xb6, 0x38, 0xb9, 0xbf, 0x5f, 0x80, 0xd3, 0x59, 0x95, 0xd0, 0xbb, 0x61, - 0x4a, 0x49, 0xb7, 0x2e, 0xce, 0xa9, 0xf0, 0xe2, 0x14, 0xb6, 0x70, 0xf7, 0x0f, 0x17, 0x16, 0xfa, - 0x6f, 0x0e, 0x2e, 0xda, 0x24, 0x38, 0xc5, 0x4c, 0x04, 0x1b, 0x64, 0x78, 0xa4, 0xda, 0x5b, 0xee, - 0x74, 0x64, 0xc4, 0xc0, 0x0a, 0x36, 0xd8, 0x58, 0x9c, 0xa1, 0x46, 0x5b, 0x70, 0xd6, 0x82, 0x6c, - 0x90, 0xa0, 0xd1, 0xdc, 0x8d, 0x62, 0x51, 0xa1, 0x5d, 0xac, 0x3e, 0x2d, 0xb9, 0x9c, 0xc5, 0x03, - 0x68, 0xf0, 0xc0, 0x2f, 0xd9, 0xe1, 0xde, 0xf7, 0x3a, 0x9e, 0x1f, 0x24, 0x3d, 0x79, 0xb0, 0xd0, - 0x76, 0x64, 0x45, 0xc2, 0xb1, 0xa6, 0x70, 0x6f, 0xc0, 0xd8, 0x31, 0x67, 0xd0, 0xb1, 0xf6, 0xe5, - 0x97, 0xa0, 0xcc, 0xd8, 0x31, 0xbb, 0x91, 0x17, 0xcb, 0x08, 0xca, 0xaa, 0x60, 0x1f, 0xb9, 0x50, - 0x0c, 0x3c, 0x15, 0xcf, 0xd1, 0xcd, 0x5a, 0xa3, 0xb4, 0xcb, 0xbd, 0x0e, 0x86, 0x44, 0xcf, 0x40, - 0x91, 0x1c, 0x74, 0xb2, 0x81, 0x9b, 0x4b, 0x07, 0x9d, 0x20, 0x26, 0x94, 0x11, 0x91, 0x83, 0x0e, - 0x9a, 0x87, 0x42, 0x50, 0x93, 0x1b, 0x0a, 0x48, 0x9a, 0xc2, 0xda, 0x2a, 0x2e, 0x04, 0x35, 0xf7, - 0x00, 0x2a, 0xfa, 0x86, 0x00, 0xda, 0x53, 0x76, 0xd6, 0xc9, 0x23, 0x34, 0xae, 0xf8, 0x0e, 0xb1, - 0xb0, 0x5d, 0x00, 0x53, 0x33, 0x95, 0x97, 0x7d, 0xb9, 0x00, 0x63, 0x7e, 0x24, 0xcb, 0x13, 0xcb, - 0x86, 0x0d, 0x37, 0xb0, 0x1c, 0xe3, 0xde, 0x86, 0x99, 0xeb, 0x61, 0x74, 0x37, 0x64, 0x1b, 0xdf, - 0xe5, 0x80, 0xb4, 0x6a, 0x8c, 0x71, 0x9d, 0xfd, 0x91, 0xdd, 0xce, 0x39, 0x16, 0x0b, 0x9c, 0x2e, - 0xa3, 0x2f, 0x0c, 0x2b, 0xa3, 0x77, 0x7f, 0xd9, 0x81, 0xd3, 0xd9, 0xfa, 0xa8, 0x1f, 0xd8, 0x09, - 0xe3, 0xc3, 0x4c, 0x19, 0x55, 0x80, 0xb3, 0xd9, 0x11, 0xb9, 0xc8, 0x17, 0x60, 0x6a, 0xb7, 0x1b, - 0xb4, 0x6a, 0xf2, 0xb7, 0xd4, 0x47, 0x97, 0x18, 0x55, 0x2d, 0x1c, 0x4e, 0x51, 0x32, 0x3f, 0x6d, - 0x37, 0x08, 0xbd, 0xb8, 0xb7, 0x65, 0xf6, 0x0d, 0x6d, 0x9e, 0xaa, 0x1a, 0x83, 0x2d, 0x2a, 0xf7, - 0xaf, 0x8b, 0x60, 0xae, 0x2a, 0xa0, 0x40, 0xa6, 0xba, 0x9d, 0x3c, 0x62, 0x50, 0xdb, 0xbd, 0xd0, - 0x37, 0x97, 0x22, 0xca, 0x99, 0x4c, 0xf7, 0xc7, 0x1c, 0xe6, 0x21, 0x06, 0x49, 0xe0, 0x71, 0x63, - 0x21, 0x0f, 0x4a, 0x5b, 0x39, 0x65, 0x43, 0xd7, 0x04, 0xe7, 0x28, 0xb6, 0x7d, 0x4e, 0x2d, 0x0c, - 0xdb, 0x92, 0xd1, 0xcb, 0x32, 0x7e, 0x5c, 0xcc, 0xad, 0x50, 0xa2, 0x9c, 0x09, 0x1a, 0x77, 0xa0, - 0x14, 0x93, 0x24, 0x56, 0x25, 0x2a, 0xd7, 0x47, 0xcd, 0xa6, 0x25, 0x71, 0x6f, 0x3b, 0x61, 0x87, - 0xb1, 0x86, 0xe5, 0x18, 0x71, 0x30, 0x16, 0x82, 0x5c, 0x0a, 0xa8, 0xbf, 0x2f, 0x4e, 0x18, 0x92, - 0x5d, 0x82, 0x8a, 0xd7, 0x4d, 0xa2, 0x36, 0xeb, 0x26, 0x3e, 0x3c, 0x65, 0x2b, 0xe8, 0xac, 0x10, - 0xd8, 0xd0, 0xb8, 0x9f, 0x2e, 0x41, 0x26, 0xf7, 0x8c, 0x0e, 0xec, 0x6b, 0x36, 0x4e, 0xbe, 0xd7, - 0x6c, 0xb4, 0x32, 0x83, 0xae, 0xda, 0xa0, 0x06, 0x94, 0x3a, 0x4d, 0x8f, 0xaa, 0x35, 0xfa, 0x92, - 0xea, 0xa6, 0x2d, 0x06, 0xbc, 0x7f, 0xb8, 0xf0, 0xd3, 0xc7, 0xf3, 0x03, 0xd9, 0x5c, 0x5d, 0x12, - 0x75, 0x6e, 0x46, 0x34, 0xe7, 0x81, 0x05, 0x7f, 0xdb, 0x13, 0x2c, 0x1e, 0x71, 0xa6, 0xfd, 0x88, - 0x23, 0x0a, 0x96, 0x30, 0xa1, 0xdd, 0x56, 0x22, 0x67, 0xc3, 0x4b, 0x39, 0xae, 0x32, 0xc1, 0xd8, - 0x54, 0x2e, 0x89, 0xdf, 0xd8, 0x12, 0x8a, 0xde, 0x0d, 0x15, 0x9a, 0x78, 0x71, 0xf2, 0x90, 0x75, - 0x0e, 0xba, 0xd3, 0xb7, 0x15, 0x13, 0x6c, 0xf8, 0xa1, 0x77, 0x01, 0xd4, 0x83, 0x30, 0xa0, 0xcd, - 0x87, 0x4c, 0xfb, 0x70, 0xc5, 0x2f, 0x6b, 0x0e, 0xd8, 0xe2, 0xc6, 0xac, 0x1b, 0x9f, 0xdb, 0x22, - 0x3e, 0x59, 0xe6, 0x7b, 0xa9, 0xb6, 0x6e, 0x58, 0x63, 0xb0, 0x45, 0xe5, 0x7e, 0x10, 0xce, 0x64, - 0xaf, 0xb8, 0xca, 0xa3, 0x61, 0x23, 0x8e, 0xba, 0x9d, 0xec, 0x5e, 0xc2, 0xaf, 0x40, 0x62, 0x81, - 0x63, 0x36, 0x7e, 0x2f, 0x08, 0x6b, 0x59, 0x1b, 0x7f, 0x3d, 0x08, 0x6b, 0x98, 0x63, 0x8e, 0x71, - 0xff, 0xe8, 0x4f, 0x1c, 0xb8, 0x70, 0xd4, 0x4d, 0x5c, 0x76, 0xec, 0xbf, 0xeb, 0xc5, 0xa1, 0xbc, - 0x5b, 0xc0, 0x6d, 0xc7, 0x6d, 0x2f, 0x0e, 0x31, 0x87, 0xa2, 0x1e, 0x8c, 0x8b, 0xda, 0x2e, 0xe9, - 0x1d, 0xbf, 0x94, 0xef, 0xbd, 0x60, 0x76, 0xb6, 0xd2, 0xd1, 0x1a, 0x51, 0x57, 0x86, 0xa5, 0x40, - 0xf7, 0x1a, 0xa0, 0xcd, 0x7d, 0x12, 0xc7, 0x41, 0xcd, 0x2a, 0x46, 0x43, 0xcf, 0xc3, 0xd4, 0x9d, - 0xed, 0xcd, 0x8d, 0xad, 0x28, 0x08, 0x79, 0xc9, 0xb2, 0x55, 0x02, 0x71, 0xcd, 0x82, 0xe3, 0x14, - 0x95, 0xfb, 0xe5, 0x02, 0x4c, 0x5a, 0xd7, 0xc6, 0x8f, 0xe1, 0x49, 0x64, 0x6e, 0xba, 0x17, 0x8e, - 0x79, 0xd3, 0xfd, 0x59, 0x28, 0x77, 0xa2, 0x56, 0xe0, 0x07, 0xba, 0x8c, 0x78, 0x8a, 0x27, 0x91, - 0x24, 0x0c, 0x6b, 0x2c, 0xba, 0x0b, 0x15, 0x7d, 0xff, 0x53, 0x56, 0x3e, 0xe5, 0xe5, 0x4b, 0xe9, - 0x55, 0x62, 0xee, 0x75, 0x1a, 0x59, 0xc8, 0x85, 0x71, 0x3e, 0xc5, 0x44, 0xc5, 0x93, 0x2c, 0x07, - 0xe1, 0x73, 0x8f, 0x62, 0x89, 0x71, 0xff, 0xa5, 0x04, 0x15, 0x4c, 0x3a, 0xd1, 0x4a, 0x4c, 0x6a, - 0x14, 0xbd, 0x16, 0x8a, 0xdd, 0xb8, 0x25, 0x3b, 0x4b, 0x07, 0x68, 0x6e, 0xe2, 0x75, 0xcc, 0xe0, - 0x29, 0xbb, 0x5e, 0x38, 0x51, 0xaa, 0xad, 0x78, 0x64, 0xaa, 0xed, 0x45, 0x98, 0xa6, 0xb4, 0xb9, - 0x15, 0x07, 0xfb, 0x5e, 0xc2, 0x66, 0x8b, 0x8c, 0x66, 0x98, 0xdc, 0xc6, 0xf6, 0x55, 0x83, 0xc4, - 0x69, 0x5a, 0x74, 0x05, 0x66, 0x4d, 0xc2, 0x8b, 0xc4, 0x09, 0x0f, 0x5e, 0x88, 0x38, 0x87, 0x4e, - 0x2d, 0x98, 0x14, 0x99, 0x24, 0xc0, 0xfd, 0xdf, 0xa0, 0x55, 0x38, 0x9d, 0x02, 0x32, 0x45, 0x44, - 0x10, 0x64, 0x4e, 0xf2, 0x39, 0x9d, 0xe2, 0xc3, 0x74, 0xe9, 0xfb, 0x02, 0xdd, 0x80, 0x33, 0x62, - 0x7c, 0xf9, 0xbd, 0x61, 0xdd, 0xa2, 0x09, 0xce, 0xe8, 0xff, 0x48, 0x46, 0x67, 0xae, 0xf4, 0x93, - 0xe0, 0x41, 0xdf, 0xb1, 0x19, 0xaa, 0xc1, 0x6b, 0xab, 0xd2, 0x24, 0xe9, 0x19, 0xaa, 0xd9, 0xac, - 0xd5, 0xb0, 0x4d, 0x87, 0xde, 0x09, 0x4f, 0x99, 0x9f, 0x22, 0xf6, 0x25, 0xf6, 0xe9, 0x55, 0x99, - 0x54, 0x5e, 0x90, 0x2c, 0x9e, 0xba, 0x32, 0x90, 0xac, 0x86, 0x87, 0x7d, 0x8f, 0x76, 0x61, 0x5e, - 0xa3, 0x2e, 0xb1, 0x85, 0xd7, 0x89, 0x03, 0x4a, 0xaa, 0x1e, 0x25, 0x37, 0xe3, 0x16, 0x2f, 0xa2, - 0xaa, 0x98, 0xbb, 0xef, 0x57, 0x82, 0xe4, 0xea, 0x20, 0x4a, 0xbc, 0x8e, 0x1f, 0xc0, 0x85, 0xb9, - 0x05, 0x24, 0xf4, 0x76, 0x5b, 0x64, 0x73, 0x65, 0x8d, 0xdf, 0xe7, 0xb2, 0xdc, 0x82, 0x4b, 0x0a, - 0x81, 0x0d, 0x8d, 0x76, 0xca, 0xa7, 0x86, 0x3a, 0xe5, 0xdf, 0x76, 0x60, 0x5a, 0x4f, 0xf6, 0xc7, - 0x10, 0xa9, 0x6a, 0xa5, 0x23, 0x55, 0x57, 0x46, 0xf5, 0xc7, 0xa4, 0xe6, 0x43, 0x8e, 0x50, 0xbf, - 0x52, 0x01, 0xe0, 0xaf, 0x89, 0x04, 0xbc, 0xe8, 0xf1, 0x02, 0x8c, 0xc5, 0xa4, 0x13, 0x65, 0x2d, - 0x1f, 0xa3, 0xc0, 0x1c, 0xf3, 0xc3, 0xbb, 0x9c, 0x07, 0xa5, 0x5e, 0x4b, 0x3f, 0xd8, 0xd4, 0xeb, - 0x36, 0x9c, 0x0b, 0x42, 0x4a, 0xfc, 0x6e, 0x2c, 0xf7, 0xa8, 0xab, 0x11, 0xd5, 0xd6, 0xa1, 0x5c, - 0x7d, 0xad, 0x64, 0x74, 0x6e, 0x6d, 0x10, 0x11, 0x1e, 0xfc, 0x2d, 0xeb, 0x52, 0x85, 0xe0, 0xc6, - 0xa1, 0x6c, 0x1d, 0xec, 0x25, 0x1c, 0x6b, 0x0a, 0xb3, 0x20, 0xd6, 0xeb, 0x94, 0x1b, 0x81, 0xbe, - 0x05, 0xb1, 0x7e, 0x79, 0x1b, 0x1b, 0x9a, 0xc1, 0x56, 0xb1, 0x92, 0x93, 0x55, 0x84, 0x13, 0x5b, - 0x45, 0xb5, 0x3e, 0x27, 0x87, 0xde, 0x3d, 0x57, 0x9b, 0xf5, 0xd4, 0xd0, 0xcd, 0xfa, 0xed, 0x30, - 0x13, 0x84, 0x4d, 0x12, 0x07, 0x09, 0xa9, 0xf1, 0xb5, 0x30, 0x37, 0xcd, 0x3b, 0x42, 0xc7, 0x9c, - 0xd6, 0x52, 0x58, 0x9c, 0xa1, 0x4e, 0x1b, 0x95, 0x99, 0x63, 0x18, 0x95, 0x21, 0xa6, 0xfc, 0x54, - 0x3e, 0xa6, 0xfc, 0xf4, 0xe8, 0xa6, 0x7c, 0xf6, 0x91, 0x9a, 0x72, 0x94, 0x87, 0x29, 0x77, 0x5f, - 0x2d, 0xc0, 0x39, 0x63, 0x99, 0xd8, 0x7c, 0x08, 0xea, 0x6c, 0x6d, 0xf2, 0x2b, 0x5f, 0xa2, 0x4a, - 0xc1, 0x0a, 0x4f, 0x9a, 0x48, 0xa7, 0xc6, 0x60, 0x8b, 0x8a, 0x47, 0xf9, 0x48, 0xcc, 0x0b, 0x1e, - 0xb3, 0x66, 0x6b, 0x45, 0xc2, 0xb1, 0xa6, 0xe0, 0x4f, 0x87, 0x91, 0x38, 0x91, 0x59, 0x8e, 0x6c, - 0x09, 0xcf, 0x8a, 0x41, 0x61, 0x9b, 0x8e, 0xb9, 0x77, 0xbe, 0x5a, 0x32, 0xcc, 0x74, 0x4d, 0x09, - 0xf7, 0x4e, 0xaf, 0x12, 0x8d, 0x55, 0xea, 0xf0, 0x70, 0x6e, 0xa9, 0x5f, 0x1d, 0x7e, 0x3c, 0xd7, - 0x14, 0xee, 0x7f, 0x39, 0xf0, 0x9a, 0x81, 0x5d, 0xf1, 0x18, 0xb6, 0xa3, 0x83, 0xf4, 0x76, 0xb4, - 0x3d, 0xfa, 0x76, 0xd4, 0xd7, 0x8a, 0x21, 0x5b, 0xd3, 0xdf, 0x38, 0x30, 0x63, 0xe8, 0x1f, 0x43, - 0x53, 0x83, 0x5c, 0x1f, 0x01, 0x33, 0xaa, 0x8b, 0x42, 0xbc, 0x54, 0xdb, 0xbe, 0xcd, 0xdb, 0x26, - 0x4e, 0x39, 0xcb, 0xbe, 0x7a, 0x65, 0xe3, 0x88, 0x43, 0x47, 0x0f, 0xc6, 0xf9, 0xbd, 0x48, 0x9a, - 0xcf, 0x69, 0x2b, 0x2d, 0x9f, 0x07, 0x1c, 0xcd, 0x69, 0x8b, 0xff, 0xa4, 0x58, 0x0a, 0xe4, 0xe5, - 0xb8, 0x01, 0x65, 0xf6, 0xad, 0x26, 0x03, 0xa3, 0xa6, 0x1c, 0x57, 0xc2, 0xb1, 0xa6, 0x70, 0xdb, - 0x30, 0x97, 0x66, 0xbe, 0x4a, 0xea, 0x3c, 0xa8, 0x75, 0xac, 0x66, 0x2e, 0x41, 0xc5, 0xe3, 0x5f, - 0xad, 0x77, 0xbd, 0xec, 0x53, 0x1b, 0xcb, 0x0a, 0x81, 0x0d, 0x8d, 0xfb, 0x7b, 0x0e, 0x9c, 0x19, - 0xd0, 0x98, 0x1c, 0x03, 0xc2, 0x89, 0xb1, 0x02, 0x43, 0x9e, 0x3f, 0xa9, 0x91, 0xba, 0xa7, 0xc2, - 0x26, 0x56, 0x94, 0x65, 0x55, 0x80, 0xb1, 0xc2, 0xbb, 0xff, 0xe6, 0xc0, 0xa9, 0xb4, 0xae, 0x14, - 0x5d, 0x03, 0x24, 0x1a, 0xb3, 0x1a, 0x50, 0x3f, 0xda, 0x27, 0x71, 0x8f, 0xb5, 0x5c, 0x68, 0x3d, - 0x2f, 0x39, 0xa1, 0xe5, 0x3e, 0x0a, 0x3c, 0xe0, 0x2b, 0xf4, 0x49, 0x5e, 0x34, 0xa3, 0x7a, 0x5b, - 0xcd, 0x94, 0x5b, 0x79, 0xce, 0x14, 0x33, 0x98, 0xf6, 0x89, 0x57, 0x8b, 0xc4, 0xb6, 0x7c, 0xf7, - 0x3b, 0x63, 0xa0, 0x33, 0x46, 0xfc, 0x84, 0x9e, 0x53, 0x78, 0x23, 0xf5, 0x1e, 0x4b, 0xf1, 0x04, - 0xef, 0xb1, 0x8c, 0x3d, 0xe8, 0x4c, 0x2f, 0x1e, 0x07, 0x31, 0xbe, 0xa3, 0x65, 0xf4, 0x77, 0x0c, - 0x0a, 0xdb, 0x74, 0x4c, 0x93, 0x56, 0xb0, 0x4f, 0xc4, 0x47, 0xe3, 0x69, 0x4d, 0xd6, 0x15, 0x02, - 0x1b, 0x1a, 0xa6, 0x49, 0x2d, 0xa8, 0xd7, 0xe5, 0xc9, 0x4e, 0x6b, 0xc2, 0x7a, 0x07, 0x73, 0x0c, - 0xa3, 0x68, 0x46, 0xd1, 0x9e, 0xf4, 0xd7, 0x34, 0xc5, 0xd5, 0x28, 0xda, 0xc3, 0x1c, 0xc3, 0x3c, - 0x8c, 0x30, 0x8a, 0xdb, 0x5e, 0x2b, 0x78, 0x1f, 0xa9, 0x69, 0x29, 0xd2, 0x4f, 0xd3, 0x1e, 0xc6, - 0x46, 0x3f, 0x09, 0x1e, 0xf4, 0x1d, 0x9b, 0x81, 0x9d, 0x98, 0xd4, 0x02, 0x3f, 0xb1, 0xb9, 0x41, - 0x7a, 0x06, 0x6e, 0xf5, 0x51, 0xe0, 0x01, 0x5f, 0xa1, 0x65, 0x38, 0xa5, 0x32, 0x7e, 0xaa, 0x2a, - 0x43, 0x38, 0x6f, 0xda, 0x6f, 0xc6, 0x69, 0x34, 0xce, 0xd2, 0x33, 0x6b, 0xd3, 0x96, 0xb5, 0x31, - 0xdc, 0xad, 0xb3, 0xac, 0x8d, 0xaa, 0x99, 0xc1, 0x9a, 0xc2, 0xfd, 0x57, 0xbe, 0x3b, 0x0e, 0xb9, - 0x97, 0xf8, 0xd8, 0xc2, 0x69, 0xe9, 0x19, 0x39, 0x76, 0x8c, 0x19, 0xf9, 0x3c, 0x4c, 0xdd, 0xa1, - 0x51, 0xa8, 0x63, 0x55, 0xa5, 0xa1, 0xb1, 0x2a, 0x8b, 0xca, 0xfd, 0x8b, 0x12, 0x3c, 0xa9, 0xf3, - 0xab, 0x24, 0xb9, 0x1b, 0xc5, 0x7b, 0x41, 0xd8, 0xe0, 0x39, 0xc9, 0x2f, 0x39, 0x30, 0x25, 0x66, - 0xa6, 0xbc, 0x6c, 0x2e, 0x72, 0x70, 0xf5, 0x9c, 0xee, 0xc7, 0xa4, 0x84, 0x2d, 0xee, 0x58, 0x82, - 0x32, 0x17, 0xcd, 0x6d, 0x14, 0x4e, 0x69, 0x84, 0x3e, 0x00, 0xa0, 0x1e, 0xe0, 0xa9, 0xe7, 0xf4, - 0x0c, 0x91, 0xd2, 0x0f, 0x93, 0xba, 0xf1, 0x02, 0x77, 0xb4, 0x10, 0x6c, 0x09, 0x44, 0xaf, 0x3a, - 0x30, 0xde, 0x12, 0x7d, 0x23, 0x12, 0x2a, 0x2f, 0x3f, 0x92, 0xbe, 0xb1, 0x7b, 0x45, 0xef, 0xa8, - 0xb2, 0x3f, 0xa4, 0x7c, 0x84, 0x61, 0x22, 0x08, 0x1b, 0x31, 0xa1, 0x2a, 0xbc, 0xf7, 0x86, 0x41, - 0xf9, 0xfc, 0xf5, 0xc8, 0xab, 0x55, 0xbd, 0x96, 0x17, 0xfa, 0x24, 0x5e, 0x13, 0xe4, 0xf6, 0x33, - 0x28, 0x1c, 0x80, 0x15, 0xa3, 0xbe, 0x0b, 0x60, 0xa5, 0xe3, 0x5c, 0x00, 0x9b, 0x7f, 0x07, 0xcc, - 0xf6, 0x0d, 0xe6, 0x89, 0xae, 0xc5, 0xff, 0x24, 0x4c, 0x3e, 0xe4, 0xa7, 0xee, 0x9f, 0x8e, 0x9b, - 0xed, 0x61, 0x23, 0xaa, 0x89, 0x6b, 0x48, 0xb1, 0x19, 0x51, 0xe9, 0xe5, 0xe5, 0x38, 0x45, 0xac, - 0xa7, 0x54, 0x34, 0x10, 0xdb, 0x22, 0xd9, 0x1c, 0xed, 0x78, 0x31, 0x09, 0x1f, 0xf5, 0x1c, 0xdd, - 0xd2, 0x42, 0xb0, 0x25, 0x10, 0x35, 0x53, 0x19, 0xbf, 0xcb, 0xa3, 0x67, 0xfc, 0x98, 0xe3, 0x39, - 0xf0, 0xba, 0xc8, 0x67, 0x1c, 0x98, 0x09, 0x53, 0x33, 0x57, 0x66, 0x7d, 0x76, 0x1e, 0xc5, 0xaa, - 0x10, 0xd7, 0x3f, 0xd3, 0x30, 0x9c, 0x91, 0x3f, 0x68, 0xf3, 0x28, 0x9d, 0x70, 0xf3, 0x30, 0xf7, - 0x19, 0xc7, 0x87, 0xdd, 0x67, 0x44, 0xa1, 0xbe, 0xc9, 0x3c, 0x91, 0xfb, 0x4d, 0x66, 0x18, 0x70, - 0x8b, 0xf9, 0x36, 0x54, 0xfc, 0x98, 0x78, 0xc9, 0x43, 0x5e, 0x6a, 0xe5, 0x8f, 0x57, 0xad, 0x28, - 0x06, 0xd8, 0xf0, 0x72, 0xff, 0xaa, 0x08, 0xa7, 0x55, 0x8f, 0xa8, 0x74, 0x08, 0xdb, 0x89, 0x84, - 0x5c, 0xe3, 0x46, 0xea, 0x9d, 0xe8, 0xaa, 0x42, 0x60, 0x43, 0xc3, 0x3c, 0x9f, 0x2e, 0x25, 0x9b, - 0x1d, 0x12, 0xae, 0x07, 0xbb, 0x94, 0xf7, 0xb8, 0x55, 0x52, 0x75, 0xd3, 0xa0, 0xb0, 0x4d, 0xc7, - 0xdc, 0x5e, 0xe1, 0x81, 0xd2, 0x6c, 0x72, 0x51, 0x7a, 0xb6, 0x58, 0xe1, 0xd1, 0x17, 0x07, 0x3e, - 0x49, 0x90, 0x4f, 0x5a, 0xbd, 0x2f, 0x0b, 0x74, 0xc2, 0xb7, 0x08, 0x3e, 0xed, 0xc0, 0xa9, 0xbd, - 0x54, 0x3d, 0x87, 0x32, 0xc9, 0x23, 0x56, 0x09, 0xa6, 0x8b, 0x44, 0xcc, 0x14, 0x4e, 0xc3, 0x29, - 0xce, 0x4a, 0x77, 0xff, 0xc3, 0x01, 0xdb, 0x3c, 0x1d, 0xcf, 0x87, 0xb1, 0xde, 0x70, 0x29, 0x1c, - 0xf1, 0x86, 0x8b, 0x72, 0x77, 0x8a, 0xc7, 0x73, 0xaf, 0xc7, 0x4e, 0xe0, 0x5e, 0x97, 0x86, 0xfa, - 0x47, 0xaf, 0x85, 0x62, 0x37, 0xa8, 0x49, 0x0f, 0xd9, 0xa4, 0x89, 0xd6, 0x56, 0x31, 0x83, 0xbb, - 0x7f, 0x5c, 0x32, 0x27, 0x62, 0x99, 0x0d, 0xfe, 0x91, 0x68, 0x76, 0x5d, 0x17, 0x7d, 0x8a, 0x96, - 0x6f, 0xf4, 0x15, 0x7d, 0xbe, 0xed, 0xe4, 0xc9, 0x7e, 0xd1, 0x41, 0xc3, 0x6a, 0x3e, 0x27, 0x8e, - 0xc8, 0xf4, 0xdf, 0x81, 0x32, 0x3b, 0x44, 0xf0, 0xd0, 0x56, 0x39, 0xa5, 0x54, 0xf9, 0xaa, 0x84, - 0xdf, 0x3f, 0x5c, 0x78, 0xeb, 0xc9, 0xd5, 0x52, 0x5f, 0x63, 0xcd, 0x1f, 0x51, 0xa8, 0xb0, 0xbf, - 0x79, 0x51, 0x82, 0x3c, 0x9e, 0xdc, 0xd4, 0xb6, 0x48, 0x21, 0x72, 0xa9, 0x78, 0x30, 0x72, 0x50, - 0x08, 0x15, 0xfe, 0x1c, 0x0a, 0x17, 0x2a, 0x4e, 0x31, 0x5b, 0xba, 0x34, 0x40, 0x21, 0xee, 0x1f, - 0x2e, 0xbc, 0x78, 0x72, 0xa1, 0xfa, 0x73, 0x6c, 0x44, 0xb8, 0xdf, 0x2b, 0x9a, 0xb9, 0x2b, 0x6b, - 0x7d, 0x7f, 0x24, 0xe6, 0xee, 0x0b, 0x99, 0xb9, 0x7b, 0xa1, 0x6f, 0xee, 0xce, 0x98, 0x27, 0x43, - 0x52, 0xb3, 0xf1, 0x71, 0x6f, 0xb0, 0x47, 0x9f, 0x98, 0xb9, 0x67, 0xf1, 0x4a, 0x37, 0x88, 0x09, - 0xdd, 0x8a, 0xbb, 0x61, 0x10, 0x36, 0xf8, 0x74, 0x2c, 0xdb, 0x9e, 0x45, 0x0a, 0x8d, 0xb3, 0xf4, - 0xee, 0x97, 0x79, 0x26, 0xd0, 0xaa, 0x6f, 0x62, 0xa3, 0xdc, 0xe2, 0x2f, 0xca, 0x88, 0x0a, 0x4b, - 0x3d, 0xca, 0xe2, 0x19, 0x19, 0x81, 0x43, 0x77, 0x61, 0x62, 0x57, 0xdc, 0x6a, 0xcf, 0xe7, 0xc2, - 0x8d, 0xbc, 0x22, 0xcf, 0xef, 0x29, 0xaa, 0xfb, 0xf2, 0xf7, 0xcd, 0x9f, 0x58, 0x49, 0x73, 0x7f, - 0xbd, 0x08, 0xa7, 0x32, 0xef, 0x9d, 0xb0, 0xa3, 0xb5, 0x7a, 0xdc, 0x26, 0x1b, 0x07, 0xd7, 0x6f, - 0xa4, 0x6a, 0x0a, 0xf4, 0x5e, 0x80, 0x1a, 0xe9, 0xb4, 0xa2, 0x1e, 0x77, 0x5c, 0xc6, 0x4e, 0xec, - 0xb8, 0x68, 0x5f, 0x77, 0x55, 0x73, 0xc1, 0x16, 0x47, 0x59, 0x56, 0x5a, 0x12, 0x77, 0xf6, 0xd3, - 0x65, 0xa5, 0xd6, 0xbd, 0xb3, 0xf1, 0xc7, 0x7b, 0xef, 0x2c, 0x80, 0x53, 0x42, 0x45, 0x5d, 0x45, - 0xf4, 0x10, 0xc5, 0x42, 0x67, 0xd8, 0x8c, 0x5a, 0x4d, 0xb3, 0xc1, 0x59, 0xbe, 0xee, 0xa7, 0x0a, - 0xcc, 0x7d, 0x13, 0x9d, 0x7d, 0x43, 0x85, 0xa1, 0x5f, 0x0f, 0xe3, 0x5e, 0x37, 0x69, 0x46, 0x7d, - 0xaf, 0x0c, 0x2c, 0x73, 0x28, 0x96, 0x58, 0xb4, 0x0e, 0x63, 0x35, 0x2f, 0x51, 0x6f, 0x7c, 0x9f, - 0x44, 0x39, 0x13, 0x73, 0xf2, 0x12, 0x82, 0x39, 0x17, 0xf4, 0x34, 0x8c, 0x25, 0x5e, 0x23, 0xf5, - 0xba, 0xe0, 0x8e, 0xd7, 0xa0, 0x98, 0x43, 0xed, 0xdd, 0x65, 0xec, 0x88, 0xdd, 0xe5, 0x45, 0xeb, - 0xf5, 0x79, 0x2b, 0xbf, 0xd1, 0xff, 0x62, 0xbc, 0x28, 0x74, 0x4f, 0xd1, 0xba, 0x3f, 0x06, 0x53, - 0xf6, 0x8b, 0xf2, 0xc7, 0xba, 0x27, 0xe3, 0xfe, 0xf3, 0x18, 0x4c, 0xa7, 0x2a, 0xcd, 0x52, 0xb3, - 0xdc, 0x39, 0x72, 0x96, 0x3f, 0x03, 0xa5, 0x4e, 0xdc, 0x0d, 0x89, 0xac, 0x23, 0xd4, 0x42, 0xd8, - 0xba, 0x27, 0x58, 0xe0, 0xd8, 0xa8, 0xd4, 0xe2, 0x1e, 0xee, 0x86, 0x32, 0xfe, 0xad, 0x47, 0x65, - 0x95, 0x43, 0xb1, 0xc4, 0xb2, 0x03, 0xec, 0x14, 0xe5, 0x46, 0x51, 0xd8, 0x08, 0xb9, 0x6a, 0xae, - 0xe5, 0xf1, 0x32, 0x93, 0xac, 0xaa, 0xe4, 0x07, 0x7a, 0x1b, 0x82, 0x53, 0x12, 0xd1, 0x47, 0x1d, - 0xfb, 0x4d, 0xaa, 0xf1, 0x3c, 0xf2, 0x36, 0xd9, 0x42, 0x3e, 0xb1, 0x82, 0x1e, 0xfc, 0x34, 0x15, - 0xd5, 0x0b, 0x78, 0xe2, 0xd1, 0x2c, 0x60, 0x18, 0xb0, 0x78, 0xdf, 0x08, 0x95, 0xb6, 0x17, 0x06, - 0x75, 0x42, 0x13, 0xf1, 0xdf, 0x20, 0x2a, 0xe2, 0xf4, 0x74, 0x43, 0x01, 0xb1, 0xc1, 0xf3, 0xff, - 0xb9, 0xc2, 0x1b, 0x26, 0x0e, 0x31, 0x15, 0xeb, 0x7f, 0xae, 0x18, 0x30, 0xb6, 0x69, 0xdc, 0x3f, - 0x70, 0xe0, 0xdc, 0xc0, 0xce, 0xf8, 0xe1, 0x0d, 0x34, 0xba, 0x7f, 0x58, 0x80, 0x33, 0x03, 0x2a, - 0x31, 0x51, 0xef, 0x91, 0x3d, 0x5d, 0x26, 0x4b, 0x3d, 0xa7, 0x87, 0xce, 0x8d, 0x93, 0x6d, 0x43, - 0x66, 0x2b, 0x28, 0x3e, 0xd6, 0xad, 0xc0, 0xfd, 0x72, 0x01, 0xac, 0x47, 0xf6, 0xd0, 0x07, 0xed, - 0xa2, 0x63, 0x27, 0xaf, 0x02, 0x59, 0xc1, 0x5c, 0x17, 0x2d, 0x8b, 0x5e, 0x1b, 0x54, 0xc3, 0x9c, - 0x9d, 0xaf, 0x85, 0xa3, 0xe7, 0x2b, 0x6a, 0xa9, 0xea, 0xee, 0x62, 0xfe, 0xd5, 0xdd, 0x95, 0xbe, - 0xca, 0xee, 0x5f, 0x75, 0xc4, 0x4c, 0xcb, 0x34, 0xc9, 0x58, 0x58, 0xe7, 0x01, 0x16, 0xf6, 0x4d, - 0x50, 0xa6, 0xa4, 0x55, 0x67, 0x9e, 0x9d, 0xb4, 0xc4, 0x7a, 0x4e, 0x6c, 0x4b, 0x38, 0xd6, 0x14, - 0xfc, 0xde, 0x67, 0xab, 0x15, 0xdd, 0xbd, 0xd4, 0xee, 0x24, 0x3d, 0x69, 0x93, 0xcd, 0xbd, 0x4f, - 0x8d, 0xc1, 0x16, 0x95, 0xfb, 0x9f, 0x8e, 0x18, 0x4e, 0xe9, 0xa3, 0xbf, 0x90, 0xb9, 0x8f, 0x77, - 0x7c, 0xf7, 0xf6, 0xe7, 0x01, 0x7c, 0x7d, 0x43, 0x3e, 0x9f, 0xb7, 0xf7, 0xcc, 0x8d, 0x7b, 0xfb, - 0x41, 0x38, 0x05, 0xc3, 0x96, 0xbc, 0xd4, 0xe2, 0x29, 0x1e, 0xb5, 0x78, 0xdc, 0x7f, 0x77, 0x20, - 0xb5, 0x59, 0xa0, 0x0e, 0x94, 0x98, 0x06, 0xbd, 0x7c, 0xee, 0xf3, 0xdb, 0xac, 0xd9, 0xc2, 0x92, - 0xd3, 0x82, 0xff, 0x89, 0x85, 0x20, 0xd4, 0x92, 0xde, 0x79, 0x21, 0x8f, 0x07, 0x24, 0x6c, 0x81, - 0xcc, 0xbf, 0x97, 0xef, 0xeb, 0x6b, 0x4f, 0xdf, 0x7d, 0x01, 0x66, 0xfb, 0x94, 0xe2, 0x37, 0x74, - 0x22, 0xf5, 0x88, 0x81, 0x35, 0x03, 0xf9, 0x7d, 0x41, 0x2c, 0x70, 0xcc, 0xc1, 0x3f, 0x9d, 0x65, - 0x8f, 0xbe, 0xe0, 0xc0, 0x2c, 0xcd, 0xf2, 0x7b, 0x54, 0x7d, 0xa7, 0x23, 0x57, 0x7d, 0x28, 0xdc, - 0xaf, 0x84, 0xfb, 0x35, 0x69, 0x9e, 0xc4, 0xff, 0x23, 0xd2, 0x9b, 0x8b, 0x33, 0x74, 0x73, 0x61, - 0x4b, 0xcc, 0x6f, 0x92, 0x5a, 0xb7, 0xd5, 0x57, 0x05, 0xb3, 0x2d, 0xe1, 0x58, 0x53, 0xa4, 0xde, - 0xe0, 0x2a, 0x1e, 0xf9, 0x06, 0xd7, 0xf3, 0x30, 0x65, 0xbf, 0xba, 0xc1, 0x43, 0x68, 0x32, 0xf9, - 0x60, 0x3f, 0xd0, 0x81, 0x53, 0x54, 0x99, 0x37, 0x9c, 0x4a, 0x47, 0xbe, 0xe1, 0xf4, 0x2c, 0x94, - 0xe5, 0xbf, 0xf7, 0x51, 0xf1, 0x5d, 0x51, 0x62, 0x23, 0x61, 0x58, 0x63, 0x99, 0x81, 0x68, 0x7b, - 0x61, 0xd7, 0x6b, 0xb1, 0x1e, 0x92, 0x95, 0x72, 0x7a, 0x65, 0xdd, 0xd0, 0x18, 0x6c, 0x51, 0xb9, - 0xff, 0xe4, 0x40, 0xf6, 0x55, 0x9c, 0x54, 0xbd, 0x9d, 0x73, 0x64, 0xbd, 0x5d, 0xba, 0x36, 0xa9, - 0x70, 0xac, 0xda, 0x24, 0xbb, 0x6c, 0xa8, 0xf8, 0xc0, 0xb2, 0xa1, 0xd7, 0x99, 0x5b, 0xd6, 0xa2, - 0xbe, 0x68, 0x72, 0xd0, 0x0d, 0x6b, 0xe4, 0xc2, 0xb8, 0xef, 0xe9, 0x72, 0xe6, 0x29, 0xe1, 0x28, - 0xad, 0x2c, 0x73, 0x22, 0x89, 0xa9, 0x2e, 0x7e, 0xf5, 0xbb, 0xe7, 0x9f, 0xf8, 0xfa, 0x77, 0xcf, - 0x3f, 0xf1, 0xad, 0xef, 0x9e, 0x7f, 0xe2, 0xc3, 0xf7, 0xce, 0x3b, 0x5f, 0xbd, 0x77, 0xde, 0xf9, - 0xfa, 0xbd, 0xf3, 0xce, 0xb7, 0xee, 0x9d, 0x77, 0xbe, 0x73, 0xef, 0xbc, 0xf3, 0x99, 0xbf, 0x3f, - 0xff, 0xc4, 0xbb, 0xca, 0x6a, 0xae, 0xfe, 0x4f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x48, 0xf8, - 0x26, 0xdd, 0x72, 0x00, 0x00, + // 6664 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x7d, 0x6b, 0x70, 0x1c, 0xd9, + 0x55, 0xf0, 0xf6, 0x8c, 0x1e, 0x33, 0x47, 0x0f, 0x5b, 0x77, 0xbd, 0x5e, 0xc5, 0xdf, 0xc6, 0x72, + 0xf5, 0x56, 0x92, 0xfd, 0xbe, 0x24, 0xd2, 0xb7, 0x66, 0x09, 0x4b, 0x36, 0x24, 0x68, 0x24, 0xd9, + 0x96, 0x2d, 0xdb, 0xda, 0x23, 0xd9, 0x26, 0x0f, 0xc2, 0xb6, 0x7a, 0xee, 0x8c, 0xda, 0x9a, 0xe9, + 0x9e, 0xed, 0xee, 0x91, 0x35, 0x09, 0x79, 0x56, 0x20, 0x5b, 0xe4, 0xb1, 0xa9, 0x24, 0x55, 0x24, + 0x05, 0x05, 0xe1, 0x51, 0x54, 0xf1, 0x23, 0x3c, 0x7e, 0x01, 0x45, 0xf1, 0x27, 0xbf, 0x02, 0x54, + 0x41, 0xaa, 0xa0, 0x92, 0x40, 0x0a, 0x91, 0x18, 0x28, 0x1e, 0x55, 0x40, 0x01, 0xf9, 0x83, 0x7f, + 0x51, 0xf7, 0x7d, 0xbb, 0x67, 0xc6, 0x92, 0xac, 0xb6, 0x93, 0x4a, 0xf1, 0x4f, 0x73, 0xce, 0xe9, + 0x73, 0xce, 0x7d, 0x9d, 0x7b, 0xee, 0x39, 0xe7, 0x5e, 0xc1, 0x5a, 0x33, 0x48, 0xb7, 0xbb, 0x5b, + 0xf3, 0x7e, 0xd4, 0x5e, 0xf0, 0xe2, 0x66, 0xd4, 0x89, 0xa3, 0xdb, 0xfc, 0x8f, 0x37, 0xfb, 0xf5, + 0x85, 0xdd, 0xf3, 0x0b, 0x9d, 0x9d, 0xe6, 0x82, 0xd7, 0x09, 0x92, 0x05, 0xaf, 0xd3, 0x69, 0x05, + 0xbe, 0x97, 0x06, 0x51, 0xb8, 0xb0, 0xfb, 0xac, 0xd7, 0xea, 0x6c, 0x7b, 0xcf, 0x2e, 0x34, 0x69, + 0x48, 0x63, 0x2f, 0xa5, 0xf5, 0xf9, 0x4e, 0x1c, 0xa5, 0x11, 0x79, 0x9b, 0xe1, 0x36, 0xaf, 0xb8, + 0xf1, 0x3f, 0x7e, 0xca, 0xaf, 0xcf, 0xef, 0x9e, 0x9f, 0xef, 0xec, 0x34, 0xe7, 0x19, 0xb7, 0x79, + 0x8b, 0xdb, 0xbc, 0xe2, 0x76, 0xe6, 0xcd, 0x96, 0x2e, 0xcd, 0xa8, 0x19, 0x2d, 0x70, 0xa6, 0x5b, + 0xdd, 0x06, 0xff, 0xc5, 0x7f, 0xf0, 0xbf, 0x84, 0xb0, 0x33, 0xee, 0xce, 0xf3, 0xc9, 0x7c, 0x10, + 0x31, 0xf5, 0x16, 0xfc, 0x28, 0xa6, 0x0b, 0xbb, 0x7d, 0x0a, 0x9d, 0x79, 0xce, 0xd0, 0xb4, 0x3d, + 0x7f, 0x3b, 0x08, 0x69, 0xdc, 0x33, 0x6d, 0x6a, 0xd3, 0xd4, 0x1b, 0xf4, 0xd5, 0xc2, 0xb0, 0xaf, + 0xe2, 0x6e, 0x98, 0x06, 0x6d, 0xda, 0xf7, 0xc1, 0x5b, 0x0e, 0xfa, 0x20, 0xf1, 0xb7, 0x69, 0xdb, + 0xcb, 0x7f, 0xe7, 0xbe, 0x0c, 0x53, 0x8b, 0xb7, 0x36, 0x16, 0xbb, 0xe9, 0xf6, 0x52, 0x14, 0x36, + 0x82, 0x26, 0xf9, 0x61, 0x98, 0xf0, 0x5b, 0xdd, 0x24, 0xa5, 0xf1, 0x35, 0xaf, 0x4d, 0x67, 0x9d, + 0x73, 0xce, 0x33, 0xd5, 0xda, 0xe3, 0x5f, 0xdd, 0x9f, 0x7b, 0xec, 0xee, 0xfe, 0xdc, 0xc4, 0x92, + 0x41, 0xa1, 0x4d, 0x47, 0xfe, 0x2f, 0x8c, 0xc7, 0x51, 0x8b, 0x2e, 0xe2, 0xb5, 0xd9, 0x12, 0xff, + 0xe4, 0x84, 0xfc, 0x64, 0x1c, 0x05, 0x18, 0x15, 0xde, 0xfd, 0x7a, 0x09, 0x60, 0xb1, 0xd3, 0x59, + 0x8f, 0xa3, 0xdb, 0xd4, 0x4f, 0xc9, 0x4b, 0x50, 0x61, 0xbd, 0x50, 0xf7, 0x52, 0x8f, 0x4b, 0x9b, + 0x38, 0xff, 0xff, 0xe7, 0x45, 0x63, 0xe6, 0xed, 0xc6, 0x98, 0x91, 0x63, 0xd4, 0xf3, 0xbb, 0xcf, + 0xce, 0x5f, 0xdf, 0x62, 0xdf, 0x5f, 0xa5, 0xa9, 0x57, 0x23, 0x52, 0x18, 0x18, 0x18, 0x6a, 0xae, + 0x24, 0x84, 0x91, 0xa4, 0x43, 0x7d, 0xae, 0xd8, 0xc4, 0xf9, 0xb5, 0xf9, 0xe3, 0x4c, 0x91, 0x79, + 0xa3, 0xf9, 0x46, 0x87, 0xfa, 0xb5, 0x49, 0x29, 0x79, 0x84, 0xfd, 0x42, 0x2e, 0x87, 0xec, 0xc2, + 0x58, 0x92, 0x7a, 0x69, 0x37, 0x99, 0x2d, 0x73, 0x89, 0xd7, 0x0a, 0x93, 0xc8, 0xb9, 0xd6, 0xa6, + 0xa5, 0xcc, 0x31, 0xf1, 0x1b, 0xa5, 0x34, 0xf7, 0x6f, 0x1c, 0x98, 0x36, 0xc4, 0x6b, 0x41, 0x92, + 0x92, 0xf7, 0xf4, 0x75, 0xee, 0xfc, 0xe1, 0x3a, 0x97, 0x7d, 0xcd, 0xbb, 0xf6, 0xa4, 0x14, 0x56, + 0x51, 0x10, 0xab, 0x63, 0xdb, 0x30, 0x1a, 0xa4, 0xb4, 0x9d, 0xcc, 0x96, 0xce, 0x95, 0x9f, 0x99, + 0x38, 0x7f, 0xa9, 0xa8, 0x76, 0xd6, 0xa6, 0xa4, 0xd0, 0xd1, 0x55, 0xc6, 0x1e, 0x85, 0x14, 0xf7, + 0xbb, 0x60, 0xb7, 0x8f, 0x75, 0x38, 0x79, 0x16, 0x26, 0x92, 0xa8, 0x1b, 0xfb, 0x14, 0x69, 0x27, + 0x4a, 0x66, 0x9d, 0x73, 0x65, 0x36, 0xf5, 0xd8, 0x4c, 0xdd, 0x30, 0x60, 0xb4, 0x69, 0xc8, 0xa7, + 0x1d, 0x98, 0xac, 0xd3, 0x24, 0x0d, 0x42, 0x2e, 0x5f, 0x29, 0xbf, 0x79, 0x6c, 0xe5, 0x15, 0x70, + 0xd9, 0x30, 0xaf, 0x9d, 0x92, 0x0d, 0x99, 0xb4, 0x80, 0x09, 0x66, 0xe4, 0xb3, 0x15, 0x57, 0xa7, + 0x89, 0x1f, 0x07, 0x1d, 0xf6, 0x9b, 0xcf, 0x19, 0x6b, 0xc5, 0x2d, 0x1b, 0x14, 0xda, 0x74, 0x24, + 0x84, 0x51, 0xb6, 0xa2, 0x92, 0xd9, 0x11, 0xae, 0xff, 0xea, 0xf1, 0xf4, 0x97, 0x9d, 0xca, 0x16, + 0xab, 0xe9, 0x7d, 0xf6, 0x2b, 0x41, 0x21, 0x86, 0x7c, 0xca, 0x81, 0x59, 0xb9, 0xe2, 0x91, 0x8a, + 0x0e, 0xbd, 0xb5, 0x1d, 0xa4, 0xb4, 0x15, 0x24, 0xe9, 0xec, 0x28, 0xd7, 0x61, 0xe1, 0x70, 0x73, + 0xeb, 0x62, 0x1c, 0x75, 0x3b, 0x57, 0x82, 0xb0, 0x5e, 0x3b, 0x27, 0x25, 0xcd, 0x2e, 0x0d, 0x61, + 0x8c, 0x43, 0x45, 0x92, 0xcf, 0x39, 0x70, 0x26, 0xf4, 0xda, 0x34, 0xe9, 0x78, 0x6c, 0x68, 0x05, + 0xba, 0xd6, 0xf2, 0xfc, 0x1d, 0xae, 0xd1, 0xd8, 0x83, 0x69, 0xe4, 0x4a, 0x8d, 0xce, 0x5c, 0x1b, + 0xca, 0x1a, 0xef, 0x23, 0x96, 0xfc, 0x9a, 0x03, 0x33, 0x51, 0xdc, 0xd9, 0xf6, 0x42, 0x5a, 0x57, + 0xd8, 0x64, 0x76, 0x9c, 0x2f, 0xbd, 0xf7, 0x1e, 0x6f, 0x88, 0xae, 0xe7, 0xd9, 0x5e, 0x8d, 0xc2, + 0x20, 0x8d, 0xe2, 0x0d, 0x9a, 0xa6, 0x41, 0xd8, 0x4c, 0x6a, 0x4f, 0xdc, 0xdd, 0x9f, 0x9b, 0xe9, + 0xa3, 0xc2, 0x7e, 0x7d, 0xc8, 0xfb, 0x61, 0x22, 0xe9, 0x85, 0xfe, 0xad, 0x20, 0xac, 0x47, 0x77, + 0x92, 0xd9, 0x4a, 0x11, 0xcb, 0x77, 0x43, 0x33, 0x94, 0x0b, 0xd0, 0x08, 0x40, 0x5b, 0xda, 0xe0, + 0x81, 0x33, 0x53, 0xa9, 0x5a, 0xf4, 0xc0, 0x99, 0xc9, 0x74, 0x1f, 0xb1, 0xe4, 0xe3, 0x0e, 0x4c, + 0x25, 0x41, 0x33, 0xf4, 0xd2, 0x6e, 0x4c, 0xaf, 0xd0, 0x5e, 0x32, 0x0b, 0x5c, 0x91, 0xcb, 0xc7, + 0xec, 0x15, 0x8b, 0x65, 0xed, 0x09, 0xa9, 0xe3, 0x94, 0x0d, 0x4d, 0x30, 0x2b, 0x77, 0xd0, 0x42, + 0x33, 0xd3, 0x7a, 0xa2, 0xd8, 0x85, 0x66, 0x26, 0xf5, 0x50, 0x91, 0xee, 0x1f, 0x97, 0xe0, 0x64, + 0x7e, 0x0f, 0x22, 0xbf, 0xe1, 0xc0, 0x89, 0xdb, 0x77, 0xd2, 0xcd, 0x68, 0x87, 0x86, 0x49, 0xad, + 0xc7, 0x2c, 0x05, 0xb7, 0xbe, 0x13, 0xe7, 0xfd, 0x62, 0x77, 0xbb, 0xf9, 0xcb, 0x59, 0x29, 0x2b, + 0x61, 0x1a, 0xf7, 0x6a, 0x4f, 0xca, 0xf6, 0x9c, 0xb8, 0x7c, 0x6b, 0xd3, 0xc6, 0x62, 0x5e, 0xa9, + 0x33, 0x9f, 0x70, 0xe0, 0xd4, 0x20, 0x16, 0xe4, 0x24, 0x94, 0x77, 0x68, 0x4f, 0x38, 0x38, 0xc8, + 0xfe, 0x24, 0x3f, 0x09, 0xa3, 0xbb, 0x5e, 0xab, 0x4b, 0xa5, 0xa3, 0x70, 0xf1, 0x78, 0x0d, 0xd1, + 0x9a, 0xa1, 0xe0, 0xfa, 0xd6, 0xd2, 0xf3, 0x8e, 0xfb, 0xe7, 0x65, 0x98, 0xb0, 0xb6, 0x8a, 0x47, + 0xe0, 0xfc, 0x44, 0x19, 0xe7, 0xe7, 0x6a, 0x61, 0xbb, 0xdc, 0x50, 0xef, 0xe7, 0x4e, 0xce, 0xfb, + 0xb9, 0x5e, 0x9c, 0xc8, 0xfb, 0xba, 0x3f, 0x24, 0x85, 0x6a, 0xd4, 0x61, 0xce, 0x2d, 0xdb, 0x45, + 0x47, 0x8a, 0x18, 0xc2, 0xeb, 0x8a, 0x5d, 0x6d, 0xea, 0xee, 0xfe, 0x5c, 0x55, 0xff, 0x44, 0x23, + 0xc8, 0xfd, 0x86, 0x03, 0xa7, 0x2c, 0x1d, 0x97, 0xa2, 0xb0, 0x1e, 0xf0, 0xa1, 0x3d, 0x07, 0x23, + 0x69, 0xaf, 0xa3, 0x3c, 0x68, 0xdd, 0x53, 0x9b, 0xbd, 0x0e, 0x45, 0x8e, 0x61, 0x3e, 0x73, 0x9b, + 0x26, 0x89, 0xd7, 0xa4, 0x79, 0x9f, 0xf9, 0xaa, 0x00, 0xa3, 0xc2, 0x93, 0x18, 0x48, 0xcb, 0x4b, + 0xd2, 0xcd, 0xd8, 0x0b, 0x13, 0xce, 0x7e, 0x33, 0x68, 0x53, 0xd9, 0xc1, 0xff, 0xef, 0x70, 0x33, + 0x86, 0x7d, 0x51, 0x3b, 0x7d, 0x77, 0x7f, 0x8e, 0xac, 0xf5, 0x71, 0xc2, 0x01, 0xdc, 0xdd, 0xcf, + 0x39, 0x70, 0x7a, 0xb0, 0x5b, 0x43, 0x5e, 0x0f, 0x63, 0x09, 0x8d, 0x77, 0x69, 0x2c, 0x5b, 0x67, + 0x86, 0x84, 0x43, 0x51, 0x62, 0xc9, 0x02, 0x54, 0xb5, 0xc9, 0x95, 0x6d, 0x9c, 0x91, 0xa4, 0x55, + 0x63, 0xa7, 0x0d, 0x0d, 0xeb, 0x34, 0xf6, 0x43, 0x3a, 0x41, 0xba, 0xd3, 0xf8, 0x79, 0x83, 0x63, + 0xdc, 0xbf, 0x75, 0xe0, 0x84, 0xa5, 0xd5, 0x23, 0xf0, 0x72, 0xc3, 0xac, 0x97, 0xbb, 0x5a, 0xd8, + 0x7c, 0x1e, 0xe2, 0xe6, 0x7e, 0x65, 0x0c, 0x66, 0xec, 0x59, 0xcf, 0xcd, 0x31, 0x3f, 0x60, 0xd1, + 0x4e, 0x74, 0x03, 0xd7, 0x64, 0x9f, 0x9b, 0x03, 0x96, 0x00, 0xa3, 0xc2, 0xb3, 0x4e, 0xec, 0x78, + 0xe9, 0xb6, 0xec, 0x70, 0xdd, 0x89, 0xeb, 0x5e, 0xba, 0x8d, 0x1c, 0x43, 0xde, 0x0e, 0xd3, 0xa9, + 0x17, 0x37, 0x69, 0x8a, 0x74, 0x37, 0x48, 0xd4, 0x7a, 0xa9, 0xd6, 0x4e, 0x4b, 0xda, 0xe9, 0xcd, + 0x0c, 0x16, 0x73, 0xd4, 0xe4, 0x65, 0x18, 0xd9, 0xa6, 0xad, 0xb6, 0xf4, 0x6b, 0x36, 0x8a, 0x5b, + 0xe1, 0xbc, 0xad, 0x97, 0x68, 0xab, 0x5d, 0xab, 0x30, 0x95, 0xd9, 0x5f, 0xc8, 0x45, 0x91, 0x9f, + 0x71, 0xa0, 0xba, 0xd3, 0x4d, 0xd2, 0xa8, 0x1d, 0xbc, 0x8f, 0xce, 0x56, 0xb8, 0xe0, 0x9f, 0x28, + 0x58, 0xf0, 0x15, 0xc5, 0x5f, 0xac, 0x77, 0xfd, 0x13, 0x8d, 0x64, 0xf2, 0x01, 0x18, 0xdf, 0x49, + 0xa2, 0x30, 0xa4, 0xcc, 0x53, 0x61, 0x4a, 0xdc, 0x2c, 0x5a, 0x09, 0xc1, 0xbd, 0x36, 0xc1, 0xc6, + 0x56, 0xfe, 0x40, 0x25, 0x93, 0x77, 0x43, 0x3d, 0x88, 0xa9, 0x9f, 0x46, 0x71, 0x6f, 0x16, 0x1e, + 0x4a, 0x37, 0x2c, 0x2b, 0xfe, 0xa2, 0x1b, 0xf4, 0x4f, 0x34, 0x92, 0x49, 0x0f, 0xc6, 0x3a, 0xad, + 0x6e, 0x33, 0x08, 0x67, 0x27, 0xb8, 0x0e, 0x37, 0x0a, 0xd6, 0x61, 0x9d, 0x33, 0xaf, 0x01, 0x33, + 0x2a, 0xe2, 0x6f, 0x94, 0x02, 0xc9, 0xd3, 0x30, 0xea, 0x6f, 0x7b, 0x71, 0x3a, 0x3b, 0xc9, 0xe7, + 0xac, 0x5e, 0x44, 0x4b, 0x0c, 0x88, 0x02, 0xe7, 0xfe, 0x4a, 0x09, 0xce, 0x0c, 0x6f, 0x98, 0x58, + 0x4d, 0x7e, 0x37, 0x4e, 0x84, 0x7d, 0xae, 0xd8, 0xab, 0x89, 0x83, 0x51, 0xe1, 0xc9, 0x47, 0x1c, + 0x18, 0xbf, 0x2d, 0x47, 0xbc, 0xf4, 0x50, 0x46, 0xfc, 0xb2, 0x1c, 0x71, 0xad, 0xc3, 0x65, 0x35, + 0xea, 0x52, 0x2e, 0x53, 0x97, 0xee, 0xf9, 0xad, 0x6e, 0x5d, 0x59, 0x46, 0x4d, 0xba, 0x22, 0xc0, + 0xa8, 0xf0, 0x8c, 0x34, 0x08, 0x05, 0xe9, 0x48, 0x96, 0x74, 0x35, 0x94, 0xa4, 0x12, 0xef, 0x7e, + 0x74, 0x14, 0x9e, 0x18, 0xb8, 0xf8, 0xc8, 0x3c, 0x00, 0xf7, 0x59, 0x2e, 0x04, 0xec, 0x80, 0x29, + 0x4e, 0xd5, 0xd3, 0xcc, 0xc5, 0xb8, 0xa9, 0xa1, 0x68, 0x51, 0x90, 0x0f, 0x01, 0x74, 0xbc, 0xd8, + 0x6b, 0xd3, 0x94, 0xc6, 0xca, 0x4e, 0x5e, 0x39, 0x5e, 0x2f, 0x31, 0x3d, 0xd6, 0x15, 0x4f, 0xe3, + 0xe3, 0x68, 0x50, 0x82, 0x96, 0x48, 0x76, 0x86, 0x8e, 0x69, 0x8b, 0x7a, 0x09, 0xbd, 0x66, 0xb6, + 0x0f, 0x7d, 0x86, 0x46, 0x83, 0x42, 0x9b, 0x8e, 0xed, 0x63, 0xbc, 0x15, 0x89, 0xec, 0x2b, 0xbd, + 0x8f, 0xf1, 0x76, 0x26, 0x28, 0xb1, 0xe4, 0x55, 0x07, 0xa6, 0x1b, 0x41, 0x8b, 0x1a, 0xe9, 0xf2, + 0xc4, 0x7b, 0xfd, 0xf8, 0x8d, 0xbc, 0x60, 0xf3, 0x35, 0x16, 0x38, 0x03, 0x4e, 0x30, 0x27, 0x9e, + 0x0d, 0xf3, 0x2e, 0x8d, 0xb9, 0xe9, 0x1e, 0xcb, 0x0e, 0xf3, 0x4d, 0x01, 0x46, 0x85, 0x27, 0xbf, + 0xe0, 0x00, 0xa1, 0x7b, 0x29, 0x8d, 0x43, 0xaf, 0x65, 0xc6, 0x6f, 0x76, 0xbc, 0xa8, 0x06, 0xac, + 0xd8, 0xbc, 0x6b, 0x67, 0xa4, 0x1e, 0x64, 0xa5, 0x4f, 0x24, 0x0e, 0x50, 0xc3, 0xfd, 0x62, 0x09, + 0x66, 0x87, 0xad, 0x08, 0x92, 0xb0, 0x79, 0x9f, 0xde, 0xf4, 0xe2, 0x44, 0x1e, 0x2e, 0x8e, 0x79, + 0x46, 0x95, 0x7c, 0x6f, 0x7a, 0xb1, 0xbd, 0x82, 0xb8, 0x00, 0x54, 0x92, 0xc8, 0x6d, 0x18, 0x49, + 0x5b, 0x5e, 0x41, 0x41, 0x2d, 0x4b, 0xa2, 0x71, 0x01, 0xd7, 0x16, 0x13, 0xe4, 0x32, 0xc8, 0x53, + 0x30, 0xd2, 0x0a, 0xb6, 0x98, 0xab, 0xcc, 0x96, 0x18, 0xdf, 0xf3, 0xd6, 0x82, 0xad, 0x04, 0x39, + 0xd4, 0xfd, 0xba, 0x33, 0xa0, 0x6f, 0xe4, 0x96, 0xc0, 0xa6, 0x3c, 0x0d, 0x77, 0x83, 0x38, 0x0a, + 0xdb, 0x34, 0x4c, 0xf3, 0x81, 0xda, 0x15, 0x83, 0x42, 0x9b, 0x8e, 0x7c, 0xd4, 0x19, 0xb0, 0x56, + 0x8f, 0x19, 0xa1, 0x94, 0x2a, 0x1d, 0x7a, 0xb9, 0xba, 0xff, 0x3e, 0x36, 0xc0, 0x3a, 0xeb, 0xed, + 0x96, 0x9c, 0x07, 0x60, 0xbe, 0xde, 0x7a, 0x4c, 0x1b, 0xc1, 0x9e, 0x6c, 0x99, 0x66, 0x79, 0x4d, + 0x63, 0xd0, 0xa2, 0x52, 0xdf, 0x6c, 0x74, 0x1b, 0xec, 0x9b, 0x52, 0xff, 0x37, 0x02, 0x83, 0x16, + 0x15, 0x79, 0x0e, 0xc6, 0x82, 0xb6, 0xd7, 0xa4, 0xaa, 0xff, 0x9f, 0x62, 0x4b, 0x7f, 0x95, 0x43, + 0xee, 0xed, 0xcf, 0x4d, 0x6b, 0x85, 0x38, 0x08, 0x25, 0x2d, 0xf9, 0x75, 0x07, 0x26, 0xfd, 0xa8, + 0xdd, 0x8e, 0xc2, 0x35, 0x6f, 0x8b, 0xb6, 0x54, 0x00, 0xee, 0xf6, 0xc3, 0x72, 0x46, 0xe6, 0x97, + 0x2c, 0x61, 0xe2, 0xf8, 0xab, 0xc3, 0x8a, 0x36, 0x0a, 0x33, 0x5a, 0xd9, 0x16, 0x62, 0xf4, 0x00, + 0x0b, 0xf1, 0xfb, 0x0e, 0xcc, 0x88, 0x6f, 0x17, 0xc3, 0x30, 0x4a, 0x65, 0x5c, 0x54, 0x44, 0xd0, + 0xa2, 0x87, 0xdc, 0x2c, 0x4b, 0xa2, 0x68, 0xdb, 0x6b, 0xa4, 0x9a, 0x33, 0x7d, 0x78, 0xec, 0x57, + 0x92, 0x5c, 0x84, 0x99, 0x46, 0x14, 0xfb, 0xd4, 0xee, 0x08, 0xee, 0x96, 0x56, 0x0c, 0xa3, 0x0b, + 0x79, 0x02, 0xec, 0xff, 0x86, 0xdc, 0x84, 0xd3, 0x16, 0xd0, 0xee, 0x87, 0x0a, 0xe7, 0x76, 0x56, + 0x72, 0x3b, 0x7d, 0x61, 0x20, 0x15, 0x0e, 0xf9, 0xfa, 0xcc, 0x3b, 0x60, 0xa6, 0x6f, 0xfc, 0x06, + 0xc4, 0x1e, 0x4e, 0xd9, 0xb1, 0x87, 0xaa, 0x15, 0x32, 0x38, 0xb3, 0x0c, 0xa7, 0x07, 0xf7, 0xd4, + 0x51, 0xb8, 0xb8, 0xbf, 0xe4, 0xc0, 0x93, 0x43, 0x9c, 0x2c, 0x7d, 0xe8, 0x72, 0x86, 0x1d, 0xba, + 0x88, 0x07, 0x65, 0x1a, 0xee, 0x4a, 0x63, 0x71, 0xe1, 0x78, 0x33, 0x62, 0x25, 0xdc, 0x15, 0x03, + 0x3d, 0x7e, 0x77, 0x7f, 0xae, 0xbc, 0x12, 0xee, 0x22, 0xe3, 0xed, 0x7e, 0x7e, 0x2c, 0x73, 0xae, + 0xdb, 0x50, 0xa1, 0x04, 0xae, 0xa8, 0x3c, 0xd5, 0x5d, 0x2f, 0x78, 0x2e, 0x5a, 0xe7, 0x56, 0x91, + 0x20, 0x90, 0xe2, 0xc8, 0x27, 0x1c, 0x1e, 0x93, 0x57, 0xe7, 0x5d, 0xe9, 0xf7, 0x3d, 0x9c, 0x14, + 0x81, 0x1d, 0xe9, 0x57, 0x40, 0xb4, 0xa5, 0xb3, 0x95, 0xdc, 0x11, 0x21, 0xb1, 0xbc, 0xf7, 0xa7, + 0xa2, 0xf6, 0x0a, 0x4f, 0xf6, 0x00, 0x92, 0x5e, 0xe8, 0xaf, 0x47, 0xad, 0xc0, 0xef, 0xc9, 0x20, + 0x48, 0x01, 0x71, 0x5d, 0xc1, 0x4f, 0xb8, 0x80, 0xe6, 0x37, 0x5a, 0xb2, 0xc8, 0x97, 0x1c, 0x98, + 0x09, 0x9a, 0x61, 0x14, 0xd3, 0xe5, 0xa0, 0xd1, 0xa0, 0x31, 0x0d, 0x7d, 0xaa, 0xbc, 0xa4, 0x5b, + 0xc7, 0xd3, 0x40, 0x85, 0x24, 0x57, 0xf3, 0xec, 0xcd, 0x12, 0xef, 0x43, 0x61, 0xbf, 0x32, 0xa4, + 0x0e, 0x23, 0x41, 0xd8, 0x88, 0xa4, 0x61, 0xab, 0x1d, 0x4f, 0xa9, 0xd5, 0xb0, 0x11, 0x99, 0xb5, + 0xc2, 0x7e, 0x21, 0xe7, 0x4e, 0xd6, 0xe0, 0x54, 0x2c, 0xcf, 0xc9, 0x97, 0x82, 0x84, 0x9d, 0x36, + 0xd6, 0x82, 0x76, 0x90, 0x72, 0xa3, 0x54, 0xae, 0xcd, 0xde, 0xdd, 0x9f, 0x3b, 0x85, 0x03, 0xf0, + 0x38, 0xf0, 0x2b, 0xf7, 0x95, 0x6a, 0x36, 0x18, 0x20, 0x42, 0x5d, 0x1f, 0x80, 0x6a, 0xac, 0x93, + 0x0b, 0xc2, 0x33, 0x5a, 0x2b, 0xa6, 0x8f, 0x65, 0x8c, 0x4d, 0x47, 0x69, 0x4c, 0x1a, 0xc1, 0x48, + 0x64, 0x1e, 0x12, 0x1b, 0x79, 0xb9, 0x2c, 0x0a, 0x98, 0x5f, 0x52, 0xaa, 0x09, 0x27, 0xf6, 0x42, + 0x1f, 0xb9, 0x0c, 0x12, 0xc3, 0xd8, 0x36, 0xf5, 0x5a, 0xe9, 0xb6, 0x8c, 0x76, 0x5d, 0x3e, 0xae, + 0xc3, 0xca, 0x78, 0xe5, 0x23, 0x89, 0x02, 0x8a, 0x52, 0x12, 0xd9, 0x83, 0xf1, 0x6d, 0x31, 0x08, + 0x72, 0x6f, 0xbf, 0x7a, 0xdc, 0xce, 0xcd, 0x8c, 0xac, 0x59, 0xbf, 0x12, 0x80, 0x4a, 0x1c, 0xf9, + 0x59, 0x07, 0xc0, 0x57, 0x21, 0x44, 0xb5, 0x7c, 0xb0, 0x30, 0xbb, 0xa3, 0xa3, 0x93, 0xc6, 0x35, + 0xd2, 0xa0, 0x04, 0x2d, 0xc9, 0xe4, 0x25, 0x98, 0x8c, 0xa9, 0x1f, 0x85, 0x7e, 0xd0, 0xa2, 0xf5, + 0xc5, 0x94, 0x1f, 0x32, 0x8e, 0x16, 0x6a, 0x3c, 0xc9, 0xfc, 0x13, 0xb4, 0x78, 0x60, 0x86, 0x23, + 0x79, 0xc5, 0x81, 0x69, 0x1d, 0x46, 0x65, 0x03, 0x42, 0x65, 0x38, 0x69, 0xad, 0xa0, 0xa0, 0x2d, + 0xe7, 0x59, 0x23, 0xec, 0x30, 0x95, 0x85, 0x61, 0x4e, 0x2e, 0x79, 0x17, 0x40, 0xb4, 0xc5, 0x43, + 0x96, 0xac, 0xa9, 0x95, 0x23, 0x37, 0x75, 0x5a, 0x44, 0xdf, 0x15, 0x07, 0xb4, 0xb8, 0x91, 0x2b, + 0x00, 0x62, 0xd9, 0x6c, 0xf6, 0x3a, 0x94, 0x87, 0x8c, 0xaa, 0xb5, 0x37, 0xaa, 0xce, 0xdf, 0xd0, + 0x98, 0x7b, 0xfb, 0x73, 0xfd, 0x67, 0x71, 0x1e, 0x2b, 0xb6, 0x3e, 0x27, 0xef, 0x87, 0xf1, 0xa4, + 0xdb, 0x6e, 0x7b, 0x3a, 0xf4, 0xb3, 0x5e, 0xdc, 0x8e, 0x28, 0xf8, 0x9a, 0xb9, 0x29, 0x01, 0xa8, + 0x24, 0xba, 0x21, 0x90, 0x7e, 0x7a, 0xf2, 0x1c, 0x4c, 0xaa, 0x53, 0xdd, 0x0d, 0x5c, 0x53, 0xc1, + 0x02, 0x3e, 0xf8, 0x2b, 0x16, 0x1c, 0x33, 0x54, 0xc4, 0xd5, 0x9e, 0x77, 0x89, 0xd3, 0x83, 0xf1, + 0xbc, 0x95, 0x9f, 0xed, 0xfe, 0x77, 0x29, 0xe3, 0x11, 0x6c, 0xc6, 0x94, 0x92, 0x08, 0x46, 0xc3, + 0xa8, 0xae, 0x8d, 0xde, 0xe5, 0x62, 0x8c, 0xde, 0xb5, 0xa8, 0x6e, 0x65, 0xbd, 0xd9, 0xaf, 0x04, + 0x85, 0x1c, 0x9e, 0x16, 0x54, 0xf9, 0x53, 0x8e, 0x90, 0x4e, 0x50, 0x91, 0x92, 0x75, 0x5a, 0xf0, + 0xba, 0x2d, 0x08, 0xb3, 0x72, 0xc9, 0x0e, 0x8c, 0x6e, 0x47, 0x49, 0x2a, 0xce, 0x2a, 0xc7, 0xf6, + 0xc2, 0x2e, 0x45, 0x49, 0xca, 0xb7, 0x30, 0xdd, 0x6c, 0x06, 0x49, 0x50, 0xc8, 0x70, 0xff, 0xd1, + 0xc9, 0x84, 0x86, 0x6e, 0x79, 0xa9, 0xbf, 0xbd, 0xb2, 0xcb, 0xce, 0x8f, 0x57, 0x32, 0x69, 0x8d, + 0x1f, 0xb1, 0xd3, 0x1a, 0xf7, 0xf6, 0xe7, 0xde, 0x30, 0xac, 0x0c, 0xe9, 0x0e, 0xe3, 0x30, 0xcf, + 0x59, 0x58, 0x19, 0x90, 0x0f, 0x3b, 0x30, 0x61, 0xa9, 0x27, 0x37, 0x94, 0x02, 0x23, 0xec, 0xda, + 0xb9, 0xb2, 0x80, 0x68, 0x8b, 0x74, 0x3f, 0xeb, 0xc0, 0x78, 0xcd, 0xf3, 0x77, 0xa2, 0x46, 0x83, + 0xbc, 0x09, 0x2a, 0xf5, 0xae, 0x4c, 0x20, 0x89, 0xf6, 0xe9, 0xbc, 0xc0, 0xb2, 0x84, 0xa3, 0xa6, + 0x60, 0x73, 0xb8, 0xe1, 0xf9, 0x69, 0x14, 0x73, 0xb5, 0xcb, 0x62, 0x0e, 0x5f, 0xe0, 0x10, 0x94, + 0x18, 0x76, 0x48, 0x6f, 0x7b, 0x7b, 0xea, 0xe3, 0x7c, 0x5c, 0xea, 0xaa, 0x41, 0xa1, 0x4d, 0xe7, + 0xfe, 0xc9, 0x28, 0x8c, 0xcb, 0x4c, 0xed, 0xa1, 0x73, 0x2d, 0xca, 0x8b, 0x2f, 0x0d, 0xf5, 0xe2, + 0x13, 0x18, 0xf3, 0x79, 0x91, 0x97, 0xdc, 0x4a, 0x8f, 0x19, 0xa1, 0x93, 0x0a, 0x8a, 0xba, 0x31, + 0xa3, 0x96, 0xf8, 0x8d, 0x52, 0x14, 0xf9, 0x8c, 0x03, 0x27, 0xfc, 0x28, 0x0c, 0xa9, 0x6f, 0xec, + 0xfc, 0x48, 0x11, 0xb9, 0xc8, 0xa5, 0x2c, 0x53, 0x93, 0x12, 0xce, 0x21, 0x30, 0x2f, 0x9e, 0xbc, + 0x00, 0x53, 0xa2, 0xcf, 0x6e, 0x66, 0xce, 0xc7, 0x26, 0x3b, 0x6f, 0x23, 0x31, 0x4b, 0x4b, 0xe6, + 0x45, 0x9c, 0x81, 0xa7, 0xab, 0xc4, 0x19, 0x59, 0x86, 0x46, 0x75, 0x3e, 0x2b, 0x41, 0x8b, 0x82, + 0xc4, 0x40, 0x62, 0xda, 0x88, 0x69, 0xb2, 0x8d, 0xf4, 0xe5, 0x2e, 0x4d, 0x52, 0xbe, 0xc7, 0x8c, + 0x3f, 0x58, 0xe6, 0x0e, 0xfb, 0x38, 0xe1, 0x00, 0xee, 0x64, 0x47, 0x3a, 0xba, 0x95, 0x22, 0x96, + 0x93, 0x1c, 0xe6, 0xa1, 0xfe, 0xee, 0x1c, 0x8c, 0x26, 0xdb, 0x5e, 0x5c, 0xe7, 0x7b, 0x5b, 0xb9, + 0x56, 0x65, 0xb6, 0x64, 0x83, 0x01, 0x50, 0xc0, 0xdd, 0xef, 0x3a, 0x70, 0x52, 0xcd, 0x15, 0xcf, + 0xdf, 0xa6, 0xec, 0x5b, 0xf2, 0x76, 0x98, 0xd6, 0xfe, 0xe4, 0x52, 0xd4, 0x95, 0x01, 0xac, 0xb2, + 0x89, 0x7f, 0x62, 0x06, 0x8b, 0x39, 0x6a, 0xb2, 0x00, 0x55, 0xa6, 0xb2, 0xf8, 0x54, 0xac, 0x3f, + 0xed, 0xb3, 0x2e, 0xae, 0xaf, 0xca, 0xaf, 0x0c, 0x0d, 0x89, 0x60, 0xa6, 0xe5, 0x25, 0x29, 0xd7, + 0x80, 0xb9, 0x97, 0x0f, 0x98, 0x40, 0xe5, 0x35, 0x36, 0x6b, 0x79, 0x46, 0xd8, 0xcf, 0xdb, 0xfd, + 0xc6, 0x08, 0x4c, 0x65, 0x96, 0x08, 0x33, 0x2f, 0xdd, 0x84, 0xed, 0x81, 0xfa, 0xac, 0xad, 0xcd, + 0xcb, 0x0d, 0x09, 0x47, 0x4d, 0xc1, 0xa8, 0x3b, 0x5e, 0x92, 0xdc, 0x89, 0xe2, 0xba, 0x5c, 0xd3, + 0x9a, 0x7a, 0x5d, 0xc2, 0x51, 0x53, 0x30, 0x43, 0xb3, 0x45, 0xbd, 0x98, 0xc6, 0xbc, 0xe6, 0x20, + 0x6f, 0x68, 0x6a, 0x06, 0x85, 0x36, 0x1d, 0x5f, 0x9d, 0x69, 0x2b, 0x59, 0x6a, 0x05, 0x34, 0x4c, + 0x85, 0x9a, 0xc5, 0xac, 0xce, 0xcd, 0xb5, 0x0d, 0x9b, 0xa9, 0x59, 0x9d, 0x39, 0x04, 0xe6, 0xc5, + 0x93, 0x8f, 0x39, 0x30, 0xe5, 0xdd, 0x49, 0x4c, 0x49, 0x2a, 0x5f, 0x9e, 0xc7, 0xb6, 0x56, 0x99, + 0x2a, 0xd7, 0xda, 0x0c, 0x5b, 0xe7, 0x19, 0x10, 0x66, 0x85, 0x92, 0x2f, 0xf0, 0xa8, 0x39, 0xf5, + 0xd7, 0xe3, 0x68, 0x37, 0xa8, 0xab, 0x31, 0x94, 0x7e, 0xf0, 0x31, 0xdd, 0xae, 0x95, 0x3e, 0xbe, + 0x62, 0x79, 0xf7, 0xc3, 0x71, 0x80, 0x0e, 0xee, 0x5f, 0x97, 0x61, 0xc2, 0x5a, 0x95, 0x03, 0x4d, + 0xac, 0xf3, 0x7d, 0x66, 0x62, 0x4b, 0x47, 0x30, 0xb1, 0x1f, 0x82, 0xaa, 0xaf, 0x0c, 0x45, 0x31, + 0x25, 0xb4, 0x79, 0xf3, 0x63, 0x6c, 0x85, 0x06, 0xa1, 0x91, 0x49, 0x2e, 0xc2, 0x8c, 0xc5, 0x46, + 0x1a, 0x99, 0x11, 0x6e, 0x64, 0x74, 0xc4, 0x61, 0x31, 0x4f, 0x80, 0xfd, 0xdf, 0x90, 0x67, 0x99, + 0x7b, 0x13, 0xc8, 0x76, 0x89, 0xe3, 0x9c, 0x2c, 0x4f, 0x5d, 0x5c, 0x5f, 0x55, 0x60, 0xb4, 0x69, + 0xdc, 0x6f, 0x38, 0x7a, 0x70, 0x1f, 0x41, 0x6d, 0xc3, 0xed, 0x6c, 0x6d, 0xc3, 0x4a, 0x21, 0xdd, + 0x3c, 0xa4, 0xae, 0xe1, 0x1a, 0x8c, 0x2f, 0x45, 0xed, 0xb6, 0x17, 0xd6, 0xc9, 0xeb, 0x60, 0xdc, + 0x17, 0x7f, 0xca, 0xf3, 0x02, 0x4f, 0x76, 0x4b, 0x2c, 0x2a, 0x1c, 0x79, 0x0a, 0x46, 0xbc, 0xb8, + 0xa9, 0xce, 0x08, 0x3c, 0x3b, 0xb2, 0x18, 0x37, 0x13, 0xe4, 0x50, 0xf7, 0x73, 0x25, 0x80, 0xa5, + 0xa8, 0xdd, 0xf1, 0x62, 0x5a, 0xdf, 0x8c, 0xfe, 0x37, 0x58, 0x28, 0x5c, 0xc7, 0x4f, 0x3a, 0x40, + 0x58, 0xaf, 0x44, 0x21, 0x0d, 0x4d, 0x46, 0x86, 0xed, 0x97, 0xbe, 0x82, 0xca, 0xcd, 0xc7, 0xac, + 0x01, 0x85, 0x40, 0x43, 0x73, 0x08, 0x77, 0xf2, 0x69, 0x15, 0x6c, 0x2e, 0x67, 0xf3, 0xf0, 0x3c, + 0xb9, 0x27, 0x63, 0xcf, 0xee, 0xe7, 0x4b, 0x70, 0x5a, 0x98, 0xad, 0xab, 0x5e, 0xe8, 0x35, 0x69, + 0x9b, 0x69, 0x75, 0xd8, 0xb0, 0xb3, 0xcf, 0xfc, 0x98, 0x40, 0xa5, 0xdd, 0x8f, 0x3b, 0x39, 0xc5, + 0xa4, 0x12, 0xd3, 0x68, 0x35, 0x0c, 0x52, 0xe4, 0xcc, 0x49, 0x02, 0x15, 0x75, 0x29, 0x42, 0x1a, + 0x9b, 0x82, 0x04, 0xe9, 0x75, 0x77, 0x51, 0xb2, 0x47, 0x2d, 0xc8, 0xfd, 0x8a, 0x03, 0x79, 0x23, + 0xca, 0x1d, 0x7d, 0x51, 0x38, 0x97, 0x77, 0xf4, 0xb3, 0x75, 0x6e, 0x47, 0x28, 0x1b, 0x7b, 0x0f, + 0x4c, 0x78, 0x69, 0x4a, 0xdb, 0x1d, 0xe1, 0x75, 0x96, 0x1f, 0x2c, 0xb2, 0x71, 0x35, 0xaa, 0x07, + 0x8d, 0x80, 0x7b, 0x9b, 0x36, 0x3b, 0xf7, 0x45, 0xa8, 0xa8, 0x60, 0xfe, 0x21, 0x06, 0xf3, 0xe9, + 0x4c, 0x6e, 0x62, 0xc8, 0x74, 0xb9, 0x57, 0x82, 0x01, 0xbb, 0x20, 0x6b, 0xb2, 0xb1, 0x17, 0x99, + 0x26, 0x1f, 0xcd, 0x66, 0x90, 0x3d, 0x91, 0xc8, 0x10, 0x47, 0xe8, 0x77, 0x16, 0xbd, 0x8b, 0x9b, + 0xdc, 0xc6, 0x84, 0xd4, 0x4f, 0xe7, 0x37, 0xc8, 0x79, 0x00, 0x63, 0xe6, 0x65, 0xb9, 0x81, 0x0e, + 0xc2, 0x99, 0xdd, 0x00, 0x2d, 0x2a, 0xe6, 0xd4, 0x05, 0x61, 0x92, 0x7a, 0xad, 0xd6, 0xa5, 0x20, + 0x4c, 0xe5, 0x31, 0x45, 0x9b, 0x80, 0x55, 0x83, 0x42, 0x9b, 0xee, 0xcc, 0x5b, 0xac, 0x71, 0x39, + 0x4a, 0x8e, 0xe8, 0x93, 0x25, 0x98, 0xbe, 0x18, 0x76, 0xd7, 0x2f, 0xae, 0x77, 0xb7, 0x5a, 0x81, + 0x7f, 0x85, 0xf6, 0xd8, 0xa0, 0xed, 0xd0, 0xde, 0xea, 0xb2, 0xec, 0x76, 0x3d, 0x68, 0x57, 0x18, + 0x10, 0x05, 0x8e, 0xa9, 0xd9, 0x08, 0xc2, 0x26, 0x8d, 0x3b, 0x71, 0x20, 0xbd, 0x71, 0x4b, 0xcd, + 0x0b, 0x06, 0x85, 0x36, 0x1d, 0xe3, 0x1d, 0xdd, 0x09, 0x69, 0x9c, 0xb7, 0x1f, 0xd7, 0x19, 0x10, + 0x05, 0x8e, 0x11, 0xa5, 0x71, 0x37, 0x49, 0x65, 0x8f, 0x69, 0xa2, 0x4d, 0x06, 0x44, 0x81, 0x63, + 0xd3, 0x23, 0xe9, 0x6e, 0xf1, 0x00, 0x5b, 0x2e, 0xd5, 0xb9, 0x21, 0xc0, 0xa8, 0xf0, 0x8c, 0x74, + 0x87, 0xf6, 0x96, 0xd9, 0x6e, 0x9a, 0xab, 0x9b, 0xb8, 0x22, 0xc0, 0xa8, 0xf0, 0xee, 0x3f, 0x38, + 0x40, 0xb2, 0xdd, 0xf1, 0x08, 0x36, 0xe4, 0x97, 0xb3, 0x1b, 0xf2, 0x31, 0x63, 0xa1, 0x59, 0xf5, + 0x87, 0xec, 0xcb, 0xbf, 0xea, 0xc0, 0xa4, 0x1d, 0x16, 0x27, 0xcd, 0x9c, 0x21, 0xba, 0x9e, 0x35, + 0x44, 0xf7, 0xf6, 0xe7, 0x7e, 0x6c, 0xd0, 0x9d, 0xbd, 0x66, 0x90, 0x46, 0x9d, 0xe4, 0xcd, 0x34, + 0x6c, 0x06, 0x21, 0xe5, 0x41, 0x1f, 0x11, 0x4e, 0xcf, 0xc4, 0xdc, 0x97, 0xa2, 0x3a, 0x7d, 0x00, + 0x4b, 0xe6, 0xfe, 0x96, 0x03, 0x33, 0x7d, 0xc5, 0x26, 0x47, 0x29, 0x8a, 0xec, 0x2f, 0x79, 0x2c, + 0x1d, 0xa9, 0xe4, 0x31, 0x5b, 0x12, 0x55, 0x3e, 0xa8, 0x24, 0xca, 0xbd, 0x25, 0xf4, 0xcd, 0x94, + 0xf1, 0x1c, 0xc2, 0x4a, 0x1e, 0x58, 0xbb, 0xe9, 0x7e, 0xca, 0x81, 0xa9, 0x4c, 0x71, 0x54, 0x41, + 0xb6, 0x97, 0x2f, 0xe3, 0x88, 0xa7, 0x80, 0xe2, 0x20, 0x14, 0x31, 0xa2, 0x8a, 0xb5, 0x8c, 0x0d, + 0x0a, 0x6d, 0x3a, 0xf7, 0xb3, 0x25, 0xa8, 0xa8, 0x68, 0xe2, 0x21, 0x54, 0xf9, 0x84, 0x03, 0x53, + 0xfa, 0x2c, 0xcf, 0x3d, 0xfc, 0x42, 0x4a, 0x50, 0x98, 0x06, 0x3a, 0x4f, 0xc8, 0x3c, 0x7c, 0x7d, + 0xd4, 0x40, 0x5b, 0x18, 0x66, 0x65, 0x93, 0x9b, 0x00, 0x49, 0x2f, 0x49, 0x69, 0xdb, 0x3a, 0x6b, + 0xb8, 0xd6, 0x72, 0x9e, 0xf7, 0xa3, 0x98, 0xb2, 0xc5, 0x7b, 0x2d, 0xaa, 0xd3, 0x0d, 0x4d, 0x69, + 0x2c, 0xb7, 0x81, 0xa1, 0xc5, 0xc9, 0xfd, 0xed, 0x12, 0x9c, 0xcc, 0xab, 0x44, 0xde, 0x0d, 0x93, + 0x4a, 0xba, 0x75, 0xb7, 0x52, 0x85, 0x50, 0x27, 0xd1, 0xc2, 0xdd, 0xdb, 0x9f, 0x9b, 0xeb, 0xbf, + 0x5c, 0x3a, 0x6f, 0x93, 0x60, 0x86, 0x99, 0x08, 0xa8, 0xc8, 0x10, 0x50, 0xad, 0xb7, 0xd8, 0xe9, + 0xc8, 0xa8, 0x88, 0x15, 0x50, 0xb1, 0xb1, 0x98, 0xa3, 0x26, 0xeb, 0x70, 0xca, 0x82, 0x5c, 0xa3, + 0x41, 0x73, 0x7b, 0x2b, 0x8a, 0x45, 0x11, 0x7f, 0xb9, 0xf6, 0x94, 0xe4, 0x72, 0x0a, 0x07, 0xd0, + 0xe0, 0xc0, 0x2f, 0xc9, 0x9b, 0xa0, 0xe2, 0x7b, 0x1d, 0xcf, 0x0f, 0xd2, 0x9e, 0x3c, 0x3c, 0x69, + 0xc3, 0xb7, 0x24, 0xe1, 0xa8, 0x29, 0xdc, 0xab, 0x30, 0x72, 0xc8, 0x19, 0x74, 0x28, 0x47, 0xe2, + 0x45, 0xa8, 0x30, 0x76, 0xcc, 0xd0, 0x15, 0xc5, 0x32, 0x82, 0x8a, 0xba, 0xd3, 0x41, 0x5c, 0x28, + 0x07, 0x9e, 0x8a, 0x59, 0xe9, 0x66, 0xad, 0x26, 0x49, 0x97, 0xbb, 0x49, 0x0c, 0x49, 0x9e, 0x86, + 0x32, 0xdd, 0xeb, 0xe4, 0x83, 0x53, 0x2b, 0x7b, 0x9d, 0x20, 0xa6, 0x09, 0x23, 0xa2, 0x7b, 0x1d, + 0x72, 0x06, 0x4a, 0x41, 0x5d, 0xee, 0x80, 0x20, 0x69, 0x4a, 0xab, 0xcb, 0x58, 0x0a, 0xea, 0xee, + 0x1e, 0x54, 0xf5, 0x25, 0x12, 0xb2, 0xa3, 0x36, 0x06, 0xa7, 0x88, 0xf0, 0xbf, 0xe2, 0x3b, 0x64, + 0x4b, 0xe8, 0x02, 0x98, 0xc2, 0xb5, 0xa2, 0xec, 0xcb, 0x39, 0x18, 0xf1, 0x23, 0x59, 0xc1, 0x5a, + 0x31, 0x6c, 0xf8, 0x8e, 0xc0, 0x31, 0xee, 0x2d, 0x98, 0xbe, 0x12, 0x46, 0x77, 0x42, 0xb6, 0x53, + 0x5f, 0x08, 0x68, 0xab, 0xce, 0x18, 0x37, 0xd8, 0x1f, 0x79, 0xff, 0x83, 0x63, 0x51, 0xe0, 0xf4, + 0x4d, 0x8b, 0xd2, 0xb0, 0x9b, 0x16, 0xee, 0xcf, 0x39, 0x70, 0x32, 0x5f, 0xa4, 0xf6, 0x3d, 0x3b, + 0x12, 0x7d, 0x98, 0x29, 0xa3, 0xaa, 0xa0, 0xae, 0x77, 0x44, 0xbe, 0xf5, 0x79, 0x98, 0xdc, 0xea, + 0x06, 0xad, 0xba, 0xfc, 0x2d, 0xf5, 0xd1, 0x75, 0x5e, 0x35, 0x0b, 0x87, 0x19, 0x4a, 0xe6, 0x58, + 0x6e, 0x05, 0xa1, 0x17, 0xf7, 0xd6, 0xcd, 0xbe, 0xa1, 0xcd, 0x53, 0x4d, 0x63, 0xd0, 0xa2, 0x72, + 0xff, 0xb2, 0x0c, 0xe6, 0x36, 0x0b, 0x09, 0x64, 0x3a, 0xdf, 0x29, 0x22, 0xce, 0xb6, 0xd1, 0x0b, + 0x7d, 0x73, 0x6f, 0xa6, 0x92, 0xcb, 0xe6, 0x7f, 0xdc, 0x61, 0x2e, 0x6d, 0x90, 0x06, 0x1e, 0x37, + 0x16, 0xf2, 0x64, 0xb7, 0x5e, 0x50, 0xc6, 0x77, 0x55, 0x70, 0x8e, 0x62, 0xdb, 0x49, 0xd6, 0xc2, + 0xd0, 0x96, 0x4c, 0x5e, 0x92, 0x31, 0xf2, 0x72, 0x61, 0xc5, 0x20, 0x95, 0x5c, 0x60, 0xbc, 0x03, + 0xa3, 0x31, 0x4d, 0x63, 0x55, 0x86, 0x73, 0xe5, 0xb8, 0x19, 0xc3, 0x34, 0xee, 0x6d, 0xa4, 0xec, + 0xf4, 0xd8, 0xb4, 0x3c, 0x39, 0x0e, 0x46, 0x21, 0xc8, 0x4d, 0x80, 0xf4, 0xf7, 0xc5, 0x11, 0xc3, + 0xce, 0x0b, 0x50, 0xf5, 0xba, 0x69, 0xd4, 0x66, 0xdd, 0xc4, 0x87, 0xa7, 0x62, 0x05, 0xd6, 0x15, + 0x02, 0x0d, 0x8d, 0xfb, 0xea, 0x28, 0xe4, 0xf2, 0xeb, 0x64, 0xcf, 0xbe, 0x89, 0xe5, 0x14, 0x7b, + 0x13, 0x4b, 0x2b, 0x33, 0xe8, 0x36, 0x16, 0x69, 0xc2, 0x68, 0x67, 0xdb, 0x4b, 0xd4, 0x1a, 0x7d, + 0x51, 0x75, 0xd3, 0x3a, 0x03, 0xde, 0xdb, 0x9f, 0xfb, 0xf1, 0xc3, 0x39, 0xae, 0x6c, 0xae, 0x2e, + 0x88, 0x62, 0x43, 0x23, 0x9a, 0xf3, 0x40, 0xc1, 0xdf, 0x76, 0x5d, 0xcb, 0x07, 0x1c, 0xc2, 0x3f, + 0xe2, 0x88, 0xa2, 0x2c, 0xa4, 0x49, 0xb7, 0x95, 0xca, 0xd9, 0xf0, 0x62, 0x81, 0xab, 0x4c, 0x30, + 0x36, 0xd5, 0x59, 0xe2, 0x37, 0x5a, 0x42, 0xc9, 0xbb, 0xa1, 0x9a, 0xa4, 0x5e, 0x9c, 0x3e, 0x60, + 0x2d, 0x87, 0xee, 0xf4, 0x0d, 0xc5, 0x04, 0x0d, 0x3f, 0xf2, 0x2e, 0x80, 0x46, 0x10, 0x06, 0xc9, + 0xf6, 0x03, 0xa6, 0xb6, 0xb8, 0xe2, 0x17, 0x34, 0x07, 0xb4, 0xb8, 0x31, 0xeb, 0xc6, 0xe7, 0xb6, + 0x88, 0xc1, 0x56, 0xf8, 0x5e, 0xaa, 0xad, 0x1b, 0x6a, 0x0c, 0x5a, 0x54, 0xee, 0x07, 0xe1, 0xf1, + 0xfc, 0x2d, 0x68, 0x79, 0x96, 0x6d, 0xc6, 0x51, 0xb7, 0x93, 0xdf, 0x4b, 0xf8, 0x2d, 0x59, 0x14, + 0x38, 0x66, 0xe3, 0x77, 0x82, 0xb0, 0x9e, 0xb7, 0xf1, 0x57, 0x82, 0xb0, 0x8e, 0x1c, 0x73, 0x88, + 0x2b, 0x6a, 0x7f, 0xe8, 0xc0, 0xb9, 0x83, 0x2e, 0x6b, 0x93, 0xa7, 0x60, 0xe4, 0x8e, 0x17, 0x87, + 0xf2, 0xfa, 0x09, 0xb7, 0x1d, 0xb7, 0xbc, 0x38, 0x44, 0x0e, 0x25, 0x3d, 0x18, 0x13, 0xf5, 0x6b, + 0xd2, 0x3b, 0x7e, 0xb1, 0xd8, 0xab, 0xe3, 0xec, 0x30, 0xa8, 0xc3, 0x4b, 0xa2, 0x76, 0x0e, 0xa5, + 0x40, 0xf7, 0x55, 0x07, 0xc8, 0xf5, 0x5d, 0x1a, 0xc7, 0x41, 0xdd, 0xaa, 0xb8, 0x23, 0xcf, 0xc1, + 0xe4, 0xed, 0x8d, 0xeb, 0xd7, 0xd6, 0xa3, 0x20, 0xe4, 0x85, 0xe3, 0x56, 0x9d, 0xc7, 0x65, 0x0b, + 0x8e, 0x19, 0x2a, 0xb2, 0x04, 0x33, 0xb7, 0x5f, 0x66, 0x5b, 0xce, 0xca, 0x5e, 0x27, 0xa6, 0x49, + 0xa2, 0x1f, 0x5c, 0xa8, 0x8a, 0x4c, 0xda, 0xe5, 0x17, 0x73, 0x48, 0xec, 0xa7, 0x77, 0xbf, 0x5c, + 0x82, 0x09, 0xeb, 0x7d, 0x82, 0x43, 0xf8, 0x23, 0xb9, 0x27, 0x15, 0x4a, 0x87, 0x7c, 0x52, 0xe1, + 0x19, 0xa8, 0x74, 0xa2, 0x56, 0xe0, 0x07, 0xfa, 0x84, 0x37, 0xc9, 0xd3, 0x6d, 0x12, 0x86, 0x1a, + 0x4b, 0xee, 0x40, 0x55, 0x5f, 0x34, 0x96, 0x35, 0x62, 0x45, 0x79, 0x64, 0x7a, 0xad, 0x99, 0x0b, + 0xc4, 0x46, 0x16, 0x71, 0x61, 0x8c, 0x4f, 0x54, 0x95, 0x4c, 0xe0, 0x45, 0x07, 0x7c, 0x06, 0x27, + 0x28, 0x31, 0xee, 0xbf, 0x8c, 0x42, 0x95, 0x9d, 0x7f, 0x97, 0x62, 0x5a, 0x4f, 0xc8, 0x6b, 0xa1, + 0xdc, 0x8d, 0x5b, 0xb2, 0xb3, 0x74, 0x5c, 0x8a, 0x9d, 0x8d, 0x19, 0x3c, 0xb3, 0x3b, 0x94, 0x8e, + 0x94, 0x94, 0x2c, 0x1f, 0x98, 0x94, 0x7c, 0x01, 0xa6, 0x92, 0x64, 0x7b, 0x3d, 0x0e, 0x76, 0xbd, + 0x94, 0xcd, 0x39, 0x19, 0xc4, 0x31, 0x59, 0xa0, 0x8d, 0x4b, 0x06, 0x89, 0x59, 0x5a, 0x72, 0x11, + 0x66, 0x4c, 0x6a, 0x90, 0xc6, 0x29, 0x8f, 0xd9, 0x88, 0xf0, 0x8e, 0x4e, 0xc2, 0x98, 0x64, 0xa2, + 0x24, 0xc0, 0xfe, 0x6f, 0xc8, 0x32, 0x9c, 0xcc, 0x00, 0x99, 0x22, 0x22, 0xf6, 0x33, 0x2b, 0xf9, + 0x9c, 0xcc, 0xf0, 0x61, 0xba, 0xf4, 0x7d, 0x41, 0xae, 0xc2, 0xe3, 0x62, 0x7c, 0xf9, 0x05, 0x75, + 0xdd, 0xa2, 0x71, 0xce, 0xe8, 0xff, 0x48, 0x46, 0x8f, 0x5f, 0xec, 0x27, 0xc1, 0x41, 0xdf, 0xb1, + 0x19, 0xaa, 0xc1, 0xab, 0xcb, 0xd2, 0xb0, 0xe9, 0x19, 0xaa, 0xd9, 0xac, 0xd6, 0xd1, 0xa6, 0x23, + 0xef, 0x84, 0x27, 0xcd, 0x4f, 0x11, 0xf2, 0x13, 0xbb, 0xfd, 0xb2, 0x4c, 0xbf, 0xcf, 0x49, 0x16, + 0x4f, 0x5e, 0x1c, 0x48, 0x56, 0xc7, 0x61, 0xdf, 0x93, 0x2d, 0x38, 0xa3, 0x51, 0x2b, 0x6c, 0xf5, + 0x76, 0xe2, 0x20, 0xa1, 0x35, 0x2f, 0xa1, 0x37, 0xe2, 0x16, 0x2f, 0x37, 0xab, 0x9a, 0x47, 0x16, + 0x2e, 0x06, 0xe9, 0xa5, 0x41, 0x94, 0xb8, 0x86, 0xf7, 0xe1, 0xc2, 0x9c, 0x0b, 0x1a, 0x7a, 0x5b, + 0x2d, 0x7a, 0x7d, 0x69, 0x95, 0x5f, 0x1c, 0xb4, 0x9c, 0x8b, 0x15, 0x85, 0x40, 0x43, 0xa3, 0x5d, + 0xfb, 0xc9, 0xa1, 0xae, 0xfd, 0xb7, 0x1c, 0x98, 0xd2, 0x93, 0xfd, 0x11, 0x04, 0xe8, 0x5a, 0xd9, + 0x00, 0xdd, 0xc5, 0xe3, 0x7a, 0x75, 0x52, 0xf3, 0x21, 0x07, 0xb1, 0x9f, 0xaf, 0x02, 0xf0, 0x67, + 0x6b, 0x02, 0x5e, 0x1e, 0x7a, 0x0e, 0x46, 0x62, 0xda, 0x89, 0xf2, 0x96, 0x8f, 0x51, 0x20, 0xc7, + 0x7c, 0xff, 0x2e, 0xe7, 0x41, 0x49, 0xea, 0xd1, 0xef, 0x6d, 0x92, 0x7a, 0x03, 0x9e, 0x08, 0xc2, + 0x84, 0xfa, 0xdd, 0x58, 0x6e, 0x74, 0x97, 0xa2, 0x44, 0x5b, 0x87, 0x4a, 0xed, 0xb5, 0x92, 0xd1, + 0x13, 0xab, 0x83, 0x88, 0x70, 0xf0, 0xb7, 0xac, 0x4b, 0x15, 0x42, 0xde, 0x43, 0x31, 0xe1, 0x01, + 0x09, 0x47, 0x4d, 0x61, 0x16, 0xc4, 0x5a, 0x43, 0x5d, 0x34, 0xc9, 0x2d, 0x88, 0xb5, 0x0b, 0x1b, + 0x68, 0x68, 0x06, 0x5b, 0xc5, 0x6a, 0x41, 0x56, 0x11, 0x8e, 0x6c, 0x15, 0xd5, 0xfa, 0x9c, 0x18, + 0xfa, 0xc8, 0x81, 0xda, 0xac, 0x27, 0x87, 0x6e, 0xd6, 0x6f, 0x87, 0xe9, 0x20, 0xdc, 0xa6, 0x71, + 0x90, 0xd2, 0x3a, 0x5f, 0x0b, 0xb3, 0x53, 0xbc, 0x23, 0x74, 0xe4, 0x6a, 0x35, 0x83, 0xc5, 0x1c, + 0x75, 0xd6, 0xa8, 0x4c, 0x1f, 0xc2, 0xa8, 0x0c, 0x31, 0xe5, 0x27, 0x8a, 0x31, 0xe5, 0x27, 0x8f, + 0x6f, 0xca, 0x67, 0x1e, 0xaa, 0x29, 0x27, 0x45, 0x98, 0x72, 0xf7, 0x95, 0x12, 0x3c, 0x61, 0x2c, + 0x13, 0x9b, 0x0f, 0x41, 0x83, 0xad, 0x4d, 0x7e, 0x7b, 0x4f, 0xd4, 0x73, 0x58, 0x41, 0x4e, 0x13, + 0x2f, 0xd5, 0x18, 0xb4, 0xa8, 0x78, 0xac, 0x90, 0xc6, 0xbc, 0x34, 0x34, 0x6f, 0xb6, 0x96, 0x24, + 0x1c, 0x35, 0x05, 0x7f, 0xa3, 0x8e, 0xc6, 0xa9, 0x4c, 0xee, 0xe4, 0x8b, 0x9d, 0x96, 0x0c, 0x0a, + 0x6d, 0x3a, 0xe6, 0xde, 0xf9, 0x6a, 0xc9, 0x30, 0xd3, 0x35, 0x29, 0xdc, 0x3b, 0xbd, 0x4a, 0x34, + 0x56, 0xa9, 0xc3, 0x83, 0xc2, 0xa3, 0xfd, 0xea, 0xf0, 0x43, 0xbe, 0xa6, 0x70, 0xff, 0xcb, 0x81, + 0xd7, 0x0c, 0xec, 0x8a, 0x47, 0xb0, 0x1d, 0xed, 0x65, 0xb7, 0xa3, 0x8d, 0xe3, 0x6f, 0x47, 0x7d, + 0xad, 0x18, 0xb2, 0x35, 0xfd, 0x95, 0x03, 0xd3, 0x86, 0xfe, 0x11, 0x34, 0x35, 0x28, 0xf4, 0xb5, + 0x39, 0xa3, 0xba, 0x28, 0x59, 0xcc, 0xb4, 0xed, 0x5b, 0xbc, 0x6d, 0xe2, 0xac, 0xb4, 0xe8, 0xab, + 0xe7, 0x5c, 0x0e, 0x38, 0x74, 0xf4, 0x60, 0x8c, 0x5f, 0x71, 0x4d, 0x8a, 0x39, 0xb3, 0x65, 0xe5, + 0xf3, 0xb0, 0xa5, 0x39, 0xb3, 0xf1, 0x9f, 0x09, 0x4a, 0x81, 0xbc, 0x70, 0x39, 0x48, 0x98, 0x7d, + 0xab, 0xcb, 0xf0, 0xaa, 0x29, 0x5c, 0x96, 0x70, 0xd4, 0x14, 0x6e, 0x1b, 0x66, 0xb3, 0xcc, 0x97, + 0x69, 0x83, 0x87, 0xc6, 0x0e, 0xd5, 0xcc, 0x05, 0xa8, 0x7a, 0xfc, 0xab, 0xb5, 0xae, 0x97, 0x7f, + 0xd3, 0x65, 0x51, 0x21, 0xd0, 0xd0, 0xb8, 0xbf, 0xe9, 0xc0, 0xe3, 0x03, 0x1a, 0x53, 0x60, 0x58, + 0x39, 0x35, 0x56, 0x60, 0xc8, 0x3b, 0x3b, 0x75, 0xda, 0xf0, 0x54, 0xf0, 0xc5, 0x8a, 0xd5, 0x2c, + 0x0b, 0x30, 0x2a, 0xbc, 0xfb, 0xaf, 0x0e, 0x9c, 0xc8, 0xea, 0x9a, 0x90, 0xcb, 0x40, 0x44, 0x63, + 0x96, 0x83, 0xc4, 0x8f, 0x76, 0x69, 0xdc, 0x63, 0x2d, 0x17, 0x5a, 0xeb, 0xdb, 0xee, 0x8b, 0x7d, + 0x14, 0x38, 0xe0, 0x2b, 0xf2, 0x29, 0x5e, 0x2b, 0xa4, 0x7a, 0x5b, 0xcd, 0x94, 0x9b, 0x45, 0xce, + 0x14, 0x33, 0x98, 0xf6, 0x89, 0x57, 0x8b, 0x44, 0x5b, 0xbe, 0xfb, 0xed, 0x11, 0xd0, 0x79, 0x27, + 0x7e, 0xcc, 0x2f, 0x28, 0x48, 0x92, 0x79, 0xf8, 0xa7, 0x7c, 0x84, 0x87, 0x7f, 0x46, 0xee, 0x77, + 0xa6, 0x17, 0x29, 0x59, 0xe3, 0x3b, 0x5a, 0x46, 0x7f, 0xd3, 0xa0, 0xd0, 0xa6, 0x63, 0x9a, 0xb4, + 0x82, 0x5d, 0x2a, 0x3e, 0x1a, 0xcb, 0x6a, 0xb2, 0xa6, 0x10, 0x68, 0x68, 0x98, 0x26, 0xf5, 0xa0, + 0xd1, 0x90, 0x27, 0x3b, 0xad, 0x09, 0xeb, 0x1d, 0xe4, 0x18, 0x46, 0xb1, 0x1d, 0x45, 0x3b, 0xd2, + 0x5f, 0xd3, 0x14, 0x97, 0xa2, 0x68, 0x07, 0x39, 0x86, 0x79, 0x18, 0x61, 0x14, 0xb7, 0xbd, 0x56, + 0xf0, 0x3e, 0x5a, 0xd7, 0x52, 0xa4, 0x9f, 0xa6, 0x3d, 0x8c, 0x6b, 0xfd, 0x24, 0x38, 0xe8, 0x3b, + 0x36, 0x03, 0x3b, 0x31, 0xad, 0x07, 0x7e, 0x6a, 0x73, 0x83, 0xec, 0x0c, 0x5c, 0xef, 0xa3, 0xc0, + 0x01, 0x5f, 0x91, 0x45, 0x38, 0xa1, 0xf2, 0x86, 0xaa, 0x18, 0x45, 0x38, 0x6f, 0xda, 0x6f, 0xc6, + 0x2c, 0x1a, 0xf3, 0xf4, 0xcc, 0xda, 0xb4, 0x65, 0x49, 0x10, 0x77, 0xeb, 0x2c, 0x6b, 0xa3, 0x4a, + 0x85, 0x50, 0x53, 0xb8, 0xbf, 0x53, 0x62, 0xbb, 0xe3, 0x90, 0x1b, 0x9c, 0x8f, 0x2c, 0x28, 0x97, + 0x9d, 0x91, 0x23, 0x87, 0x98, 0x91, 0xcf, 0xc1, 0xe4, 0xed, 0x24, 0x0a, 0x75, 0xc0, 0x6b, 0x74, + 0x68, 0xc0, 0xcb, 0xa2, 0x1a, 0x1c, 0xf0, 0x1a, 0x3b, 0x62, 0xc0, 0xeb, 0x4f, 0x47, 0xe1, 0xb4, + 0x4e, 0xf5, 0xd2, 0xf4, 0x4e, 0x14, 0xef, 0x04, 0x61, 0x93, 0xa7, 0x47, 0xbf, 0xe4, 0xc0, 0xa4, + 0x98, 0xde, 0xf2, 0xae, 0xbb, 0x48, 0x07, 0x36, 0x0a, 0xba, 0x8e, 0x94, 0x11, 0x36, 0xbf, 0x69, + 0x09, 0xca, 0x3d, 0x3c, 0x60, 0xa3, 0x30, 0xa3, 0x11, 0xf9, 0x00, 0x80, 0xaa, 0x9d, 0x68, 0x14, + 0xf4, 0x68, 0x96, 0xd2, 0x0f, 0x69, 0xc3, 0xb8, 0x92, 0x9b, 0x5a, 0x08, 0x5a, 0x02, 0xc9, 0x2b, + 0x0e, 0x8c, 0xb5, 0x44, 0xdf, 0x88, 0xdc, 0xce, 0x4b, 0x0f, 0xa5, 0x6f, 0xec, 0x5e, 0xd1, 0xdb, + 0xb2, 0xec, 0x0f, 0x29, 0x9f, 0x20, 0x8c, 0x07, 0x61, 0x93, 0x0d, 0xab, 0x8c, 0x11, 0xbe, 0x61, + 0x50, 0x69, 0xc1, 0x5a, 0xe4, 0xd5, 0x6b, 0x5e, 0xcb, 0x0b, 0x7d, 0x1a, 0xaf, 0x0a, 0x72, 0xfb, + 0xd1, 0x1e, 0x0e, 0x40, 0xc5, 0xa8, 0xef, 0xbe, 0xdd, 0xe8, 0x61, 0xee, 0xdb, 0x9d, 0x79, 0x07, + 0xcc, 0xf4, 0x0d, 0xe6, 0x91, 0x5e, 0x21, 0xf8, 0x51, 0x98, 0x78, 0xc0, 0x4f, 0xdd, 0x3f, 0x1a, + 0x33, 0x7b, 0xcc, 0xb5, 0xa8, 0x2e, 0x6e, 0x7d, 0xc5, 0x66, 0x44, 0xa5, 0xab, 0x58, 0xe0, 0x14, + 0xb1, 0x1e, 0xfe, 0xd1, 0x40, 0xb4, 0x45, 0xb2, 0x39, 0xda, 0xf1, 0x62, 0x1a, 0x3e, 0xec, 0x39, + 0xba, 0xae, 0x85, 0xa0, 0x25, 0x90, 0x6c, 0x67, 0x92, 0x8f, 0x17, 0x8e, 0x9f, 0x7c, 0x64, 0xde, + 0xeb, 0xc0, 0xdb, 0x39, 0x9f, 0x71, 0x60, 0x3a, 0xcc, 0xcc, 0x5c, 0x99, 0x80, 0xda, 0x7c, 0x18, + 0xab, 0x42, 0xdc, 0xb6, 0xcd, 0xc2, 0x30, 0x27, 0x7f, 0xd0, 0x0e, 0x34, 0x7a, 0xc4, 0x1d, 0xc8, + 0x5c, 0x1f, 0x1d, 0x1b, 0x76, 0x7d, 0x94, 0x84, 0xfa, 0xe2, 0xf8, 0x78, 0xe1, 0x17, 0xc7, 0x61, + 0xc0, 0xa5, 0xf1, 0x5b, 0x50, 0xf5, 0x63, 0xea, 0xa5, 0x0f, 0x78, 0x87, 0x98, 0x3f, 0xb5, 0xb6, + 0xa4, 0x18, 0xa0, 0xe1, 0xe5, 0xfe, 0x45, 0x19, 0x4e, 0xaa, 0x1e, 0x51, 0x89, 0x19, 0xb6, 0x9d, + 0x09, 0xb9, 0xc6, 0x17, 0xd5, 0xdb, 0xd9, 0x25, 0x85, 0x40, 0x43, 0xc3, 0xdc, 0xa7, 0x6e, 0x42, + 0xaf, 0x77, 0x68, 0xb8, 0x16, 0x6c, 0x25, 0xbc, 0xc7, 0xad, 0xea, 0xae, 0x1b, 0x06, 0x85, 0x36, + 0x1d, 0xf3, 0x9d, 0x85, 0x1b, 0x9b, 0xe4, 0xf3, 0x9c, 0xd2, 0x3d, 0x46, 0x85, 0x27, 0x5f, 0x1c, + 0xf8, 0x02, 0x44, 0x31, 0x19, 0xfe, 0xbe, 0x7c, 0xd4, 0x11, 0x9f, 0x7e, 0x78, 0xd5, 0x81, 0x13, + 0x3b, 0x99, 0xd2, 0x12, 0x65, 0x92, 0x8f, 0x59, 0x61, 0x99, 0xad, 0x57, 0x31, 0x53, 0x38, 0x0b, + 0x4f, 0x30, 0x2f, 0xdd, 0xfd, 0x0f, 0x07, 0x6c, 0xf3, 0x74, 0x38, 0x47, 0xc8, 0x7a, 0xd3, 0xa7, + 0x74, 0xc0, 0x9b, 0x3e, 0xca, 0x67, 0x2a, 0x1f, 0xce, 0x47, 0x1f, 0x39, 0x82, 0x8f, 0x3e, 0x3a, + 0xd4, 0xc9, 0x7a, 0x2d, 0x94, 0xbb, 0x41, 0x5d, 0xba, 0xd9, 0x26, 0xd7, 0xb4, 0xba, 0x8c, 0x0c, + 0xee, 0xfe, 0xc1, 0xa8, 0x39, 0x56, 0xcb, 0xc4, 0xf4, 0x0f, 0x44, 0xb3, 0x1b, 0xba, 0x60, 0x56, + 0xb4, 0xfc, 0x5a, 0x5f, 0xc1, 0xec, 0xdb, 0x8e, 0x5e, 0x77, 0x20, 0x3a, 0x68, 0x58, 0xbd, 0xec, + 0xf8, 0x01, 0x45, 0x07, 0xb7, 0xa1, 0xc2, 0x4e, 0x22, 0x3c, 0x3e, 0x56, 0xc9, 0x28, 0x55, 0xb9, + 0x24, 0xe1, 0xf7, 0xf6, 0xe7, 0xde, 0x7a, 0x74, 0xb5, 0xd4, 0xd7, 0xa8, 0xf9, 0x93, 0x04, 0xaa, + 0xec, 0x6f, 0x5e, 0x1f, 0x21, 0xcf, 0x38, 0x37, 0xb4, 0x2d, 0x52, 0x88, 0x42, 0x8a, 0x2f, 0x8c, + 0x1c, 0x12, 0x42, 0x95, 0xbf, 0x3e, 0xc3, 0x85, 0x8a, 0xa3, 0xd0, 0xba, 0xae, 0x52, 0x50, 0x88, + 0x7b, 0xfb, 0x73, 0x2f, 0x1c, 0x5d, 0xa8, 0xfe, 0x1c, 0x8d, 0x08, 0xf7, 0xef, 0xcb, 0x66, 0xee, + 0xca, 0x3a, 0xe9, 0x1f, 0x88, 0xb9, 0xfb, 0x7c, 0x6e, 0xee, 0x9e, 0xeb, 0x9b, 0xbb, 0xd3, 0xe6, + 0x85, 0x96, 0xcc, 0x6c, 0x7c, 0xd4, 0x1b, 0xec, 0xc1, 0xc7, 0x6e, 0xee, 0x59, 0xbc, 0xdc, 0x0d, + 0x62, 0x9a, 0xac, 0xc7, 0xdd, 0x30, 0x08, 0x9b, 0x7c, 0x3a, 0x56, 0x6c, 0xcf, 0x22, 0x83, 0xc6, + 0x3c, 0xbd, 0xfb, 0x65, 0x9e, 0x4e, 0xb4, 0x4a, 0xad, 0xd8, 0x28, 0xb7, 0xf8, 0x03, 0x3e, 0xa2, + 0xd8, 0x53, 0x8f, 0xb2, 0x78, 0xb5, 0x47, 0xe0, 0xc8, 0x1d, 0x18, 0xdf, 0x12, 0x8f, 0x08, 0x14, + 0x73, 0x59, 0x49, 0xbe, 0x48, 0xc0, 0xaf, 0x85, 0xaa, 0xe7, 0x09, 0xee, 0x99, 0x3f, 0x51, 0x49, + 0x73, 0x7f, 0xb9, 0x0c, 0x27, 0x72, 0xcf, 0xcb, 0xb0, 0xf3, 0x79, 0x9c, 0x2d, 0x72, 0xd7, 0xe7, + 0x73, 0x5d, 0xde, 0xae, 0x29, 0xc8, 0x7b, 0x01, 0xea, 0xb4, 0xd3, 0x8a, 0x7a, 0xdc, 0x71, 0x19, + 0x39, 0xb2, 0xe3, 0xa2, 0x7d, 0xdd, 0x65, 0xcd, 0x05, 0x2d, 0x8e, 0xb2, 0xc2, 0x75, 0x54, 0x3c, + 0x91, 0x90, 0xad, 0x70, 0xb5, 0xee, 0xec, 0x8d, 0x3d, 0xda, 0x3b, 0x7b, 0x01, 0x9c, 0x10, 0x2a, + 0xea, 0x82, 0xa6, 0x07, 0xa8, 0x5b, 0x7a, 0x9c, 0xcd, 0xa8, 0xe5, 0x2c, 0x1b, 0xcc, 0xf3, 0x75, + 0x3f, 0x5d, 0x62, 0xee, 0x9b, 0xe8, 0xec, 0xab, 0x2a, 0x96, 0xfd, 0x7a, 0x18, 0xf3, 0xba, 0xe9, + 0x76, 0xd4, 0xf7, 0xa8, 0xc3, 0x22, 0x87, 0xa2, 0xc4, 0x92, 0x35, 0x18, 0xa9, 0x7b, 0xa9, 0x7a, + 0x91, 0xfe, 0x28, 0xca, 0x99, 0xc0, 0x95, 0x97, 0x52, 0xe4, 0x5c, 0xc8, 0x53, 0x30, 0x92, 0x7a, + 0xcd, 0xcc, 0x6b, 0x93, 0x9b, 0x5e, 0x33, 0x41, 0x0e, 0xb5, 0x77, 0x97, 0x91, 0x03, 0x76, 0x97, + 0x17, 0xac, 0xff, 0x95, 0x60, 0x25, 0x49, 0xfa, 0xff, 0xbf, 0x81, 0xa8, 0xb9, 0xcf, 0xd0, 0xba, + 0x3f, 0x04, 0x93, 0xf6, 0xff, 0x3f, 0x38, 0xd4, 0x1d, 0x23, 0xf7, 0x9f, 0x47, 0x60, 0x2a, 0x53, + 0xf4, 0x96, 0x99, 0xe5, 0xce, 0x81, 0xb3, 0xfc, 0x69, 0x18, 0xed, 0xc4, 0xdd, 0x90, 0xca, 0x92, + 0x46, 0x2d, 0x84, 0xad, 0x7b, 0x8a, 0x02, 0xc7, 0x46, 0xa5, 0x1e, 0xf7, 0xb0, 0x1b, 0xca, 0x20, + 0xba, 0x1e, 0x95, 0x65, 0x0e, 0x45, 0x89, 0x65, 0x07, 0xd8, 0xc9, 0x84, 0x1b, 0x45, 0x61, 0x23, + 0xe4, 0xaa, 0xb9, 0x5c, 0xc4, 0x43, 0x58, 0xb2, 0xc0, 0x93, 0x1f, 0xe8, 0x6d, 0x08, 0x66, 0x24, + 0x92, 0x8f, 0x39, 0xf6, 0x13, 0x60, 0x63, 0x45, 0x24, 0x7f, 0xf2, 0x35, 0x85, 0x62, 0x05, 0xdd, + 0xff, 0x25, 0xb0, 0x44, 0x2f, 0xe0, 0xf1, 0x87, 0xb3, 0x80, 0x61, 0xc0, 0xe2, 0x7d, 0x23, 0x54, + 0xdb, 0x5e, 0x18, 0x34, 0x68, 0x92, 0x8a, 0xff, 0x5d, 0x52, 0x15, 0xa7, 0xa7, 0xab, 0x0a, 0x88, + 0x06, 0xcf, 0xff, 0x43, 0x10, 0x6f, 0x98, 0x38, 0xc4, 0x54, 0xad, 0xff, 0x10, 0x64, 0xc0, 0x68, + 0xd3, 0xb8, 0xbf, 0xeb, 0xc0, 0x13, 0x03, 0x3b, 0xe3, 0xfb, 0x37, 0x5a, 0xe9, 0xfe, 0x5e, 0x09, + 0x1e, 0x1f, 0x50, 0x14, 0x4a, 0x7a, 0x0f, 0xed, 0xa5, 0x38, 0x59, 0x75, 0x3a, 0x35, 0x74, 0x6e, + 0x1c, 0x6d, 0x1b, 0x32, 0x5b, 0x41, 0xf9, 0x91, 0x6e, 0x05, 0xee, 0x97, 0x4b, 0x60, 0xbd, 0x69, + 0x48, 0x3e, 0x68, 0xd7, 0x3f, 0x3b, 0x45, 0xd5, 0xea, 0x0a, 0xe6, 0xba, 0x7e, 0x5a, 0xf4, 0xda, + 0xa0, 0x72, 0xea, 0xfc, 0x7c, 0x2d, 0x1d, 0x3c, 0x5f, 0x49, 0x4b, 0x15, 0x9a, 0x97, 0x8b, 0x2f, + 0x34, 0xaf, 0xf6, 0x15, 0x99, 0xff, 0xa2, 0x23, 0x66, 0x5a, 0xae, 0x49, 0xc6, 0xc2, 0x3a, 0xf7, + 0xb1, 0xb0, 0x6f, 0x82, 0x4a, 0x42, 0x5b, 0x0d, 0xe6, 0xd9, 0x49, 0x4b, 0xac, 0xe7, 0xc4, 0x86, + 0x84, 0xa3, 0xa6, 0xe0, 0x77, 0x66, 0x5b, 0xad, 0xe8, 0xce, 0x4a, 0xbb, 0x93, 0xf6, 0xa4, 0x4d, + 0x36, 0x77, 0x66, 0x35, 0x06, 0x2d, 0x2a, 0xf7, 0x3f, 0x1d, 0x31, 0x9c, 0xd2, 0x47, 0x7f, 0x3e, + 0x77, 0x97, 0xf1, 0xf0, 0xee, 0xed, 0x4f, 0x03, 0xf8, 0xfa, 0x75, 0x81, 0x62, 0x9e, 0x3a, 0x34, + 0xaf, 0x15, 0xd8, 0xef, 0xef, 0x29, 0x18, 0x5a, 0xf2, 0x32, 0x8b, 0xa7, 0x7c, 0xd0, 0xe2, 0x71, + 0xff, 0xcd, 0x81, 0xcc, 0x66, 0x41, 0x3a, 0x30, 0xca, 0x34, 0xe8, 0x15, 0xf3, 0x16, 0x82, 0xcd, + 0x9a, 0x2d, 0x2c, 0x39, 0x2d, 0xf8, 0x9f, 0x28, 0x04, 0x91, 0x96, 0xf4, 0xce, 0x4b, 0x45, 0xbc, + 0xd7, 0x61, 0x0b, 0x64, 0xfe, 0xbd, 0xfc, 0x6f, 0x10, 0xda, 0xd3, 0x77, 0x9f, 0x87, 0x99, 0x3e, + 0xa5, 0xf8, 0x65, 0xa1, 0x48, 0x3d, 0x00, 0x61, 0xcd, 0x40, 0x7e, 0x75, 0x11, 0x05, 0x8e, 0x39, + 0xf8, 0x27, 0xf3, 0xec, 0xc9, 0x17, 0x1c, 0x98, 0x49, 0xf2, 0xfc, 0x1e, 0x56, 0xdf, 0xe9, 0xc8, + 0x55, 0x1f, 0x0a, 0xfb, 0x95, 0x70, 0xff, 0x4c, 0x9a, 0x27, 0xf1, 0xdf, 0xb3, 0xf4, 0xe6, 0xe2, + 0x0c, 0xdd, 0x5c, 0xd8, 0x12, 0xf3, 0xb7, 0x69, 0xbd, 0xdb, 0xea, 0x2b, 0xa5, 0xd9, 0x90, 0x70, + 0xd4, 0x14, 0x99, 0x27, 0xcf, 0xca, 0x07, 0x3e, 0x79, 0xf6, 0x1c, 0x4c, 0xda, 0x8f, 0x9c, 0xf0, + 0x10, 0x9a, 0x4c, 0x3e, 0xd8, 0xef, 0xa1, 0x60, 0x86, 0x2a, 0xf7, 0x64, 0xd6, 0xe8, 0x81, 0x4f, + 0x66, 0x3d, 0x03, 0x15, 0xf9, 0xcf, 0xa8, 0x54, 0x7c, 0x57, 0xd4, 0xe9, 0x48, 0x18, 0x6a, 0x2c, + 0x33, 0x10, 0x6d, 0x2f, 0xec, 0x7a, 0x2d, 0xd6, 0x43, 0xb2, 0xdc, 0x4e, 0xaf, 0xac, 0xab, 0x1a, + 0x83, 0x16, 0x95, 0xfb, 0x4f, 0x0e, 0xe4, 0x1f, 0x21, 0xca, 0x14, 0xed, 0x39, 0x07, 0x16, 0xed, + 0x65, 0x0b, 0x9c, 0x4a, 0x87, 0x2a, 0x70, 0xb2, 0x6b, 0x8f, 0xca, 0xf7, 0xad, 0x3d, 0x7a, 0x9d, + 0xb9, 0xa1, 0x2e, 0x8a, 0x94, 0x26, 0x06, 0xdd, 0x4e, 0x27, 0x2e, 0x8c, 0xf9, 0x9e, 0xae, 0x89, + 0x9e, 0x14, 0x8e, 0xd2, 0xd2, 0x22, 0x27, 0x92, 0x98, 0xda, 0xfc, 0x57, 0xbf, 0x73, 0xf6, 0xb1, + 0xaf, 0x7d, 0xe7, 0xec, 0x63, 0xdf, 0xfc, 0xce, 0xd9, 0xc7, 0x3e, 0x7c, 0xf7, 0xac, 0xf3, 0xd5, + 0xbb, 0x67, 0x9d, 0xaf, 0xdd, 0x3d, 0xeb, 0x7c, 0xf3, 0xee, 0x59, 0xe7, 0xdb, 0x77, 0xcf, 0x3a, + 0x9f, 0xf9, 0xbb, 0xb3, 0x8f, 0xbd, 0xab, 0xa2, 0xe6, 0xea, 0xff, 0x04, 0x00, 0x00, 0xff, 0xff, + 0x39, 0x99, 0xa5, 0x28, 0x8b, 0x75, 0x00, 0x00, } func (m *AWSAuthConfig) Marshal() (dAtA []byte, err error) { @@ -3757,6 +3795,20 @@ func (m *ApplicationSourceHelm) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if len(m.ExternalValueFiles) > 0 { + for iNdEx := len(m.ExternalValueFiles) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.ExternalValueFiles[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x3a + } + } i -= len(m.Version) copy(dAtA[i:], m.Version) i = encodeVarintGenerated(dAtA, i, uint64(len(m.Version))) @@ -3934,6 +3986,22 @@ func (m *ApplicationSourceKustomize) MarshalToSizedBuffer(dAtA []byte) (int, err _ = i var l int _ = l + i-- + if m.ForceCommonAnnotations { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x40 + i-- + if m.ForceCommonLabels { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x38 if len(m.CommonAnnotations) > 0 { keysForCommonAnnotations := make([]string, 0, len(m.CommonAnnotations)) for k := range m.CommonAnnotations { @@ -4689,6 +4757,15 @@ func (m *ClusterInfo) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if len(m.APIVersions) > 0 { + for iNdEx := len(m.APIVersions) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.APIVersions[iNdEx]) + copy(dAtA[i:], m.APIVersions[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.APIVersions[iNdEx]))) + i-- + dAtA[i] = 0x2a + } + } i = encodeVarintGenerated(dAtA, i, uint64(m.ApplicationsCount)) i-- dAtA[i] = 0x20 @@ -5221,6 +5298,48 @@ func (m *HealthStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } +func (m *HelmExternalValue) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *HelmExternalValue) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *HelmExternalValue) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.ValueFiles) > 0 { + for iNdEx := len(m.ValueFiles) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.ValueFiles[iNdEx]) + copy(dAtA[i:], m.ValueFiles[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.ValueFiles[iNdEx]))) + i-- + dAtA[i] = 0x1a + } + } + i -= len(m.TargetRevision) + copy(dAtA[i:], m.TargetRevision) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.TargetRevision))) + i-- + dAtA[i] = 0x12 + i -= len(m.RepoURL) + copy(dAtA[i:], m.RepoURL) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.RepoURL))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + func (m *HelmFileParameter) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -5956,6 +6075,15 @@ func (m *OverrideIgnoreDiff) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if len(m.JQPathExpressions) > 0 { + for iNdEx := len(m.JQPathExpressions) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.JQPathExpressions[iNdEx]) + copy(dAtA[i:], m.JQPathExpressions[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.JQPathExpressions[iNdEx]))) + i-- + dAtA[i] = 0x12 + } + } if len(m.JSONPointers) > 0 { for iNdEx := len(m.JSONPointers) - 1; iNdEx >= 0; iNdEx-- { i -= len(m.JSONPointers[iNdEx]) @@ -6718,6 +6846,15 @@ func (m *ResourceIgnoreDifferences) MarshalToSizedBuffer(dAtA []byte) (int, erro _ = i var l int _ = l + if len(m.JQPathExpressions) > 0 { + for iNdEx := len(m.JQPathExpressions) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.JQPathExpressions[iNdEx]) + copy(dAtA[i:], m.JQPathExpressions[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.JQPathExpressions[iNdEx]))) + i-- + dAtA[i] = 0x32 + } + } if len(m.JSONPointers) > 0 { for iNdEx := len(m.JSONPointers) - 1; iNdEx >= 0; iNdEx-- { i -= len(m.JSONPointers[iNdEx]) @@ -8303,6 +8440,12 @@ func (m *ApplicationSourceHelm) Size() (n int) { } l = len(m.Version) n += 1 + l + sovGenerated(uint64(l)) + if len(m.ExternalValueFiles) > 0 { + for _, e := range m.ExternalValueFiles { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } return n } @@ -8384,6 +8527,8 @@ func (m *ApplicationSourceKustomize) Size() (n int) { n += mapEntrySize + 1 + sovGenerated(uint64(mapEntrySize)) } } + n += 2 + n += 2 return n } @@ -8649,6 +8794,12 @@ func (m *ClusterInfo) Size() (n int) { l = m.CacheInfo.Size() n += 1 + l + sovGenerated(uint64(l)) n += 1 + sovGenerated(uint64(m.ApplicationsCount)) + if len(m.APIVersions) > 0 { + for _, s := range m.APIVersions { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } + } return n } @@ -8845,6 +8996,25 @@ func (m *HealthStatus) Size() (n int) { return n } +func (m *HelmExternalValue) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.RepoURL) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.TargetRevision) + n += 1 + l + sovGenerated(uint64(l)) + if len(m.ValueFiles) > 0 { + for _, s := range m.ValueFiles { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + func (m *HelmFileParameter) Size() (n int) { if m == nil { return 0 @@ -9120,6 +9290,12 @@ func (m *OverrideIgnoreDiff) Size() (n int) { n += 1 + l + sovGenerated(uint64(l)) } } + if len(m.JQPathExpressions) > 0 { + for _, s := range m.JQPathExpressions { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } + } return n } @@ -9410,6 +9586,12 @@ func (m *ResourceIgnoreDifferences) Size() (n int) { n += 1 + l + sovGenerated(uint64(l)) } } + if len(m.JQPathExpressions) > 0 { + for _, s := range m.JQPathExpressions { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } + } return n } @@ -10110,6 +10292,11 @@ func (this *ApplicationSourceHelm) String() string { repeatedStringForFileParameters += strings.Replace(strings.Replace(f.String(), "HelmFileParameter", "HelmFileParameter", 1), `&`, ``, 1) + "," } repeatedStringForFileParameters += "}" + repeatedStringForExternalValueFiles := "[]HelmExternalValue{" + for _, f := range this.ExternalValueFiles { + repeatedStringForExternalValueFiles += strings.Replace(strings.Replace(f.String(), "HelmExternalValue", "HelmExternalValue", 1), `&`, ``, 1) + "," + } + repeatedStringForExternalValueFiles += "}" s := strings.Join([]string{`&ApplicationSourceHelm{`, `ValueFiles:` + fmt.Sprintf("%v", this.ValueFiles) + `,`, `Parameters:` + repeatedStringForParameters + `,`, @@ -10117,6 +10304,7 @@ func (this *ApplicationSourceHelm) String() string { `Values:` + fmt.Sprintf("%v", this.Values) + `,`, `FileParameters:` + repeatedStringForFileParameters + `,`, `Version:` + fmt.Sprintf("%v", this.Version) + `,`, + `ExternalValueFiles:` + repeatedStringForExternalValueFiles + `,`, `}`, }, "") return s @@ -10190,6 +10378,8 @@ func (this *ApplicationSourceKustomize) String() string { `CommonLabels:` + mapStringForCommonLabels + `,`, `Version:` + fmt.Sprintf("%v", this.Version) + `,`, `CommonAnnotations:` + mapStringForCommonAnnotations + `,`, + `ForceCommonLabels:` + fmt.Sprintf("%v", this.ForceCommonLabels) + `,`, + `ForceCommonAnnotations:` + fmt.Sprintf("%v", this.ForceCommonAnnotations) + `,`, `}`, }, "") return s @@ -10385,6 +10575,7 @@ func (this *ClusterInfo) String() string { `ServerVersion:` + fmt.Sprintf("%v", this.ServerVersion) + `,`, `CacheInfo:` + strings.Replace(strings.Replace(this.CacheInfo.String(), "ClusterCacheInfo", "ClusterCacheInfo", 1), `&`, ``, 1) + `,`, `ApplicationsCount:` + fmt.Sprintf("%v", this.ApplicationsCount) + `,`, + `APIVersions:` + fmt.Sprintf("%v", this.APIVersions) + `,`, `}`, }, "") return s @@ -10540,6 +10731,18 @@ func (this *HealthStatus) String() string { }, "") return s } +func (this *HelmExternalValue) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&HelmExternalValue{`, + `RepoURL:` + fmt.Sprintf("%v", this.RepoURL) + `,`, + `TargetRevision:` + fmt.Sprintf("%v", this.TargetRevision) + `,`, + `ValueFiles:` + fmt.Sprintf("%v", this.ValueFiles) + `,`, + `}`, + }, "") + return s +} func (this *HelmFileParameter) String() string { if this == nil { return "nil" @@ -10767,6 +10970,7 @@ func (this *OverrideIgnoreDiff) String() string { } s := strings.Join([]string{`&OverrideIgnoreDiff{`, `JSONPointers:` + fmt.Sprintf("%v", this.JSONPointers) + `,`, + `JQPathExpressions:` + fmt.Sprintf("%v", this.JQPathExpressions) + `,`, `}`, }, "") return s @@ -10988,6 +11192,7 @@ func (this *ResourceIgnoreDifferences) String() string { `Name:` + fmt.Sprintf("%v", this.Name) + `,`, `Namespace:` + fmt.Sprintf("%v", this.Namespace) + `,`, `JSONPointers:` + fmt.Sprintf("%v", this.JSONPointers) + `,`, + `JQPathExpressions:` + fmt.Sprintf("%v", this.JQPathExpressions) + `,`, `}`, }, "") return s @@ -11439,10 +11644,7 @@ func (m *AWSAuthConfig) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -11591,10 +11793,7 @@ func (m *AppProject) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -11711,10 +11910,7 @@ func (m *AppProjectList) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -12136,10 +12332,7 @@ func (m *AppProjectSpec) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -12301,7 +12494,7 @@ func (m *AppProjectStatus) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > postIndex { @@ -12318,10 +12511,7 @@ func (m *AppProjectStatus) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -12506,10 +12696,7 @@ func (m *Application) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -12659,10 +12846,7 @@ func (m *ApplicationCondition) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -12808,10 +12992,7 @@ func (m *ApplicationDestination) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -12928,10 +13109,7 @@ func (m *ApplicationList) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -13289,10 +13467,7 @@ func (m *ApplicationSource) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -13459,10 +13634,7 @@ func (m *ApplicationSourceDirectory) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -13702,16 +13874,47 @@ func (m *ApplicationSourceHelm) Unmarshal(dAtA []byte) error { } m.Version = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex + case 7: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ExternalValueFiles", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ExternalValueFiles = append(m.ExternalValueFiles, HelmExternalValue{}) + if err := m.ExternalValueFiles[len(m.ExternalValueFiles)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -13861,10 +14064,7 @@ func (m *ApplicationSourceJsonnet) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -13980,10 +14180,7 @@ func (m *ApplicationSourceKsonnet) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -14239,7 +14436,7 @@ func (m *ApplicationSourceKustomize) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > postIndex { @@ -14398,7 +14595,7 @@ func (m *ApplicationSourceKustomize) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > postIndex { @@ -14409,16 +14606,53 @@ func (m *ApplicationSourceKustomize) Unmarshal(dAtA []byte) error { } m.CommonAnnotations[mapkey] = mapvalue iNdEx = postIndex + case 7: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ForceCommonLabels", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.ForceCommonLabels = bool(v != 0) + case 8: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ForceCommonAnnotations", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.ForceCommonAnnotations = bool(v != 0) default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -14534,10 +14768,7 @@ func (m *ApplicationSourcePlugin) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -14809,10 +15040,7 @@ func (m *ApplicationSpec) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -15203,10 +15431,7 @@ func (m *ApplicationStatus) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -15320,10 +15545,7 @@ func (m *ApplicationSummary) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -15475,10 +15697,7 @@ func (m *ApplicationTree) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -15593,10 +15812,7 @@ func (m *ApplicationWatchEvent) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -15730,10 +15946,7 @@ func (m *Backoff) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -16066,10 +16279,7 @@ func (m *Cluster) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -16193,10 +16403,7 @@ func (m *ClusterCacheInfo) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -16447,10 +16654,7 @@ func (m *ClusterConfig) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -16611,16 +16815,45 @@ func (m *ClusterInfo) Unmarshal(dAtA []byte) error { break } } + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field APIVersions", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.APIVersions = append(m.APIVersions, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -16737,10 +16970,7 @@ func (m *ClusterList) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -16854,10 +17084,7 @@ func (m *Command) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -16973,10 +17200,7 @@ func (m *ComparedTo) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -17122,10 +17346,7 @@ func (m *ComponentParameter) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -17276,10 +17497,7 @@ func (m *ConfigManagementPlugin) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -17429,10 +17647,7 @@ func (m *ConnectionState) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -17546,10 +17761,7 @@ func (m *EnvEntry) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -17773,7 +17985,7 @@ func (m *ExecProviderConfig) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > postIndex { @@ -17854,10 +18066,7 @@ func (m *ExecProviderConfig) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -18099,10 +18308,7 @@ func (m *GnuPGPublicKey) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -18219,10 +18425,7 @@ func (m *GnuPGPublicKeyList) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -18336,10 +18539,153 @@ func (m *HealthStatus) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } - if (iNdEx + skippy) < 0 { + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *HelmExternalValue) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: HelmExternalValue: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: HelmExternalValue: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field RepoURL", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.RepoURL = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TargetRevision", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.TargetRevision = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ValueFiles", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ValueFiles = append(m.ValueFiles, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -18453,10 +18799,7 @@ func (m *HelmFileParameter) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -18590,10 +18933,7 @@ func (m *HelmParameter) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -18742,10 +19082,7 @@ func (m *HostInfo) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -18884,10 +19221,7 @@ func (m *HostResourceInfo) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -19001,10 +19335,7 @@ func (m *Info) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -19118,10 +19449,7 @@ func (m *InfoItem) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -19241,10 +19569,7 @@ func (m *JWTToken) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -19328,10 +19653,7 @@ func (m *JWTTokens) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -19465,10 +19787,7 @@ func (m *JsonnetVar) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -19582,10 +19901,7 @@ func (m *KnownTypeField) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -19731,10 +20047,7 @@ func (m *KsonnetParameter) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -19848,10 +20161,7 @@ func (m *KustomizeOptions) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -20037,10 +20347,7 @@ func (m *Operation) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -20142,10 +20449,7 @@ func (m *OperationInitiator) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -20416,10 +20720,7 @@ func (m *OperationState) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -20565,10 +20866,7 @@ func (m *OrphanedResourceKey) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -20673,10 +20971,7 @@ func (m *OrphanedResourcesMonitorSettings) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -20752,16 +21047,45 @@ func (m *OverrideIgnoreDiff) Unmarshal(dAtA []byte) error { } m.JSONPointers = append(m.JSONPointers, string(dAtA[iNdEx:postIndex])) iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field JQPathExpressions", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.JQPathExpressions = append(m.JQPathExpressions, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -20973,10 +21297,7 @@ func (m *ProjectRole) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -21372,10 +21693,7 @@ func (m *RepoCreds) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -21492,10 +21810,7 @@ func (m *RepoCredsList) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -22036,10 +22351,7 @@ func (m *Repository) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -22251,10 +22563,7 @@ func (m *RepositoryCertificate) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -22371,10 +22680,7 @@ func (m *RepositoryCertificateList) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -22491,10 +22797,7 @@ func (m *RepositoryList) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -22630,10 +22933,7 @@ func (m *ResourceAction) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -22747,10 +23047,7 @@ func (m *ResourceActionDefinition) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -22928,10 +23225,7 @@ func (m *ResourceActionParam) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -23047,10 +23341,7 @@ func (m *ResourceActions) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -23460,10 +23751,7 @@ func (m *ResourceDiff) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -23667,16 +23955,45 @@ func (m *ResourceIgnoreDifferences) Unmarshal(dAtA []byte) error { } m.JSONPointers = append(m.JSONPointers, string(dAtA[iNdEx:postIndex])) iNdEx = postIndex + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field JQPathExpressions", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.JQPathExpressions = append(m.JQPathExpressions, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -23836,7 +24153,7 @@ func (m *ResourceNetworkingInfo) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > postIndex { @@ -23997,7 +24314,7 @@ func (m *ResourceNetworkingInfo) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > postIndex { @@ -24080,10 +24397,7 @@ func (m *ResourceNetworkingInfo) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -24406,10 +24720,7 @@ func (m *ResourceNode) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -24610,10 +24921,7 @@ func (m *ResourceOverride) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -24855,10 +25163,7 @@ func (m *ResourceRef) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -25228,10 +25533,7 @@ func (m *ResourceResult) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -25549,10 +25851,7 @@ func (m *ResourceStatus) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -25657,10 +25956,7 @@ func (m *RetryStrategy) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -25863,10 +26159,7 @@ func (m *RevisionHistory) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -26077,10 +26370,7 @@ func (m *RevisionMetadata) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -26162,10 +26452,7 @@ func (m *SignatureKey) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -26457,10 +26744,7 @@ func (m *SyncOperation) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -26638,10 +26922,7 @@ func (m *SyncOperationResource) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -26790,10 +27071,7 @@ func (m *SyncOperationResult) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -26947,10 +27225,7 @@ func (m *SyncPolicy) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -27060,10 +27335,7 @@ func (m *SyncPolicyAutomated) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -27210,10 +27482,7 @@ func (m *SyncStatus) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -27335,10 +27604,7 @@ func (m *SyncStrategy) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -27408,10 +27674,7 @@ func (m *SyncStrategyApply) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -27494,10 +27757,7 @@ func (m *SyncStrategyHook) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -27759,10 +28019,7 @@ func (m *SyncWindow) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -27966,10 +28223,7 @@ func (m *TLSClientConfig) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { diff --git a/pkg/apis/application/v1alpha1/generated.proto b/pkg/apis/application/v1alpha1/generated.proto index 93ea2408db895..099f61f9509dc 100644 --- a/pkg/apis/application/v1alpha1/generated.proto +++ b/pkg/apis/application/v1alpha1/generated.proto @@ -207,6 +207,9 @@ message ApplicationSourceHelm { // Version is the Helm version to use for templating (either "2" or "3") optional string version = 6; + + // ValuesFilesExternalValueFiles is a list of Helm value files to use when generating a template that come from an external git repo + repeated HelmExternalValue externalValueFiles = 7; } // ApplicationSourceJsonnet holds options specific to applications of type Jsonnet @@ -249,6 +252,12 @@ message ApplicationSourceKustomize { // CommonAnnotations is a list of additional annotations to add to rendered manifests map commonAnnotations = 6; + + // ForceCommonLabels specifies whether to force applying common labels to resources for Kustomize apps + optional bool forceCommonLabels = 7; + + // ForceCommonAnnotations specifies whether to force applying common annotations to resources for Kustomize apps + optional bool forceCommonAnnotations = 8; } // ApplicationSourcePlugin holds options specific to config management plugins @@ -447,6 +456,9 @@ message ClusterInfo { // ApplicationsCount is the number of applications managed by Argo CD on the cluster optional int64 applicationsCount = 4; + + // APIVersions contains list of API versions supported by the cluster + repeated string apiVersions = 5; } // ClusterList is a collection of Clusters. @@ -567,6 +579,18 @@ message HealthStatus { optional string message = 2; } +// HelmExternalValue are values from other git repositories +message HelmExternalValue { + // RepoURL is the URL of the external git repo + optional string repoURL = 1; + + // TargetRevision is the revision of the git repo + optional string targetRevision = 2; + + // FileParameters are file parameters to the helm template + repeated string valueFiles = 3; +} + // HelmFileParameter is a file parameter that's passed to helm template during manifest generation message HelmFileParameter { // Name is the name of the Helm parameter @@ -744,6 +768,8 @@ message OrphanedResourcesMonitorSettings { // TODO: describe this type message OverrideIgnoreDiff { repeated string jSONPointers = 1; + + repeated string jqPathExpressions = 2; } // ProjectRole represents a role that has access to a project @@ -984,6 +1010,8 @@ message ResourceIgnoreDifferences { optional string namespace = 4; repeated string jsonPointers = 5; + + repeated string jqPathExpressions = 6; } // ResourceNetworkingInfo holds networking resource related information diff --git a/pkg/apis/application/v1alpha1/openapi_generated.go b/pkg/apis/application/v1alpha1/openapi_generated.go index 638d8d7790beb..bcdd7f2696ba8 100644 --- a/pkg/apis/application/v1alpha1/openapi_generated.go +++ b/pkg/apis/application/v1alpha1/openapi_generated.go @@ -50,6 +50,7 @@ func GetOpenAPIDefinitions(ref common.ReferenceCallback) map[string]common.OpenA "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.GnuPGPublicKey": schema_pkg_apis_application_v1alpha1_GnuPGPublicKey(ref), "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.GnuPGPublicKeyList": schema_pkg_apis_application_v1alpha1_GnuPGPublicKeyList(ref), "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.HealthStatus": schema_pkg_apis_application_v1alpha1_HealthStatus(ref), + "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.HelmExternalValue": schema_pkg_apis_application_v1alpha1_HelmExternalValue(ref), "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.HelmFileParameter": schema_pkg_apis_application_v1alpha1_HelmFileParameter(ref), "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.HelmParameter": schema_pkg_apis_application_v1alpha1_HelmParameter(ref), "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.HostInfo": schema_pkg_apis_application_v1alpha1_HostInfo(ref), @@ -778,11 +779,25 @@ func schema_pkg_apis_application_v1alpha1_ApplicationSourceHelm(ref common.Refer Format: "", }, }, + "externalValueFiles": { + SchemaProps: spec.SchemaProps{ + Description: "ValuesFilesExternalValueFiles is a list of Helm value files to use when generating a template that come from an external git repo", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Default: map[string]interface{}{}, + Ref: ref("github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.HelmExternalValue"), + }, + }, + }, + }, + }, }, }, }, Dependencies: []string{ - "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.HelmFileParameter", "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.HelmParameter"}, + "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.HelmExternalValue", "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.HelmFileParameter", "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.HelmParameter"}, } } @@ -955,6 +970,20 @@ func schema_pkg_apis_application_v1alpha1_ApplicationSourceKustomize(ref common. }, }, }, + "forceCommonLabels": { + SchemaProps: spec.SchemaProps{ + Description: "ForceCommonLabels specifies whether to force applying common labels to resources for Kustomize apps", + Type: []string{"boolean"}, + Format: "", + }, + }, + "forceCommonAnnotations": { + SchemaProps: spec.SchemaProps{ + Description: "ForceCommonAnnotations specifies whether to force applying common annotations to resources for Kustomize apps", + Type: []string{"boolean"}, + Format: "", + }, + }, }, }, }, @@ -1554,6 +1583,21 @@ func schema_pkg_apis_application_v1alpha1_ClusterInfo(ref common.ReferenceCallba Format: "int64", }, }, + "apiVersions": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersions contains list of API versions supported by the cluster", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Default: "", + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, }, Required: []string{"applicationsCount"}, }, @@ -1989,6 +2033,48 @@ func schema_pkg_apis_application_v1alpha1_HealthStatus(ref common.ReferenceCallb } } +func schema_pkg_apis_application_v1alpha1_HelmExternalValue(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "HelmExternalValue are values from other git repositories", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "repoURL": { + SchemaProps: spec.SchemaProps{ + Description: "RepoURL is the URL of the external git repo", + Type: []string{"string"}, + Format: "", + }, + }, + "targetRevision": { + SchemaProps: spec.SchemaProps{ + Description: "TargetRevision is the revision of the git repo", + Type: []string{"string"}, + Format: "", + }, + }, + "valueFiles": { + SchemaProps: spec.SchemaProps{ + Description: "FileParameters are file parameters to the helm template", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Default: "", + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + }, + }, + }, + } +} + func schema_pkg_apis_application_v1alpha1_HelmFileParameter(ref common.ReferenceCallback) common.OpenAPIDefinition { return common.OpenAPIDefinition{ Schema: spec.Schema{ @@ -2590,8 +2676,22 @@ func schema_pkg_apis_application_v1alpha1_OverrideIgnoreDiff(ref common.Referenc }, }, }, + "jqPathExpressions": { + SchemaProps: spec.SchemaProps{ + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Default: "", + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, }, - Required: []string{"jsonPointers"}, + Required: []string{"jsonPointers", "jqPathExpressions"}, }, }, } @@ -3343,8 +3443,22 @@ func schema_pkg_apis_application_v1alpha1_ResourceIgnoreDifferences(ref common.R }, }, }, + "jqPathExpressions": { + SchemaProps: spec.SchemaProps{ + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Default: "", + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, }, - Required: []string{"kind", "jsonPointers"}, + Required: []string{"kind"}, }, }, } diff --git a/pkg/apis/application/v1alpha1/types.go b/pkg/apis/application/v1alpha1/types.go index a3f6b3d9c9966..8a576096f0653 100644 --- a/pkg/apis/application/v1alpha1/types.go +++ b/pkg/apis/application/v1alpha1/types.go @@ -75,11 +75,12 @@ type ApplicationSpec struct { // ResourceIgnoreDifferences contains resource filter and list of json paths which should be ignored during comparison with live state. type ResourceIgnoreDifferences struct { - Group string `json:"group,omitempty" protobuf:"bytes,1,opt,name=group"` - Kind string `json:"kind" protobuf:"bytes,2,opt,name=kind"` - Name string `json:"name,omitempty" protobuf:"bytes,3,opt,name=name"` - Namespace string `json:"namespace,omitempty" protobuf:"bytes,4,opt,name=namespace"` - JSONPointers []string `json:"jsonPointers" protobuf:"bytes,5,opt,name=jsonPointers"` + Group string `json:"group,omitempty" protobuf:"bytes,1,opt,name=group"` + Kind string `json:"kind" protobuf:"bytes,2,opt,name=kind"` + Name string `json:"name,omitempty" protobuf:"bytes,3,opt,name=name"` + Namespace string `json:"namespace,omitempty" protobuf:"bytes,4,opt,name=namespace"` + JSONPointers []string `json:"jsonPointers,omitempty" protobuf:"bytes,5,opt,name=jsonPointers"` + JQPathExpressions []string `json:"jqPathExpressions,omitempty" protobuf:"bytes,6,opt,name=jqPathExpressions"` } // EnvEntry represents an entry in the application's environment @@ -233,6 +234,18 @@ type ApplicationSourceHelm struct { FileParameters []HelmFileParameter `json:"fileParameters,omitempty" protobuf:"bytes,5,opt,name=fileParameters"` // Version is the Helm version to use for templating (either "2" or "3") Version string `json:"version,omitempty" protobuf:"bytes,6,opt,name=version"` + // ValuesFilesExternalValueFiles is a list of Helm value files to use when generating a template that come from an external git repo + ExternalValueFiles []HelmExternalValue `json:"externalValueFiles,omitempty" protobuf:"bytes,7,opt,name=externalValueFiles"` +} + +// HelmExternalValue are values from other git repositories +type HelmExternalValue struct { + // RepoURL is the URL of the external git repo + RepoURL string `json:"repoURL,omitempty" protobuf:"bytes,1,opt,name=repoURL"` + // TargetRevision is the revision of the git repo + TargetRevision string `json:"targetRevision,omitempty" protobuf:"bytes,2,opt,name=targetRevision"` + // FileParameters are file parameters to the helm template + ValueFiles []string `json:"valueFiles,omitempty" protobuf:"bytes,3,opt,name=valueFiles"` } // HelmParameter is a parameter that's passed to helm template during manifest generation @@ -365,6 +378,10 @@ type ApplicationSourceKustomize struct { Version string `json:"version,omitempty" protobuf:"bytes,5,opt,name=version"` // CommonAnnotations is a list of additional annotations to add to rendered manifests CommonAnnotations map[string]string `json:"commonAnnotations,omitempty" protobuf:"bytes,6,opt,name=commonAnnotations"` + // ForceCommonLabels specifies whether to force applying common labels to resources for Kustomize apps + ForceCommonLabels bool `json:"forceCommonLabels,omitempty" protobuf:"bytes,7,opt,name=forceCommonLabels"` + // ForceCommonAnnotations specifies whether to force applying common annotations to resources for Kustomize apps + ForceCommonAnnotations bool `json:"forceCommonAnnotations,omitempty" protobuf:"bytes,8,opt,name=forceCommonAnnotations"` } // AllowsConcurrentProcessing returns true if multiple processes can run Kustomize builds on the same source at the same time @@ -1303,6 +1320,16 @@ type ClusterInfo struct { CacheInfo ClusterCacheInfo `json:"cacheInfo,omitempty" protobuf:"bytes,3,opt,name=cacheInfo"` // ApplicationsCount is the number of applications managed by Argo CD on the cluster ApplicationsCount int64 `json:"applicationsCount" protobuf:"bytes,4,opt,name=applicationsCount"` + // APIVersions contains list of API versions supported by the cluster + APIVersions []string `json:"apiVersions,omitempty" protobuf:"bytes,5,opt,name=apiVersions"` +} + +func (c *ClusterInfo) GetKubeVersion() string { + return c.ServerVersion +} + +func (c *ClusterInfo) GetApiVersions() []string { + return c.APIVersions } // ClusterCacheInfo contains information about the cluster cache @@ -1400,7 +1427,8 @@ type KnownTypeField struct { // TODO: describe this type type OverrideIgnoreDiff struct { - JSONPointers []string `json:"jsonPointers" protobuf:"bytes,1,rep,name=jSONPointers"` + JSONPointers []string `json:"jsonPointers" protobuf:"bytes,1,rep,name=jSONPointers"` + JQPathExpressions []string `json:"jqPathExpressions" protobuf:"bytes,2,opt,name=jqPathExpressions"` } type rawResourceOverride struct { @@ -2280,6 +2308,14 @@ func (c *Cluster) RawRestConfig() *rest.Config { } } else if c.Server == KubernetesInternalAPIServerAddr && c.Config.Username == "" && c.Config.Password == "" && c.Config.BearerToken == "" { config, err = rest.InClusterConfig() + } else if c.Server == KubernetesInternalAPIServerAddr { + config, err = rest.InClusterConfig() + if err == nil { + config.Username = c.Config.Username + config.Password = c.Config.Password + config.BearerToken = c.Config.BearerToken + config.BearerTokenFile = "" + } } else { tlsClientConfig := rest.TLSClientConfig{ Insecure: c.Config.TLSClientConfig.Insecure, diff --git a/pkg/apis/application/v1alpha1/zz_generated.deepcopy.go b/pkg/apis/application/v1alpha1/zz_generated.deepcopy.go index 724eda0a7450d..10d77c95752e1 100644 --- a/pkg/apis/application/v1alpha1/zz_generated.deepcopy.go +++ b/pkg/apis/application/v1alpha1/zz_generated.deepcopy.go @@ -362,6 +362,13 @@ func (in *ApplicationSourceHelm) DeepCopyInto(out *ApplicationSourceHelm) { *out = make([]HelmFileParameter, len(*in)) copy(*out, *in) } + if in.ExternalValueFiles != nil { + in, out := &in.ExternalValueFiles, &out.ExternalValueFiles + *out = make([]HelmExternalValue, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } return } @@ -768,6 +775,11 @@ func (in *ClusterInfo) DeepCopyInto(out *ClusterInfo) { *out = *in in.ConnectionState.DeepCopyInto(&out.ConnectionState) in.CacheInfo.DeepCopyInto(&out.CacheInfo) + if in.APIVersions != nil { + in, out := &in.APIVersions, &out.APIVersions + *out = make([]string, len(*in)) + copy(*out, *in) + } return } @@ -1031,6 +1043,27 @@ func (in *HealthStatus) DeepCopy() *HealthStatus { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *HelmExternalValue) DeepCopyInto(out *HelmExternalValue) { + *out = *in + if in.ValueFiles != nil { + in, out := &in.ValueFiles, &out.ValueFiles + *out = make([]string, len(*in)) + copy(*out, *in) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new HelmExternalValue. +func (in *HelmExternalValue) DeepCopy() *HelmExternalValue { + if in == nil { + return nil + } + out := new(HelmExternalValue) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *HelmFileParameter) DeepCopyInto(out *HelmFileParameter) { *out = *in @@ -1381,6 +1414,11 @@ func (in *OverrideIgnoreDiff) DeepCopyInto(out *OverrideIgnoreDiff) { *out = make([]string, len(*in)) copy(*out, *in) } + if in.JQPathExpressions != nil { + in, out := &in.JQPathExpressions, &out.JQPathExpressions + *out = make([]string, len(*in)) + copy(*out, *in) + } return } @@ -1677,6 +1715,11 @@ func (in *ResourceIgnoreDifferences) DeepCopyInto(out *ResourceIgnoreDifferences *out = make([]string, len(*in)) copy(*out, *in) } + if in.JQPathExpressions != nil { + in, out := &in.JQPathExpressions, &out.JQPathExpressions + *out = make([]string, len(*in)) + copy(*out, *in) + } return } diff --git a/reposerver/apiclient/repository.pb.go b/reposerver/apiclient/repository.pb.go index 017a0e8a6b92d..c3ad75581a5f3 100644 --- a/reposerver/apiclient/repository.pb.go +++ b/reposerver/apiclient/repository.pb.go @@ -3945,10 +3945,7 @@ func (m *ManifestRequest) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthRepository - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthRepository } if (iNdEx + skippy) > l { @@ -4035,10 +4032,7 @@ func (m *TestRepositoryRequest) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthRepository - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthRepository } if (iNdEx + skippy) > l { @@ -4109,10 +4103,7 @@ func (m *TestRepositoryResponse) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthRepository - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthRepository } if (iNdEx + skippy) > l { @@ -4355,10 +4346,7 @@ func (m *ManifestResponse) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthRepository - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthRepository } if (iNdEx + skippy) > l { @@ -4445,10 +4433,7 @@ func (m *ListRefsRequest) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthRepository - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthRepository } if (iNdEx + skippy) > l { @@ -4563,10 +4548,7 @@ func (m *Refs) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthRepository - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthRepository } if (iNdEx + skippy) > l { @@ -4685,10 +4667,7 @@ func (m *ListAppsRequest) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthRepository - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthRepository } if (iNdEx + skippy) > l { @@ -4849,7 +4828,7 @@ func (m *AppList) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthRepository } if (iNdEx + skippy) > postIndex { @@ -4866,10 +4845,7 @@ func (m *AppList) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthRepository - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthRepository } if (iNdEx + skippy) > l { @@ -5094,10 +5070,7 @@ func (m *RepoServerAppDetailsQuery) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthRepository - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthRepository } if (iNdEx + skippy) > l { @@ -5324,10 +5297,7 @@ func (m *RepoAppDetailsResponse) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthRepository - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthRepository } if (iNdEx + skippy) > l { @@ -5466,10 +5436,7 @@ func (m *RepoServerRevisionMetadataRequest) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthRepository - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthRepository } if (iNdEx + skippy) > l { @@ -5664,7 +5631,7 @@ func (m *KsonnetAppSpec) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthRepository } if (iNdEx + skippy) > postIndex { @@ -5715,10 +5682,7 @@ func (m *KsonnetAppSpec) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthRepository - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthRepository } if (iNdEx + skippy) > l { @@ -5933,10 +5897,7 @@ func (m *HelmAppSpec) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthRepository - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthRepository } if (iNdEx + skippy) > l { @@ -6019,10 +5980,7 @@ func (m *KustomizeAppSpec) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthRepository - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthRepository } if (iNdEx + skippy) > l { @@ -6173,10 +6131,7 @@ func (m *KsonnetEnvironment) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthRepository - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthRepository } if (iNdEx + skippy) > l { @@ -6291,10 +6246,7 @@ func (m *KsonnetEnvironmentDestination) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthRepository - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthRepository } if (iNdEx + skippy) > l { @@ -6345,10 +6297,7 @@ func (m *DirectoryAppSpec) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthRepository - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthRepository } if (iNdEx + skippy) > l { @@ -6435,10 +6384,7 @@ func (m *HelmChartsRequest) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthRepository - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthRepository } if (iNdEx + skippy) > l { @@ -6553,10 +6499,7 @@ func (m *HelmChart) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthRepository - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthRepository } if (iNdEx + skippy) > l { @@ -6641,10 +6584,7 @@ func (m *HelmChartsResponse) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthRepository - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthRepository } if (iNdEx + skippy) > l { diff --git a/reposerver/cache/cache.go b/reposerver/cache/cache.go index 2b7e5dc1babb3..71192ec05701a 100644 --- a/reposerver/cache/cache.go +++ b/reposerver/cache/cache.go @@ -6,6 +6,8 @@ import ( "fmt" "hash/fnv" "math" + "sort" + "strings" "time" "github.com/go-git/go-git/v5/plumbing" @@ -28,6 +30,14 @@ type Cache struct { revisionCacheExpiration time.Duration } +// ClusterRuntimeInfo holds cluster runtime information +type ClusterRuntimeInfo interface { + // GetApiVersions returns supported api versions + GetApiVersions() []string + // GetKubeVersion returns cluster API version + GetKubeVersion() string +} + func NewCache(cache *cacheutil.Cache, repoCacheExpiration time.Duration, revisionCacheExpiration time.Duration) *Cache { return &Cache{cache, repoCacheExpiration, revisionCacheExpiration} } @@ -36,7 +46,7 @@ func AddCacheFlagsToCmd(cmd *cobra.Command, opts ...func(client *redis.Client)) var repoCacheExpiration time.Duration var revisionCacheExpiration time.Duration - cmd.Flags().DurationVar(&repoCacheExpiration, "repo-cache-expiration", 24*time.Hour, "Cache expiration for repo state, incl. app lists, app details, manifest generation, revision meta-data") + cmd.Flags().DurationVar(&repoCacheExpiration, "repo-cache-expiration", env.ParseDurationFromEnv("ARGOCD_REPO_CACHE_EXPIRATION", 24*time.Hour, 0, math.MaxInt32), "Cache expiration for repo state, incl. app lists, app details, manifest generation, revision meta-data") cmd.Flags().DurationVar(&revisionCacheExpiration, "revision-cache-expiration", env.ParseDurationFromEnv("ARGOCD_RECONCILIATION_TIMEOUT", 3*time.Minute, 0, math.MaxInt32), "Cache expiration for cached revision") repoFactory := cacheutil.AddCacheFlagsToCmd(cmd, opts...) @@ -60,6 +70,17 @@ func appSourceKey(appSrc *appv1.ApplicationSource) uint32 { return hash.FNVa(string(appSrcStr)) } +func clusterRuntimeInfoKey(info ClusterRuntimeInfo) uint32 { + if info == nil { + return 0 + } + apiVersions := info.GetApiVersions() + sort.Slice(apiVersions, func(i, j int) bool { + return apiVersions[i] < apiVersions[j] + }) + return hash.FNVa(info.GetKubeVersion() + "|" + strings.Join(apiVersions, ",")) +} + func listApps(repoURL, revision string) string { return fmt.Sprintf("ldir|%s|%s", repoURL, revision) } @@ -115,12 +136,12 @@ func (c *Cache) GetGitReferences(repo string, references *[]*plumbing.Reference) return nil } -func manifestCacheKey(revision string, appSrc *appv1.ApplicationSource, namespace string, appLabelKey string, appName string) string { - return fmt.Sprintf("mfst|%s|%s|%s|%s|%d", appLabelKey, appName, revision, namespace, appSourceKey(appSrc)) +func manifestCacheKey(revision string, appSrc *appv1.ApplicationSource, namespace string, appLabelKey string, appName string, info ClusterRuntimeInfo) string { + return fmt.Sprintf("mfst|%s|%s|%s|%s|%d", appLabelKey, appName, revision, namespace, appSourceKey(appSrc)+clusterRuntimeInfoKey(info)) } -func (c *Cache) GetManifests(revision string, appSrc *appv1.ApplicationSource, namespace string, appLabelKey string, appName string, res *CachedManifestResponse) error { - err := c.cache.GetItem(manifestCacheKey(revision, appSrc, namespace, appLabelKey, appName), res) +func (c *Cache) GetManifests(revision string, appSrc *appv1.ApplicationSource, clusterInfo ClusterRuntimeInfo, namespace string, appLabelKey string, appName string, res *CachedManifestResponse) error { + err := c.cache.GetItem(manifestCacheKey(revision, appSrc, namespace, appLabelKey, appName, clusterInfo), res) if err != nil { return err @@ -135,7 +156,7 @@ func (c *Cache) GetManifests(revision string, appSrc *appv1.ApplicationSource, n if hash != res.CacheEntryHash { log.Warnf("Manifest hash did not match expected value, treating as a cache miss: %s", appName) - err = c.DeleteManifests(revision, appSrc, namespace, appLabelKey, appName) + err = c.DeleteManifests(revision, appSrc, clusterInfo, namespace, appLabelKey, appName) if err != nil { return fmt.Errorf("Unable to delete manifest after hash mismatch, %v", err) } @@ -150,7 +171,7 @@ func (c *Cache) GetManifests(revision string, appSrc *appv1.ApplicationSource, n return nil } -func (c *Cache) SetManifests(revision string, appSrc *appv1.ApplicationSource, namespace string, appLabelKey string, appName string, res *CachedManifestResponse) error { +func (c *Cache) SetManifests(revision string, appSrc *appv1.ApplicationSource, clusterInfo ClusterRuntimeInfo, namespace string, appLabelKey string, appName string, res *CachedManifestResponse) error { // Generate and apply the cache entry hash, before writing if res != nil { @@ -162,11 +183,11 @@ func (c *Cache) SetManifests(revision string, appSrc *appv1.ApplicationSource, n res.CacheEntryHash = hash } - return c.cache.SetItem(manifestCacheKey(revision, appSrc, namespace, appLabelKey, appName), res, c.repoCacheExpiration, res == nil) + return c.cache.SetItem(manifestCacheKey(revision, appSrc, namespace, appLabelKey, appName, clusterInfo), res, c.repoCacheExpiration, res == nil) } -func (c *Cache) DeleteManifests(revision string, appSrc *appv1.ApplicationSource, namespace string, appLabelKey string, appName string) error { - return c.cache.SetItem(manifestCacheKey(revision, appSrc, namespace, appLabelKey, appName), "", c.repoCacheExpiration, true) +func (c *Cache) DeleteManifests(revision string, appSrc *appv1.ApplicationSource, clusterInfo ClusterRuntimeInfo, namespace string, appLabelKey string, appName string) error { + return c.cache.SetItem(manifestCacheKey(revision, appSrc, namespace, appLabelKey, appName, clusterInfo), "", c.repoCacheExpiration, true) } func appDetailsCacheKey(revision string, appSrc *appv1.ApplicationSource) string { diff --git a/reposerver/cache/cache_test.go b/reposerver/cache/cache_test.go index 0bbbd14d18cd1..b7cfef0ea67cf 100644 --- a/reposerver/cache/cache_test.go +++ b/reposerver/cache/cache_test.go @@ -71,30 +71,31 @@ func TestCache_ListApps(t *testing.T) { func TestCache_GetManifests(t *testing.T) { cache := newFixtures().Cache // cache miss + q := &apiclient.ManifestRequest{} value := &CachedManifestResponse{} - err := cache.GetManifests("my-revision", &ApplicationSource{}, "my-namespace", "my-app-label-key", "my-app-label-value", value) + err := cache.GetManifests("my-revision", &ApplicationSource{}, q, "my-namespace", "my-app-label-key", "my-app-label-value", value) assert.Equal(t, ErrCacheMiss, err) // populate cache res := &CachedManifestResponse{ManifestResponse: &apiclient.ManifestResponse{SourceType: "my-source-type"}} - err = cache.SetManifests("my-revision", &ApplicationSource{}, "my-namespace", "my-app-label-key", "my-app-label-value", res) + err = cache.SetManifests("my-revision", &ApplicationSource{}, q, "my-namespace", "my-app-label-key", "my-app-label-value", res) assert.NoError(t, err) // cache miss - err = cache.GetManifests("other-revision", &ApplicationSource{}, "my-namespace", "my-app-label-key", "my-app-label-value", value) + err = cache.GetManifests("other-revision", &ApplicationSource{}, q, "my-namespace", "my-app-label-key", "my-app-label-value", value) assert.Equal(t, ErrCacheMiss, err) // cache miss - err = cache.GetManifests("my-revision", &ApplicationSource{Path: "other-path"}, "my-namespace", "my-app-label-key", "my-app-label-value", value) + err = cache.GetManifests("my-revision", &ApplicationSource{Path: "other-path"}, q, "my-namespace", "my-app-label-key", "my-app-label-value", value) assert.Equal(t, ErrCacheMiss, err) // cache miss - err = cache.GetManifests("my-revision", &ApplicationSource{}, "other-namespace", "my-app-label-key", "my-app-label-value", value) + err = cache.GetManifests("my-revision", &ApplicationSource{}, q, "other-namespace", "my-app-label-key", "my-app-label-value", value) assert.Equal(t, ErrCacheMiss, err) // cache miss - err = cache.GetManifests("my-revision", &ApplicationSource{}, "my-namespace", "other-app-label-key", "my-app-label-value", value) + err = cache.GetManifests("my-revision", &ApplicationSource{}, q, "my-namespace", "other-app-label-key", "my-app-label-value", value) assert.Equal(t, ErrCacheMiss, err) // cache miss - err = cache.GetManifests("my-revision", &ApplicationSource{}, "my-namespace", "my-app-label-key", "other-app-label-value", value) + err = cache.GetManifests("my-revision", &ApplicationSource{}, q, "my-namespace", "my-app-label-key", "other-app-label-value", value) assert.Equal(t, ErrCacheMiss, err) // cache hit - err = cache.GetManifests("my-revision", &ApplicationSource{}, "my-namespace", "my-app-label-key", "my-app-label-value", value) + err = cache.GetManifests("my-revision", &ApplicationSource{}, q, "my-namespace", "my-app-label-key", "my-app-label-value", value) assert.NoError(t, err) assert.Equal(t, &CachedManifestResponse{ManifestResponse: &apiclient.ManifestResponse{SourceType: "my-source-type"}}, value) } @@ -153,7 +154,7 @@ func TestCachedManifestResponse_HashBehavior(t *testing.T) { NumberOfCachedResponsesReturned: 0, NumberOfConsecutiveFailures: 0, } - err := repoCache.SetManifests(response.Revision, appSrc, response.Namespace, appKey, appValue, store) + err := repoCache.SetManifests(response.Revision, appSrc, &apiclient.ManifestRequest{}, response.Namespace, appKey, appValue, store) if err != nil { t.Fatal(err) } @@ -184,7 +185,7 @@ func TestCachedManifestResponse_HashBehavior(t *testing.T) { // Retrieve the value using 'GetManifests' and confirm it works retrievedVal := &CachedManifestResponse{} - err = repoCache.GetManifests(response.Revision, appSrc, response.Namespace, appKey, appValue, retrievedVal) + err = repoCache.GetManifests(response.Revision, appSrc, &apiclient.ManifestRequest{}, response.Namespace, appKey, appValue, retrievedVal) if err != nil { t.Fatal(err) } @@ -207,7 +208,7 @@ func TestCachedManifestResponse_HashBehavior(t *testing.T) { // Retrieve the value using GetManifests and confirm it returns a cache miss retrievedVal = &CachedManifestResponse{} - err = repoCache.GetManifests(response.Revision, appSrc, response.Namespace, appKey, appValue, retrievedVal) + err = repoCache.GetManifests(response.Revision, appSrc, &apiclient.ManifestRequest{}, response.Namespace, appKey, appValue, retrievedVal) assert.True(t, err == cacheutil.ErrCacheMiss) diff --git a/reposerver/repository/repository.go b/reposerver/repository/repository.go index 3f7e2caf0061d..a3412a545bf5f 100644 --- a/reposerver/repository/repository.go +++ b/reposerver/repository/repository.go @@ -244,48 +244,100 @@ func (s *Service) runRepoOperation( return err } defer io.Close(closer) + + if source.Helm != nil && source.Helm.ExternalValueFiles != nil { + // load values files from external git repo + for _, exVal := range source.Helm.ExternalValueFiles { + exRepo := v1alpha1.Repository{Repo: exVal.RepoURL} + exGitClient, exRevision, err := s.newClientResolveRevision(&exRepo, exVal.TargetRevision, git.WithCache(s.cache, !settings.noRevisionCache && !settings.noCache)) + if err != nil { + return err + } + + err = DoGitCheckoutOperationForRepoOperation( + s, + exGitClient, + exRevision, + settings, + cacheFn, + nil, + verifyCommit, + "", + ) + if err != nil { + return err + } + } + } + return operation(chartPath, revision, revision, func() (*operationContext, error) { return &operationContext{chartPath, ""}, nil }) } else { - closer, err := s.repoLock.Lock(gitClient.Root(), revision, settings.allowConcurrent, func() error { - return checkoutRevision(gitClient, revision) - }) + return DoGitCheckoutOperationForRepoOperation( + s, + gitClient, + revision, + settings, + cacheFn, + operation, + verifyCommit, + source.Path, + ) + } +} - if err != nil { - return err - } +func DoGitCheckoutOperationForRepoOperation( + s *Service, + gitClient git.Client, + revision string, + settings operationSettings, + cacheFn func(cacheKey string, firstInvocation bool) (bool, error), + operation func(repoRoot, commitSHA, cacheKey string, ctxSrc operationContextSrc) error, + verifyCommit bool, + path string, +) error { - defer io.Close(closer) + closer, err := s.repoLock.Lock(gitClient.Root(), revision, settings.allowConcurrent, func() error { + return checkoutRevision(gitClient, revision) + }) - commitSHA, err := gitClient.CommitSHA() - if err != nil { - return err - } + if err != nil { + return err + } - // double-check locking - if !settings.noCache { - if ok, err := cacheFn(revision, false); ok { - return err - } + defer io.Close(closer) + + commitSHA, err := gitClient.CommitSHA() + if err != nil { + return err + } + + // double-check locking + if !settings.noCache { + if ok, err := cacheFn(revision, false); ok { + return err } - // Here commitSHA refers to the SHA of the actual commit, whereas revision refers to the branch/tag name etc - // We use the commitSHA to generate manifests and store them in cache, and revision to retrieve them from cache - return operation(gitClient.Root(), commitSHA, revision, func() (*operationContext, error) { - var signature string - if verifyCommit { - signature, err = gitClient.VerifyCommitSignature(revision) - if err != nil { - return nil, err - } - } - appPath, err := argopath.Path(gitClient.Root(), source.Path) + } + if operation == nil { + return nil + } + // Here commitSHA refers to the SHA of the actual commit, whereas revision refers to the branch/tag name etc + // We use the commitSHA to generate manifests and store them in cache, and revision to retrieve them from cache + return operation(gitClient.Root(), commitSHA, revision, func() (*operationContext, error) { + var signature string + if verifyCommit { + signature, err = gitClient.VerifyCommitSignature(revision) if err != nil { return nil, err } - return &operationContext{appPath, signature}, nil - }) - } + } + appPath, err := argopath.Path(gitClient.Root(), path) + if err != nil { + return nil, err + } + return &operationContext{appPath, signature}, nil + }) } func (s *Service) GenerateManifest(ctx context.Context, q *apiclient.ManifestRequest) (*apiclient.ManifestResponse, error) { @@ -329,7 +381,7 @@ func (s *Service) runManifestGen(repoRoot, commitSHA, cacheKey string, ctxSrc op // Retrieve a new copy (if available) of the cached response: this ensures we are updating the latest copy of the cache, // rather than a copy of the cache that occurred before (a potentially lengthy) manifest generation. innerRes := &cache.CachedManifestResponse{} - cacheErr := s.cache.GetManifests(cacheKey, q.ApplicationSource, q.Namespace, q.AppLabelKey, q.AppName, innerRes) + cacheErr := s.cache.GetManifests(cacheKey, q.ApplicationSource, q, q.Namespace, q.AppLabelKey, q.AppName, innerRes) if cacheErr != nil && cacheErr != reposervercache.ErrCacheMiss { log.Warnf("manifest cache set error %s: %v", q.ApplicationSource.String(), cacheErr) return nil, cacheErr @@ -344,7 +396,7 @@ func (s *Service) runManifestGen(repoRoot, commitSHA, cacheKey string, ctxSrc op // Update the cache to include failure information innerRes.NumberOfConsecutiveFailures++ innerRes.MostRecentError = err.Error() - cacheErr = s.cache.SetManifests(cacheKey, q.ApplicationSource, q.Namespace, q.AppLabelKey, q.AppName, innerRes) + cacheErr = s.cache.SetManifests(cacheKey, q.ApplicationSource, q, q.Namespace, q.AppLabelKey, q.AppName, innerRes) if cacheErr != nil { log.Warnf("manifest cache set error %s: %v", q.ApplicationSource.String(), cacheErr) return nil, cacheErr @@ -363,7 +415,7 @@ func (s *Service) runManifestGen(repoRoot, commitSHA, cacheKey string, ctxSrc op } manifestGenResult.Revision = commitSHA manifestGenResult.VerifyResult = ctx.verificationResult - err = s.cache.SetManifests(cacheKey, q.ApplicationSource, q.Namespace, q.AppLabelKey, q.AppName, &manifestGenCacheEntry) + err = s.cache.SetManifests(cacheKey, q.ApplicationSource, q, q.Namespace, q.AppLabelKey, q.AppName, &manifestGenCacheEntry) if err != nil { log.Warnf("manifest cache set error %s/%s: %v", q.ApplicationSource.String(), cacheKey, err) } @@ -378,7 +430,7 @@ func (s *Service) runManifestGen(repoRoot, commitSHA, cacheKey string, ctxSrc op // If true is returned, either the second or third parameter (but not both) will contain a value from the cache (a ManifestResponse, or error, respectively) func (s *Service) getManifestCacheEntry(cacheKey string, q *apiclient.ManifestRequest, firstInvocation bool) (bool, *apiclient.ManifestResponse, error) { res := cache.CachedManifestResponse{} - err := s.cache.GetManifests(cacheKey, q.ApplicationSource, q.Namespace, q.AppLabelKey, q.AppName, &res) + err := s.cache.GetManifests(cacheKey, q.ApplicationSource, q, q.Namespace, q.AppLabelKey, q.AppName, &res) if err == nil { // The cache contains an existing value @@ -397,7 +449,7 @@ func (s *Service) getManifestCacheEntry(cacheKey string, q *apiclient.ManifestRe // After X minutes, reset the cache and retry the operation (eg perhaps the error is ephemeral and has passed) if elapsedTimeInMinutes >= s.initConstants.PauseGenerationOnFailureForMinutes { // We can now try again, so reset the cache state and run the operation below - err = s.cache.DeleteManifests(cacheKey, q.ApplicationSource, q.Namespace, q.AppLabelKey, q.AppName) + err = s.cache.DeleteManifests(cacheKey, q.ApplicationSource, q, q.Namespace, q.AppLabelKey, q.AppName) if err != nil { log.Warnf("manifest cache set error %s/%s: %v", q.ApplicationSource.String(), cacheKey, err) } @@ -411,7 +463,7 @@ func (s *Service) getManifestCacheEntry(cacheKey string, q *apiclient.ManifestRe if res.NumberOfCachedResponsesReturned >= s.initConstants.PauseGenerationOnFailureForRequests { // We can now try again, so reset the error cache state and run the operation below - err = s.cache.DeleteManifests(cacheKey, q.ApplicationSource, q.Namespace, q.AppLabelKey, q.AppName) + err = s.cache.DeleteManifests(cacheKey, q.ApplicationSource, q, q.Namespace, q.AppLabelKey, q.AppName) if err != nil { log.Warnf("manifest cache set error %s/%s: %v", q.ApplicationSource.String(), cacheKey, err) } @@ -429,7 +481,7 @@ func (s *Service) getManifestCacheEntry(cacheKey string, q *apiclient.ManifestRe // Increment the number of returned cached responses and push that new value to the cache // (if we have not already done so previously in this function) res.NumberOfCachedResponsesReturned++ - err = s.cache.SetManifests(cacheKey, q.ApplicationSource, q.Namespace, q.AppLabelKey, q.AppName, &res) + err = s.cache.SetManifests(cacheKey, q.ApplicationSource, q, q.Namespace, q.AppLabelKey, q.AppName, &res) if err != nil { log.Warnf("manifest cache set error %s/%s: %v", q.ApplicationSource.String(), cacheKey, err) } @@ -544,6 +596,7 @@ func runHelmBuild(appPath string, h helm.Helm) error { } func helmTemplate(appPath string, repoRoot string, env *v1alpha1.Env, q *apiclient.ManifestRequest, isLocal bool) ([]*unstructured.Unstructured, error) { + log.Debugf("RUNNING repository.helmTemplate") concurrencyAllowed := isConcurrencyAllowed(appPath) if !concurrencyAllowed { manifestGenerateLock.Lock(appPath) @@ -597,6 +650,13 @@ func helmTemplate(appPath string, repoRoot string, env *v1alpha1.Env, q *apiclie } templateOpts.Values = append(templateOpts.Values, val) } + for _, exVal := range appHelm.ExternalValueFiles { + repoFilePath := filepath.Join(os.TempDir(), strings.Replace(git.NormalizeGitURL(exVal.RepoURL), "/", "_", -1)) + for _, file := range exVal.ValueFiles { + valueFilePath := filepath.Join(repoFilePath, file) + templateOpts.Values = append(templateOpts.Values, valueFilePath) + } + } if appHelm.Values != "" { file, err := ioutil.TempFile("", "values-*.yaml") @@ -689,6 +749,7 @@ func helmTemplate(appPath string, repoRoot string, env *v1alpha1.Env, q *apiclie return nil, err } } + log.Debugf("FINISHED repository.helmTemplate") return kube.SplitYAML([]byte(out)) } @@ -1097,7 +1158,7 @@ func runConfigManagementPlugin(appPath string, envVars *v1alpha1.Env, q *apiclie plugin := findPlugin(q.Plugins, q.ApplicationSource.Plugin.Name) if plugin == nil { - return nil, fmt.Errorf("Config management plugin with name '%s' is not supported.", q.ApplicationSource.Plugin.Name) + return nil, fmt.Errorf("config management plugin with name '%s' is not supported", q.ApplicationSource.Plugin.Name) } env := append(os.Environ(), envVars.Environ()...) if creds != nil { @@ -1108,9 +1169,24 @@ func runConfigManagementPlugin(appPath string, envVars *v1alpha1.Env, q *apiclie defer func() { _ = closer.Close() }() env = append(env, environ...) } - env = append(env, q.ApplicationSource.Plugin.Env.Environ()...) env = append(env, "KUBE_VERSION="+q.KubeVersion) env = append(env, "KUBE_API_VERSIONS="+strings.Join(q.ApiVersions, ",")) + + parsedEnv := make(v1alpha1.Env, len(env)) + for i, v := range env { + parsedVar, err := v1alpha1.NewEnvEntry(v) + if err != nil { + return nil, fmt.Errorf("failed to parse env vars") + } + parsedEnv[i] = parsedVar + } + + pluginEnv := q.ApplicationSource.Plugin.Env + for i, j := range pluginEnv { + pluginEnv[i].Value = parsedEnv.Envsubst(j.Value) + } + env = append(env, pluginEnv.Environ()...) + if plugin.Init != nil { _, err := runCommand(*plugin.Init, appPath, env) if err != nil { diff --git a/reposerver/repository/repository_test.go b/reposerver/repository/repository_test.go index bf2b984bf0a8c..5a12da5aa62d5 100644 --- a/reposerver/repository/repository_test.go +++ b/reposerver/repository/repository_test.go @@ -130,7 +130,7 @@ func TestGenerateYamlManifestInDir(t *testing.T) { q := apiclient.ManifestRequest{Repo: &argoappv1.Repository{}, ApplicationSource: &src} // update this value if we add/remove manifests - const countOfManifests = 33 + const countOfManifests = 34 res1, err := service.GenerateManifest(context.Background(), &q) @@ -143,6 +143,31 @@ func TestGenerateYamlManifestInDir(t *testing.T) { assert.Equal(t, 3, len(res2.Manifests)) } +func TestGenerateManifests_K8SAPIResetCache(t *testing.T) { + service := newService("../..") + + src := argoappv1.ApplicationSource{Path: "manifests/base"} + q := apiclient.ManifestRequest{ + KubeVersion: "v1.16.0", + Repo: &argoappv1.Repository{}, ApplicationSource: &src, + } + + cachedFakeResponse := &apiclient.ManifestResponse{Manifests: []string{"Fake"}} + + err := service.cache.SetManifests(mock.Anything, &src, &q, "", "", "", &cache.CachedManifestResponse{ManifestResponse: cachedFakeResponse}) + assert.NoError(t, err) + + res, err := service.GenerateManifest(context.Background(), &q) + assert.NoError(t, err) + assert.Equal(t, cachedFakeResponse, res) + + q.KubeVersion = "v1.17.0" + res, err = service.GenerateManifest(context.Background(), &q) + assert.NoError(t, err) + assert.NotEqual(t, cachedFakeResponse, res) + assert.True(t, len(res.Manifests) > 1) +} + // ensure we can use a semver constraint range (>= 1.0.0) and get back the correct chart (1.0.0) func TestHelmManifestFromChartRepo(t *testing.T) { service := newService(".") @@ -267,7 +292,7 @@ func TestManifestGenErrorCacheByNumRequests(t *testing.T) { assert.NotNil(t, manifestRequest) cachedManifestResponse := &cache.CachedManifestResponse{} - err := service.cache.GetManifests(mock.Anything, manifestRequest.ApplicationSource, manifestRequest.Namespace, manifestRequest.AppLabelKey, manifestRequest.AppName, cachedManifestResponse) + err := service.cache.GetManifests(mock.Anything, manifestRequest.ApplicationSource, manifestRequest, manifestRequest.Namespace, manifestRequest.AppLabelKey, manifestRequest.AppName, cachedManifestResponse) assert.Nil(t, err) return cachedManifestResponse } @@ -850,13 +875,19 @@ func TestRunCustomTool(t *testing.T) { ApplicationSource: &argoappv1.ApplicationSource{ Plugin: &argoappv1.ApplicationSourcePlugin{ Name: "test", + Env: argoappv1.Env{ + { + Name: "TEST_REVISION", + Value: "prefix-$ARGOCD_APP_REVISION", + }, + }, }, }, Plugins: []*argoappv1.ConfigManagementPlugin{{ Name: "test", Generate: argoappv1.Command{ Command: []string{"sh", "-c"}, - Args: []string{`echo "{\"kind\": \"FakeObject\", \"metadata\": { \"name\": \"$ARGOCD_APP_NAME\", \"namespace\": \"$ARGOCD_APP_NAMESPACE\", \"annotations\": {\"GIT_ASKPASS\": \"$GIT_ASKPASS\", \"GIT_USERNAME\": \"$GIT_USERNAME\", \"GIT_PASSWORD\": \"$GIT_PASSWORD\"}}}"`}, + Args: []string{`echo "{\"kind\": \"FakeObject\", \"metadata\": { \"name\": \"$ARGOCD_APP_NAME\", \"namespace\": \"$ARGOCD_APP_NAMESPACE\", \"annotations\": {\"GIT_ASKPASS\": \"$GIT_ASKPASS\", \"GIT_USERNAME\": \"$GIT_USERNAME\", \"GIT_PASSWORD\": \"$GIT_PASSWORD\"}, \"labels\": {\"revision\": \"$TEST_REVISION\"}}}"`}, }, }}, Repo: &argoappv1.Repository{ @@ -864,17 +895,19 @@ func TestRunCustomTool(t *testing.T) { }, }) - assert.Nil(t, err) + assert.NoError(t, err) assert.Equal(t, 1, len(res.Manifests)) obj := &unstructured.Unstructured{} - assert.Nil(t, json.Unmarshal([]byte(res.Manifests[0]), obj)) + assert.NoError(t, json.Unmarshal([]byte(res.Manifests[0]), obj)) assert.Equal(t, obj.GetName(), "test-app") assert.Equal(t, obj.GetNamespace(), "test-namespace") assert.Equal(t, "git-ask-pass.sh", obj.GetAnnotations()["GIT_ASKPASS"]) assert.Equal(t, "foo", obj.GetAnnotations()["GIT_USERNAME"]) assert.Equal(t, "bar", obj.GetAnnotations()["GIT_PASSWORD"]) + // Git client is mocked, so the revision is always mock.Anything + assert.Equal(t, map[string]string{"revision": "prefix-mock.Anything"}, obj.GetLabels()) } func TestGenerateFromUTF16(t *testing.T) { diff --git a/server/cache/cache.go b/server/cache/cache.go index 915e056129e49..7bacb51d8559f 100644 --- a/server/cache/cache.go +++ b/server/cache/cache.go @@ -3,6 +3,7 @@ package cache import ( "context" "fmt" + "math" "time" "github.com/go-redis/redis/v8" @@ -11,6 +12,7 @@ import ( appv1 "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1" cacheutil "github.com/argoproj/argo-cd/v2/util/cache" appstatecache "github.com/argoproj/argo-cd/v2/util/cache/appstate" + "github.com/argoproj/argo-cd/v2/util/env" "github.com/argoproj/argo-cd/v2/util/oidc" ) @@ -39,9 +41,9 @@ func AddCacheFlagsToCmd(cmd *cobra.Command, opts ...func(client *redis.Client)) var oidcCacheExpiration time.Duration var loginAttemptsExpiration time.Duration - cmd.Flags().DurationVar(&connectionStatusCacheExpiration, "connection-status-cache-expiration", 1*time.Hour, "Cache expiration for cluster/repo connection status") - cmd.Flags().DurationVar(&oidcCacheExpiration, "oidc-cache-expiration", 3*time.Minute, "Cache expiration for OIDC state") - cmd.Flags().DurationVar(&loginAttemptsExpiration, "login-attempts-expiration", 24*time.Hour, "Cache expiration for failed login attempts") + cmd.Flags().DurationVar(&connectionStatusCacheExpiration, "connection-status-cache-expiration", env.ParseDurationFromEnv("ARGOCD_SERVER_CONNECTION_STATUS_CACHE_EXPIRATION", 1*time.Hour, 0, math.MaxInt32), "Cache expiration for cluster/repo connection status") + cmd.Flags().DurationVar(&oidcCacheExpiration, "oidc-cache-expiration", env.ParseDurationFromEnv("ARGOCD_SERVER_OIDC_CACHE_EXPIRATION", 3*time.Minute, 0, math.MaxInt32), "Cache expiration for OIDC state") + cmd.Flags().DurationVar(&loginAttemptsExpiration, "login-attempts-expiration", env.ParseDurationFromEnv("ARGOCD_SERVER_LOGIN_ATTEMPTS_EXPIRATION", 24*time.Hour, 0, math.MaxInt32), "Cache expiration for failed login attempts") fn := appstatecache.AddCacheFlagsToCmd(cmd, opts...) diff --git a/server/logout/logout.go b/server/logout/logout.go index 02337e610ae7d..8446d4b5b19f0 100644 --- a/server/logout/logout.go +++ b/server/logout/logout.go @@ -67,10 +67,10 @@ func (h *Handler) ServeHTTP(w http.ResponseWriter, r *http.Request) { if argoURL == "" { // golang does not provide any easy way to determine scheme of current request // so redirecting ot http which will auto-redirect too https if necessary - argoURL = fmt.Sprintf("http://%s", r.Host) + argoURL = fmt.Sprintf("http://%s", r.Host) + strings.TrimRight(strings.TrimLeft(h.rootPath, "/"), "/") } - logoutRedirectURL := strings.TrimRight(strings.TrimLeft(argoURL, "/"), "/") + strings.TrimRight(strings.TrimLeft(h.rootPath, "/"), "/") + logoutRedirectURL := strings.TrimRight(strings.TrimLeft(argoURL, "/"), "/") cookies := r.Cookies() tokenString, err = httputil.JoinCookies(common.AuthCookieName, cookies) diff --git a/server/logout/logout_test.go b/server/logout/logout_test.go index 5ee23bc2e451f..68a2ee7e69fc0 100644 --- a/server/logout/logout_test.go +++ b/server/logout/logout_test.go @@ -25,6 +25,7 @@ import ( var ( validJWTPattern = regexp.MustCompile(`[a-zA-Z0-9-_]+\.[a-zA-Z0-9-_]+\.[a-zA-Z0-9-_]+`) baseURL = "http://localhost:4000" + rootPath = "argocd" baseLogoutURL = "http://localhost:4000/logout" baseLogoutURLwithToken = "http://localhost:4000/logout?id_token_hint={{token}}" baseLogoutURLwithRedirectURL = "http://localhost:4000/logout?post_logout_redirect_uri={{logoutRedirectURL}}" @@ -34,6 +35,7 @@ var ( nonOidcToken = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpYXQiOjE2MDU1NzQyMTIsImlzcyI6ImFyZ29jZCIsIm5iZiI6MTYwNTU3NDIxMiwic3ViIjoiYWRtaW4ifQ.zDJ4piwWnwsHON-oPusHMXWINlnrRDTQykYogT7afeE" expectedNonOIDCLogoutURL = "http://localhost:4000" expectedOIDCLogoutURL = "https://dev-5695098.okta.com/oauth2/v1/logout?id_token_hint=" + oidcToken + "&post_logout_redirect_uri=" + baseURL + expectedOIDCLogoutURLWithRootPath = "https://dev-5695098.okta.com/oauth2/v1/logout?id_token_hint=" + oidcToken + "&post_logout_redirect_uri=" + baseURL + rootPath ) func TestConstructLogoutURL(t *testing.T) { @@ -114,6 +116,38 @@ func TestHandlerConstructLogoutURL(t *testing.T) { }, }, ) + kubeClientWithOIDCConfigButNoURL := fake.NewSimpleClientset( + &corev1.ConfigMap{ + ObjectMeta: metav1.ObjectMeta{ + Name: common.ArgoCDConfigMapName, + Namespace: "default", + Labels: map[string]string{ + "app.kubernetes.io/part-of": "argocd", + }, + }, + Data: map[string]string{ + "oidc.config": "name: Okta \n" + + "issuer: https://dev-5695098.okta.com \n" + + "requestedScopes: [\"openid\", \"profile\", \"email\", \"groups\"] \n" + + "requestedIDTokenClaims: {\"groups\": {\"essential\": true}} \n" + + "logoutURL: https://dev-5695098.okta.com/oauth2/v1/logout?id_token_hint={{token}}&post_logout_redirect_uri={{logoutRedirectURL}}", + "url": "", + }, + }, + &corev1.Secret{ + ObjectMeta: metav1.ObjectMeta{ + Name: common.ArgoCDSecretName, + Namespace: "default", + Labels: map[string]string{ + "app.kubernetes.io/part-of": "argocd", + }, + }, + Data: map[string][]byte{ + "admin.password": nil, + "server.secretkey": nil, + }, + }, + ) kubeClientWithOIDCConfigButNoLogoutURL := fake.NewSimpleClientset( &corev1.ConfigMap{ ObjectMeta: metav1.ObjectMeta{ @@ -176,10 +210,11 @@ func TestHandlerConstructLogoutURL(t *testing.T) { settingsManagerWithOIDCConfig := settings.NewSettingsManager(context.Background(), kubeClientWithOIDCConfig, "default") settingsManagerWithoutOIDCConfig := settings.NewSettingsManager(context.Background(), kubeClientWithoutOIDCConfig, "default") settingsManagerWithOIDCConfigButNoLogoutURL := settings.NewSettingsManager(context.Background(), kubeClientWithOIDCConfigButNoLogoutURL, "default") + settingsManagerWithOIDCConfigButNoURL := settings.NewSettingsManager(context.Background(), kubeClientWithOIDCConfigButNoURL, "default") sessionManager := session.NewSessionManager(settingsManagerWithOIDCConfig, test.NewFakeProjLister(), "", session.NewUserStateStorage(nil)) - oidcHandler := NewHandler(appclientset.NewSimpleClientset(), settingsManagerWithOIDCConfig, sessionManager, "", "default") + oidcHandler := NewHandler(appclientset.NewSimpleClientset(), settingsManagerWithOIDCConfig, sessionManager, rootPath, "default") oidcHandler.verifyToken = func(tokenString string) (jwt.Claims, string, error) { if !validJWTPattern.MatchString(tokenString) { return nil, "", errors.New("invalid jwt") @@ -201,6 +236,13 @@ func TestHandlerConstructLogoutURL(t *testing.T) { return &jwt.StandardClaims{Issuer: "okta"}, "", nil } + oidcHandlerWithoutBaseURL := NewHandler(appclientset.NewSimpleClientset(), settingsManagerWithOIDCConfigButNoURL, sessionManager, "argocd", "default") + oidcHandlerWithoutBaseURL.verifyToken = func(tokenString string) (jwt.Claims, string, error) { + if !validJWTPattern.MatchString(tokenString) { + return nil, "", errors.New("invalid jwt") + } + return &jwt.StandardClaims{Issuer: "okta"}, "", nil + } oidcTokenHeader := make(map[string][]string) oidcTokenHeader["Cookie"] = []string{"argocd.token=" + oidcToken} nonOidcTokenHeader := make(map[string][]string) @@ -238,6 +280,14 @@ func TestHandlerConstructLogoutURL(t *testing.T) { expectedLogoutURL: expectedOIDCLogoutURL, wantErr: false, }, + { + name: "Case: OIDC logout request with valid token but missing URL", + handler: oidcHandlerWithoutBaseURL, + request: oidcRequest, + responseRecorder: httptest.NewRecorder(), + expectedLogoutURL: expectedOIDCLogoutURLWithRootPath, + wantErr: false, + }, { name: "Case: non-OIDC logout request with valid token", handler: nonoidcHandler, diff --git a/server/server.go b/server/server.go index c723473332e1b..9b27dcf7fa014 100644 --- a/server/server.go +++ b/server/server.go @@ -726,7 +726,8 @@ func (a *ArgoCDServer) newHTTPServer(ctx context.Context, port int, grpcWebHandl a.registerDexHandlers(mux) // Webhook handler for git events (Note: cache timeouts are hardcoded because API server does not write to cache and not really using them) - acdWebhookHandler := webhook.NewHandler(a.Namespace, a.AppClientset, a.settings, a.settingsMgr, repocache.NewCache(a.Cache.GetCache(), 24*time.Hour, 3*time.Minute)) + argoDB := db.NewDB(a.Namespace, a.settingsMgr, a.KubeClientset) + acdWebhookHandler := webhook.NewHandler(a.Namespace, a.AppClientset, a.settings, a.settingsMgr, repocache.NewCache(a.Cache.GetCache(), 24*time.Hour, 3*time.Minute), a.Cache, argoDB) mux.HandleFunc("/api/webhook", acdWebhookHandler.Handler) // Serve cli binaries directly from API server diff --git a/server/settings/oidc/claims.pb.go b/server/settings/oidc/claims.pb.go index fd841817029ef..5c2b9ee81454f 100644 --- a/server/settings/oidc/claims.pb.go +++ b/server/settings/oidc/claims.pb.go @@ -322,10 +322,7 @@ func (m *Claim) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthClaims - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthClaims } if (iNdEx + skippy) > l { diff --git a/test/container/Dockerfile b/test/container/Dockerfile index 4cdc2b54f7d68..7064543ad92af 100644 --- a/test/container/Dockerfile +++ b/test/container/Dockerfile @@ -2,7 +2,7 @@ FROM redis:6.2.1 as redis FROM node:12.18.4 as node -FROM golang:1.16.0 as golang +FROM golang:1.16.4 as golang FROM registry:2.7.1 as registry diff --git a/test/e2e/fixture/fixture.go b/test/e2e/fixture/fixture.go index 7a2cab15ad406..e5921f1afc9cd 100644 --- a/test/e2e/fixture/fixture.go +++ b/test/e2e/fixture/fixture.go @@ -316,7 +316,7 @@ func SetResourceOverridesSplitKeys(overrides map[string]v1alpha1.ResourceOverrid if v.Actions != "" { cm.Data[getResourceOverrideSplitKey(k, "actions")] = v.Actions } - if len(v.IgnoreDifferences.JSONPointers) > 0 { + if len(v.IgnoreDifferences.JSONPointers) > 0 || len(v.IgnoreDifferences.JQPathExpressions) > 0 { yamlBytes, err := yaml.Marshal(v.IgnoreDifferences) if err != nil { return err diff --git a/test/e2e/helm_test.go b/test/e2e/helm_test.go index 910e32ccfe2f7..7c7ba171ac34f 100644 --- a/test/e2e/helm_test.go +++ b/test/e2e/helm_test.go @@ -114,6 +114,29 @@ func TestHelmRepo(t *testing.T) { Expect(SyncStatusIs(SyncStatusCodeSynced)) } +func TestHelmExternalValuesAdded(t *testing.T) { + Given(t). + Path("helm-external-values/chart"). + When(). + Declarative("helm-external-values/app.yaml"). + Sync(). + Then(). + Expect(OperationPhaseIs(OperationSucceeded)). + Expect(HealthIs(health.HealthStatusHealthy)). + Expect(SyncStatusIs(SyncStatusCodeSynced)). + And(func(app *Application) { + assert.Equal(t, []string{"helm-external-values/chart/values_external.yaml"}, app.Spec.Source.Helm.ExternalValueFiles[0].ValueFiles) + assert.Equal(t, []string{"helm-external-values/chart/values_external2.yaml"}, app.Spec.Source.Helm.ExternalValueFiles[1].ValueFiles) + }). + And(func(app *Application) { + output, err := RunCli("app", "manifests", app.Name) + assert.NoError(t, err) + assert.Contains(t, output, "defaultValue") + assert.Contains(t, output, "external1Value") + assert.Contains(t, output, "external2Value") + }) +} + func TestHelmValues(t *testing.T) { Given(t). Path("helm"). diff --git a/test/e2e/sync_waves_test.go b/test/e2e/sync_waves_test.go index f85faf67bd627..48073b3d91044 100644 --- a/test/e2e/sync_waves_test.go +++ b/test/e2e/sync_waves_test.go @@ -28,7 +28,7 @@ func TestFixingDegradedApp(t *testing.T) { Then(). Expect(OperationPhaseIs(OperationFailed)). Expect(SyncStatusIs(SyncStatusCodeOutOfSync)). - Expect(HealthIs(health.HealthStatusMissing)). + Expect(HealthIs(health.HealthStatusDegraded)). Expect(ResourceResultNumbering(1)). Expect(ResourceSyncStatusIs("ConfigMap", "cm-1", SyncStatusCodeSynced)). Expect(ResourceHealthIs("ConfigMap", "cm-1", health.HealthStatusDegraded)). diff --git a/test/e2e/testdata/helm-external-values/app.yaml b/test/e2e/testdata/helm-external-values/app.yaml new file mode 100644 index 0000000000000..da38d66804835 --- /dev/null +++ b/test/e2e/testdata/helm-external-values/app.yaml @@ -0,0 +1,26 @@ +apiVersion: argoproj.io/v1alpha1 +kind: Application +metadata: + name: {{.Name}} + namespace: {{.ArgoCDNamespace}} +spec: + project: {{.Project}} + source: + repoURL: {{.RepoURL}} + targetRevision: HEAD + path: {{.Path}} + helm: + valueFiles: + - values.yaml + externalValueFiles: + - repoURL: {{.RepoURL}} + targetRevision: HEAD + valueFiles: + - {{.Path}}/values_external.yaml + - repoURL: {{.RepoURL}} + targetRevision: HEAD + valueFiles: + - {{.Path}}/values_external2.yaml + destination: + server: https://kubernetes.default.svc + namespace: {{.DeploymentNamespace}} \ No newline at end of file diff --git a/test/e2e/testdata/helm-external-values/chart/Chart.yaml b/test/e2e/testdata/helm-external-values/chart/Chart.yaml new file mode 100644 index 0000000000000..a3becea5ac11b --- /dev/null +++ b/test/e2e/testdata/helm-external-values/chart/Chart.yaml @@ -0,0 +1,3 @@ +apiVersion: v2 +version: 1.0.0 +name: helm \ No newline at end of file diff --git a/test/e2e/testdata/helm-external-values/chart/templates/configmap.yaml b/test/e2e/testdata/helm-external-values/chart/templates/configmap.yaml new file mode 100644 index 0000000000000..8f4478ad6ef05 --- /dev/null +++ b/test/e2e/testdata/helm-external-values/chart/templates/configmap.yaml @@ -0,0 +1,22 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: default +data: + foo: "{{ .Values.default }}" + +--- +apiVersion: v1 +kind: ConfigMap +metadata: + name: external1Override +data: + foo: "{{ .Values.external1Override }}" + +--- +apiVersion: v1 +kind: ConfigMap +metadata: + name: external2Override +data: + foo: "{{ .Values.external2Override }}" \ No newline at end of file diff --git a/test/e2e/testdata/helm-external-values/chart/values.yaml b/test/e2e/testdata/helm-external-values/chart/values.yaml new file mode 100644 index 0000000000000..c910471abc248 --- /dev/null +++ b/test/e2e/testdata/helm-external-values/chart/values.yaml @@ -0,0 +1,3 @@ +defaultValue: "defaultValue" +external1Override: "defaultValue" +external2Override: "defaultValue" \ No newline at end of file diff --git a/test/e2e/testdata/helm-external-values/chart/values_external.yaml b/test/e2e/testdata/helm-external-values/chart/values_external.yaml new file mode 100644 index 0000000000000..180f55edb0577 --- /dev/null +++ b/test/e2e/testdata/helm-external-values/chart/values_external.yaml @@ -0,0 +1,2 @@ +external1Override: "external1Value" +external2Override: "external1Value" \ No newline at end of file diff --git a/test/e2e/testdata/helm-external-values/chart/values_external_2.yaml b/test/e2e/testdata/helm-external-values/chart/values_external_2.yaml new file mode 100644 index 0000000000000..1653b682f662c --- /dev/null +++ b/test/e2e/testdata/helm-external-values/chart/values_external_2.yaml @@ -0,0 +1 @@ +external2Override: "external2Value" \ No newline at end of file diff --git a/test/remote/README.md b/test/remote/README.md index 626797b591f1f..f50447b8cc7b1 100644 --- a/test/remote/README.md +++ b/test/remote/README.md @@ -18,6 +18,20 @@ kubectl create ns argocd-e2e kubectl -n argocd-e2e apply -f ``` +If you're going to install Argo CD using either Argo CD Operator or OpenShift GitOps Operator, you can use this manifest to install the Argo CD instance into your namespace: + +```yaml +apiVersion: argoproj.io/v1alpha1 +kind: ArgoCD +metadata: + name: argocd-test + namespace: argocd-e2e +spec: + server: + route: + enabled: true +``` + ### Give the Argo CD the appropriate RBAC permissions ```shell diff --git a/ui/src/app/app.tsx b/ui/src/app/app.tsx index 27912ec4002a2..3506d751d2e79 100644 --- a/ui/src/app/app.tsx +++ b/ui/src/app/app.tsx @@ -57,8 +57,8 @@ const versionLoader = services.version.version(); async function isExpiredSSO() { try { - const {loggedIn, iss} = await services.users.get(); - if (loggedIn && iss !== 'argocd') { + const {iss} = await services.users.get(); + if (iss && iss !== 'argocd') { const authSettings = await services.authService.settings(); return ((authSettings.dexConfig && authSettings.dexConfig.connectors) || []).length > 0 || authSettings.oidcConfig; } diff --git a/ui/src/app/applications/components/application-details/application-details.tsx b/ui/src/app/applications/components/application-details/application-details.tsx index fbd3d971abb79..ddcb36c120d28 100644 --- a/ui/src/app/applications/components/application-details/application-details.tsx +++ b/ui/src/app/applications/components/application-details/application-details.tsx @@ -151,11 +151,22 @@ export class ApplicationDetails extends React.Component { - const resNode: ResourceTreeNode = {...res, root: null, info: null, parentRefs: [], resourceVersion: '', uid: ''}; - resNode.root = resNode; - return this.filterTreeNode(resNode, treeFilter); - }); + + const statusByKey = new Map(); + const visibleOrphans = (pref.orphanedResources && tree.orphanedNodes) || []; + if (visibleOrphans.length > 0) { + application.status.resources.forEach(res => statusByKey.set(AppUtils.nodeKey(res), res)); + } + const orphans = visibleOrphans.map(orphan => statusByKey.get(AppUtils.nodeKey(orphan))); + + const filteredRes = application.status.resources + .filter(res => { + const resNode: ResourceTreeNode = {...res, root: null, info: null, parentRefs: [], resourceVersion: '', uid: ''}; + resNode.root = resNode; + return this.filterTreeNode(resNode, treeFilter); + }) + .concat(orphans); + return (
) }); + if (app.spec.source.helm && app.spec.source.helm.externalValueFiles) { + app.spec.source.helm.externalValueFiles.forEach((externalValue, index) => { + attributes.push({ + title: 'EXTERNAL VALUES ' + (index + 1), + view: ( + + {externalValue.repoURL} ({externalValue.targetRevision})
+ {externalValue.valueFiles.join(', ')} +
+ ), + edit: (formApi: FormApi) => Only editable in Manifest! + }); + }); + } + attributes.push({ title: 'VALUES', view: app.spec.source.helm && ( diff --git a/ui/src/app/applications/components/application-pod-view/pod-view.scss b/ui/src/app/applications/components/application-pod-view/pod-view.scss index 6ba47671f9e49..74c2a5e86e909 100644 --- a/ui/src/app/applications/components/application-pod-view/pod-view.scss +++ b/ui/src/app/applications/components/application-pod-view/pod-view.scss @@ -87,9 +87,7 @@ $num-stats: 2; &__pods { display: flex; flex-wrap: wrap; - max-height: $pod-container-height; width: 100%; - overflow: auto; background-color: $argo-color-gray-3; border-radius: 3px; padding: $gutter * 2; diff --git a/ui/src/app/applications/components/application-pod-view/pod-view.tsx b/ui/src/app/applications/components/application-pod-view/pod-view.tsx index 1d1133dcd186f..d1be49e63a821 100644 --- a/ui/src/app/applications/components/application-pod-view/pod-view.tsx +++ b/ui/src/app/applications/components/application-pod-view/pod-view.tsx @@ -304,7 +304,9 @@ export class PodView extends React.Component { } const statusByKey = new Map(); - this.props.app.status.resources.forEach(res => statusByKey.set(nodeKey(res), res)); + if (this.props.app) { + this.props.app.status.resources.forEach(res => statusByKey.set(nodeKey(res), res)); + } (tree.nodes || []).forEach((rnode: ResourceTreeNode) => { if (sortMode !== 'node') { parentsFor[rnode.uid] = rnode.parentRefs as PodGroup[]; @@ -335,7 +337,7 @@ export class PodView extends React.Component { fullName: nodeKey(rnode), metadata: {name: rnode.name}, spec: {nodeName: 'Unknown'}, - health: rnode.health.status + health: rnode.health ? rnode.health.status : 'Unknown' } as Pod; // Get node name for Pod diff --git a/ui/src/app/applications/components/application-resource-tree/application-resource-tree.tsx b/ui/src/app/applications/components/application-resource-tree/application-resource-tree.tsx index cac305cc2de80..6de3b7232e5e5 100644 --- a/ui/src/app/applications/components/application-resource-tree/application-resource-tree.tsx +++ b/ui/src/app/applications/components/application-resource-tree/application-resource-tree.tsx @@ -119,7 +119,7 @@ export function compareNodes(first: ResourceTreeNode, second: ResourceTreeNode) return Math.sign(numberA - numberB); } function getRevision(a: ResourceTreeNode) { - const filtered = a.info.filter(b => b.name === 'Revision' && b)[0]; + const filtered = (a.info || []).filter(b => b.name === 'Revision' && b)[0]; if (filtered == null) { return ''; } diff --git a/ui/src/app/applications/components/applications-list/applications-list.tsx b/ui/src/app/applications/components/applications-list/applications-list.tsx index 3cd77d04cb2ac..94f5a23888ff9 100644 --- a/ui/src/app/applications/components/applications-list/applications-list.tsx +++ b/ui/src/app/applications/components/applications-list/applications-list.tsx @@ -145,7 +145,7 @@ function filterApps(applications: models.Application[], pref: AppsListPreference (pref.syncFilter.length === 0 || pref.syncFilter.includes(app.status.sync.status)) && (pref.healthFilter.length === 0 || pref.healthFilter.includes(app.status.health.status)) && (pref.namespacesFilter.length === 0 || pref.namespacesFilter.some(ns => app.spec.destination.namespace && minimatch(app.spec.destination.namespace, ns))) && - (pref.clustersFilter.length === 0 || pref.clustersFilter.some(server => server.includes(app.spec.destination.server || app.spec.destination.name))) && + (pref.clustersFilter.length === 0 || pref.clustersFilter.some(server => server === (app.spec.destination.server || app.spec.destination.name))) && (pref.labelsFilter.length === 0 || pref.labelsFilter.every(selector => LabelSelector.match(selector, app.metadata.labels))) ); } diff --git a/ui/src/app/shared/models.ts b/ui/src/app/shared/models.ts index b7870411bf2f7..acb4a70acdcf8 100644 --- a/ui/src/app/shared/models.ts +++ b/ui/src/app/shared/models.ts @@ -182,6 +182,7 @@ export interface ApplicationSource { export interface ApplicationSourceHelm { valueFiles: string[]; values?: string; + externalValueFiles?: ExternalValuesFile[]; parameters: HelmParameter[]; fileParameters: HelmFileParameter[]; } @@ -554,6 +555,12 @@ export interface AppInfo { path: string; } +export interface ExternalValuesFile { + repoURL: string; + targetRevision: string; + valueFiles: string[]; +} + export interface HelmParameter { name: string; value: string; @@ -569,6 +576,7 @@ export interface HelmAppSpec { path: string; valueFiles: string[]; values?: string; + externalValueFiles?: ExternalValuesFile; parameters: HelmParameter[]; fileParameters: HelmFileParameter[]; } diff --git a/ui/src/app/shared/services/accounts-service.ts b/ui/src/app/shared/services/accounts-service.ts index 19b3c6c709ed2..8820fa46dd697 100644 --- a/ui/src/app/shared/services/accounts-service.ts +++ b/ui/src/app/shared/services/accounts-service.ts @@ -10,6 +10,13 @@ export class AccountsService { return requests.get(`/account/${name}`).then(res => res.body as Account); } + public changePassword(name: string, currentPassword: string, newPassword: string): Promise { + return requests + .put('/account/password') + .send({currentPassword, name, newPassword}) + .then(res => res.status === 200); + } + public createToken(name: string, tokenId: string, expiresIn: number): Promise { return requests .post(`/account/${name}/token`) diff --git a/ui/src/app/user-info/components/user-info-overview/user-info-overview.tsx b/ui/src/app/user-info/components/user-info-overview/user-info-overview.tsx index e4b4ffe7e67bf..708ffd12c91b2 100644 --- a/ui/src/app/user-info/components/user-info-overview/user-info-overview.tsx +++ b/ui/src/app/user-info/components/user-info-overview/user-info-overview.tsx @@ -1,39 +1,172 @@ import * as React from 'react'; -import {DataLoader, Page} from '../../../shared/components'; +import {FormField, NotificationType, SlidingPanel} from 'argo-ui/src/index'; +import * as PropTypes from 'prop-types'; +import {Form, FormApi, FormValue, Nested, Text} from 'react-form'; +import {RouteComponentProps} from 'react-router'; +import {DataLoader, ErrorNotification, Page, Spinner} from '../../../shared/components'; +import {AppContext} from '../../../shared/context'; import {services} from '../../../shared/services'; require('./user-info-overview.scss'); -export const UserInfoOverview = () => ( - -
-
-
- services.users.get()}> - {userInfo => - userInfo.loggedIn ? ( - -

Username: {userInfo.username}

-

Issuer: {userInfo.iss}

- {userInfo.groups && ( - -

Groups:

-
    - {userInfo.groups.map(group => ( -
  • {group}
  • - ))} -
-
- )} -
+export class UserInfoOverview extends React.Component, {connecting: boolean}> { + public static contextTypes = { + router: PropTypes.object, + apis: PropTypes.object, + history: PropTypes.object + }; + + private formApiPassword: FormApi; + + constructor(props: RouteComponentProps) { + super(props); + this.state = {connecting: false}; + } + + public render() { + return ( + services.users.get()}> + {userInfo => ( + (this.showChangePassword = true) + } + ] + } + : {items: []} + }}> +
+
+
+
+ {userInfo.loggedIn ? ( + +

Username: {userInfo.username}

+

Issuer: {userInfo.iss}

+ {userInfo.groups && ( + +

Groups:

+
    + {userInfo.groups.map(group => ( +
  • {group}
  • + ))} +
+
+ )} +
+ ) : ( +

You are not logged in

+ )} +
+
+
+ {userInfo.loggedIn && userInfo.iss === 'argocd' ? ( + (this.showChangePassword = false)} + header={ +
+ {' '} + +
+ }> +

Update account password

+
this.changePassword(userInfo.username, params.currentPassword, params.newPassword)} + getApi={api => (this.formApiPassword = api)} + defaultValues={{type: 'git'}} + validateError={(params: {currentPassword: string; newPassword: string; confirmNewPassword: string}) => ({ + currentPassword: !params.currentPassword && 'Current password is required.', + newPassword: + (!params.newPassword && 'New password is required.') || + (params.newPassword !== params.confirmNewPassword && 'Confirm your new password.'), + confirmNewPassword: (!params.confirmNewPassword || params.confirmNewPassword !== params.newPassword) && 'Confirm your new password.' + })}> + {formApi => ( + +
+ +
+
+ +
+
+ +
+
+ )} + +
) : ( -

You are not logged in

- ) - } - -
-
-
- -); +
+ )} +
+ + )} + + ); + } + + private async changePassword(username: string, currentPassword: Nested | FormValue, newPassword: Nested | FormValue) { + try { + await services.accounts.changePassword(username, currentPassword, newPassword); + this.appContext.apis.notifications.show({type: NotificationType.Success, content: 'Your password has been successfully updated.'}); + this.showChangePassword = false; + } catch (e) { + this.appContext.apis.notifications.show({ + content: , + type: NotificationType.Error + }); + } + } + + // Whether to show the HTTPS repository connection dialogue on the page + private get showChangePassword() { + return new URLSearchParams(this.props.location.search).get('changePassword') === 'true'; + } + + private set showChangePassword(val: boolean) { + this.clearChangePasswordForm(); + this.appContext.router.history.push(`${this.props.match.url}?changePassword=${val}`); + } + + // Empty all fields in HTTPS repository form + private clearChangePasswordForm() { + this.formApiPassword.resetAll(); + } + + private get appContext(): AppContext { + return this.context as AppContext; + } +} diff --git a/ui/yarn.lock b/ui/yarn.lock index 2cd28807d24de..cbda5a9c82217 100644 --- a/ui/yarn.lock +++ b/ui/yarn.lock @@ -2312,13 +2312,15 @@ browserify-zlib@^0.2.0: pako "~1.0.5" browserslist@^4.6.0, browserslist@^4.7.2: - version "4.7.2" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.7.2.tgz#1bb984531a476b5d389cedecb195b2cd69fb1348" - integrity sha512-uZavT/gZXJd2UTi9Ov7/Z340WOSQ3+m1iBVRUknf+okKxonL9P83S3ctiBDtuRmRu8PiCHjqyueqQ9HYlJhxiw== + version "4.16.6" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.16.6.tgz#d7901277a5a88e554ed305b183ec9b0c08f66fa2" + integrity sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ== dependencies: - caniuse-lite "^1.0.30001004" - electron-to-chromium "^1.3.295" - node-releases "^1.1.38" + caniuse-lite "^1.0.30001219" + colorette "^1.2.2" + electron-to-chromium "^1.3.723" + escalade "^3.1.1" + node-releases "^1.1.71" bs-logger@0.x: version "0.2.6" @@ -2483,10 +2485,10 @@ camelcase@^5.0.0, camelcase@^5.3.1: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== -caniuse-lite@^1.0.30001004: - version "1.0.30001008" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001008.tgz#b8841b1df78a9f5ed9702537ef592f1f8772c0d9" - integrity sha512-b8DJyb+VVXZGRgJUa30cbk8gKHZ3LOZTBLaUEEVr2P4xpmFigOCc62CO4uzquW641Ouq1Rm9N+rWLWdSYDaDIw== +caniuse-lite@^1.0.30001219: + version "1.0.30001228" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001228.tgz#bfdc5942cd3326fa51ee0b42fbef4da9d492a7fa" + integrity sha512-QQmLOGJ3DEgokHbMSA8cj2a+geXqmnpyOFT0lhQV6P3/YOJvGDEwoedcwxEQ30gJIwIIunHIicunJ2rzK5gB2A== capture-exit@^2.0.0: version "2.0.0" @@ -3409,9 +3411,9 @@ dns-equal@^1.0.0: integrity sha1-s55/HabrCnW6nBcySzR1PEfgZU0= dns-packet@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-1.3.1.tgz#12aa426981075be500b910eedcd0b47dd7deda5a" - integrity sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg== + version "1.3.4" + resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-1.3.4.tgz#e3455065824a2507ba886c55a89963bb107dec6f" + integrity sha512-BQ6F4vycLXBvdrJZ6S3gZewt6rcrks9KBgM9vrhW+knGRqc8uEdT7fuCwloc7nny5xNoMJ17HGH0R/6fpo8ECA== dependencies: ip "^1.1.0" safe-buffer "^5.0.1" @@ -3530,10 +3532,10 @@ ee-first@1.1.1: resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= -electron-to-chromium@^1.3.295: - version "1.3.304" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.304.tgz#49b47d961f8143116174c2f70fbfee3aabf43015" - integrity sha512-a5mqa13jCdBc+Crgk3Gyr7vpXCiFWfFq23YDCEmrPYeiDOQKZDVE6EX/Q4Xdv97n3XkcjiSBDOY0IS19yP2yeA== +electron-to-chromium@^1.3.723: + version "1.3.737" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.737.tgz#196f2e9656f4f3c31930750e1899c091b72d36b5" + integrity sha512-P/B84AgUSQXaum7a8m11HUsYL8tj9h/Pt5f7Hg7Ty6bm5DxlFq+e5+ouHUoNQMsKDJ7u4yGfI8mOErCmSH9wyg== elliptic@^6.5.3: version "6.5.4" @@ -3662,6 +3664,11 @@ es6-promise@^3.2.1: resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-3.3.1.tgz#a08cdde84ccdbf34d027a1451bc91d4bcd28a613" integrity sha1-oIzd6EzNvzTQJ6FFG8kdS80ophM= +escalade@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" + integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== + escape-html@~1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" @@ -6818,12 +6825,10 @@ node-readfiles@^0.2.0: dependencies: es6-promise "^3.2.1" -node-releases@^1.1.38: - version "1.1.39" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.39.tgz#c1011f30343aff5b633153b10ff691d278d08e8d" - integrity sha512-8MRC/ErwNCHOlAFycy9OPca46fQYUjbJRDcZTHVWIGXIjYLM73k70vv3WkYutVnM4cCo4hE0MqBVVZjP6vjISA== - dependencies: - semver "^6.3.0" +node-releases@^1.1.71: + version "1.1.72" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.72.tgz#14802ab6b1039a79a0c7d662b610a5bbd76eacbe" + integrity sha512-LLUo+PpH3dU6XizX3iVoubUNheF/owjXCZZ5yACDxNnPtgFuludV1ZL3ayK1kVep42Rmm0+R9/Y60NQbZ2bifw== node-sass@^4.14.1: version "4.14.1" @@ -8628,16 +8633,11 @@ safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== -safe-buffer@>=5.1.0, safe-buffer@^5.1.0, safe-buffer@^5.2.0, safe-buffer@~5.2.0: +safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@~5.2.0: version "5.2.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== -safe-buffer@^5.0.1, safe-buffer@^5.1.1, safe-buffer@^5.1.2: - version "5.2.0" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.0.tgz#b74daec49b1148f88c64b68d49b1e815c1f2f519" - integrity sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg== - safe-regex@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" @@ -10505,9 +10505,9 @@ write-file-atomic@2.4.1: signal-exit "^3.0.2" ws@^5.2.0: - version "5.2.2" - resolved "https://registry.yarnpkg.com/ws/-/ws-5.2.2.tgz#dffef14866b8e8dc9133582514d1befaf96e980f" - integrity sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA== + version "5.2.3" + resolved "https://registry.yarnpkg.com/ws/-/ws-5.2.3.tgz#05541053414921bc29c63bee14b8b0dd50b07b3d" + integrity sha512-jZArVERrMsKUatIdnLzqvcfydI85dvd/Fp1u/VOpfdDWQ4c9qWXe+VIeAbQ5FrDwciAkr+lzofXLz3Kuf26AOA== dependencies: async-limiter "~1.0.0" diff --git a/util/argo/normalizers/diff_normalizer.go b/util/argo/normalizers/diff_normalizer.go index 1ccf6a0f8115f..41061ea6c15ae 100644 --- a/util/argo/normalizers/diff_normalizer.go +++ b/util/argo/normalizers/diff_normalizer.go @@ -2,9 +2,11 @@ package normalizers import ( "encoding/json" + "fmt" "github.com/argoproj/gitops-engine/pkg/diff" jsonpatch "github.com/evanphx/json-patch" + "github.com/itchyny/gojq" log "github.com/sirupsen/logrus" "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" "k8s.io/apimachinery/pkg/runtime/schema" @@ -13,11 +15,72 @@ import ( "github.com/argoproj/argo-cd/v2/util/glob" ) -type normalizerPatch struct { +type normalizerPatch interface { + GetGroupKind() schema.GroupKind + GetNamespace() string + GetName() string + // Apply(un *unstructured.Unstructured) (error) + Apply(data []byte) ([]byte, error) +} + +type baseNormalizerPatch struct { groupKind schema.GroupKind namespace string name string - patch jsonpatch.Patch +} + +func (np *baseNormalizerPatch) GetGroupKind() schema.GroupKind { + return np.groupKind +} + +func (np *baseNormalizerPatch) GetNamespace() string { + return np.namespace +} + +func (np *baseNormalizerPatch) GetName() string { + return np.name +} + +type jsonPatchNormalizerPatch struct { + baseNormalizerPatch + patch *jsonpatch.Patch +} + +func (np *jsonPatchNormalizerPatch) Apply(data []byte) ([]byte, error) { + patchedData, err := np.patch.Apply(data) + if err != nil { + return nil, err + } + return patchedData, nil +} + +type jqNormalizerPatch struct { + baseNormalizerPatch + code *gojq.Code +} + +func (np *jqNormalizerPatch) Apply(data []byte) ([]byte, error) { + dataJson := make(map[string]interface{}) + err := json.Unmarshal(data, &dataJson) + if err != nil { + return nil, err + } + + iter := np.code.Run(dataJson) + first, ok := iter.Next() + if !ok { + return nil, fmt.Errorf("JQ patch did not return any data") + } + _, ok = iter.Next() + if ok { + return nil, fmt.Errorf("JQ patch returned multiple objects") + } + + patchedData, err := json.Marshal(first) + if err != nil { + return nil, err + } + return patchedData, err } type ignoreNormalizer struct { @@ -31,12 +94,18 @@ func NewIgnoreNormalizer(ignore []v1alpha1.ResourceIgnoreDifferences, overrides if err != nil { log.Warn(err) } - if len(override.IgnoreDifferences.JSONPointers) > 0 { - ignore = append(ignore, v1alpha1.ResourceIgnoreDifferences{ - Group: group, - Kind: kind, - JSONPointers: override.IgnoreDifferences.JSONPointers, - }) + if len(override.IgnoreDifferences.JSONPointers) > 0 || len(override.IgnoreDifferences.JQPathExpressions) > 0 { + resourceIgnoreDifference := v1alpha1.ResourceIgnoreDifferences{ + Group: group, + Kind: kind, + } + if len(override.IgnoreDifferences.JSONPointers) > 0 { + resourceIgnoreDifference.JSONPointers = override.IgnoreDifferences.JSONPointers + } + if len(override.IgnoreDifferences.JQPathExpressions) > 0 { + resourceIgnoreDifference.JQPathExpressions = override.IgnoreDifferences.JQPathExpressions + } + ignore = append(ignore, resourceIgnoreDifference) } } patches := make([]normalizerPatch, 0) @@ -50,14 +119,33 @@ func NewIgnoreNormalizer(ignore []v1alpha1.ResourceIgnoreDifferences, overrides if err != nil { return nil, err } - patches = append(patches, normalizerPatch{ - groupKind: schema.GroupKind{Group: ignore[i].Group, Kind: ignore[i].Kind}, - name: ignore[i].Name, - namespace: ignore[i].Namespace, - patch: patch, + patches = append(patches, &jsonPatchNormalizerPatch{ + baseNormalizerPatch: baseNormalizerPatch{ + groupKind: schema.GroupKind{Group: ignore[i].Group, Kind: ignore[i].Kind}, + name: ignore[i].Name, + namespace: ignore[i].Namespace, + }, + patch: &patch, + }) + } + for _, pathExpression := range ignore[i].JQPathExpressions { + jqDeletionQuery, err := gojq.Parse(fmt.Sprintf("del(%s)", pathExpression)) + if err != nil { + return nil, err + } + jqDeletionCode, err := gojq.Compile(jqDeletionQuery) + if err != nil { + return nil, err + } + patches = append(patches, &jqNormalizerPatch{ + baseNormalizerPatch: baseNormalizerPatch{ + groupKind: schema.GroupKind{Group: ignore[i].Group, Kind: ignore[i].Kind}, + name: ignore[i].Name, + namespace: ignore[i].Namespace, + }, + code: jqDeletionCode, }) } - } return &ignoreNormalizer{patches: patches}, nil } @@ -68,10 +156,10 @@ func (n *ignoreNormalizer) Normalize(un *unstructured.Unstructured) error { for _, patch := range n.patches { groupKind := un.GroupVersionKind().GroupKind() - if glob.Match(patch.groupKind.Group, groupKind.Group) && - glob.Match(patch.groupKind.Kind, groupKind.Kind) && - (patch.name == "" || patch.name == un.GetName()) && - (patch.namespace == "" || patch.namespace == un.GetNamespace()) { + if glob.Match(patch.GetGroupKind().Group, groupKind.Group) && + glob.Match(patch.GetGroupKind().Kind, groupKind.Kind) && + (patch.GetName() == "" || patch.GetName() == un.GetName()) && + (patch.GetNamespace() == "" || patch.GetNamespace() == un.GetNamespace()) { matched = append(matched, patch) } @@ -86,12 +174,12 @@ func (n *ignoreNormalizer) Normalize(un *unstructured.Unstructured) error { } for _, patch := range matched { - patchedData, err := patch.patch.Apply(docData) + patchedDocData, err := patch.Apply(docData) if err != nil { log.Debugf("Failed to apply normalization: %v", err) continue } - docData = patchedData + docData = patchedDocData } err = json.Unmarshal(docData, un) diff --git a/util/argo/normalizers/diff_normalizer_test.go b/util/argo/normalizers/diff_normalizer_test.go index f1abb714f09dd..74ce5cb33136a 100644 --- a/util/argo/normalizers/diff_normalizer_test.go +++ b/util/argo/normalizers/diff_normalizer_test.go @@ -137,3 +137,70 @@ func TestNormalizeGlobMatch(t *testing.T) { assert.Nil(t, err) assert.False(t, has) } + +func TestNormalizeJQPathExpression(t *testing.T) { + normalizer, err := NewIgnoreNormalizer([]v1alpha1.ResourceIgnoreDifferences{{ + Group: "apps", + Kind: "Deployment", + JQPathExpressions: []string{".spec.template.spec.initContainers[] | select(.name == \"init-container-0\")"}, + }}, make(map[string]v1alpha1.ResourceOverride)) + + assert.Nil(t, err) + + deployment := test.NewDeployment() + + var initContainers []interface{} + initContainers = append(initContainers, map[string]interface{}{"name": "init-container-0"}) + initContainers = append(initContainers, map[string]interface{}{"name": "init-container-1"}) + err = unstructured.SetNestedSlice(deployment.Object, initContainers, "spec", "template", "spec", "initContainers") + assert.Nil(t, err) + + actualInitContainers, has, err := unstructured.NestedSlice(deployment.Object, "spec", "template", "spec", "initContainers") + assert.Nil(t, err) + assert.True(t, has) + assert.Len(t, actualInitContainers, 2) + + err = normalizer.Normalize(deployment) + assert.Nil(t, err) + actualInitContainers, has, err = unstructured.NestedSlice(deployment.Object, "spec", "template", "spec", "initContainers") + assert.Nil(t, err) + assert.True(t, has) + assert.Len(t, actualInitContainers, 1) + + actualInitContainerName, has, err := unstructured.NestedString(actualInitContainers[0].(map[string]interface{}), "name") + assert.Nil(t, err) + assert.True(t, has) + assert.Equal(t, actualInitContainerName, "init-container-1") +} + +func TestNormalizeIllegalJQPathExpression(t *testing.T) { + _, err := NewIgnoreNormalizer([]v1alpha1.ResourceIgnoreDifferences{{ + Group: "apps", + Kind: "Deployment", + JQPathExpressions: []string{".spec.template.spec.containers[] | select(.name == \"missing-quote)"}, + // JSONPointers: []string{"no-starting-slash"}, + }}, make(map[string]v1alpha1.ResourceOverride)) + + assert.Error(t, err) +} + +func TestNormalizeJQPathExpressionWithError(t *testing.T) { + normalizer, err := NewIgnoreNormalizer([]v1alpha1.ResourceIgnoreDifferences{{ + Group: "apps", + Kind: "Deployment", + JQPathExpressions: []string{".spec.fakeField.foo[]"}, + }}, make(map[string]v1alpha1.ResourceOverride)) + + assert.Nil(t, err) + + deployment := test.NewDeployment() + originalDeployment, err := deployment.MarshalJSON() + assert.Nil(t, err) + + err = normalizer.Normalize(deployment) + assert.Nil(t, err) + + normalizedDeployment, err := deployment.MarshalJSON() + assert.Nil(t, err) + assert.Equal(t, originalDeployment, normalizedDeployment) +} diff --git a/util/cache/appstate/cache.go b/util/cache/appstate/cache.go index c370f8c185f4c..e4c60ac1fa57d 100644 --- a/util/cache/appstate/cache.go +++ b/util/cache/appstate/cache.go @@ -11,6 +11,7 @@ import ( appv1 "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1" cacheutil "github.com/argoproj/argo-cd/v2/util/cache" + "github.com/argoproj/argo-cd/v2/util/env" ) var ErrCacheMiss = cacheutil.ErrCacheMiss @@ -31,7 +32,7 @@ func NewCache(cache *cacheutil.Cache, appStateCacheExpiration time.Duration) *Ca func AddCacheFlagsToCmd(cmd *cobra.Command, opts ...func(client *redis.Client)) func() (*Cache, error) { var appStateCacheExpiration time.Duration - cmd.Flags().DurationVar(&appStateCacheExpiration, "app-state-cache-expiration", 1*time.Hour, "Cache expiration for app state") + cmd.Flags().DurationVar(&appStateCacheExpiration, "app-state-cache-expiration", env.ParseDurationFromEnv("ARGOCD_APP_STATE_CACHE_EXPIRATION", 1*time.Hour, 0, 10*time.Hour), "Cache expiration for app state") cacheFactory := cacheutil.AddCacheFlagsToCmd(cmd, opts...) diff --git a/util/cache/cache.go b/util/cache/cache.go index bca5bcc65baca..510d6fbe79a4e 100644 --- a/util/cache/cache.go +++ b/util/cache/cache.go @@ -35,11 +35,11 @@ func AddCacheFlagsToCmd(cmd *cobra.Command, opts ...func(client *redis.Client)) redisDB := 0 var defaultCacheExpiration time.Duration - cmd.Flags().StringVar(&redisAddress, "redis", "", "Redis server hostname and port (e.g. argocd-redis:6379). ") - cmd.Flags().IntVar(&redisDB, "redisdb", 0, "Redis database.") + cmd.Flags().StringVar(&redisAddress, "redis", env.StringFromEnv("REDIS_SERVER", ""), "Redis server hostname and port (e.g. argocd-redis:6379). ") + cmd.Flags().IntVar(&redisDB, "redisdb", env.ParseNumFromEnv("REDISDB", 0, 0, math.MaxInt32), "Redis database.") cmd.Flags().StringArrayVar(&sentinelAddresses, "sentinel", []string{}, "Redis sentinel hostname and port (e.g. argocd-redis-ha-announce-0:6379). ") cmd.Flags().StringVar(&sentinelMaster, "sentinelmaster", "master", "Redis sentinel master group name.") - cmd.Flags().DurationVar(&defaultCacheExpiration, "default-cache-expiration", 24*time.Hour, "Cache expiration default") + cmd.Flags().DurationVar(&defaultCacheExpiration, "default-cache-expiration", env.ParseDurationFromEnv("ARGOCD_DEFAULT_CACHE_EXPIRATION", 24*time.Hour, 0, math.MaxInt32), "Cache expiration default") return func() (*Cache, error) { password := os.Getenv(envRedisPassword) maxRetries := env.ParseNumFromEnv(envRedisRetryCount, defaultRedisRetryCount, 0, math.MaxInt32) diff --git a/util/cli/cli.go b/util/cli/cli.go index 30237d337ebd4..eb4b0cf5df5f4 100644 --- a/util/cli/cli.go +++ b/util/cli/cli.go @@ -17,7 +17,7 @@ import ( "github.com/google/shlex" log "github.com/sirupsen/logrus" "github.com/spf13/cobra" - "golang.org/x/crypto/ssh/terminal" + terminal "golang.org/x/term" "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" "k8s.io/client-go/tools/clientcmd" "k8s.io/klog/v2" @@ -27,6 +27,7 @@ import ( "github.com/argoproj/argo-cd/v2/common" "github.com/argoproj/argo-cd/v2/util/errors" "github.com/argoproj/argo-cd/v2/util/io" + utillog "github.com/argoproj/argo-cd/v2/util/log" ) // NewVersionCmd returns a new `version` command to be used as a sub-command to root @@ -144,22 +145,22 @@ func ReadAndConfirmPassword() (string, error) { // SetLogFormat sets a logrus log format func SetLogFormat(logFormat string) { switch strings.ToLower(logFormat) { - case "json": - log.SetFormatter(&log.JSONFormatter{}) - case "text": - if os.Getenv("FORCE_LOG_COLORS") == "1" { - log.SetFormatter(&log.TextFormatter{ForceColors: true}) - } + case utillog.JsonFormat: + os.Setenv(common.EnvLogFormat, utillog.JsonFormat) + case utillog.TextFormat: + os.Setenv(common.EnvLogFormat, utillog.TextFormat) default: log.Fatalf("Unknown log format '%s'", logFormat) } + + log.SetFormatter(utillog.CreateFormatter(logFormat)) } // SetLogLevel parses and sets a logrus log level func SetLogLevel(logLevel string) { level, err := log.ParseLevel(logLevel) errors.CheckError(err) - log.SetLevel(level) + os.Setenv(common.EnvLogLevel, level.String()) } // SetGLogLevel set the glog level for the k8s go-client diff --git a/util/db/cluster.go b/util/db/cluster.go index eb85d64fed56e..d00704432d0e3 100644 --- a/util/db/cluster.go +++ b/util/db/cluster.go @@ -83,12 +83,16 @@ func (db *db) ListClusters(ctx context.Context) (*appv1.ClusterList, error) { return nil, err } clusterList := appv1.ClusterList{ - Items: make([]appv1.Cluster, len(clusterSecrets)), + Items: make([]appv1.Cluster, 0), } hasInClusterCredentials := false - for i, clusterSecret := range clusterSecrets { - cluster := *secretToCluster(clusterSecret) - clusterList.Items[i] = cluster + for _, clusterSecret := range clusterSecrets { + cluster, err := secretToCluster(clusterSecret) + if err != nil { + log.Errorf("could not unmarshal cluster secret %s", clusterSecret.Name) + continue + } + clusterList.Items = append(clusterList.Items, *cluster) if cluster.Server == appv1.KubernetesInternalAPIServerAddr { hasInClusterCredentials = true } @@ -127,7 +131,11 @@ func (db *db) CreateCluster(ctx context.Context, c *appv1.Cluster) (*appv1.Clust } return nil, err } - return secretToCluster(clusterSecret), db.settingsMgr.ResyncInformers() + cluster, err := secretToCluster(clusterSecret) + if err != nil { + return nil, status.Errorf(codes.InvalidArgument, "could not unmarshal cluster secret %s", clusterSecret.Name) + } + return cluster, db.settingsMgr.ResyncInformers() } // ClusterEvent contains information about cluster event @@ -152,7 +160,11 @@ func (db *db) WatchClusters(ctx context.Context, clusterEventHandler := cache.ResourceEventHandlerFuncs{ AddFunc: func(obj interface{}) { if secretObj, ok := obj.(*apiv1.Secret); ok { - cluster := secretToCluster(secretObj) + cluster, err := secretToCluster(secretObj) + if err != nil { + log.Errorf("could not unmarshal cluster secret %s", secretObj.Name) + return + } if cluster.Server == appv1.KubernetesInternalAPIServerAddr { // change local cluster event to modified or deleted, since it cannot be re-added or deleted handleModEvent(localCls, cluster) @@ -176,8 +188,16 @@ func (db *db) WatchClusters(ctx context.Context, UpdateFunc: func(oldObj, newObj interface{}) { if oldSecretObj, ok := oldObj.(*apiv1.Secret); ok { if newSecretObj, ok := newObj.(*apiv1.Secret); ok { - oldCluster := secretToCluster(oldSecretObj) - newCluster := secretToCluster(newSecretObj) + oldCluster, err := secretToCluster(oldSecretObj) + if err != nil { + log.Errorf("could not unmarshal cluster secret %s", oldSecretObj.Name) + return + } + newCluster, err := secretToCluster(newSecretObj) + if err != nil { + log.Errorf("could not unmarshal cluster secret %s", newSecretObj.Name) + return + } if newCluster.Server == appv1.KubernetesInternalAPIServerAddr { localCls = newCluster } @@ -205,7 +225,7 @@ func (db *db) getClusterSecret(server string) (*apiv1.Secret, error) { return nil, err } for _, clusterSecret := range clusterSecrets { - if secretToCluster(clusterSecret).Server == strings.TrimRight(server, "/") { + if cluster, err := secretToCluster(clusterSecret); err == nil && cluster.Server == strings.TrimRight(server, "/") { return clusterSecret, nil } } @@ -222,7 +242,7 @@ func (db *db) GetCluster(ctx context.Context, server string) (*appv1.Cluster, er return nil, err } } - return secretToCluster(clusterSecret), nil + return secretToCluster(clusterSecret) } // UpdateCluster updates a cluster @@ -242,7 +262,12 @@ func (db *db) UpdateCluster(ctx context.Context, c *appv1.Cluster) (*appv1.Clust if err != nil { return nil, err } - return secretToCluster(clusterSecret), db.settingsMgr.ResyncInformers() + cluster, err := secretToCluster(clusterSecret) + if err != nil { + log.Errorf("could not unmarshal cluster secret %s", clusterSecret.Name) + return nil, err + } + return cluster, db.settingsMgr.ResyncInformers() } // Delete deletes a cluster by name @@ -313,12 +338,12 @@ func clusterToSecret(c *appv1.Cluster, secret *apiv1.Secret) error { } // secretToCluster converts a secret into a Cluster object -func secretToCluster(s *apiv1.Secret) *appv1.Cluster { +func secretToCluster(s *apiv1.Secret) (*appv1.Cluster, error) { var config appv1.ClusterConfig if len(s.Data["config"]) > 0 { err := json.Unmarshal(s.Data["config"], &config) if err != nil { - panic(err) + return nil, err } } @@ -354,5 +379,5 @@ func secretToCluster(s *apiv1.Secret) *appv1.Cluster { RefreshRequestedAt: refreshRequestedAt, Shard: shard, } - return &cluster + return &cluster, nil } diff --git a/util/db/cluster_test.go b/util/db/cluster_test.go index ea43192d2895f..43b673db97dda 100644 --- a/util/db/cluster_test.go +++ b/util/db/cluster_test.go @@ -6,12 +6,14 @@ import ( "time" "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" v1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/client-go/kubernetes/fake" "github.com/argoproj/argo-cd/v2/common" "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1" + appv1 "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1" "github.com/argoproj/argo-cd/v2/util/settings" ) @@ -37,7 +39,8 @@ func Test_secretToCluster(t *testing.T) { "config": []byte("{\"username\":\"foo\"}"), }, } - cluster := secretToCluster(secret) + cluster, err := secretToCluster(secret) + require.NoError(t, err) assert.Equal(t, *cluster, v1alpha1.Cluster{ Name: "test", Server: "http://mycluster", @@ -58,13 +61,31 @@ func Test_secretToCluster_NoConfig(t *testing.T) { "server": []byte("http://mycluster"), }, } - cluster := secretToCluster(secret) + cluster, err := secretToCluster(secret) + assert.NoError(t, err) assert.Equal(t, *cluster, v1alpha1.Cluster{ Name: "test", Server: "http://mycluster", }) } +func Test_secretToCluster_InvalidConfig(t *testing.T) { + secret := &v1.Secret{ + ObjectMeta: metav1.ObjectMeta{ + Name: "mycluster", + Namespace: fakeNamespace, + }, + Data: map[string][]byte{ + "name": []byte("test"), + "server": []byte("http://mycluster"), + "config": []byte("{'tlsClientConfig':{'insecure':false}}"), + }, + } + cluster, err := secretToCluster(secret) + require.Error(t, err) + assert.Nil(t, cluster) +} + func TestUpdateCluster(t *testing.T) { kubeclientset := fake.NewSimpleClientset(&v1.Secret{ ObjectMeta: metav1.ObjectMeta{ @@ -159,3 +180,76 @@ func runWatchTest(t *testing.T, db ArgoDB, actions []func(old *v1alpha1.Cluster, } } + +func TestListClusters(t *testing.T) { + validSecret1 := &v1.Secret{ + ObjectMeta: metav1.ObjectMeta{ + Name: "mycluster1", + Namespace: fakeNamespace, + Labels: map[string]string{ + common.LabelKeySecretType: common.LabelValueSecretTypeCluster, + }, + }, + Data: map[string][]byte{ + "server": []byte(appv1.KubernetesInternalAPIServerAddr), + "name": []byte("in-cluster"), + }, + } + + validSecret2 := &v1.Secret{ + ObjectMeta: metav1.ObjectMeta{ + Name: "mycluster2", + Namespace: fakeNamespace, + Labels: map[string]string{ + common.LabelKeySecretType: common.LabelValueSecretTypeCluster, + }, + }, + Data: map[string][]byte{ + "server": []byte("http://mycluster2"), + "name": []byte("mycluster2"), + }, + } + + invalidSecret := &v1.Secret{ + ObjectMeta: metav1.ObjectMeta{ + Name: "mycluster3", + Namespace: fakeNamespace, + }, + Data: map[string][]byte{ + "name": []byte("test"), + "server": []byte("http://mycluster3"), + "config": []byte("{'tlsClientConfig':{'insecure':false}}"), + }, + } + + t.Run("Valid clusters", func(t *testing.T) { + kubeclientset := fake.NewSimpleClientset(validSecret1, validSecret2) + settingsManager := settings.NewSettingsManager(context.Background(), kubeclientset, fakeNamespace) + db := NewDB(fakeNamespace, settingsManager, kubeclientset) + + clusters, err := db.ListClusters(context.TODO()) + require.NoError(t, err) + assert.Len(t, clusters.Items, 2) + }) + + t.Run("Cluster list with invalid cluster", func(t *testing.T) { + kubeclientset := fake.NewSimpleClientset(validSecret1, validSecret2, invalidSecret) + settingsManager := settings.NewSettingsManager(context.Background(), kubeclientset, fakeNamespace) + db := NewDB(fakeNamespace, settingsManager, kubeclientset) + + clusters, err := db.ListClusters(context.TODO()) + require.NoError(t, err) + assert.Len(t, clusters.Items, 2) + }) + + t.Run("Implicit in-cluster secret", func(t *testing.T) { + kubeclientset := fake.NewSimpleClientset(validSecret2) + settingsManager := settings.NewSettingsManager(context.Background(), kubeclientset, fakeNamespace) + db := NewDB(fakeNamespace, settingsManager, kubeclientset) + + clusters, err := db.ListClusters(context.TODO()) + require.NoError(t, err) + // ListClusters() should have added an implicit in-cluster secret to the list + assert.Len(t, clusters.Items, 2) + }) +} diff --git a/util/env/env.go b/util/env/env.go index 922c44897ca9b..8595f8f07ecc4 100644 --- a/util/env/env.go +++ b/util/env/env.go @@ -3,6 +3,7 @@ package env import ( "os" "strconv" + "strings" "time" timeutil "github.com/argoproj/pkg/time" @@ -63,9 +64,21 @@ func ParseDurationFromEnv(env string, defaultValue, min, max time.Duration) time } func StringFromEnv(env string, defaultValue string) string { - str := os.Getenv(env) - if str == "" { - return defaultValue + if str := os.Getenv(env); str != "" { + return str + } + return defaultValue +} + +// ParseBoolFromEnv retrieves a boolean value from given environment envVar. +// Returns default value if envVar is not set. +func ParseBoolFromEnv(envVar string, defaultValue bool) bool { + if val := os.Getenv(envVar); val != "" { + if strings.ToLower(val) == "true" { + return true + } else if strings.ToLower(val) == "false" { + return false + } } - return str + return defaultValue } diff --git a/util/env/env_test.go b/util/env/env_test.go index 9bb0e83c78362..1db9ebe0f6116 100644 --- a/util/env/env_test.go +++ b/util/env/env_test.go @@ -103,3 +103,20 @@ func TestParseDurationFromEnv(t *testing.T) { }) } } + +func Test_ParseBoolFromEnv(t *testing.T) { + t.Run("Get 'true' value from existing env var", func(t *testing.T) { + _ = os.Setenv("TEST_BOOL_VAL", "true") + defer os.Setenv("TEST_BOOL_VAL", "") + assert.True(t, ParseBoolFromEnv("TEST_BOOL_VAL", false)) + }) + t.Run("Get 'false' value from existing env var", func(t *testing.T) { + _ = os.Setenv("TEST_BOOL_VAL", "false") + defer os.Setenv("TEST_BOOL_VAL", "") + assert.False(t, ParseBoolFromEnv("TEST_BOOL_VAL", true)) + }) + t.Run("Get default value from non-existing env var", func(t *testing.T) { + _ = os.Setenv("TEST_BOOL_VAL", "") + assert.True(t, ParseBoolFromEnv("TEST_BOOL_VAL", true)) + }) +} diff --git a/util/exec/exec.go b/util/exec/exec.go index 95a930af677e0..59913b8ce74ef 100644 --- a/util/exec/exec.go +++ b/util/exec/exec.go @@ -6,13 +6,10 @@ import ( "os/exec" "time" - "github.com/sirupsen/logrus" - - "github.com/argoproj/argo-cd/v2/util/log" - + "github.com/argoproj/gitops-engine/pkg/utils/tracing" argoexec "github.com/argoproj/pkg/exec" - tracing "github.com/argoproj/gitops-engine/pkg/utils/tracing" + "github.com/argoproj/argo-cd/v2/util/log" ) var timeout time.Duration @@ -35,7 +32,7 @@ func Run(cmd *exec.Cmd) (string, error) { func RunWithRedactor(cmd *exec.Cmd, redactor func(text string) string) (string, error) { opts := argoexec.CmdOpts{Timeout: timeout} - span := tracing.NewLoggingTracer(log.NewLogrusLogger(logrus.New())).StartSpan(fmt.Sprintf("exec %v", cmd.Args[0])) + span := tracing.NewLoggingTracer(log.NewLogrusLogger(log.NewWithCurrentConfig())).StartSpan(fmt.Sprintf("exec %v", cmd.Args[0])) span.SetBaggageItem("dir", fmt.Sprintf("%v", cmd.Dir)) if redactor != nil { span.SetBaggageItem("args", redactor(fmt.Sprintf("%v", cmd.Args))) diff --git a/util/git/client.go b/util/git/client.go index 162b54113f39e..968eb97e410e0 100644 --- a/util/git/client.go +++ b/util/git/client.go @@ -9,6 +9,7 @@ import ( "os" "os/exec" "path/filepath" + "regexp" "sort" "strconv" "strings" @@ -120,7 +121,8 @@ func WithEventHandlers(handlers EventHandlers) ClientOpts { } func NewClient(rawRepoURL string, creds Creds, insecure bool, enableLfs bool, opts ...ClientOpts) (Client, error) { - root := filepath.Join(os.TempDir(), strings.Replace(NormalizeGitURL(rawRepoURL), "/", "_", -1)) + r := regexp.MustCompile("(/|:)") + root := filepath.Join(os.TempDir(), r.ReplaceAllString(NormalizeGitURL(rawRepoURL), "_")) if root == os.TempDir() { return nil, fmt.Errorf("Repository '%s' cannot be initialized, because its root would be system temp at %s", rawRepoURL, root) } diff --git a/util/health/health.go b/util/health/health.go deleted file mode 100644 index 26042e92ccf0e..0000000000000 --- a/util/health/health.go +++ /dev/null @@ -1,59 +0,0 @@ -package health - -import ( - "github.com/argoproj/gitops-engine/pkg/health" - hookutil "github.com/argoproj/gitops-engine/pkg/sync/hook" - "github.com/argoproj/gitops-engine/pkg/sync/ignore" - "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" - - appv1 "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1" - "github.com/argoproj/argo-cd/v2/util/lua" -) - -// SetApplicationHealth updates the health statuses of all resources performed in the comparison -func SetApplicationHealth(resStatuses []*appv1.ResourceStatus, liveObjs []*unstructured.Unstructured, resourceOverrides map[string]appv1.ResourceOverride, filter func(obj *unstructured.Unstructured) bool) (*appv1.HealthStatus, error) { - var savedErr error - appHealth := appv1.HealthStatus{Status: health.HealthStatusHealthy} - for i, liveObj := range liveObjs { - var healthStatus *health.HealthStatus - var err error - if liveObj == nil { - healthStatus = &health.HealthStatus{Status: health.HealthStatusMissing} - } else { - if filter(liveObj) { - healthStatus, err = health.GetResourceHealth(liveObj, lua.ResourceHealthOverrides(resourceOverrides)) - if err != nil && savedErr == nil { - savedErr = err - } - } - } - if healthStatus != nil { - resHealth := appv1.HealthStatus{Status: healthStatus.Status, Message: healthStatus.Message} - resStatuses[i].Health = &resHealth - ignore := ignoreLiveObjectHealth(liveObj, resHealth) - if !ignore && health.IsWorse(appHealth.Status, healthStatus.Status) { - appHealth.Status = healthStatus.Status - } - } - } - return &appHealth, savedErr -} - -// ignoreLiveObjectHealth determines if we should not allow the live object to affect the overall -// health of the application (e.g. hooks, missing child applications) -func ignoreLiveObjectHealth(liveObj *unstructured.Unstructured, resHealth appv1.HealthStatus) bool { - if liveObj != nil { - // Don't allow resource hooks to affect health status - if hookutil.IsHook(liveObj) || ignore.Ignore(liveObj) { - return true - } - gvk := liveObj.GroupVersionKind() - if gvk.Group == "argoproj.io" && gvk.Kind == "Application" && (resHealth.Status == health.HealthStatusMissing || resHealth.Status == health.HealthStatusUnknown) { - // Covers the app-of-apps corner case where child app is deployed but that app itself - // has a status of 'Missing', which we don't want to cause the parent's health status - // to also be Missing - return true - } - } - return false -} diff --git a/util/health/health_test.go b/util/health/health_test.go deleted file mode 100644 index 52f0c4aea6912..0000000000000 --- a/util/health/health_test.go +++ /dev/null @@ -1,121 +0,0 @@ -package health - -import ( - "io/ioutil" - "testing" - - "github.com/argoproj/gitops-engine/pkg/health" - synccommon "github.com/argoproj/gitops-engine/pkg/sync/common" - "github.com/argoproj/gitops-engine/pkg/utils/kube" - "github.com/ghodss/yaml" - "github.com/stretchr/testify/assert" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" - - appv1 "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1" -) - -func TestSetApplicationHealth(t *testing.T) { - yamlBytes, err := ioutil.ReadFile("./testdata/job-failed.yaml") - assert.Nil(t, err) - var failedJob unstructured.Unstructured - err = yaml.Unmarshal(yamlBytes, &failedJob) - assert.Nil(t, err) - - yamlBytes, err = ioutil.ReadFile("./testdata/pod-running-restart-always.yaml") - assert.Nil(t, err) - var runningPod unstructured.Unstructured - err = yaml.Unmarshal(yamlBytes, &runningPod) - assert.Nil(t, err) - - resources := []*appv1.ResourceStatus{ - &appv1.ResourceStatus{ - Group: "", - Version: "v1", - Kind: "Pod", - Name: runningPod.GetName(), - }, - &appv1.ResourceStatus{ - Group: "batch", - Version: "v1", - Kind: "Job", - Name: failedJob.GetName(), - }, - } - liveObjs := []*unstructured.Unstructured{ - &runningPod, - &failedJob, - } - healthStatus, err := SetApplicationHealth(resources, liveObjs, nil, noFilter) - assert.NoError(t, err) - assert.Equal(t, health.HealthStatusDegraded, healthStatus.Status) - - // now mark the job as a hook and retry. it should ignore the hook and consider the app healthy - failedJob.SetAnnotations(map[string]string{synccommon.AnnotationKeyHook: "PreSync"}) - healthStatus, err = SetApplicationHealth(resources, liveObjs, nil, noFilter) - assert.NoError(t, err) - assert.Equal(t, health.HealthStatusHealthy, healthStatus.Status) -} - -func TestAppOfAppsHealth(t *testing.T) { - newAppLiveObj := func(name string, status health.HealthStatusCode) (*unstructured.Unstructured, *appv1.ResourceStatus) { - app := appv1.Application{ - ObjectMeta: metav1.ObjectMeta{ - Name: "foo", - }, - TypeMeta: metav1.TypeMeta{ - APIVersion: "argoproj.io/v1alpha1", - Kind: "Application", - }, - Status: appv1.ApplicationStatus{ - Health: appv1.HealthStatus{ - Status: status, - }, - }, - } - resStatus := &appv1.ResourceStatus{ - Group: "argoproj.io", - Version: "v1alpha1", - Kind: "Application", - Name: name, - } - return kube.MustToUnstructured(&app), resStatus - } - - missingApp, missingStatus := newAppLiveObj("foo", health.HealthStatusMissing) - unknownApp, unknownStatus := newAppLiveObj("fooz", health.HealthStatusUnknown) - healthyApp, healthyStatus := newAppLiveObj("bar", health.HealthStatusHealthy) - degradedApp, degradedStatus := newAppLiveObj("baz", health.HealthStatusDegraded) - - // verify missing child app does not affect app health - { - missingAndHealthyStatuses := []*appv1.ResourceStatus{missingStatus, healthyStatus} - missingAndHealthyLiveObjects := []*unstructured.Unstructured{missingApp, healthyApp} - healthStatus, err := SetApplicationHealth(missingAndHealthyStatuses, missingAndHealthyLiveObjects, nil, noFilter) - assert.NoError(t, err) - assert.Equal(t, health.HealthStatusHealthy, healthStatus.Status) - } - - // verify unknown child app does not affect app health - { - unknownAndHealthyStatuses := []*appv1.ResourceStatus{unknownStatus, healthyStatus} - unknownAndHealthyLiveObjects := []*unstructured.Unstructured{unknownApp, healthyApp} - healthStatus, err := SetApplicationHealth(unknownAndHealthyStatuses, unknownAndHealthyLiveObjects, nil, noFilter) - assert.NoError(t, err) - assert.Equal(t, health.HealthStatusHealthy, healthStatus.Status) - } - - // verify degraded does affect - { - degradedAndHealthyStatuses := []*appv1.ResourceStatus{degradedStatus, healthyStatus} - degradedAndHealthyLiveObjects := []*unstructured.Unstructured{degradedApp, healthyApp} - healthStatus, err := SetApplicationHealth(degradedAndHealthyStatuses, degradedAndHealthyLiveObjects, nil, noFilter) - assert.NoError(t, err) - assert.Equal(t, health.HealthStatusHealthy, healthStatus.Status) - } - -} - -func noFilter(obj *unstructured.Unstructured) bool { - return true -} diff --git a/util/helm/helmver.go b/util/helm/helmver.go index fe9648539cefa..2a82823b0fb7a 100644 --- a/util/helm/helmver.go +++ b/util/helm/helmver.go @@ -19,7 +19,7 @@ var ( HelmV3 = HelmVer{ binaryName: "helm", templateNameArg: "--name-template", - kubeVersionSupported: false, + kubeVersionSupported: true, showCommand: "show", pullCommand: "pull", initSupported: false, diff --git a/util/kube/kubectl.go b/util/kube/kubectl.go index 02001d729f1a4..94d6159049c2d 100644 --- a/util/kube/kubectl.go +++ b/util/kube/kubectl.go @@ -7,17 +7,16 @@ import ( "github.com/argoproj/gitops-engine/pkg/utils/kube" "github.com/argoproj/gitops-engine/pkg/utils/tracing" - "github.com/sirupsen/logrus" ) var tracer tracing.Tracer = &tracing.NopTracer{} func init() { if os.Getenv("ARGOCD_TRACING_ENABLED") == "1" { - tracer = tracing.NewLoggingTracer(log.NewLogrusLogger(logrus.New())) + tracer = tracing.NewLoggingTracer(log.NewLogrusLogger(log.NewWithCurrentConfig())) } } func NewKubectl() kube.Kubectl { - return &kube.KubectlCmd{Tracer: tracer, Log: log.NewLogrusLogger(logrus.New())} + return &kube.KubectlCmd{Tracer: tracer, Log: log.NewLogrusLogger(log.NewWithCurrentConfig())} } diff --git a/util/kube/portforwarder.go b/util/kube/portforwarder.go index 5dd3cc4c4e7fb..3148b6a5d6da2 100644 --- a/util/kube/portforwarder.go +++ b/util/kube/portforwarder.go @@ -67,7 +67,7 @@ func PortForward(podSelector string, targetPort int, namespace string, overrides out := new(bytes.Buffer) errOut := new(bytes.Buffer) - ln, err := net.Listen("tcp", "[::]:0") + ln, err := net.Listen("tcp", "localhost:0") if err != nil { return -1, err } diff --git a/util/kustomize/kustomize.go b/util/kustomize/kustomize.go index c5987ec03771d..f664c60f3f8e9 100644 --- a/util/kustomize/kustomize.go +++ b/util/kustomize/kustomize.go @@ -120,7 +120,11 @@ func (k *kustomize) Build(opts *v1alpha1.ApplicationSourceKustomize, kustomizeOp if len(opts.CommonLabels) > 0 { // edit add label foo:bar - cmd := exec.Command(k.getBinaryPath(), append([]string{"edit", "add", "label"}, mapToEditAddArgs(opts.CommonLabels)...)...) + args := []string{"edit", "add", "label"} + if opts.ForceCommonLabels { + args = append(args, "--force") + } + cmd := exec.Command(k.getBinaryPath(), append(args, mapToEditAddArgs(opts.CommonLabels)...)...) cmd.Dir = k.path _, err := executil.Run(cmd) if err != nil { @@ -130,7 +134,11 @@ func (k *kustomize) Build(opts *v1alpha1.ApplicationSourceKustomize, kustomizeOp if len(opts.CommonAnnotations) > 0 { // edit add annotation foo:bar - cmd := exec.Command(k.getBinaryPath(), append([]string{"edit", "add", "annotation"}, mapToEditAddArgs(opts.CommonAnnotations)...)...) + args := []string{"edit", "add", "annotation"} + if opts.ForceCommonAnnotations { + args = append(args, "--force") + } + cmd := exec.Command(k.getBinaryPath(), append(args, mapToEditAddArgs(opts.CommonAnnotations)...)...) cmd.Dir = k.path _, err := executil.Run(cmd) if err != nil { diff --git a/util/kustomize/kustomize_test.go b/util/kustomize/kustomize_test.go index a68adcec19110..56ad93dd19029 100644 --- a/util/kustomize/kustomize_test.go +++ b/util/kustomize/kustomize_test.go @@ -17,13 +17,14 @@ import ( const kustomization1 = "kustomization_yaml" const kustomization2a = "kustomization_yml" const kustomization2b = "Kustomization" +const kustomization3 = "force_common" -func testDataDir() (string, error) { +func testDataDir(testData string) (string, error) { res, err := ioutil.TempDir("", "kustomize-test") if err != nil { return "", err } - _, err = exec.RunCommand("cp", exec.CmdOpts{}, "-r", "./testdata/"+kustomization1, filepath.Join(res, "testdata")) + _, err = exec.RunCommand("cp", exec.CmdOpts{}, "-r", "./testdata/"+testData, filepath.Join(res, "testdata")) if err != nil { return "", err } @@ -31,7 +32,7 @@ func testDataDir() (string, error) { } func TestKustomizeBuild(t *testing.T) { - appPath, err := testDataDir() + appPath, err := testDataDir(kustomization1) assert.Nil(t, err) namePrefix := "namePrefix-" nameSuffix := "-nameSuffix" @@ -125,3 +126,101 @@ func TestGetSemver(t *testing.T) { assert.NoError(t, err) assert.NotEmpty(t, ver) } + +func TestKustomizeBuildForceCommonLabels(t *testing.T) { + type testCase struct { + TestData string + KustomizeSource v1alpha1.ApplicationSourceKustomize + ExpectedLabels map[string]string + ExpectErr bool + } + testCases := []testCase{ + { + TestData: kustomization3, + KustomizeSource: v1alpha1.ApplicationSourceKustomize{ + ForceCommonLabels: true, + CommonLabels: map[string]string{ + "foo": "edited", + }, + }, + ExpectedLabels: map[string]string{ + "app": "nginx", + "foo": "edited", + }, + }, + { + TestData: kustomization3, + KustomizeSource: v1alpha1.ApplicationSourceKustomize{ + ForceCommonLabels: false, + CommonLabels: map[string]string{ + "foo": "edited", + }, + }, + ExpectErr: true, + }, + } + for _, tc := range testCases { + appPath, err := testDataDir(tc.TestData) + assert.Nil(t, err) + kustomize := NewKustomizeApp(appPath, git.NopCreds{}, "", "") + objs, _, err := kustomize.Build(&tc.KustomizeSource, nil) + switch tc.ExpectErr { + case true: + assert.Error(t, err) + default: + assert.Nil(t, err) + if assert.Equal(t, len(objs), 1) { + assert.Equal(t, tc.ExpectedLabels, objs[0].GetLabels()) + } + } + } +} + +func TestKustomizeBuildForceCommonAnnotations(t *testing.T) { + type testCase struct { + TestData string + KustomizeSource v1alpha1.ApplicationSourceKustomize + ExpectedAnnotations map[string]string + ExpectErr bool + } + testCases := []testCase{ + { + TestData: kustomization3, + KustomizeSource: v1alpha1.ApplicationSourceKustomize{ + ForceCommonAnnotations: true, + CommonAnnotations: map[string]string{ + "one": "edited", + }, + }, + ExpectedAnnotations: map[string]string{ + "baz": "quux", + "one": "edited", + }, + }, + { + TestData: kustomization3, + KustomizeSource: v1alpha1.ApplicationSourceKustomize{ + ForceCommonAnnotations: false, + CommonAnnotations: map[string]string{ + "one": "edited", + }, + }, + ExpectErr: true, + }, + } + for _, tc := range testCases { + appPath, err := testDataDir(tc.TestData) + assert.Nil(t, err) + kustomize := NewKustomizeApp(appPath, git.NopCreds{}, "", "") + objs, _, err := kustomize.Build(&tc.KustomizeSource, nil) + switch tc.ExpectErr { + case true: + assert.Error(t, err) + default: + assert.Nil(t, err) + if assert.Equal(t, len(objs), 1) { + assert.Equal(t, tc.ExpectedAnnotations, objs[0].GetAnnotations()) + } + } + } +} diff --git a/util/kustomize/testdata/force_common/deployment.yaml b/util/kustomize/testdata/force_common/deployment.yaml new file mode 100644 index 0000000000000..051ce6b0fd034 --- /dev/null +++ b/util/kustomize/testdata/force_common/deployment.yaml @@ -0,0 +1,23 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: nginx-deployment + annotations: + baz: quux + labels: + app: nginx +spec: + replicas: 3 + selector: + matchLabels: + app: nginx + template: + metadata: + labels: + app: nginx + spec: + containers: + - name: nginx + image: nginx:1.15.4 + ports: + - containerPort: 80 diff --git a/util/kustomize/testdata/force_common/kustomization.yaml b/util/kustomize/testdata/force_common/kustomization.yaml new file mode 100644 index 0000000000000..beedd4d9c1f4f --- /dev/null +++ b/util/kustomize/testdata/force_common/kustomization.yaml @@ -0,0 +1,6 @@ +resources: + - ./deployment.yaml +commonLabels: + foo: bar +commonAnnotations: + one: two diff --git a/util/log/logrus.go b/util/log/logrus.go index 966fa5fbebf9d..0619d58d8dfae 100644 --- a/util/log/logrus.go +++ b/util/log/logrus.go @@ -2,10 +2,19 @@ package log import ( "fmt" + "os" + "strings" adapter "github.com/bombsimon/logrusr" "github.com/go-logr/logr" "github.com/sirupsen/logrus" + + "github.com/argoproj/argo-cd/v2/common" +) + +const ( + JsonFormat = "json" + TextFormat = "text" ) func NewLogrusLogger(fieldLogger logrus.FieldLogger) logr.Logger { @@ -13,3 +22,38 @@ func NewLogrusLogger(fieldLogger logrus.FieldLogger) logr.Logger { return fmt.Sprintf("%v", val) }) } + +// NewWithCurrentConfig create logrus logger by using current configuration +func NewWithCurrentConfig() *logrus.Logger { + l := logrus.New() + l.SetFormatter(CreateFormatter(os.Getenv(common.EnvLogFormat))) + l.SetLevel(createLogLevel()) + return l +} + +// CreateFormatter create logrus formatter by string +func CreateFormatter(logFormat string) logrus.Formatter { + var formatType logrus.Formatter + switch strings.ToLower(logFormat) { + case JsonFormat: + formatType = &logrus.JSONFormatter{} + case TextFormat: + if os.Getenv("FORCE_LOG_COLORS") == "1" { + formatType = &logrus.TextFormatter{ForceColors: true} + } else { + formatType = &logrus.TextFormatter{} + } + default: + formatType = &logrus.TextFormatter{} + } + + return formatType +} + +func createLogLevel() logrus.Level { + level, err := logrus.ParseLevel(os.Getenv(common.EnvLogLevel)) + if err != nil { + level = logrus.InfoLevel + } + return level +} diff --git a/util/log/logrus_test.go b/util/log/logrus_test.go new file mode 100644 index 0000000000000..109473fff3c30 --- /dev/null +++ b/util/log/logrus_test.go @@ -0,0 +1,32 @@ +package log + +import ( + "os" + "testing" + + "github.com/sirupsen/logrus" + "github.com/stretchr/testify/assert" +) + +func TestCreateFormatter(t *testing.T) { + t.Run("log format is json", func(t *testing.T) { + result := CreateFormatter("json") + assert.Equal(t, &logrus.JSONFormatter{}, result) + }) + t.Run("log format is text", func(t *testing.T) { + t.Run("FORCE_LOG_COLORS == 1", func(t *testing.T) { + os.Setenv("FORCE_LOG_COLORS", "1") + result := CreateFormatter("text") + assert.Equal(t, &logrus.TextFormatter{ForceColors: true}, result) + }) + t.Run("FORCE_LOG_COLORS != 1", func(t *testing.T) { + os.Setenv("FORCE_LOG_COLORS", "0") + result := CreateFormatter("text") + assert.Equal(t, &logrus.TextFormatter{}, result) + }) + }) + t.Run("log format is not json or text", func(t *testing.T) { + result := CreateFormatter("xml") + assert.Equal(t, &logrus.TextFormatter{}, result) + }) +} diff --git a/util/lua/lua.go b/util/lua/lua.go index 45e2ce9dbd760..7b51c9acee7ad 100644 --- a/util/lua/lua.go +++ b/util/lua/lua.go @@ -8,14 +8,14 @@ import ( "path/filepath" "time" - "github.com/argoproj/argo-cd/v2/resource_customizations" - "github.com/argoproj/gitops-engine/pkg/health" lua "github.com/yuin/gopher-lua" "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" + "k8s.io/apimachinery/pkg/runtime/schema" luajson "layeh.com/gopher-json" appv1 "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1" + "github.com/argoproj/argo-cd/v2/resource_customizations" ) const ( @@ -122,7 +122,7 @@ func (vm VM) ExecuteHealthLua(obj *unstructured.Unstructured, script string) (*h // GetHealthScript attempts to read lua script from config and then filesystem for that resource func (vm VM) GetHealthScript(obj *unstructured.Unstructured) (string, bool, error) { - key := getConfigMapKey(obj) + key := GetConfigMapKey(obj.GroupVersionKind()) if script, ok := vm.ResourceOverrides[key]; ok && script.HealthLua != "" { return script.HealthLua, script.UseOpenLibs, nil } @@ -281,7 +281,7 @@ func noAvailableActions(jsonBytes []byte) bool { } func (vm VM) GetResourceActionDiscovery(obj *unstructured.Unstructured) (string, error) { - key := getConfigMapKey(obj) + key := GetConfigMapKey(obj.GroupVersionKind()) override, ok := vm.ResourceOverrides[key] if ok && override.Actions != "" { actions, err := override.GetActions() @@ -300,7 +300,7 @@ func (vm VM) GetResourceActionDiscovery(obj *unstructured.Unstructured) (string, // GetResourceAction attempts to read lua script from config and then filesystem for that resource func (vm VM) GetResourceAction(obj *unstructured.Unstructured, actionName string) (appv1.ResourceActionDefinition, error) { - key := getConfigMapKey(obj) + key := GetConfigMapKey(obj.GroupVersionKind()) override, ok := vm.ResourceOverrides[key] if ok && override.Actions != "" { actions, err := override.GetActions() @@ -326,13 +326,11 @@ func (vm VM) GetResourceAction(obj *unstructured.Unstructured, actionName string }, nil } -func getConfigMapKey(obj *unstructured.Unstructured) string { - gvk := obj.GroupVersionKind() +func GetConfigMapKey(gvk schema.GroupVersionKind) string { if gvk.Group == "" { return gvk.Kind } return fmt.Sprintf("%s/%s", gvk.Group, gvk.Kind) - } func (vm VM) getPredefinedLuaScripts(objKey string, scriptFile string) (string, error) { diff --git a/util/settings/settings_test.go b/util/settings/settings_test.go index cfb9bf2e9f226..8471437f2bfb8 100644 --- a/util/settings/settings_test.go +++ b/util/settings/settings_test.go @@ -155,7 +155,9 @@ func TestGetResourceOverrides(t *testing.T) { admissionregistration.k8s.io/MutatingWebhookConfiguration: ignoreDifferences: | jsonPointers: - - /webhooks/0/clientConfig/caBundle`, + - /webhooks/0/clientConfig/caBundle + jqPathExpressions: + - .webhooks[0].clientConfig.caBundle`, }) overrides, err := settingsManager.GetResourceOverrides() assert.NoError(t, err) @@ -164,7 +166,10 @@ func TestGetResourceOverrides(t *testing.T) { assert.NotNil(t, webHookOverrides) assert.Equal(t, v1alpha1.ResourceOverride{ - IgnoreDifferences: v1alpha1.OverrideIgnoreDiff{JSONPointers: []string{"/webhooks/0/clientConfig/caBundle"}}, + IgnoreDifferences: v1alpha1.OverrideIgnoreDiff{ + JSONPointers: []string{"/webhooks/0/clientConfig/caBundle"}, + JQPathExpressions: []string{".webhooks[0].clientConfig.caBundle"}, + }, }, webHookOverrides) // by default, crd status should be ignored @@ -193,14 +198,19 @@ func TestGetResourceOverrides(t *testing.T) { apiextensions.k8s.io/CustomResourceDefinition: ignoreDifferences: | jsonPointers: - - /webhooks/0/clientConfig/caBundle`, + - /webhooks/0/clientConfig/caBundle + jqPathExpressions: + - .webhooks[0].clientConfig.caBundle`, }) overrides, err = settingsManager.GetResourceOverrides() assert.NoError(t, err) crdOverrides = overrides[crdGK] assert.NotNil(t, crdOverrides) - assert.Equal(t, v1alpha1.ResourceOverride{IgnoreDifferences: v1alpha1.OverrideIgnoreDiff{JSONPointers: []string{"/webhooks/0/clientConfig/caBundle", "/status"}}}, crdOverrides) + assert.Equal(t, v1alpha1.ResourceOverride{IgnoreDifferences: v1alpha1.OverrideIgnoreDiff{ + JSONPointers: []string{"/webhooks/0/clientConfig/caBundle", "/status"}, + JQPathExpressions: []string{".webhooks[0].clientConfig.caBundle"}, + }}, crdOverrides) // with incorrect value, status of crd objects should be ignored _, settingsManager = fixtures(map[string]string{ @@ -247,10 +257,10 @@ func TestGetResourceOverrides_with_splitted_keys(t *testing.T) { health.lua.useOpenLibs: true health.lua: | foo - cert-manager.io/Certificate: + cert-manager.io/Certificate: health.lua: | foo - apps/Deployment: + apps/Deployment: actions: | foo`, } @@ -289,6 +299,8 @@ func TestGetResourceOverrides_with_splitted_keys(t *testing.T) { "resource.customizations.health.iam-manager.k8s.io_Iamrole": "bar", "resource.customizations.health.Iamrole": "bar", "resource.customizations.ignoreDifferences.iam-manager.k8s.io_Iamrole": `jsonPointers: + - bar`, + "resource.customizations.ignoreDifferences.apps_Deployment": `jqPathExpressions: - bar`, } crdGK := "apiextensions.k8s.io/CustomResourceDefinition" @@ -314,6 +326,8 @@ func TestGetResourceOverrides_with_splitted_keys(t *testing.T) { assert.Equal(t, "bar", overrides["iam-manager.k8s.io/Iamrole"].HealthLua) assert.Equal(t, "bar", overrides["Iamrole"].HealthLua) assert.Equal(t, 1, len(overrides["iam-manager.k8s.io/Iamrole"].IgnoreDifferences.JSONPointers)) + assert.Equal(t, 1, len(overrides["apps/Deployment"].IgnoreDifferences.JQPathExpressions)) + assert.Equal(t, "bar", overrides["apps/Deployment"].IgnoreDifferences.JQPathExpressions[0]) }) t.Run("SplitKeysCompareOptionsAll", func(t *testing.T) { diff --git a/util/tls/tls.go b/util/tls/tls.go index f41bc4e74d2a3..153c3d182a811 100644 --- a/util/tls/tls.go +++ b/util/tls/tls.go @@ -21,6 +21,8 @@ import ( log "github.com/sirupsen/logrus" "github.com/spf13/cobra" + + "github.com/argoproj/argo-cd/v2/util/env" ) const ( @@ -172,9 +174,9 @@ func AddTLSFlagsToCmd(cmd *cobra.Command) func() (ConfigCustomizer, error) { minVersionStr := "" maxVersionStr := "" tlsCiphersStr := "" - cmd.Flags().StringVar(&minVersionStr, "tlsminversion", DefaultTLSMinVersion, "The minimum SSL/TLS version that is acceptable (one of: 1.0|1.1|1.2|1.3)") - cmd.Flags().StringVar(&maxVersionStr, "tlsmaxversion", DefaultTLSMaxVersion, "The maximum SSL/TLS version that is acceptable (one of: 1.0|1.1|1.2|1.3)") - cmd.Flags().StringVar(&tlsCiphersStr, "tlsciphers", DefaultTLSCipherSuite, "The list of acceptable ciphers to be used when establishing TLS connections. Use 'list' to list available ciphers.") + cmd.Flags().StringVar(&minVersionStr, "tlsminversion", env.StringFromEnv("ARGOCD_TLS_MIN_VERSION", DefaultTLSMinVersion), "The minimum SSL/TLS version that is acceptable (one of: 1.0|1.1|1.2|1.3)") + cmd.Flags().StringVar(&maxVersionStr, "tlsmaxversion", env.StringFromEnv("ARGOCD_TLS_MAX_VERSION", DefaultTLSMaxVersion), "The maximum SSL/TLS version that is acceptable (one of: 1.0|1.1|1.2|1.3)") + cmd.Flags().StringVar(&tlsCiphersStr, "tlsciphers", env.StringFromEnv("ARGOCD_TLS_CIPHERS", DefaultTLSCipherSuite), "The list of acceptable ciphers to be used when establishing TLS connections. Use 'list' to list available ciphers.") return func() (ConfigCustomizer, error) { return getTLSConfigCustomizer(minVersionStr, maxVersionStr, tlsCiphersStr) diff --git a/util/webhook/webhook.go b/util/webhook/webhook.go index 4d0406e645175..8ecafc7b0a5be 100644 --- a/util/webhook/webhook.go +++ b/util/webhook/webhook.go @@ -22,7 +22,9 @@ import ( "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1" appclientset "github.com/argoproj/argo-cd/v2/pkg/client/clientset/versioned" "github.com/argoproj/argo-cd/v2/reposerver/cache" + servercache "github.com/argoproj/argo-cd/v2/server/cache" "github.com/argoproj/argo-cd/v2/util/argo" + "github.com/argoproj/argo-cd/v2/util/db" "github.com/argoproj/argo-cd/v2/util/security" "github.com/argoproj/argo-cd/v2/util/settings" ) @@ -34,7 +36,9 @@ type settingsSource interface { var _ settingsSource = &settings.SettingsManager{} type ArgoCDWebhookHandler struct { - cache *cache.Cache + repoCache *cache.Cache + serverCache *servercache.Cache + db db.ArgoDB ns string appClientset appclientset.Interface github *github.Webhook @@ -45,7 +49,7 @@ type ArgoCDWebhookHandler struct { settingsSrc settingsSource } -func NewHandler(namespace string, appClientset appclientset.Interface, set *settings.ArgoCDSettings, settingsSrc settingsSource, cache *cache.Cache) *ArgoCDWebhookHandler { +func NewHandler(namespace string, appClientset appclientset.Interface, set *settings.ArgoCDSettings, settingsSrc settingsSource, repoCache *cache.Cache, serverCache *servercache.Cache, argoDB db.ArgoDB) *ArgoCDWebhookHandler { githubWebhook, err := github.New(github.Options.Secret(set.WebhookGitHubSecret)) if err != nil { log.Warnf("Unable to init the Github webhook") @@ -76,7 +80,9 @@ func NewHandler(namespace string, appClientset appclientset.Interface, set *sett bitbucketserver: bitbucketserverWebhook, gogs: gogsWebhook, settingsSrc: settingsSrc, - cache: cache, + repoCache: repoCache, + serverCache: serverCache, + db: argoDB, } return &acdWebhook @@ -237,11 +243,8 @@ func (a *ArgoCDWebhookHandler) HandleEvent(payload interface{}) { continue } } else if change.shaBefore != "" && change.shaAfter != "" { - var cachedManifests cache.CachedManifestResponse - if err := a.cache.GetManifests(change.shaBefore, &app.Spec.Source, app.Spec.Destination.Namespace, appInstanceLabelKey, app.Name, &cachedManifests); err == nil { - if err = a.cache.SetManifests(change.shaAfter, &app.Spec.Source, app.Spec.Destination.Namespace, appInstanceLabelKey, app.Name, &cachedManifests); err != nil { - log.Warnf("Failed to store cached manifests of previous revision for app '%s': %v", app.Name, err) - } + if err := a.storePreviouslyCachedManifests(&app, change, appInstanceLabelKey); err != nil { + log.Warnf("Failed to store cached manifests of previous revision for app '%s': %v", app.Name, err) } } } @@ -249,6 +252,27 @@ func (a *ArgoCDWebhookHandler) HandleEvent(payload interface{}) { } } +func (a *ArgoCDWebhookHandler) storePreviouslyCachedManifests(app *v1alpha1.Application, change changeInfo, appInstanceLabelKey string) error { + err := argo.ValidateDestination(context.Background(), &app.Spec.Destination, a.db) + if err != nil { + return err + } + + var clusterInfo v1alpha1.ClusterInfo + err = a.serverCache.GetClusterInfo(app.Spec.Destination.Server, &clusterInfo) + if err != nil { + return err + } + var cachedManifests cache.CachedManifestResponse + if err := a.repoCache.GetManifests(change.shaBefore, &app.Spec.Source, &clusterInfo, app.Spec.Destination.Namespace, appInstanceLabelKey, app.Name, &cachedManifests); err == nil { + return err + } + if err = a.repoCache.SetManifests(change.shaAfter, &app.Spec.Source, &clusterInfo, app.Spec.Destination.Namespace, appInstanceLabelKey, app.Name, &cachedManifests); err != nil { + return err + } + return nil +} + func getAppRefreshPaths(app *v1alpha1.Application) []string { var paths []string if val, ok := app.Annotations[v1alpha1.AnnotationKeyManifestGeneratePaths]; ok && val != "" { diff --git a/util/webhook/webhook_test.go b/util/webhook/webhook_test.go index c679e28d354bd..9e763187995b0 100644 --- a/util/webhook/webhook_test.go +++ b/util/webhook/webhook_test.go @@ -8,6 +8,12 @@ import ( "testing" "time" + "github.com/argoproj/argo-cd/v2/util/cache/appstate" + + "github.com/argoproj/argo-cd/v2/util/db/mocks" + + servercache "github.com/argoproj/argo-cd/v2/server/cache" + "github.com/sirupsen/logrus/hooks/test" "github.com/stretchr/testify/assert" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -28,11 +34,12 @@ func (f fakeSettingsSrc) GetAppInstanceLabelKey() (string, error) { func NewMockHandler() *ArgoCDWebhookHandler { appClientset := appclientset.NewSimpleClientset() + cacheClient := cacheutil.NewCache(cacheutil.NewInMemoryCache(1 * time.Hour)) return NewHandler("", appClientset, &settings.ArgoCDSettings{}, &fakeSettingsSrc{}, cache.NewCache( - cacheutil.NewCache(cacheutil.NewInMemoryCache(1*time.Hour)), + cacheClient, 1*time.Minute, 1*time.Minute, - )) + ), servercache.NewCache(appstate.NewCache(cacheClient, time.Minute), time.Minute, time.Minute, time.Minute), &mocks.ArgoDB{}) } func TestGitHubCommitEvent(t *testing.T) { From 7f8b28b5ce1d2458def014e187962dace34d68bf Mon Sep 17 00:00:00 2001 From: Kai Reichart Date: Mon, 14 Jun 2021 12:46:45 +0200 Subject: [PATCH 03/25] compiled Signed-off-by: Kai Reichart --- pkg/apis/application/v1alpha1/generated.pb.go | 1 - 1 file changed, 1 deletion(-) diff --git a/pkg/apis/application/v1alpha1/generated.pb.go b/pkg/apis/application/v1alpha1/generated.pb.go index d7895348dbd97..62a3ea4bccb17 100644 --- a/pkg/apis/application/v1alpha1/generated.pb.go +++ b/pkg/apis/application/v1alpha1/generated.pb.go @@ -18540,7 +18540,6 @@ func (m *HealthStatus) Unmarshal(dAtA []byte) error { return err } if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { From c3126d3ddbc271df038275ae39e55c05a4cd8310 Mon Sep 17 00:00:00 2001 From: Kai Reichart Date: Mon, 14 Jun 2021 13:07:26 +0200 Subject: [PATCH 04/25] updated yamls Signed-off-by: Kai Reichart --- go.sum | 263 ++++++++++++++++++ .../testdata/helm-external-values/app.yaml | 4 +- .../helm-external-values/chart/Chart.yaml | 2 +- .../chart/templates/configmap.yaml | 4 +- .../helm-external-values/chart/values.yaml | 2 +- .../chart/values_external.yaml | 2 +- .../chart/values_external_2.yaml | 2 +- 7 files changed, 272 insertions(+), 7 deletions(-) diff --git a/go.sum b/go.sum index 67acdc1620a03..ae8d36ec961e0 100644 --- a/go.sum +++ b/go.sum @@ -1,3 +1,4 @@ +bitbucket.org/bertimus9/systemstat v0.0.0-20180207000608-0eeff89b0690 h1:N9r8OBSXAgEUfho3SQtZLY8zo6E1OdOMvelvP22aVFc= bitbucket.org/bertimus9/systemstat v0.0.0-20180207000608-0eeff89b0690/go.mod h1:Ulb78X89vxKYgdL24HMTiXYHlyHEvruOj1ZPlqeNEZM= 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= @@ -14,18 +15,25 @@ cloud.google.com/go v0.54.0 h1:3ithwDMr7/3vpAMXiH+ZQnYbuIsh+OPhUPMFC9enmn0= cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc= 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 h1:xE3CPsOgttP4ACBePh79zTKALtXwn/Edhcr16R5hMWU= cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= +cloud.google.com/go/datastore v1.1.0 h1:/May9ojXjRkPBNVrq+oWLqmWCkr4OU5uRY29bu0mRyQ= cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= +cloud.google.com/go/firestore v1.1.0 h1:9x7Bx0A9R5/M9jibeJeZWqjeVEIxYW9fZYqB9a70/bY= cloud.google.com/go/firestore v1.1.0/go.mod h1:ulACoGHTpvq5r8rxGJ4ddJZBZqakUQqClKRT5SZwBmk= 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 h1:Lpy6hKgdcl7a3WGSfJIFmxmcdjSpP6OmBEfcOv1Y680= cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= 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 h1:UDpwYIwla4jHGzZJaEJYx1tOejbgSoNqsAfHAUYe2r8= cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= +dmitri.shuralyov.com/gpu/mtl v0.0.0-20201218220906-28db891af037 h1:+PdD6GLKejR9DizMAKT5DpSAkKswvZrurk1/eEt9+pw= dmitri.shuralyov.com/gpu/mtl v0.0.0-20201218220906-28db891af037/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= +github.com/Azure/azure-sdk-for-go v43.0.0+incompatible h1:/wSNCu0e6EsHFR4Qa3vBEBbicaprEHMyyga9g8RTULI= github.com/Azure/azure-sdk-for-go v43.0.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78 h1:w+iIsaOQNcT7OZ575w+acHgRric5iCyQh+xv+KJ4HB8= github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8= @@ -39,15 +47,21 @@ github.com/Azure/go-autorest/autorest/date v0.3.0 h1:7gUk1U5M/CQbp9WoqinNzJar+8K github.com/Azure/go-autorest/autorest/date v0.3.0/go.mod h1:BI0uouVdmngYNUzGWeSYnokU+TrmwEsOqdt8Y6sso74= github.com/Azure/go-autorest/autorest/mocks v0.4.1 h1:K0laFcLE6VLTOwNgSxaGbUcLPuGXlNkbVvq4cW4nIHk= github.com/Azure/go-autorest/autorest/mocks v0.4.1/go.mod h1:LTp+uSrOhSkaKrUy935gNZuuIPPVsHlr9DSOxSayd+k= +github.com/Azure/go-autorest/autorest/to v0.2.0 h1:nQOZzFCudTh+TvquAtCRjM01VEYx85e9qbwt5ncW4L8= github.com/Azure/go-autorest/autorest/to v0.2.0/go.mod h1:GunWKJp1AEqgMaGLV+iocmRAJWqST1wQYhyyjXJ3SJc= +github.com/Azure/go-autorest/autorest/validation v0.1.0 h1:ISSNzGUh+ZSzizJWOWzs8bwpXIePbGLW4z/AmUFGH5A= github.com/Azure/go-autorest/autorest/validation v0.1.0/go.mod h1:Ha3z/SqBeaalWQvokg3NZAlQTalVMtOIAs1aGK7G6u8= github.com/Azure/go-autorest/logger v0.2.0 h1:e4RVHVZKC5p6UANLJHkM4OfR1UKZPj8Wt8Pcx+3oqrE= github.com/Azure/go-autorest/logger v0.2.0/go.mod h1:T9E3cAhj2VqvPOtCYAvby9aBXkZmbF5NWuPV8+WeEW8= github.com/Azure/go-autorest/tracing v0.6.0 h1:TYi4+3m5t6K48TGI9AUdb+IzbnSxvnvUMfuitfgcfuo= github.com/Azure/go-autorest/tracing v0.6.0/go.mod h1:+vhtPC754Xsa23ID7GlGsrdKBpUA79WCAKPPZVC2DeU= +github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802 h1:1BDTz0u9nC3//pOCMdNH+CiXJVYJh5UQNCOBG7jbELc= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= +github.com/GoogleCloudPlatform/k8s-cloud-provider v0.0.0-20200415212048-7901bc822317 h1:JhyuWIqYrstW7KHMjk/fTqU0xtMpBOHuiTA2FVc7L4E= github.com/GoogleCloudPlatform/k8s-cloud-provider v0.0.0-20200415212048-7901bc822317/go.mod h1:DF8FZRxMHMGv/vP2lQP6h+dYzzjpuRn24VeRiYn3qjQ= +github.com/JeffAshton/win_pdh v0.0.0-20161109143554-76bb4ee9f0ab h1:UKkYhof1njT1/xq4SEg5z+VpTgjmNeHwPGRQl7takDI= github.com/JeffAshton/win_pdh v0.0.0-20161109143554-76bb4ee9f0ab/go.mod h1:3VYc5hodBMJ5+l/7J4xAyMeuM2PNuepvHlGs8yilUCA= github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible h1:1G1pk05UrOh0NlF1oeaaix1x8XzrfjIDK47TY0Zehcw= github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= @@ -56,10 +70,14 @@ github.com/MakeNowJust/heredoc v0.0.0-20170808103936-bb23615498cd/go.mod h1:64YH github.com/Masterminds/semver v1.5.0 h1:H65muMkzWKEuNDnfl9d70GUjFniHKHRbFPGBuZ3QEww= github.com/Masterminds/semver v1.5.0/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y= github.com/Microsoft/go-winio v0.4.15-0.20190919025122-fc70bd9a86b5/go.mod h1:tTuCMEN+UleMWgg9dVx4Hu52b1bJo+59jBh3ajtinzw= +github.com/Microsoft/go-winio v0.4.15 h1:qkLXKzb1QoVatRyd/YlXZ/Kg0m5K3SPuoD82jjSOaBc= github.com/Microsoft/go-winio v0.4.15/go.mod h1:tTuCMEN+UleMWgg9dVx4Hu52b1bJo+59jBh3ajtinzw= +github.com/Microsoft/hcsshim v0.8.10-0.20200715222032-5eafd1556990 h1:1xpVY4dSUSbW3PcSGxZJhI8Z+CJiqbd933kM7HIinTc= github.com/Microsoft/hcsshim v0.8.10-0.20200715222032-5eafd1556990/go.mod h1:ay/0dTb7NsG8QMDfsRfLHgZo/6xAJShLe1+ePPflihk= github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ= +github.com/NYTimes/gziphandler v1.1.1 h1:ZUDjpQae29j0ryrS0u/B8HZfJBtBQHjqw2rQ2cqUQ3I= github.com/NYTimes/gziphandler v1.1.1/go.mod h1:n/CVRwUEOgIxrgPvAQhUUr9oeUtvrhMomdKFjzJNB0c= +github.com/OneOfOne/xxhash v1.2.2 h1:KMrpdQIwFcEqXDklaen+P1axHaj9BSKzvpUUfnHldSE= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/PuerkitoBio/purell v1.1.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= github.com/PuerkitoBio/purell v1.1.1 h1:WEQqlqaGbrPkxLJWfBwQmfEAE1Z7ONdDLqrN38tNFfI= @@ -68,13 +86,17 @@ github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 h1:d+Bc7a5rLufV github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= github.com/TomOnTime/utfutil v0.0.0-20180511104225-09c41003ee1d h1:WtAMR0fPCOfK7TPGZ8ZpLLY18HRvL7XJ3xcs0wnREgo= github.com/TomOnTime/utfutil v0.0.0-20180511104225-09c41003ee1d/go.mod h1:WML6KOYjeU8N6YyusMjj2qRvaPNUEvrQvaxuFcMRFJY= +github.com/agnivade/levenshtein v1.0.1 h1:3oJU7J3FGFmyhn8KHjmVaZCN5hxTr7GxgRue+sxIXdQ= github.com/agnivade/levenshtein v1.0.1/go.mod h1:CURSv5d9Uaml+FovSIICkLbAUZ9S4RqaHDIsdSBg7lM= +github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af h1:wVe6/Ea46ZMeNkQjjBW6xcqyQA/j5e0D6GytH95g0gQ= github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af/go.mod h1:K08gAheRH3/J6wwsYMMT4xOr94bZjxIelGM0+d/wbFw= github.com/alcortesm/tgz v0.0.0-20161220082320-9c5fe88206d7 h1:uSoVVbwJiQipAclBbw+8quDsfcvFjOpI5iCf4p/cqCs= github.com/alcortesm/tgz v0.0.0-20161220082320-9c5fe88206d7/go.mod h1:6zEj6s6u/ghQa61ZWa/C2Aw3RkjiTBOix7dkqa1VLIs= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= +github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751 h1:JYp7IbQjafoB+tBA3gMyHYHrpOtNuDiK/uB5uXxq5wM= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= +github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4 h1:Hs82Z41s6SdL1CELW+XaDYmOH4hkBN4/N9og/AsOv7E= github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/alicebob/gopher-json v0.0.0-20200520072559-a9ecdc9d1d3a h1:HbKu58rmZpUGpz5+4FfNmIU+FmZg2P3Xaj2v2bfNWmk= github.com/alicebob/gopher-json v0.0.0-20200520072559-a9ecdc9d1d3a/go.mod h1:SGnFV6hVsYE877CKEZ6tDNTjaSXYUk6QqoIK6PrAtcc= @@ -82,44 +104,58 @@ github.com/alicebob/miniredis v2.5.0+incompatible h1:yBHoLpsyjupjz3NL3MhKMVkR41j github.com/alicebob/miniredis v2.5.0+incompatible/go.mod h1:8HZjEj4yU0dwhYHky+DxYx+6BMjkBbe5ONFIF1MXffk= github.com/alicebob/miniredis/v2 v2.14.2 h1:VeoqKUAsJfT2af61nDE7qhBzqn3J6xjnt9MFAbdrEtg= github.com/alicebob/miniredis/v2 v2.14.2/go.mod h1:gquAfGbzn92jvtrSC69+6zZnwSODVXVpYDRaGhWaL6I= +github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883 h1:bvNMNQO63//z+xNgfBlViaCIJKLlCJ6/fmUseuG0wVQ= github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8= github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239 h1:kFOfPq6dUM1hTo4JG6LR5AXSUEsOjtdm0kw0FtQtMJA= 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/argoproj/gitops-engine v0.3.1-0.20210610000233-6884d330a049 h1:Swa2K+be8ZB1YeyCe5s2kR/b+gyawo5jcPRMwT3L5zY= github.com/argoproj/gitops-engine v0.3.1-0.20210610000233-6884d330a049/go.mod h1:EdFe8qIOqsmbyxRhtIydU4BUeyZ4VTsY6R3XVQhU9LA= github.com/argoproj/pkg v0.9.1-0.20210512035321-be5ba22dca5b h1:qtlM7ioAFP40LPN7A5ZqquVmAtv08LLSZTcCNYUQx8s= github.com/argoproj/pkg v0.9.1-0.20210512035321-be5ba22dca5b/go.mod h1:ra+bQPmbVAoEL+gYSKesuigt4m49i3Qa3mE/xQcjCiA= +github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e h1:QEF07wC0T1rKkctt1RINW/+RMTVmiwxETico2l3gxJA= github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= +github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6 h1:G1bPvciwNyF7IUmKXNt9Ak3m6u9DE1rF+RmtIkBpVdA= github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= +github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da h1:8GUt8eRujhVEGZFFEjBj46YV4rDjvGrNxb0KMWYkL2I= github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= +github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310 h1:BUAU3CGlLvorLI26FmByPp2eC2qla6E1Tw+scpcg/to= github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio= github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= github.com/asaskevich/govalidator v0.0.0-20180720115003-f9ffefc3facf/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a h1:idn718Q4B6AGu/h5Sxe66HYVdqdGu2l9Iebqhi/AEoA= github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= +github.com/auth0/go-jwt-middleware v0.0.0-20170425171159-5493cabe49f7 h1:irR1cO6eek3n5uquIVaRAsQmZnlsfPuHNz31cXo4eyk= github.com/auth0/go-jwt-middleware v0.0.0-20170425171159-5493cabe49f7/go.mod h1:LWMyo4iOLWXHGdBki7NIht1kHru/0wM179h+d3g8ATM= github.com/aws/aws-sdk-go v1.33.16/go.mod h1:5zCpMtNQVjRREroY7sYe8lOMRSxkhG6MZveU8YkpAk0= +github.com/aws/aws-sdk-go v1.35.24 h1:U3GNTg8+7xSM6OAJ8zksiSM4bRqxBWmVwwehvOSNG3A= github.com/aws/aws-sdk-go v1.35.24/go.mod h1:tlPOdRjfxPBpNIwqDj61rmsnA85v9jc0Ps9+muhnW+k= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= +github.com/bgentry/speakeasy v0.1.0 h1:ByYyxL9InA1OWqxJqqp2A5pYHUrCiAL6K3J+LKSsQkY= github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= +github.com/bifurcation/mint v0.0.0-20180715133206-93c51c6ce115 h1:fUjoj2bT6dG8LoEe+uNsKk8J+sLkDbQkJnB6Z1F02Bc= github.com/bifurcation/mint v0.0.0-20180715133206-93c51c6ce115/go.mod h1:zVt7zX3K/aDCk9Tj+VM7YymsX66ERvzCJzw8rFCX2JU= +github.com/bketelsen/crypt v0.0.3-0.20200106085610-5cbc8cc4026c h1:+0HFd5KSZ/mm3JmhmrDukiId5iR6w4+BdFtfSy4yWIc= github.com/bketelsen/crypt v0.0.3-0.20200106085610-5cbc8cc4026c/go.mod h1:MKsuJmJgSg28kpZDP6UIiPt0e0Oz0kqKNGyRaWEPv84= github.com/blang/semver v3.5.0+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= github.com/blang/semver v3.5.1+incompatible h1:cQNTCjp13qL8KC3Nbxr/y2Bqb63oX6wdnnjpJbkM4JQ= github.com/blang/semver v3.5.1+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= +github.com/boltdb/bolt v1.3.1 h1:JQmyP4ZBrce+ZQu0dY660FMfatumYDLun9hBCUVIkF4= github.com/boltdb/bolt v1.3.1/go.mod h1:clJnj/oiGkjum5o1McbSZDSLxVThjynRyGBgiAx27Ps= github.com/bombsimon/logrusr v1.0.0 h1:CTCkURYAt5nhCCnKH9eLShYayj2/8Kn/4Qg3QfiU+Ro= github.com/bombsimon/logrusr v1.0.0/go.mod h1:Jq0nHtvxabKE5EMwAAdgTaz7dfWE8C4i11NOltxGQpc= github.com/bradleyfalzon/ghinstallation v1.1.1 h1:pmBXkxgM1WeF8QYvDLT5kuQiHMcmf+X015GI0KM/E3I= github.com/bradleyfalzon/ghinstallation v1.1.1/go.mod h1:vyCmHTciHx/uuyN82Zc3rXN3X2KTK8nUTCrTMwAhcug= +github.com/caddyserver/caddy v1.0.3 h1:i9gRhBgvc5ifchwWtSe7pDpsdS9+Q0Rw9oYQmYUTw1w= github.com/caddyserver/caddy v1.0.3/go.mod h1:G+ouvOY32gENkJC+jhgl62TyhvqEsFaDiZ4uw0RzP1E= github.com/casbin/casbin v1.9.1 h1:ucjbS5zTrmSLtH4XogqOG920Poe6QatdXtz1FEbApeM= github.com/casbin/casbin v1.9.1/go.mod h1:z8uPsfBJGUsnkagrt3G8QvjgTKFMBJ32UP8HpZllfog= +github.com/cenkalti/backoff v2.1.1+incompatible h1:tKJnvO2kl0zmb/jA5UKAt4VoEVw1qxKWjE/Bpp46npY= github.com/cenkalti/backoff v2.1.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= @@ -128,43 +164,69 @@ github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XL github.com/chai2010/gettext-go v0.0.0-20160711120539-c6fed771bfd5/go.mod h1:/iP1qXHoty45bqomnu2LM+VVyAEdWN+vtSHGlQgyxbw= github.com/chai2010/gettext-go v0.0.0-20170215093142-bf70f2a70fb1 h1:HD4PLRzjuCVW79mQ0/pdsalOLHJ+FaEoqJLxfltpb2U= github.com/chai2010/gettext-go v0.0.0-20170215093142-bf70f2a70fb1/go.mod h1:/iP1qXHoty45bqomnu2LM+VVyAEdWN+vtSHGlQgyxbw= +github.com/checkpoint-restore/go-criu/v4 v4.1.0 h1:WW2B2uxx9KWF6bGlHqhm8Okiafwwx7Y2kcpn8lCpjgo= github.com/checkpoint-restore/go-criu/v4 v4.1.0/go.mod h1:xUQBLp4RLc5zJtWY++yjOoMoB5lihDt7fai+75m+rGw= +github.com/cheekybits/genny v0.0.0-20170328200008-9127e812e1e9 h1:a1zrFsLFac2xoM6zG1u72DWJwZG3ayttYLfmLbxVETk= github.com/cheekybits/genny v0.0.0-20170328200008-9127e812e1e9/go.mod h1:+tQajlRqAUrPI7DOSpB0XAqZYtQakVtB7wXkRAgjxjQ= +github.com/chzyer/logex v1.1.10 h1:Swpa1K6QvQznwJRcfTfQJmTE72DqScAa40E+fbHEXEE= github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= +github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e h1:fY5BOSpyZCqRo5OhCuC+XN+r/bBCmeuuJtjz+bCNIf8= github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= +github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1 h1:q763qf9huN11kDQavWsoZXJNW3xEE4JJyHa5Q25/sd8= github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= github.com/cilium/ebpf v0.0.0-20200110133405-4032b1d8aae3/go.mod h1:MA5e5Lr8slmEg9bt0VpxxWqJlO4iwu3FBdHUzV7wQVg= +github.com/cilium/ebpf v0.2.0 h1:Fv93L3KKckEcEHR3oApXVzyBTDA8WAm6VXhPE00N3f8= github.com/cilium/ebpf v0.2.0/go.mod h1:To2CFviqOWL/M0gIMsvSMlqe7em/l1ALkX1PyjrX2Qs= +github.com/client9/misspell v0.3.4 h1:ta993UF76GwbvJcIo3Y68y/M3WxlpEHPWIGDkJYwzJI= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/clusterhq/flocker-go v0.0.0-20160920122132-2b8b7259d313 h1:eIHD9GNM3Hp7kcRW5mvcz7WTR3ETeoYYKwpgA04kaXE= github.com/clusterhq/flocker-go v0.0.0-20160920122132-2b8b7259d313/go.mod h1:P1wt9Z3DP8O6W3rvwCt0REIlshg1InHImaLW0t3ObY0= +github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa h1:OaNxuTZr7kxeODyLWsRMC+OD03aFUH+mW6r2d+MWa5Y= github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= +github.com/container-storage-interface/spec v1.3.0 h1:wMH4UIoWnK/TXYw8mbcIHgZmB6kHOeIsYsiaTJwa6bc= github.com/container-storage-interface/spec v1.3.0/go.mod h1:6URME8mwIBbpVyZV93Ce5St17xBiQJQY67NDsuohiy4= +github.com/containerd/cgroups v0.0.0-20200531161412-0dbf7f05ba59 h1:qWj4qVYZ95vLWwqyNJCQg7rDsG5wPdze0UaPolH7DUk= github.com/containerd/cgroups v0.0.0-20200531161412-0dbf7f05ba59/go.mod h1:pA0z1pT8KYB3TCXK/ocprsh7MAkoW8bZVzPdih9snmM= github.com/containerd/console v0.0.0-20180822173158-c12b1e7919c1/go.mod h1:Tj/on1eG8kiEhd0+fhSDzsPAFESxzBBvdyEgyryXffw= +github.com/containerd/console v1.0.1 h1:u7SFAJyRqWcG6ogaMAx3KjSTy1e3hT9QxqX7Jco7dRc= github.com/containerd/console v1.0.1/go.mod h1:XUsP6YE/mKtz6bxc+I8UiKKTP04qjQL4qcS3XoQ5xkw= github.com/containerd/containerd v1.3.2/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= +github.com/containerd/containerd v1.4.4 h1:rtRG4N6Ct7GNssATwgpvMGfnjnwfjnu/Zs9W3Ikzq+M= github.com/containerd/containerd v1.4.4/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= +github.com/containerd/continuity v0.0.0-20190426062206-aaeac12a7ffc h1:TP+534wVlf61smEIq1nwLLAjQVEK2EADoW3CX9AuT+8= github.com/containerd/continuity v0.0.0-20190426062206-aaeac12a7ffc/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y= +github.com/containerd/fifo v0.0.0-20190226154929-a9fb20d87448 h1:PUD50EuOMkXVcpBIA/R95d56duJR9VxhwncsFbNnxW4= github.com/containerd/fifo v0.0.0-20190226154929-a9fb20d87448/go.mod h1:ODA38xgv3Kuk8dQz2ZQXpnv/UZZUHUCL7pnLehbXgQI= +github.com/containerd/go-runc v0.0.0-20180907222934-5a6d9f37cfa3 h1:esQOJREg8nw8aXj6uCN5dfW5cKUBiEJ/+nni1Q/D/sw= github.com/containerd/go-runc v0.0.0-20180907222934-5a6d9f37cfa3/go.mod h1:IV7qH3hrUgRmyYrtgEeGWJfWbgcHL9CSRruz2Vqcph0= github.com/containerd/ttrpc v0.0.0-20190828154514-0e0f228740de/go.mod h1:PvCDdDGpgqzQIzDW1TphrGLssLDZp2GuS+X5DkEJB8o= +github.com/containerd/ttrpc v1.0.2 h1:2/O3oTZN36q2xRolk0a2WWGgh7/Vf/liElg5hFYLX9U= github.com/containerd/ttrpc v1.0.2/go.mod h1:UAxOpgT9ziI0gJrmKvgcZivgxOp8iFPSk8httJEt98Y= github.com/containerd/typeurl v0.0.0-20180627222232-a93fcdb778cd/go.mod h1:Cm3kwCdlkCfMSHURc+r6fwoGH6/F1hH3S4sg0rLFWPc= +github.com/containerd/typeurl v1.0.1 h1:PvuK4E3D5S5q6IqsPDCy928FhP0LUIGcmZ/Yhgp5Djw= github.com/containerd/typeurl v1.0.1/go.mod h1:TB1hUtrpaiO88KEK56ijojHS1+NeF0izUACaJW2mdXg= +github.com/containernetworking/cni v0.8.0 h1:BT9lpgGoH4jw3lFC7Odz2prU5ruiYKcgAjMCbgybcKI= github.com/containernetworking/cni v0.8.0/go.mod h1:LGwApLUm2FpoOfxTDEeq8T9ipbpZ61X79hmU3w8FmsY= +github.com/coredns/corefile-migration v1.0.11 h1:ptBYGW2ADXIB7ZEBPrhhTvNwJLQfxE3Q9IUMBhJCEeI= github.com/coredns/corefile-migration v1.0.11/go.mod h1:RMy/mXdeDlYwzt0vdMEJvT2hGJ2I86/eO0UdXmH9XNI= +github.com/coreos/bbolt v1.3.2 h1:wZwiHHUieZCquLkDL0B8UhzreNWsPHooDAG3q34zk0s= github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= +github.com/coreos/etcd v3.3.13+incompatible h1:8F3hqu9fGYLBifCmRCJsicFqDx/D68Rt3q1JMazcgBQ= github.com/coreos/etcd v3.3.13+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= github.com/coreos/go-oidc v2.1.0+incompatible h1:sdJrfw8akMnCuUlaZU3tE/uYXFgfqom8DBE9so9EBsM= github.com/coreos/go-oidc v2.1.0+incompatible/go.mod h1:CgnwVTmzoESiwO9qyAFEMiHoZ1nMCKZlZ9V6mm3/LKc= github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= +github.com/coreos/go-semver v0.3.0 h1:wkHLiw0WNATZnSG7epLsujiMCgPAc9xhjJ4tgnAxmfM= github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= +github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e h1:Wf6HqHfScWJN9/ZjdUKyjop4mf3Qdd+1TvvltAvM3m8= github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= github.com/coreos/go-systemd/v22 v22.0.0/go.mod h1:xO0FLkIi5MaZafQlIrOotqXZ90ih+1atmu1JpKERPPk= +github.com/coreos/go-systemd/v22 v22.1.0 h1:kq/SbG2BCKLkDKkjQf5OWwKWUKj1lgs3lFI4PxnR5lg= github.com/coreos/go-systemd/v22 v22.1.0/go.mod h1:xO0FLkIi5MaZafQlIrOotqXZ90ih+1atmu1JpKERPPk= github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= +github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f h1:lBNOc5arjvs8E5mO2tbpBpLoyyu8B6e44T7hJy6potg= github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/cpuguy83/go-md2man/v2 v2.0.0 h1:EoUDS0afbrsXAZ9YQ9jdu/mZ2sXgT1/2yyNng4PGlyM= @@ -173,10 +235,12 @@ github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7Do github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/creack/pty v1.1.11 h1:07n33Z8lZxZ2qwegKbObQohDhXDQxiMMz1NOUGYlesw= github.com/creack/pty v1.1.11/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= +github.com/cyphar/filepath-securejoin v0.2.2 h1:jCwT2GTP+PY5nBz3c/YL5PAIbusElVrPujOBSCj8xRg= github.com/cyphar/filepath-securejoin v0.2.2/go.mod h1:FpkQEhXnPnOthhzymB7CGsFk2G9VLXONKD9G7QGMM+4= 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/daviddengcn/go-colortext v0.0.0-20160507010035-511bcaf42ccd h1:uVsMphB1eRx7xB1njzL3fuMdWRN8HtVzoUOItHMwv5c= github.com/daviddengcn/go-colortext v0.0.0-20160507010035-511bcaf42ccd/go.mod h1:dv4zxwHi5C/8AeI+4gX4dCWOIvNi7I6JCSX0HvlKPgE= github.com/dgrijalva/jwt-go v3.2.0+incompatible h1:7qlOGliEKZXTDg6OTjfoBKDXWrumCAMpl/TFQ4/5kLM= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= @@ -184,15 +248,21 @@ github.com/dgrijalva/jwt-go/v4 v4.0.0-preview1 h1:CaO/zOnF8VvUfEbhRatPcwKVWamvbY github.com/dgrijalva/jwt-go/v4 v4.0.0-preview1/go.mod h1:+hnT3ywWDTAFrW5aE+u2Sa/wT555ZqwoCS+pk3p6ry4= github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/rVNCu3HqELle0jiPLLBs70cWOduZpkS1E78= github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc= +github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954 h1:RMLoZVzv4GliuWafOuPuQDKSm1SJph7uCRnnS61JAn4= github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= +github.com/dnaeon/go-vcr v1.0.1 h1:r8L/HqC0Hje5AXMu1ooW8oyQyOFv4GxqpL0nRP7SLLY= github.com/dnaeon/go-vcr v1.0.1/go.mod h1:aBB1+wY4s93YsC3HHjMBMrwTj2R9FHDzUr9KyGc8n1E= github.com/docker/distribution v2.7.1-0.20190205005809-0d3efadf0154+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= github.com/docker/distribution v2.7.1+incompatible h1:a5mlkVzth6W5A4fOsS3D2EO5BUmsJpcB+cRlLU7cSug= github.com/docker/distribution v2.7.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= +github.com/docker/docker v20.10.2+incompatible h1:vFgEHPqWBTp4pTjdLwjAA4bSo3gvIGOYwuJTlEjVBCw= github.com/docker/docker v20.10.2+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/go-connections v0.4.0 h1:El9xVISelRB7BuFusrZozjnkIM5YnzCViNKohAFqRJQ= github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec= github.com/docker/go-units v0.3.3/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= +github.com/docker/go-units v0.4.0 h1:3uh0PgVws3nIA0Q+MwDC8yjEPf9zjRfZZWXZYDct3Tw= github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= +github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815 h1:bWDMxwH3px2JBh6AyO7hdCn/PkvCZXii8TGj7sbtEbQ= github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE= github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4zYo= @@ -204,6 +274,7 @@ github.com/emicklei/go-restful v2.9.5+incompatible h1:spTtZBk5DYEvbxMVutUuTyh1Ao github.com/emicklei/go-restful v2.9.5+incompatible/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= github.com/emirpasic/gods v1.12.0 h1:QAUIPSaCu4G+POclxeqb3F+WPpdKqFGlw36+yOzGlrg= github.com/emirpasic/gods v1.12.0/go.mod h1:YfzfFFoVP/catgzJb4IKIqXjX78Ha8FMSDh3ymbK86o= +github.com/euank/go-kmsg-parser v2.0.0+incompatible h1:cHD53+PLQuuQyLZeriD1V/esuG4MuU0Pjs5y6iknohY= github.com/euank/go-kmsg-parser v2.0.0+incompatible/go.mod h1:MhmAMZ8V4CYH4ybgdRwPr2TU5ThnS43puaKEMpja1uw= github.com/evanphx/json-patch v4.5.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= github.com/evanphx/json-patch v4.9.0+incompatible h1:kLcOMZeuLAJvL2BPWLMIj5oaZQobrkAqrL+WFZwQses= @@ -213,24 +284,31 @@ github.com/exponent-io/jsonpath v0.0.0-20151013193312-d6023ce2651d/go.mod h1:ZZM github.com/fatih/camelcase v1.0.0 h1:hxNvNX/xYBp0ovncs8WyWZrOrpBNub/JfaMvbURyft8= github.com/fatih/camelcase v1.0.0/go.mod h1:yN2Sb0lFhZJUdVvtELVWefmrXpuZESvPmqwoZc+/fpc= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= +github.com/fatih/color v1.9.0 h1:8xPHl4/q1VyqGIPif1F+1V3Y3lSmrq01EabUW3CoW5s= github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU= github.com/felixge/httpsnoop v1.0.1 h1:lvB5Jl89CsZtGIWuTcDM1E/vkVs49/Ml7JJe07l8SPQ= github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= +github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568 h1:BHsljHzVlRcyQhjrss6TZTdY2VfCqZPbv5k3iBFa2ZQ= github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= +github.com/fogleman/gg v1.2.1-0.20190220221249-0403632d5b90 h1:WXb3TSNmHp2vHoCroCIB1foO/yQ36swABL8aOVeDpgg= github.com/fogleman/gg v1.2.1-0.20190220221249-0403632d5b90/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= github.com/form3tech-oss/jwt-go v3.2.2+incompatible h1:TcekIExNqud5crz4xD2pavyTgWiPvpYe4Xau31I0PRk= github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= +github.com/fvbommel/sortorder v1.0.1 h1:dSnXLt4mJYH25uDDGa3biZNQsozaUWDSWeKJ0qqFfzE= github.com/fvbommel/sortorder v1.0.1/go.mod h1:uk88iVf1ovNn1iLfgUVU2F9o5eO30ui720w+kxuqRs0= github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/gliderlabs/ssh v0.2.2 h1:6zsha5zo/TWhRhwqCD3+EarCAgZ2yN28ipRnGPnwkI0= github.com/gliderlabs/ssh v0.2.2/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0= github.com/globalsign/mgo v0.0.0-20180905125535-1ca0a4f7cbcb/go.mod h1:xkRDCp4j0OGD1HRkm4kmhM+pmpv3AKq5SU7GMg4oO/Q= +github.com/globalsign/mgo v0.0.0-20181015135952-eeefdecb41b8 h1:DujepqpGd1hyOd7aW59XpK7Qymp8iy83xq74fLr21is= github.com/globalsign/mgo v0.0.0-20181015135952-eeefdecb41b8/go.mod h1:xkRDCp4j0OGD1HRkm4kmhM+pmpv3AKq5SU7GMg4oO/Q= +github.com/go-acme/lego v2.5.0+incompatible h1:5fNN9yRQfv8ymH3DSsxla+4aYeQt2IgfZqHKVnK8f0s= github.com/go-acme/lego v2.5.0+incompatible/go.mod h1:yzMNe9CasVUhkquNvti5nAtPmG94USbYxYrZfTkIn0M= +github.com/go-bindata/go-bindata v3.1.1+incompatible h1:tR4f0e4VTO7LK6B2YWyAoVEzG9ByG1wrXB4TL9+jiYg= github.com/go-bindata/go-bindata v3.1.1+incompatible/go.mod h1:xK8Dsgwmeed+BBsSy2XTopBn/8uK2HWuGSnA11C3Joo= github.com/go-errors/errors v1.0.1 h1:LUHzmkK3GUKUrL/1gfBUxAHzcev3apQlezX/+O7ma6w= github.com/go-errors/errors v1.0.1/go.mod h1:f4zRHt4oKfwPJE5k8C9vpYG+aDHdBFUsgrm6/TyX73Q= @@ -242,12 +320,16 @@ github.com/go-git/go-git-fixtures/v4 v4.0.2-0.20200613231340-f56387b50c12 h1:PbK github.com/go-git/go-git-fixtures/v4 v4.0.2-0.20200613231340-f56387b50c12/go.mod h1:m+ICp2rF3jDhFgEZ/8yziagdT1C+ZpZcrJjappBCDSw= github.com/go-git/go-git/v5 v5.2.0 h1:YPBLG/3UK1we1ohRkncLjaXWLW+HKp5QNM/jTli2JgI= github.com/go-git/go-git/v5 v5.2.0/go.mod h1:kh02eMX+wdqqxgNMEyq8YgwlIOsDOa9homkUq1PoTMs= +github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1 h1:QbL/5oDUmRBzO9/Z7Seo6zf912W/a6Sr4Eu0G/3Jho0= 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 h1:WtGNWLvXpe6ZudgnXrq0barxBImvnnJoMEhXAzcbM0I= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= +github.com/go-kit/kit v0.9.0 h1:wDJmvq38kDhkVxi50ni9ykkdUr1PKgqKOoi01fa0Mdk= github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= +github.com/go-logfmt/logfmt v0.4.0 h1:MP4Eh7ZCb31lleYCFuwm0oe4/YGak+5l1vA2NOE80nA= github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas= github.com/go-logr/logr v0.2.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU= @@ -307,17 +389,21 @@ github.com/go-openapi/validate v0.18.0/go.mod h1:Uh4HdOzKt19xGIGm1qHf/ofbX1YQ4Y+ github.com/go-openapi/validate v0.19.2/go.mod h1:1tRCw7m3jtI8eNWEEliiAqUIcBztB2KDnRCRMUi7GTA= github.com/go-openapi/validate v0.19.8 h1:YFzsdWIDfVuLvIOF+ZmKjVg1MbPJ1QgY9PihMwei1ys= github.com/go-openapi/validate v0.19.8/go.mod h1:8DJv2CVJQ6kGNpFW6eV9N3JviE1C85nY1c2z52x1Gk4= +github.com/go-ozzo/ozzo-validation v3.5.0+incompatible h1:sUy/in/P6askYr16XJgTKq/0SZhiWsdg4WZGaLsGQkM= github.com/go-ozzo/ozzo-validation v3.5.0+incompatible/go.mod h1:gsEKFIVnabGBt6mXmxK0MoFy+cZoTJY6mu5Ll3LVLBU= github.com/go-redis/cache/v8 v8.2.1 h1:G4CtEQDT3JsiERPob1nUL/KTkiC317rAJvHx6GdWjiM= github.com/go-redis/cache/v8 v8.2.1/go.mod h1:8PFGBZrRqG2nToSHw76mSsozxgSKrn3vsZerq/NJtt8= github.com/go-redis/redis/v8 v8.3.2 h1:1bJscgN2yGtKLW6MsTRosa2LHyeq94j0hnNAgRZzj/M= github.com/go-redis/redis/v8 v8.3.2/go.mod h1:jszGxBCez8QA1HWSmQxJO9Y82kNibbUmeYhKWrBejTU= +github.com/go-sql-driver/mysql v1.5.0 h1:ozyZYNQW3x3HtqT1jira07DN2PArx2v7/mN66gGcHOs= github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= github.com/go-stack/stack v1.8.0 h1:5SgMzNM5HxrEjV0ww2lTmX6E2Izsfxas4+YHWRs3Lsk= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= +github.com/gobuffalo/here v0.6.0 h1:hYrd0a6gDmWxBM4TnrGw8mQg24iSVoIkHEk7FodQcBI= github.com/gobuffalo/here v0.6.0/go.mod h1:wAG085dHOYqUpf+Ap+WOdrPTp5IYcDAs/x7PLa8Y5fM= github.com/gobwas/glob v0.2.3 h1:A4xDbljILXROh+kObIiy5kIaPYD8e96x1tgBhUI5J+Y= github.com/gobwas/glob v0.2.3/go.mod h1:d3Ez4x06l9bZtSvzIay5+Yzi0fmZzPgnTbPcKjJAkT8= +github.com/godbus/dbus/v5 v5.0.3 h1:ZqHaoEF7TBzh4jzPmqVhE/5A1z9of6orkAe5uHoAeME= github.com/godbus/dbus/v5 v5.0.3/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/gogits/go-gogs-client v0.0.0-20190616193657-5a05380e4bc2 h1:BbwX8wsMRDZRdNYxAna+4ls3wvMKJyn4PT6Zk1CPxP4= github.com/gogits/go-gogs-client v0.0.0-20190616193657-5a05380e4bc2/go.mod h1:cY2AIrMgHm6oOHmR7jY+9TtjzSjQ3iG7tURJG3Y6XH0= @@ -326,6 +412,7 @@ github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zV github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= +github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 h1:DACJavvAHhabrF08vX0COfcOBJRhZ8lUbR+ZWIs0Y5g= github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= @@ -335,6 +422,7 @@ github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4er github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e h1:1r7pUrabqp18hOBcwBwiTsbnFeTZHV9eER/QT5JVZxY= github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/lint v0.0.0-20180702182130-06c8688daad7 h1:2hRPrmiwPrp3fQX967rNJIhQPtiGXdlQWAxKbKw3VHA= github.com/golang/lint v0.0.0-20180702182130-06c8688daad7/go.mod h1:tluoj9z5200jBnyusfRPU2LqT6J+DAorxEvtC7LHB+E= 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= @@ -346,12 +434,14 @@ github.com/golang/mock v1.5.0 h1:jlYHihg//f7RRwuPfptm04yp4s7O6Kw8EZiVYIGcH0g= github.com/golang/mock v1.5.0/go.mod h1:CWnOUgYIOo4TcNZ0wHX3YZCqsaM1I1Jvs6v3mP3KVu8= github.com/golang/protobuf v1.4.2 h1:+Z5KGCizgyZCbGh1KZqA0fcLLkwbsjIzS4aV2v7wJX0= github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golangplus/testing v0.0.0-20180327235837-af21d9c3145e h1:KhcknUwkWHKZPbFy2P7jH5LKJ3La+0ZeknkkmrSgqb0= github.com/golangplus/testing v0.0.0-20180327235837-af21d9c3145e/go.mod h1:0AA//k/eakGydO4jKRoRL2j92ZKSzTgj9tclaCrvXHk= github.com/gomodule/redigo v2.0.0+incompatible h1:K/R+8tc58AaqLkqG2Ol3Qk+DR/TlNuhuh457pBFPtt0= github.com/gomodule/redigo v2.0.0+incompatible/go.mod h1:B4C85qUVwatsJoIUNIfCRsp7qO0iAmpGFZ4EELWSbC4= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.0 h1:0udJVsspx3VBr5FwtLhQQtuAsVc79tTq0ocGIPAU6qo= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +github.com/google/cadvisor v0.39.0 h1:jai6dmBP9QAYluNGqU18yVUTw6uuyAW0AqtZIjvl8Qg= github.com/google/cadvisor v0.39.0/go.mod h1:rjQFmK4jPCpxeUdLq9bYhNFFsjgGOtpnDmDeap0+nsw= 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= @@ -370,12 +460,15 @@ github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/gofuzz v1.1.0 h1:Hsa8mG0dQ46ij8Sl2AYJDUv1oA9/d6Vk+3LG99Oe02g= github.com/google/gofuzz v1.1.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +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/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 h1:SRgJV+IoxM5MKyFdlSUeNy6/ycRUF2yBAKdAQswoHUk= github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/renameio v0.1.0 h1:GOZbcHa3HfsPKPlmyPyN2KEohoMXOhdMbHrvbpl2QaA= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 h1:El6M4kTTCOh6aBiKaUGG7oYTSPP8MxqL4YI3kZKwcP4= github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510/go.mod h1:pupxD2MaaD3pAXIBCelhxNneeOaAeabZDe5s4K6zSpQ= @@ -384,14 +477,18 @@ github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+ github.com/google/uuid v1.1.2 h1:EVhdT+1Kseyi1/pUmXKaFxYsDNy9RQYkMWRH68J/W7Y= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= +github.com/googleapis/gax-go/v2 v2.0.5 h1:sjZBwGj9Jlw33ImPtvFviGYvseOtDM7hkSKB7+Tv3SM= github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= github.com/googleapis/gnostic v0.4.1/go.mod h1:LRhVm6pbyptWbWbuZ38d1eyptfvIytN3ir6b65WBswg= github.com/googleapis/gnostic v0.5.1 h1:A8Yhf6EtqTv9RMsU6MQTyrtV1TjWlR6xU9BsZIwuTCM= github.com/googleapis/gnostic v0.5.1/go.mod h1:6U4PtQXGIEt/Z3h5MAT7FNofLnw9vXk2cUuW7uA/OeU= +github.com/gophercloud/gophercloud v0.1.0 h1:P/nh25+rzXouhytV2pUHBb65fnds26Ghl8/391+sT5o= github.com/gophercloud/gophercloud v0.1.0/go.mod h1:vxM41WHh5uqHVBMZHzuwNOHh8XEoIEcSTewFxm1c5g8= +github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 h1:EGx4pi6eqNxGaHF6qqu48+N2wcFQ5qg5FXgOdqsJ5d8= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= github.com/gorilla/handlers v1.5.1 h1:9lRY6j8DEeeBT10CvO9hGW0gmky0BprnvDI5vfhUHH4= github.com/gorilla/handlers v1.5.1/go.mod h1:t8XrUpc4KVXb7HGyJ4/cEnwQiaxrX/hz1Zv/4g96P1Q= +github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI= github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc= github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= @@ -405,32 +502,53 @@ github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0 h1:Ovs26xHkKqVztRpIrF/92Bcuy github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= github.com/grpc-ecosystem/grpc-gateway v1.16.0 h1:gmcG1KaJ57LophUzW0Hy8NmPhnMZb4M0+kPpLofRdBo= github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= +github.com/hashicorp/consul/api v1.1.0 h1:BNQPM9ytxj6jbjjdRPioQ94T6YXriSopn0i8COv6SRA= github.com/hashicorp/consul/api v1.1.0/go.mod h1:VmuI/Lkw1nC05EYQWNKwWGbkg+FbDBtguAZLlVdkD9Q= +github.com/hashicorp/consul/sdk v0.1.1 h1:LnuDWGNsoajlhGyHJvuWW6FVqRl8JOTPqS6CPTsYjhY= github.com/hashicorp/consul/sdk v0.1.1/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= +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.1 h1:dH3aiDG9Jvb5r5+bYHsikaOUIpcM0xvgMXVoDkXMzJM= github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= +github.com/hashicorp/go-immutable-radix v1.0.0 h1:AKDB1HM5PWEA7i4nhcpwOrO2byshxBjXVn/J/3+z5/0= github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= +github.com/hashicorp/go-msgpack v0.5.3 h1:zKjpN5BK/P5lMYrLmBHdBULWbJ0XpYR+7NGzqkZzoD4= github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= +github.com/hashicorp/go-multierror v1.0.0 h1:iVjPR7a6H0tWELX5NxNe7bYopibicUzc7uPribsnS6o= github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= +github.com/hashicorp/go-rootcerts v1.0.0 h1:Rqb66Oo1X/eSV1x66xbDccZjhJigjg0+e82kpwzSwCI= github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU= +github.com/hashicorp/go-sockaddr v1.0.0 h1:GeH6tui99pF4NJgfnhp+L6+FfobzVW3Ah46sLo0ICXs= github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU= +github.com/hashicorp/go-syslog v1.0.0 h1:KaodqZuhUoZereWVIYmpUgZysurB1kBLX2j0MwMrUAE= github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4= github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= +github.com/hashicorp/go-uuid v1.0.1 h1:fv1ep09latC32wFoVwnqcnKJGnMSdBanPczbHAYm1BE= github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= +github.com/hashicorp/go.net v0.0.1 h1:sNCoNyDEvN1xa+X0baata4RdcpKwcMS6DH+xwfqPgjw= github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA0oac0k90= github.com/hashicorp/golang-lru v0.0.0-20180201235237-0fb14efe8c47/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.4 h1:YDjusn29QI/Das2iO9M0BHnIbxPeyuCHsjMW+lJfyTc= github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= +github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= +github.com/hashicorp/logutils v1.0.0 h1:dLEQVugN8vlakKOUE3ihGLTZJRB4j+M2cdTm/ORI65Y= github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64= +github.com/hashicorp/mdns v1.0.0 h1:WhIgCr5a7AaVH6jPUwjtRuuE7/RDufnUvzIr48smyxs= github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ= +github.com/hashicorp/memberlist v0.1.3 h1:EmmoJme1matNzb+hMpDuR/0sbJSUisxyqBGG676r31M= github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I= +github.com/hashicorp/serf v0.8.2 h1:YZ7UKsJv+hKjqGVUUbtE3HNj79Eln2oQ75tniF6iPt0= github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc= +github.com/heketi/heketi v10.2.0+incompatible h1:kw0rXzWGCXZP5XMP07426kKiz4hGFgR9ok+GTg+wDS8= github.com/heketi/heketi v10.2.0+incompatible/go.mod h1:bB9ly3RchcQqsQ9CpyaQwvva7RS5ytVoSoholZQON6o= +github.com/heketi/tests v0.0.0-20151005000721-f3775cbcefd6 h1:oJ/NLadJn5HoxvonA6VxG31lg0d6XOURNA09BTtM4fY= github.com/heketi/tests v0.0.0-20151005000721-f3775cbcefd6/go.mod h1:xGMAM8JLi7UkZt1i4FQeQy0R2T8GLUwQhOP5M1gBhy4= +github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= +github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6 h1:UDMh68UUwekSh5iP2OMhRRZJiiBccgV7axzUG8vi56c= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/imdario/mergo v0.3.5/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= github.com/imdario/mergo v0.3.9/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= @@ -440,7 +558,9 @@ github.com/improbable-eng/grpc-web v0.0.0-20181111100011-16092bd1d58a h1:RweVA0v github.com/improbable-eng/grpc-web v0.0.0-20181111100011-16092bd1d58a/go.mod h1:6hRR09jOEG81ADP5wCQju1z71g6OL4eEvELdran/3cs= github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM= github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= +github.com/ishidawataru/sctp v0.0.0-20190723014705-7c296d48a2b5 h1:qPmlgoeRS18y2dT+iAH5vEKZgIqgiPi2Y8UCu/b7Aq8= github.com/ishidawataru/sctp v0.0.0-20190723014705-7c296d48a2b5/go.mod h1:DM4VvS+hD/kDi1U1QsX2fnZowwBhqD0Dk3bRPKF/Oc8= +github.com/itchyny/go-flags v1.5.0 h1:Z5q2ist2sfDjDlExVPBrMqlsEDxDR2h4zuOElB0OEYI= github.com/itchyny/go-flags v1.5.0/go.mod h1:lenkYuCobuxLBAd/HGFE4LRoW8D3B6iXRQfWYJ+MNbA= github.com/itchyny/gojq v0.12.3 h1:s7jTCyOk/dy5bnDIScj24YX4Cr1yhEO2iW/bQT4Pm2s= github.com/itchyny/gojq v0.12.3/go.mod h1:mi4PdXSlFllHyByM68JKUrbiArtEdEnNEmjbwxcQKAg= @@ -448,10 +568,14 @@ github.com/itchyny/timefmt-go v0.1.2 h1:q0Xa4P5it6K6D7ISsbLAMwx1PnWlixDcJL6/sFs9 github.com/itchyny/timefmt-go v0.1.2/go.mod h1:0osSSCQSASBJMsIZnhAaF1C2fCBTJZXrnj37mG8/c+A= github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 h1:BQSFePA1RWJOlocH6Fxy8MmwDt+yVQYULKfN0RoTN8A= github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo= +github.com/jessevdk/go-flags v1.4.0 h1:4IU2WS7AumrZ/40jfhf4QVDMsQwqA7VEHozFRrGARJA= github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= +github.com/jimstudt/http-authentication v0.0.0-20140401203705-3eca13d6893a h1:BcF8coBl0QFVhe8vAMMlD+CV8EISiu9MGKLoj6ZEyJA= github.com/jimstudt/http-authentication v0.0.0-20140401203705-3eca13d6893a/go.mod h1:wK6yTYYcgjHE1Z1QtXACPDjcFJyBskHEdagmnq3vsP8= github.com/jmespath/go-jmespath v0.3.0/go.mod h1:9QtRXoHjLGCJ5IBSaohpXITPlowMeeYCZ7fLUTSywik= +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/jonboulle/clockwork v0.1.0 h1:VKV+ZcuP6l3yW9doeqz6ziZGgcynBVQO+obU0+0hcPo= github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= @@ -460,10 +584,15 @@ github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/u github.com/json-iterator/go v1.1.10 h1:Kz6Cvnvv2wGdaG/V8yMvfkmNiXq9Ya2KUv4rouJJr68= github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= 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 h1:6QPYqodiu3GuPL+7mfx+NwDdp2eTkp9IfEUpgAwUN0o= github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= +github.com/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7C0MuV77Wo= github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= +github.com/julienschmidt/httprouter v1.2.0 h1:TDTW5Yz1mjftljbcKqRcrYhd4XeOoI98t+9HbQbYf7g= github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= +github.com/jung-kurt/gofpdf v1.0.3-0.20190309125859-24315acbbda5 h1:PJr+ZMXIecYc1Ey2zucXdR73SMBtgjPgwa31099IMv0= github.com/jung-kurt/gofpdf v1.0.3-0.20190309125859-24315acbbda5/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes= +github.com/karrick/godirwalk v1.16.1 h1:DynhcF+bztK8gooS0+NDJFrdNZjJ3gzVzC545UNA9iw= github.com/karrick/godirwalk v1.16.1/go.mod h1:j4mkqPuvaLI8mp1DroR3P6ad7cyYd4c1qeJ3RV7ULlk= github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 h1:Z9n2FFNUXsshfwJMBgNA0RU6/i7WVaAegv3PtuIHPMs= github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51/go.mod h1:CzGEWj7cYgsdH8dAjBGEr58BoE7ScuLd+fwFZ44+/x8= @@ -471,34 +600,50 @@ github.com/kevinburke/ssh_config v0.0.0-20190725054713-01f96b0aa0cd h1:Coekwdh0v github.com/kevinburke/ssh_config v0.0.0-20190725054713-01f96b0aa0cd/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= +github.com/kisielk/errcheck v1.5.0 h1:e8esj/e4R+SAOwFwN+n3zr0nYeCyeweozKfO23MvHzY= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= +github.com/kisielk/gotool v1.0.0 h1:AV2c/EiW3KqPNT9ZKl07ehoAGi4C5/01Cfbblndcapg= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/klauspost/compress v1.11.1 h1:bPb7nMRdOZYDrpPMTA3EInUQrdgoBinqUuSwlGdKDdE= github.com/klauspost/compress v1.11.1/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= github.com/klauspost/cpuid v1.2.0/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= +github.com/klauspost/cpuid v1.2.3 h1:CCtW0xUnWGVINKvE/WWOYKdsPV6mawAtvQuSl8guwQs= github.com/klauspost/cpuid v1.2.3/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/konsorten/go-windows-terminal-sequences v1.0.3 h1:CE8S1cTafDpPvMhIxNJKvHsGVBgn1xWYf1NbHQhywc8= github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515 h1:T+h1c/A9Gawja4Y9mFVWj2vyii2bbUNDw3kt9VxK2EY= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/pretty v0.2.0 h1:s5hAObm+yFO5uHYt5dYjxi2rXrsnmRpJx4OYvIWUaQs= github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/pty v1.1.5 h1:hyz3dwM5QLc1Rfoz4FuWJQG5BN7tc6K1MndAUnGpQr4= github.com/kr/pty v1.1.5/go.mod h1:9r2w37qlBe7rQ6e1fg1S/9xpWHSnaqNdHD3WcMdbPDA= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= +github.com/kylelemons/godebug v0.0.0-20170820004349-d65d576e9348 h1:MtvEpTB6LX3vkb4ax0b5D2DHbNAUsen0Gx5wZoq3lV4= github.com/kylelemons/godebug v0.0.0-20170820004349-d65d576e9348/go.mod h1:B69LEHPfb2qLo0BaaOLcbitczOKLWTsrBG9LczfCD4k= +github.com/libopenstorage/openstorage v1.0.0 h1:GLPam7/0mpdP8ZZtKjbfcXJBTIA/T1O6CBErVEFEyIM= github.com/libopenstorage/openstorage v1.0.0/go.mod h1:Sp1sIObHjat1BeXhfMqLZ14wnOzEhNx2YQedreMcUyc= github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de h1:9TO3cAIGXtEhnIaL+V+BEER86oLrvS+kWobKpbJuye0= github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de/go.mod h1:zAbeS9B/r2mtpb6U+EI2rYA5OAXxsYw6wTamcNW+zcE= +github.com/lithammer/dedent v1.1.0 h1:VNzHMVCBNG1j0fh3OrsFRkVUwStdDArbgBWoPAffktY= github.com/lithammer/dedent v1.1.0/go.mod h1:jrXYCQtgg0nJiN+StA2KgR7w6CiQNv9Fd/Z9BP0jIOc= +github.com/lpabon/godbc v0.1.1 h1:ilqjArN1UOENJJdM34I2YHKmF/B0gGq4VLoSGy9iAao= github.com/lpabon/godbc v0.1.1/go.mod h1:Jo9QV0cf3U6jZABgiJ2skINAXb9j8m51r07g4KI92ZA= +github.com/lucas-clemente/aes12 v0.0.0-20171027163421-cd47fb39b79f h1:sSeNEkJrs+0F9TUau0CgWTTNEwF23HST3Eq0A+QIx+A= github.com/lucas-clemente/aes12 v0.0.0-20171027163421-cd47fb39b79f/go.mod h1:JpH9J1c9oX6otFSgdUHwUBUizmKlrMjxWnIAjff4m04= +github.com/lucas-clemente/quic-clients v0.1.0 h1:/P9n0nICT/GnQJkZovtBqridjxU0ao34m7DpMts79qY= github.com/lucas-clemente/quic-clients v0.1.0/go.mod h1:y5xVIEoObKqULIKivu+gD/LU90pL73bTdtQjPBvtCBk= +github.com/lucas-clemente/quic-go v0.10.2 h1:iQtTSZVbd44k94Lu0U16lLBIG3lrnjDvQongjPd4B/s= github.com/lucas-clemente/quic-go v0.10.2/go.mod h1:hvaRS9IHjFLMq76puFJeWNfmn+H70QZ/CXoxqw9bzao= +github.com/lucas-clemente/quic-go-certificates v0.0.0-20160823095156-d2f86524cced h1:zqEC1GJZFbGZA0tRyNZqRjep92K5fujFtFsu5ZW7Aug= github.com/lucas-clemente/quic-go-certificates v0.0.0-20160823095156-d2f86524cced/go.mod h1:NCcRLrOTZbzhZvixZLlERbJtDtYsmMw8Jc4vS8Z0g58= github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= +github.com/magiconair/properties v1.8.1 h1:ZC2Vc7/ZFkGmsVC9KvOjumD+G5lXy2RtTKyzRKO2BQ4= github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/mailru/easyjson v0.0.0-20180823135443-60711f1a8329/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.0.0-20190312143242-1de009706dbe/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= @@ -508,9 +653,12 @@ github.com/mailru/easyjson v0.7.0 h1:aizVhC/NAAcKWb+5QsU1iNOZb4Yws5UO2I+aIprQITM github.com/mailru/easyjson v0.7.0/go.mod h1:KAzv3t3aY1NaHWoQz1+4F1ccyAH66Jk7yos7ldAVICs= github.com/malexdev/utfutil v0.0.0-20180510171754-00c8d4a8e7a8 h1:A6SLdFpRzUUF5v9F/7T1fu3DERmOCgTwwP6x54eyFfU= github.com/malexdev/utfutil v0.0.0-20180510171754-00c8d4a8e7a8/go.mod h1:UtpLyb/EupVKXF/N0b4NRe1DNg+QYJsnsHQ038romhM= +github.com/markbates/pkger v0.17.1 h1:/MKEtWqtc0mZvu9OinB9UzVN9iYCwLWuyUv4Bw+PCno= github.com/markbates/pkger v0.17.1/go.mod h1:0JoVlrol20BSywW79rN3kdFFsE5xYM+rSCQDXbLhiuI= +github.com/marten-seemann/qtls v0.2.3 h1:0yWJ43C62LsZt08vuQJDK1uC1czUc3FJeCLPoNAI4vA= github.com/marten-seemann/qtls v0.2.3/go.mod h1:xzjG7avBwGGbdZ8dTGxlBnLArsVKLvwmjgmPuiQEcYk= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= +github.com/mattn/go-colorable v0.1.4 h1:snbPLB8fVfU9iwbbo30TPtbLRzwWu6aJS6Xh4eaaviA= github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= @@ -520,34 +668,48 @@ github.com/mattn/go-isatty v0.0.12 h1:wuysRhFDzyxgEmMf5xjvJ2M9dZoWAXNNr5LSBS7uHX github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/mattn/go-runewidth v0.0.7/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= +github.com/mattn/go-runewidth v0.0.9 h1:Lm995f3rfxdpd6TSmuVCHVb/QhupuXlYr8sCI/QdE+0= github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369 h1:I0XW9+e1XWDxdcEniV4rQAIOPUGDq67JSCiRCgGCZLI= github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= +github.com/mholt/certmagic v0.6.2-0.20190624175158-6a42ef9fe8c2 h1:xKE9kZ5C8gelJC3+BNM6LJs1x21rivK7yxfTZMAuY2s= github.com/mholt/certmagic v0.6.2-0.20190624175158-6a42ef9fe8c2/go.mod h1:g4cOPxcjV0oFq3qwpjSA30LReKD8AoIfwAY9VvG35NY= github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= github.com/miekg/dns v1.1.3/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= +github.com/miekg/dns v1.1.35 h1:oTfOaDH+mZkdcgdIjH6yBajRGtIwcwcaR+rt23ZSrJs= github.com/miekg/dns v1.1.35/go.mod h1:KNUDUusw/aVsxyTYZM1oqvCicbwhgbNgztCETuNZ7xM= +github.com/mindprince/gonvml v0.0.0-20190828220739-9ebdce4bb989 h1:PS1dLCGtD8bb9RPKJrc8bS7qHL6JnW1CZvwzH9dPoUs= github.com/mindprince/gonvml v0.0.0-20190828220739-9ebdce4bb989/go.mod h1:2eu9pRWp8mo84xCg6KswZ+USQHjwgRhNp06sozOdsTY= +github.com/minio/md5-simd v1.1.0 h1:QPfiOqlZH+Cj9teu0t9b1nTBfPbyTl16Of5MeuShdK4= github.com/minio/md5-simd v1.1.0/go.mod h1:XpBqgZULrMYD3R+M28PcmP0CkI7PEMzB3U77ZrKZ0Gw= +github.com/minio/minio-go/v7 v7.0.2 h1:P/7wFd4KrRBHVo7AKdcqO+9ReoS+XpMjfRFoE5quH0E= github.com/minio/minio-go/v7 v7.0.2/go.mod h1:dJ80Mv2HeGkYLH1sqS/ksz07ON6csH3S6JUMSQ2zAns= +github.com/minio/sha256-simd v0.1.1 h1:5QHSlgo3nt5yKOJrC7W8w7X+NFl8cMPZm96iu8kKUJU= github.com/minio/sha256-simd v0.1.1/go.mod h1:B5e1o+1/KgNmWrSQK08Y6Z1Vb5pwIktudl0J58iy0KM= +github.com/mistifyio/go-zfs v2.1.2-0.20190413222219-f784269be439+incompatible h1:aKW/4cBs+yK6gpqU3K/oIwk9Q/XICqd3zOX/UFuvqmk= github.com/mistifyio/go-zfs v2.1.2-0.20190413222219-f784269be439+incompatible/go.mod h1:8AuVvqP/mXw1px98n46wfvcGfQ4ci2FwoAjKYxuo3Z4= +github.com/mitchellh/cli v1.0.0 h1:iGBIsUe3+HZ/AD/Vd7DErOt5sU9fa8Uj7A2s1aggv1Y= github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= 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.0.0 h1:fzU/JVNcaqHQEcVFAKeR41fkiLdIPrefOvVG1VZ96U0= github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= github.com/mitchellh/go-wordwrap v1.0.0 h1:6GlHJ/LTGMrIJbwgdqdl2eEH8o+Exx/0m8ir9Gns0u4= github.com/mitchellh/go-wordwrap v1.0.0/go.mod h1:ZXFpozHsX6DPmq2I0TCekCxypsnAUbP2oI0UX1GXzOo= +github.com/mitchellh/gox v0.4.0 h1:lfGJxY7ToLJQjHHwi0EX6uYBdK78egf954SQl13PQJc= github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS42BGNg= +github.com/mitchellh/iochan v1.0.0 h1:C+X3KsSTLFVBr/tK1eYN/vs4rJcvsiLU338UhYPJWeY= github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY= github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/mitchellh/mapstructure v1.1.2 h1:fmNYVwqnSfB9mZU6OS2O6GsXM+wcskZDuKQzvN1EDeE= github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= +github.com/moby/ipvs v1.0.1 h1:aoZ7fhLTXgDbzVrAnvV+XbKOU8kOET7B3+xULDF/1o0= github.com/moby/ipvs v1.0.1/go.mod h1:2pngiyseZbIKXNv7hsKj3O9UEz30c53MT9005gt2hxQ= github.com/moby/spdystream v0.2.0 h1:cjW1zVyyoiM0T7b6UoySUFqzXMoqRckQtXwGPiBhOM8= github.com/moby/spdystream v0.2.0/go.mod h1:f7i0iNDQJ059oMTcWxx8MA/zKFIuD/lY+0GqbN2Wy8c= +github.com/moby/sys/mountinfo v0.4.0 h1:1KInV3Huv18akCu58V7lzNlt+jFmqlu1EaErnEHE/VM= github.com/moby/sys/mountinfo v0.4.0/go.mod h1:rEr8tzG/lsIZHBtN/JjGG+LMYx9eXgW2JI+6q0qou+A= github.com/moby/term v0.0.0-20201216013528-df9cb8a40635 h1:rzf0wL0CHVc8CEsgyygG0Mn9CNCCPZqOPaz8RiiHYQk= github.com/moby/term v0.0.0-20201216013528-df9cb8a40635/go.mod h1:FBS0z0QWA44HXygs7VXDUOGoN/1TV3RuWkLO04am3wc= @@ -557,27 +719,38 @@ github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJ github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/modern-go/reflect2 v1.0.1 h1:9f412s+6RmYXLWZSEzVVgPGK7C2PphHj5RJrvfx9AWI= github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +github.com/mohae/deepcopy v0.0.0-20170603005431-491d3605edfb h1:e+l77LJOEqXTIQihQJVkA6ZxPOUmfPM5e4H7rcpgtSk= github.com/mohae/deepcopy v0.0.0-20170603005431-491d3605edfb/go.mod h1:TaXosZuwdSHYgviHp1DAtfrULt5eUgsSMsZf+YrPgl8= github.com/monochromegane/go-gitignore v0.0.0-20200626010858-205db1a8cc00 h1:n6/2gBQ3RWajuToeY6ZtZTIKv2v7ThUy5KKusIT0yc0= github.com/monochromegane/go-gitignore v0.0.0-20200626010858-205db1a8cc00/go.mod h1:Pm3mSP3c5uWn86xMLZ5Sa7JB9GsEZySvHYXCTK4E9q4= +github.com/morikuni/aec v1.0.0 h1:nP9CBfwrvYnBRgY6qfDQkygYDmYwOilePFkwzv4dU8A= github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc= +github.com/mrunalp/fileutils v0.5.0 h1:NKzVxiH7eSk+OQ4M+ZYW1K6h27RUV3MI6NUTsHhU6Z4= github.com/mrunalp/fileutils v0.5.0/go.mod h1:M1WthSahJixYnrXQl/DFQuteStB1weuxD2QJNHXfbSQ= github.com/munnerz/goautoneg v0.0.0-20120707110453-a547fc61f48d/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= +github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= +github.com/mvdan/xurls v1.1.0 h1:OpuDelGQ1R1ueQ6sSryzi6P+1RtBpfQHM8fJwlE45ww= github.com/mvdan/xurls v1.1.0/go.mod h1:tQlNn3BED8bE/15hnSL2HLkDeLWpNPAwtw7wkEq44oU= github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f h1:KUppIJq7/+SVif2QVs3tOP0zanoHgBEVAwHxUSIzRqU= github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= +github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f h1:y5//uYreIhSUg3J1GEMiLbxo1LJaP8RfCpH6pymGZus= github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw= +github.com/naoina/go-stringutil v0.1.0 h1:rCUeRUHjBjGTSHl0VC00jUPLz8/F9dDzYI70Hzifhks= github.com/naoina/go-stringutil v0.1.0/go.mod h1:XJ2SJL9jCtBh+P9q5btrd/Ylo8XwT/h1USek5+NqSA0= +github.com/naoina/toml v0.1.1 h1:PT/lllxVVN0gzzSqSlHEmP8MJB4MY2U7STGxiouV4X8= github.com/naoina/toml v0.1.1/go.mod h1:NBIhNtsFMo3G2szEBne+bO4gS192HuIYRqfvOWb4i1E= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= github.com/nxadm/tail v1.4.4 h1:DQuhQpB1tVlglWS2hLQ5OV6B5r8aGxSrPc5Qo6uTN78= github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= +github.com/oklog/ulid v1.3.1 h1:EGfNDEx6MqHz8B3uNV6QAib1UR2Lm97sHi3ocA6ESJ4= github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= +github.com/olekukonko/tablewriter v0.0.4 h1:vHD/YYe1Wolo78koG299f7V/VAS08c6IpCLn+Ejf/w8= github.com/olekukonko/tablewriter v0.0.4/go.mod h1:zq6QwlOf5SlnkVbMSr5EoBv3636FWnp+qbPhuoO21uA= +github.com/oliveagle/jsonpath v0.0.0-20180606110733-2e52cf6e6852 h1:Yl0tPBa8QPjGmesFh1D0rDy+q1Twx6FyU7VWHi8wZbI= github.com/oliveagle/jsonpath v0.0.0-20180606110733-2e52cf6e6852/go.mod h1:eqOVx5Vwu4gd2mmMZvVZsgIqNSaW3xxRThUJ0k/TPk4= github.com/onsi/ginkgo v0.0.0-20170829012221-11459a886d9c/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= @@ -598,16 +771,23 @@ github.com/onsi/gomega v1.10.3/go.mod h1:V9xEwhxec5O8UDM77eCW8vLymOMltsqPVYWrpDs github.com/opencontainers/go-digest v0.0.0-20180430190053-c9281466c8b2/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= +github.com/opencontainers/image-spec v1.0.1 h1:JMemWkRwHx4Zj+fVxWoMCFm/8sYGGrUVojFA6h/TRcI= github.com/opencontainers/image-spec v1.0.1/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0= github.com/opencontainers/runc v0.0.0-20190115041553-12f6a991201f/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U= +github.com/opencontainers/runc v1.0.0-rc93 h1:x2UMpOOVf3kQ8arv/EsDGwim8PTNqzL1/EYDr/+scOM= github.com/opencontainers/runc v1.0.0-rc93/go.mod h1:3NOsor4w32B2tC0Zbl8Knk4Wg84SM2ImC1fxBuqJ/H0= github.com/opencontainers/runtime-spec v1.0.2/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= +github.com/opencontainers/runtime-spec v1.0.3-0.20200929063507-e6143ca7d51d h1:pNa8metDkwZjb9g4T8s+krQ+HRgZAkqnXml+wNir/+s= github.com/opencontainers/runtime-spec v1.0.3-0.20200929063507-e6143ca7d51d/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= +github.com/opencontainers/selinux v1.8.0 h1:+77ba4ar4jsCbL1GLbFL8fFM57w6suPfSS9PDLDY7KM= github.com/opencontainers/selinux v1.8.0/go.mod h1:RScLhm78qiWa2gbVCcGkC7tCGdgk3ogry1nUQF8Evvo= +github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c h1:Lgl0gzECD8GnQ5QCWA8o6BtfL6mDH5rQgM4/fX3avOs= github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/patrickmn/go-cache v2.1.0+incompatible h1:HRMgzkcYKYpi3C8ajMPV8OFXaaRUnok+kx1WdO15EQc= github.com/patrickmn/go-cache v2.1.0+incompatible/go.mod h1:3Qf8kWWT7OJRJbdiICTKqZju1ZixQ/KpMGzzAfe6+WQ= +github.com/pborman/uuid v1.2.0 h1:J7Q5mO4ysT1dv8hyrUGHb9+ooztCXu1D8MY8DZYsu3g= github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= +github.com/pelletier/go-toml v1.2.0 h1:T5zMGML61Wp+FlcbWjRDT7yAxhJNAiPPLOFECq181zc= github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= github.com/peterbourgon/diskv v2.0.1+incompatible h1:UBdAOUP5p4RWqPBg048CAvpKN+vxiaj6gdUUzhl4XmI= github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU= @@ -617,6 +797,7 @@ github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= 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/posener/complete v1.1.1 h1:ccV59UEOTzVDnDUEFdT95ZzHVZ+5+158q8+SJb2QV5w= github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= github.com/pquerna/cachecontrol v0.0.0-20171018203845-0dec1b30a021/go.mod h1:prYjPmNq4d1NPVmpShWobRqXY3q7Vp+80DqgxxUrUIA= github.com/pquerna/cachecontrol v0.0.0-20180306154005-525d0eb5f91d h1:7gXyC293Lsm2YWgQ+0uaAFFFDO82ruiQSwc3ua+Vtlc= @@ -644,24 +825,34 @@ github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsT github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= github.com/prometheus/procfs v0.2.0 h1:wH4vA7pcjKuZzjF7lM8awk4fnuJO6idemZXoKnULUx4= github.com/prometheus/procfs v0.2.0/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= +github.com/prometheus/tsdb v0.7.1 h1:YZcsG11NqnK4czYLrWd9mpEuAJIHVQLwdrleYfszMAA= github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= +github.com/quobyte/api v0.1.8 h1:+sOX1gIlC/OaLipqVZWrHgly9Kh9Qo8OygeS0mWAg30= github.com/quobyte/api v0.1.8/go.mod h1:jL7lIHrmqQ7yh05OJ+eEEdHr0u/kmT1Ff9iHd+4H6VI= +github.com/remyoudompheng/bigfft v0.0.0-20170806203942-52369c62f446 h1:/NRJ5vAYoqz+7sG51ubIDHXeWO8DlTSrToPu6q11ziA= github.com/remyoudompheng/bigfft v0.0.0-20170806203942-52369c62f446/go.mod h1:uYEyJGbgTkfkS4+E/PavXkNJcbFIpEtjt2B0KDQ5+9M= github.com/robfig/cron v1.1.0 h1:jk4/Hud3TTdcrJgUOBgsqrZBarcxl6ADIjSC2iniwLY= github.com/robfig/cron v1.1.0/go.mod h1:JGuDeoQd7Z6yL4zQhZ3OPEVHB7fL6Ka6skscFHfmt2k= +github.com/rogpeppe/fastuuid v1.2.0 h1:Ppwyp6VYCF1nvBTXL3trRso7mXMlRrw9ooo375wvi2s= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= +github.com/rogpeppe/go-internal v1.3.0 h1:RR9dF3JtopPvtkroDZuVD7qquD0bnHlKSqaQhgwt8yk= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rs/cors v1.6.0 h1:G9tHG9lebljV9mfp9SNPDL36nCDxmo3zTlAf1YgvzmI= github.com/rs/cors v1.6.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= +github.com/rubiojr/go-vhd v0.0.0-20200706105327-02e210299021 h1:if3/24+h9Sq6eDx8UUz1SO9cT9tizyIsATfB7b4D3tc= github.com/rubiojr/go-vhd v0.0.0-20200706105327-02e210299021/go.mod h1:DM5xW0nvfNNm2uytzsvhI3OnX8uzaRAg8UX/CnDqbto= github.com/russross/blackfriday v0.0.0-20170610170232-067529f716f4/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= github.com/russross/blackfriday v1.5.2 h1:HyvC0ARfnZBqnXwABFeSZHpKvJHJJfPz81GNueLj0oo= github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= github.com/russross/blackfriday/v2 v2.0.1 h1:lPqVAte+HuHNfhJ/0LC98ESWRz8afy9tM/0RK8m9o+Q= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f h1:UFr9zpz4xgTnIE5yIMtWAMngCdZ9p/+q6lTbgelo80M= github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= +github.com/satori/go.uuid v1.2.0 h1:0uYX9dsZ2yD7q2RtLRtPSdGDWzjeM3TbMJP9utgA0ww= github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= +github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529 h1:nn5Wsu0esKSJiIVhscUtVbo7ada43DJhG55ua/hjS5I= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= +github.com/seccomp/libseccomp-golang v0.9.1 h1:NJjM5DNFOs0s3kYE1WUOr6G8V97sdt46rlXTMfXGWBo= github.com/seccomp/libseccomp-golang v0.9.1/go.mod h1:GbW5+tmTXfcxTToHLXlScSlAvWlF4P2Ca7zGrPiEpWo= github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= github.com/sergi/go-diff v1.1.0 h1:we8PVUC3FE2uYfodKH/nBHMSetSfHDR6scGdBi+erh0= @@ -676,14 +867,19 @@ github.com/sirupsen/logrus v1.7.0 h1:ShrD1U9pZB12TX0cVy0DtePoCH97K8EtX+mg7ZARUtM github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= github.com/skratchdot/open-golang v0.0.0-20160302144031-75fb7ed4208c h1:fyKiXKO1/I/B6Y2U8T7WdQGWzwehOuGIrljPtt7YTTI= github.com/skratchdot/open-golang v0.0.0-20160302144031-75fb7ed4208c/go.mod h1:sUM3LWHvSMaG192sy56D9F7CNvL7jUJVXoqM1QKLnog= +github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d h1:zE9ykElWQ6/NYmHa3jpm/yHnI4xSofP+UP6SpjHcSeM= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= github.com/smartystreets/goconvey v0.0.0-20190330032615-68dc04aab96a/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= +github.com/smartystreets/goconvey v1.6.4 h1:fv0U8FUIMPNf1L9lnHLvLhgicrIVChEkdzIKYqbNC9s= github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= github.com/soheilhy/cmux v0.1.4 h1:0HKaf1o97UwFjHH9o5XsHUOF+tqmdA7KEzXLpiyaw0E= github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= +github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72 h1:qLC7fQah7D6K1B0ujays3HV9gkFtllcxhzImRR7ArPQ= github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= +github.com/spf13/afero v1.2.2 h1:5jhuqJyZCZf2JRofRvN/nIFgIWNzPa3/Vz8mYylgbWc= github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk= +github.com/spf13/cast v1.3.0 h1:oget//CVOEoFewqQxwr0Ej5yjygnqGkvggSE/gB35Q8= github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= github.com/spf13/cobra v1.0.0/go.mod h1:/6GTrnGXV9HjY+aR4k0oJ5tcvakLuG6EuKReYlHNrgE= @@ -691,6 +887,7 @@ github.com/spf13/cobra v1.1.1/go.mod h1:WnodtKOvamDL/PwE2M4iKs8aMDBZ5Q5klgD3qfVJ github.com/spf13/cobra v1.1.3 h1:xghbfqPkxzxP3C/f3n5DdpAbdKLj4ZE4BWQI362l53M= github.com/spf13/cobra v1.1.3/go.mod h1:pGADOWyqRD/YMrPZigI/zbliZ2wVD/23d+is3pSWzOo= github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= +github.com/spf13/jwalterweatherman v1.1.0 h1:ue6voC5bR5F8YxI5S67j9i582FU4Qvo2bmqnqMYADFk= github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo= github.com/spf13/pflag v0.0.0-20170130214245-9ff6c6923cff/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= @@ -698,8 +895,11 @@ github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnIn github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= github.com/spf13/viper v1.4.0/go.mod h1:PTJ7Z/lr49W6bUbkmS1V3by4uWynFiR9p7+dSq/yZzE= +github.com/spf13/viper v1.7.0 h1:xVKxvI7ouOI5I+U9s2eeiUfMaWBVoXA3AWskkrqK0VM= github.com/spf13/viper v1.7.0/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg= +github.com/stoewer/go-strcase v1.2.0 h1:Z2iHWqGXH00XYgqDmNgQbIBxf3wrNq0F3feEy0ainaU= github.com/stoewer/go-strcase v1.2.0/go.mod h1:IBiWB2sKIp3wVVQ3Y035++gc+knqhUQag1KpM8ahLw8= +github.com/storageos/go-api v2.2.0+incompatible h1:U0SablXoZIg06gvSlg8BCdzq1C/SkHVygOVX95Z2MU0= github.com/storageos/go-api v2.2.0+incompatible/go.mod h1:ZrLn+e0ZuF3Y65PNF6dIwbJPZqfmtCXxFm9ckv0agOY= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= @@ -712,23 +912,33 @@ github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5 github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/subosito/gotenv v1.2.0 h1:Slr1R9HxAlEKefgq5jn9U+DnETlIUa6HfgEzj0g5d7s= github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= +github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635 h1:kdXcSzyDtseVEc4yCz2qF8ZrQvIDBJLl4S1c3GCXmoI= github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= +github.com/thecodeteam/goscaleio v0.1.0 h1:SB5tO98lawC+UK8ds/U2jyfOCH7GTcFztcF5x9gbut4= github.com/thecodeteam/goscaleio v0.1.0/go.mod h1:68sdkZAsK8bvEwBlbQnlLS+xU+hvLYM/iQ8KXej1AwM= github.com/tidwall/pretty v1.0.0 h1:HsD+QiTn7sK6flMKIvNmpqz1qrpP3Ps6jOKIKMooyg4= github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= +github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5 h1:LnC5Kc/wtumK+WB441p7ynQJzVuNRJiqddSIE3IlSEQ= github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= +github.com/ugorji/go v1.1.4 h1:j4s+tAvLfL3bZyefP2SEWmhBzmuIlH/eqNuPdFPgngw= github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc= github.com/undefinedlabs/go-mpatch v1.0.6 h1:h8q5ORH/GaOE1Se1DMhrOyljXZEhRcROO7agMqWXCOY= github.com/undefinedlabs/go-mpatch v1.0.6/go.mod h1:TyJZDQ/5AgyN7FSLiBJ8RO9u2c6wbtRvK827b6AVqY4= github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= +github.com/urfave/cli v1.22.2 h1:gsqYFH8bb9ekPA12kRo0hfjngWQjkJPlN9R0N78BoUo= github.com/urfave/cli v1.22.2/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= +github.com/urfave/negroni v1.0.0 h1:kIimOitoypq34K7TG7DUaJ9kq/N4Ofuwi1sjz0KipXc= github.com/urfave/negroni v1.0.0/go.mod h1:Meg73S6kFm/4PpbYdq35yYWoCZ9mS/YSx+lKnmiohz4= +github.com/vektah/gqlparser v1.1.2 h1:ZsyLGn7/7jDNI+y4SEhI4yAxRChlv15pUHMjijT+e68= github.com/vektah/gqlparser v1.1.2/go.mod h1:1ycwN7Ij5njmMkPPAOaRFY4rET2Enx7IkVv3vaXspKw= +github.com/vishvananda/netlink v1.1.0 h1:1iyaYNBLmP6L0220aDnYQpo1QEV4t4hJ+xEEhhJH8j0= github.com/vishvananda/netlink v1.1.0/go.mod h1:cTgwzPIzzgDAYoQrMm0EdrjRUBkTqKYppBueQtXaqoE= github.com/vishvananda/netns v0.0.0-20191106174202-0a2b9b5464df/go.mod h1:JP3t17pCcGlemwknint6hfoeCVQrEMVwxRLRjXpq+BU= +github.com/vishvananda/netns v0.0.0-20200728191858-db3c7e526aae h1:4hwBBUfQCFe3Cym0ZtKyq7L16eZUtYKs+BaHDN6mAns= github.com/vishvananda/netns v0.0.0-20200728191858-db3c7e526aae/go.mod h1:DD4vA1DwXk04H54A1oHXtwZmA0grkVMdPxx/VGLCah0= github.com/vmihailenco/bufpool v0.1.11 h1:gOq2WmBrq0i2yW5QJ16ykccQ4wH9UyEsgLm6czKAd94= github.com/vmihailenco/bufpool v0.1.11/go.mod h1:AFf/MOy3l2CFTKbxwt0mp2MwnqjNEs5H/UxrkA5jxTQ= @@ -739,22 +949,29 @@ github.com/vmihailenco/msgpack/v5 v5.1.0 h1:+od5YbEXxW95SPlW6beocmt8nOtlh83zqat5 github.com/vmihailenco/msgpack/v5 v5.1.0/go.mod h1:C5gboKD0TJPqWDTVTtrQNfRbiBwHZGo8UTqP/9/XvLI= github.com/vmihailenco/tagparser v0.1.2 h1:gnjoVuB/kljJ5wICEEOpx98oXMWPLj22G67Vbd1qPqc= github.com/vmihailenco/tagparser v0.1.2/go.mod h1:OeAg3pn3UbLjkWt+rN9oFYB6u/cQgqMEUPoW2WPyhdI= +github.com/vmware/govmomi v0.20.3 h1:gpw/0Ku+6RgF3jsi7fnCLmlcikBHfKBCUcu1qgc16OU= github.com/vmware/govmomi v0.20.3/go.mod h1:URlwyTFZX72RmxtxuaFL2Uj3fD1JTvZdx59bHWk6aFU= +github.com/willf/bitset v1.1.11 h1:N7Z7E9UvjW+sGsEl7k/SJrvY2reP1A07MrGuCjIOjRE= github.com/willf/bitset v1.1.11/go.mod h1:83CECat5yLh5zVOf4P1ErAgKA5UDvKtgyUABdr3+MjI= github.com/xanzy/ssh-agent v0.2.1 h1:TCbipTQL2JiiCprBWx9frJ2eJlCYT00NmctrHxVAr70= github.com/xanzy/ssh-agent v0.2.1/go.mod h1:mLlQY/MoOhWBj+gOGMQkOeiEvkx+8pJSI+0Bx9h2kr4= +github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2 h1:eY9dn8+vbi4tKz5Qo6v2eYzo7kUS51QINcR5jNpbZS8= github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= github.com/xlab/treeprint v0.0.0-20181112141820-a009c3971eca h1:1CFlNzQhALwjS9mBAUkycX616GzgsuYUOCHA5+HSlXI= github.com/xlab/treeprint v0.0.0-20181112141820-a009c3971eca/go.mod h1:ce1O1j6UtZfjr22oyGxGLbauSBp2YVXpARAosm7dHBg= +github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77 h1:ESFSdwYZvkeru3RtdrYueztKhOBCSAAzS4Gf+k0tEow= github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.3.5 h1:dPmz1Snjq0kmkz159iL7S6WzdahUTHnHB5M56WFVifs= github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= github.com/yuin/gopher-lua v0.0.0-20200816102855-ee81675732da h1:NimzV1aGyq29m5ukMK0AMWEhFaL/lrEOaephfuoiARg= github.com/yuin/gopher-lua v0.0.0-20200816102855-ee81675732da/go.mod h1:E1AXubJBdNmFERAOucpDIxNzeGfLzg0mYh+UfMWdChA= go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= +go.etcd.io/bbolt v1.3.5 h1:XAzx9gjCb0Rxj7EoqcClPD1d5ZBxZJk0jbuoPHenBt0= go.etcd.io/bbolt v1.3.5/go.mod h1:G5EMThwa9y8QZGBClrRx5EY+Yw9kAhnjy3bSjsnlVTQ= +go.etcd.io/etcd v0.5.0-alpha.5.0.20200910180754-dd1b699fc489 h1:1JFLBqwIgdyHN1ZtgjTBwO+blA6gVOmZurpiMEsETKo= go.etcd.io/etcd v0.5.0-alpha.5.0.20200910180754-dd1b699fc489/go.mod h1:yVHk9ub3CSBatqGNg7GRmsnfLWtoW60w4eDYfh7vHDg= go.mongodb.org/mongo-driver v1.0.3/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM= go.mongodb.org/mongo-driver v1.1.1/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM= @@ -763,6 +980,7 @@ go.mongodb.org/mongo-driver v1.1.2/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qL 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 h1:8sGtKOrtQqkN1bp2AtX+misvLIlOmsEsNd+9NIcPEm8= go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opentelemetry.io/otel v0.13.0 h1:2isEnyzjjJZq6r2EKMsFj4TxiQiexsM04AVhwbR/oBA= go.opentelemetry.io/otel v0.13.0/go.mod h1:dlSNewoRYikTkotEnxdmuBHgzT+k/idJSfDv/FxEnOY= @@ -772,10 +990,12 @@ go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.6.0 h1:Ezj3JGmsOnG1MoRWQkPBsKLe9DwWD9QeXzTRzzldNVk= go.uber.org/atomic v1.6.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= +go.uber.org/goleak v1.1.10 h1:z+mqJhf6ss6BSfSM671tgKyZBFPTTJM+HLxnhPC3wu0= go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A= go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= go.uber.org/multierr v1.5.0 h1:KCa4XfM8CWFCpxXRGok+Q0SS/0XBhMDbHHGABQLvD2A= go.uber.org/multierr v1.5.0/go.mod h1:FeouvMocqHpRaaGuG9EjoKcStLC43Zu/fmqdUMPcKYU= +go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee h1:0mgffUl7nfd+FpvXMVz4IDEaUSmT1ysygQC7qYo7sG4= go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA= go.uber.org/zap v1.8.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= @@ -819,6 +1039,7 @@ golang.org/x/exp v0.0.0-20210220032938-85be41e4509f h1:GrkO5AtFUU9U/1f5ctbIBXtBG golang.org/x/exp v0.0.0-20210220032938-85be41e4509f/go.mod h1:I6l2HNBLBZEcrOoCpyKLdY2lHoRZ8lI4x60KMCQDft4= golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= +golang.org/x/image v0.0.0-20190802002840-cff245a6509b h1:+qEpEAPhDZ1o0x3tHzZTQDArnOixOzGD9HUJfcg0mb4= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/lint v0.0.0-20180702182130-06c8688daad7/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= @@ -829,9 +1050,11 @@ golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHl 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 h1:Wh+f8QHJXR411sJR8/vRBTZ7YapZaRvUcLFFJhusH0k= golang.org/x/lint v0.0.0-20200302205851-738671d3881b/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/mobile v0.0.0-20201217150744-e6ae53a27f4f h1:kgfVkAEEQXXQ0qc6dH7n6y37NAYmTFmz0YRwrRjgxKw= golang.org/x/mobile v0.0.0-20201217150744-e6ae53a27f4f/go.mod h1:skQtrUTUwhdJvXM/2KKJzY8pDgNr9I/FOMqDVRPBUS4= 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= @@ -1042,9 +1265,12 @@ gomodules.xyz/jsonpatch/v2 v2.1.0 h1:Phva6wqu+xR//Njw6iorylFFgn/z547tw5Ne3HZPQ+k gomodules.xyz/jsonpatch/v2 v2.1.0/go.mod h1:IhYNNY4jnS53ZnfE4PAmpKtDpTCj1JFXc+3mwe7XcUU= gonum.org/v1/gonum v0.0.0-20180816165407-929014505bf4/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo= gonum.org/v1/gonum v0.0.0-20190331200053-3d26580ed485/go.mod h1:2ltnJ7xHfj0zHS40VVPYEAAMTa3ZGguvHGBSJeRWqE0= +gonum.org/v1/gonum v0.6.2 h1:4r+yNT0+8SWcOkXP+63H2zQbN+USnC73cjGUxnDF94Q= gonum.org/v1/gonum v0.6.2/go.mod h1:9mxDZsDKxgMAuccQkewq682L+0eCu4dCN2yonUJTCLU= gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw= +gonum.org/v1/netlib v0.0.0-20190331212654-76723241ea4e h1:jRyg0XfpwWlhEV8mDfdNGBeSJM2fuyh9Yjrnd8kF2Ts= gonum.org/v1/netlib v0.0.0-20190331212654-76723241ea4e/go.mod h1:kS+toOQn6AQKjmKJ7gzohV1XkqsFehRA2FbsbkopSuQ= +gonum.org/v1/plot v0.0.0-20190515093506-e2840ee46a6b h1:Qh4dB5D/WpoUUp3lSod7qgoyEHbDGPUWjIbnqdqqe1k= gonum.org/v1/plot v0.0.0-20190515093506-e2840ee46a6b/go.mod h1:Wt8AAjI+ypCyYX3nZBvf6cAIx93T+c/OS2HFAYskSZc= 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= @@ -1056,6 +1282,7 @@ google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsb google.golang.org/api v0.15.1-0.20200106000736-b8fc810ca6b5/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.20.0 h1:jz2KixHX7EcCPiQrySzPdnYT7DbINAypCqKZ1Z7GM40= google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= 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= @@ -1095,23 +1322,31 @@ google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpAD google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= google.golang.org/protobuf v1.25.0 h1:Ejskq+SyPohKW+1uil0JJMtmHCgJPJ/qWTxr8qp+R4c= google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= +gopkg.in/alecthomas/kingpin.v2 v2.2.6 h1:jMFz6MfLP0/4fUyZle81rXUoxOBFi19VUFKVDOQfozc= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f h1:BLraFXnmrev5lT+xlilqcH8XK9/i0At2xKjWk4p6zsU= gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/cheggaaa/pb.v1 v1.0.25 h1:Ev7yu1/f6+d+b3pi5vPdRPc6nNtP1umSfcWiEfRqv6I= gopkg.in/cheggaaa/pb.v1 v1.0.25/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= +gopkg.in/errgo.v2 v2.1.0 h1:0vLT13EuvQ0hNvakwLuFZ/jYrLp5F3kcWHXdRggjCE8= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= +gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= +gopkg.in/gcfg.v1 v1.2.0 h1:0HIbH907iBTAntm+88IJV2qmJALDAh8sPekI9Vc1fm0= gopkg.in/gcfg.v1 v1.2.0/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o= gopkg.in/go-playground/webhooks.v5 v5.11.0 h1:V3vej+ZXrVvO2EmBTKlhClEbpTqXH44K5OyLUMOkHMg= gopkg.in/go-playground/webhooks.v5 v5.11.0/go.mod h1:LZbya/qLVdbqDR1aKrGuWV6qbia2zCYSR5dpom2SInQ= gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= gopkg.in/ini.v1 v1.51.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= +gopkg.in/ini.v1 v1.57.0 h1:9unxIsFcTt4I55uWluz+UmL95q4kdJ0buvQ1ZIqVQww= gopkg.in/ini.v1 v1.57.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= +gopkg.in/mcuadros/go-syslog.v2 v2.2.1 h1:60g8zx1BijSVSgLTzLCW9UC4/+i1Ih9jJ1DR5Tgp9vE= gopkg.in/mcuadros/go-syslog.v2 v2.2.1/go.mod h1:l5LPIyOOyIdQquNg+oU6Z3524YwrcqEm0aKH+5zpt2U= +gopkg.in/natefinch/lumberjack.v2 v2.0.0 h1:1Lc07Kr7qY4U2YPouBjpCLxpiyxIVoxqXgkXLknAOE8= gopkg.in/natefinch/lumberjack.v2 v2.0.0/go.mod h1:l0ndWWf7gzL7RNwBG7wST/UCcT4T24xpD6X8LsfU/+k= gopkg.in/square/go-jose.v2 v2.2.2 h1:orlkJ3myw8CN1nVQHBFfloD+L3egixIa4FvUP6RosSA= gopkg.in/square/go-jose.v2 v2.2.2/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= @@ -1145,6 +1380,7 @@ honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWh 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 h1:sXmLre5bzIR6ypkjXCDI3jHPssRhc8KD/Ome589sc3U= honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= k8s.io/api v0.21.0 h1:gu5iGF4V6tfVCQ/R+8Hc0h7H1JuEhzyEi9S4R5LM8+Y= k8s.io/api v0.21.0/go.mod h1:+YbrhBBGgsxbF6o6Kj4KJPJnBmAKuXDeS3E18bgHNVU= @@ -1158,7 +1394,9 @@ k8s.io/cli-runtime v0.21.0 h1:/V2Kkxtf6x5NI2z+Sd/mIrq4FQyQ8jzZAUD6N5RnN7Y= k8s.io/cli-runtime v0.21.0/go.mod h1:XoaHP93mGPF37MkLbjGVYqg3S1MnsFdKtiA/RZzzxOo= k8s.io/client-go v0.21.0 h1:n0zzzJsAQmJngpC0IhgFcApZyoGXPrDIAD601HD09ag= k8s.io/client-go v0.21.0/go.mod h1:nNBytTF9qPFDEhoqgEPaarobC8QPae13bElIVHzIglA= +k8s.io/cloud-provider v0.21.0 h1:NSTS+czpv6LQAaIpY/VUghsT4oj62hYmQPErkDKTzKU= k8s.io/cloud-provider v0.21.0/go.mod h1:z17TQgu3JgUFjcgby8sj5X86YdVK5Pbt+jm/eYMZU9M= +k8s.io/cluster-bootstrap v0.21.0 h1:9CfnWrvXm12k6fP3WR3ist76rrqGq6H5pRVEUvEc4Ws= k8s.io/cluster-bootstrap v0.21.0/go.mod h1:rs7i1JpBCa56YNmnYxFJuoUghIwpMzDidY8ZmqiRnrQ= k8s.io/code-generator v0.21.0 h1:LGWJOvkbBNpuRBqBRXUjzfvymUh7F/iR2KDpwLnqCM4= k8s.io/code-generator v0.21.0/go.mod h1:hUlps5+9QaTrKx+jiM4rmq7YmH8wPOIko64uZCHDh6Q= @@ -1166,12 +1404,16 @@ k8s.io/component-base v0.21.0 h1:tLLGp4BBjQaCpS/KiuWh7m2xqvAdsxLm4ATxHSe5Zpg= k8s.io/component-base v0.21.0/go.mod h1:qvtjz6X0USWXbgmbfXR+Agik4RZ3jv2Bgr5QnZzdPYw= k8s.io/component-helpers v0.21.0 h1:SoWLsd63LI5uwofcHVSO4jtlmZEJRycfwNBKU4eAGPQ= k8s.io/component-helpers v0.21.0/go.mod h1:tezqefP7lxfvJyR+0a+6QtVrkZ/wIkyMLK4WcQ3Cj8U= +k8s.io/controller-manager v0.21.0 h1:60kaloHJ815CDLohPmoa0n5/WbW7J0PXHX+y+dOBSWc= k8s.io/controller-manager v0.21.0/go.mod h1:Ohy0GRNRKPVjB8C8G+dV+4aPn26m8HYUI6ejloUBvUA= +k8s.io/cri-api v0.21.0 h1:BxSMDXDuNE+Cv9CMenzQBn5SXYBTid/fhLetjI2KK14= k8s.io/cri-api v0.21.0/go.mod h1:nJbXlTpXwYCYuGMR7v3PQb1Du4WOGj2I9085xMVjr3I= +k8s.io/csi-translation-lib v0.21.0 h1:kzwraa2eenvtMuOAe+xSQgIgG0G88pocorYP8CSitRY= k8s.io/csi-translation-lib v0.21.0/go.mod h1:edq+UMpgqEx3roTuGF/03uIuSOsI986jtu65+ytLlkA= k8s.io/gengo v0.0.0-20200413195148-3a45101e95ac/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= k8s.io/gengo v0.0.0-20201214224949-b6c5ce23f027 h1:Uusb3oh8XcdzDF/ndlI4ToKTYVlkCSJP39SRY2mfRAw= k8s.io/gengo v0.0.0-20201214224949-b6c5ce23f027/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E= +k8s.io/heapster v1.2.0-beta.1 h1:lUsE/AHOMHpi3MLlBEkaU8Esxm5QhdyCrv1o7ot0s84= k8s.io/heapster v1.2.0-beta.1/go.mod h1:h1uhptVXMwC8xtZBYsPXKVi8fpdlYkTs6k949KozGrM= k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE= k8s.io/klog/v2 v2.2.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y= @@ -1180,41 +1422,62 @@ k8s.io/klog/v2 v2.8.0 h1:Q3gmuM9hKEjefWFFYF0Mat+YyFJvsUyYuwyNNJ5C9Ts= k8s.io/klog/v2 v2.8.0/go.mod h1:hy9LJ/NvuK+iVyP4Ehqva4HxZG/oXyIS3n3Jmire4Ec= k8s.io/kube-aggregator v0.21.0 h1:my2WYu8RJcj/ZzWAjPPnmxNRELk/iCdPjMaOmsZOeBU= k8s.io/kube-aggregator v0.21.0/go.mod h1:sIaa9L4QCBo9gjPyoGJns4cBjYVLq3s49FxF7m/1A0A= +k8s.io/kube-controller-manager v0.21.0 h1:Ot5d8YAZfqR7Sp4Hh+XGUWQGQByP8UYoELgfJTpSSDw= k8s.io/kube-controller-manager v0.21.0/go.mod h1:QGJ1P7eU4FQq8evpCHN5e4QwPpcr2sbWFJBO/DKBUrw= k8s.io/kube-openapi v0.0.0-20210305001622-591a79e4bda7 h1:vEx13qjvaZ4yfObSSXW7BrMc/KQBBT/Jyee8XtLf4x0= k8s.io/kube-openapi v0.0.0-20210305001622-591a79e4bda7/go.mod h1:wXW5VT87nVfh/iLV8FpR2uDvrFyomxbtb1KivDbvPTE= +k8s.io/kube-proxy v0.21.0 h1:wByz/w3nbdBQK62I4GiCUSkBhMLWTrOWKMbZ1VzSsp0= k8s.io/kube-proxy v0.21.0/go.mod h1:36jW3e6+5iQql9tHrLjVrmwpPsbhTywoI6OCFL7MWRs= +k8s.io/kube-scheduler v0.21.0 h1:0xeKSafaqxfYJNrZne08/7YGrLXJF0H3htAMApXN5I4= k8s.io/kube-scheduler v0.21.0/go.mod h1:wf1oi1NHSsFYfG7lKwxJVmnQNBnhL9vOMXztcKQu5IU= k8s.io/kubectl v0.21.0 h1:WZXlnG/yjcE4LWO2g6ULjFxtzK6H1TKzsfaBFuVIhNg= k8s.io/kubectl v0.21.0/go.mod h1:EU37NukZRXn1TpAkMUoy8Z/B2u6wjHDS4aInsDzVvks= +k8s.io/kubelet v0.21.0 h1:1VUfM5vKqLPlWFI0zee6fm9kwIZ/UEOGCodVFN+OZrg= k8s.io/kubelet v0.21.0/go.mod h1:G5ZxMTVev9t4bhmsSxDAWhH6wXDYEVHVVFyYsw4laR4= k8s.io/kubernetes v1.21.0 h1:LUUQgdFsKB+wVgKPUapmXjkvvJHSLN53CuQwre4c+mM= k8s.io/kubernetes v1.21.0/go.mod h1:Yx6XZ8zalyqEk7but+j4+5SvLzdyH1eeqZ4cwO+5dD4= +k8s.io/legacy-cloud-providers v0.21.0 h1:iWf5xaX9yvYT5mkz8UB96UtISQ5IkrWeuMPMhRp01ZY= k8s.io/legacy-cloud-providers v0.21.0/go.mod h1:bNxo7gDg+PGkBmT/MFZswLTWdSWK9kAlS1s8DJca5q4= +k8s.io/metrics v0.21.0 h1:uwS3CgheLKaw3PTpwhjMswnm/PMqeLbdLH88VI7FMQQ= k8s.io/metrics v0.21.0/go.mod h1:L3Ji9EGPP1YBbfm9sPfEXSpnj8i24bfQbAFAsW0NueQ= +k8s.io/mount-utils v0.21.0 h1:Z8mCBpIBG26Q9TFg6d0Wvai6AL1mMPqSYBbNVxo6J2A= k8s.io/mount-utils v0.21.0/go.mod h1:dwXbIPxKtTjrBEaX1aK/CMEf1KZ8GzMHpe3NEBfdFXI= +k8s.io/sample-apiserver v0.21.0 h1:hylPe5pJdromq/WnxyzIohFByOfNOC3agzoXWeqb+T4= k8s.io/sample-apiserver v0.21.0/go.mod h1:yMffYq14yQZtuVPVBGaBJ+3Scb2xHT6QeqFfk3v+AEY= +k8s.io/system-validators v1.4.0 h1:8ruXIHkuTAGfv9rHJproNWFW8oLASThFkCOxeHPYkNU= k8s.io/system-validators v1.4.0/go.mod h1:bPldcLgkIUK22ALflnsXk8pvkTEndYdNuaHH6gRrl0Q= k8s.io/utils v0.0.0-20201110183641-67b214c5f920/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= k8s.io/utils v0.0.0-20210111153108-fddb29f9d009 h1:0T5IaWHO3sJTEmCP6mUlBvMukxPKUQWqiI/YuiBNMiQ= k8s.io/utils v0.0.0-20210111153108-fddb29f9d009/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= layeh.com/gopher-json v0.0.0-20190114024228-97fed8db8427 h1:RZkKxMR3jbQxdCEcglq3j7wY3PRJIopAwBlx1RE71X0= layeh.com/gopher-json v0.0.0-20190114024228-97fed8db8427/go.mod h1:ivKkcY8Zxw5ba0jldhZCYYQfGdb2K6u9tbYK1AwMIBc= +modernc.org/cc v1.0.0 h1:nPibNuDEx6tvYrUAtvDTTw98rx5juGsa5zuDnKwEEQQ= modernc.org/cc v1.0.0/go.mod h1:1Sk4//wdnYJiUIxnW8ddKpaOJCF37yAdqYnkxUpaYxw= +modernc.org/golex v1.0.0 h1:wWpDlbK8ejRfSyi0frMyhilD3JBvtcx2AdGDnU+JtsE= modernc.org/golex v1.0.0/go.mod h1:b/QX9oBD/LhixY6NDh+IdGv17hgB+51fET1i2kPSmvk= +modernc.org/mathutil v1.0.0 h1:93vKjrJopTPrtTNpZ8XIovER7iCIH1QU7wNbOQXC60I= modernc.org/mathutil v1.0.0/go.mod h1:wU0vUrJsVWBZ4P6e7xtFJEhFSNsfRLJ8H458uRjg03k= +modernc.org/strutil v1.0.0 h1:XVFtQwFVwc02Wk+0L/Z/zDDXO81r5Lhe6iMKmGX3KhE= modernc.org/strutil v1.0.0/go.mod h1:lstksw84oURvj9y3tn8lGvRxyRC1S2+g5uuIzNfIOBs= +modernc.org/xc v1.0.0 h1:7ccXrupWZIS3twbUGrtKmHS2DXY6xegFua+6O3xgAFU= modernc.org/xc v1.0.0/go.mod h1:mRNCo0bvLjGhHO9WsyuKVU4q0ceiDDDoEeWDJHrNx8I= +rsc.io/binaryregexp v0.2.0 h1:HfqmD5MEmC0zvwBuF187nq9mdnXjXsSivRiXN7SmRkE= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= +rsc.io/pdf v0.1.1 h1:k1MczvYDUvJBe93bYd7wrZLLUEcLZAuF824/I4e5Xr4= rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= +rsc.io/quote/v3 v3.1.0 h1:9JKUTTIUgS6kzR9mK1YuGKv6Nl+DijDNIc0ghT58FaY= rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= +rsc.io/sampler v1.3.0 h1:7uVkIFmeBqHfdjD+gZwtXXI+RODJ2Wc4O7MPEh/QiW4= rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= +sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.15 h1:4uqm9Mv+w2MmBYD+F4qf/v6tDFUdPOk29C095RbU5mY= sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.15/go.mod h1:LEScyzhFmoF5pso/YSeBstl57mOzx9xlU9n85RGrDQg= sigs.k8s.io/controller-runtime v0.8.3 h1:GMHvzjTmaWHQB8HadW+dIvBoJuLvZObYJ5YoZruPRao= sigs.k8s.io/controller-runtime v0.8.3/go.mod h1:U/l+DUopBc1ecfRZ5aviA9JDmGFQKvLf5YkZNx2e0sU= sigs.k8s.io/kustomize/api v0.8.5 h1:bfCXGXDAbFbb/Jv5AhMj2BB8a5VAJuuQ5/KU69WtDjQ= sigs.k8s.io/kustomize/api v0.8.5/go.mod h1:M377apnKT5ZHJS++6H4rQoCHmWtt6qTpp3mbe7p6OLY= +sigs.k8s.io/kustomize/cmd/config v0.9.7 h1:xxvL/np/zYHVuCH1tNFehlyEtSW5oXjoI6ycejiyOwQ= sigs.k8s.io/kustomize/cmd/config v0.9.7/go.mod h1:MvXCpHs77cfyxRmCNUQjIqCmZyYsbn5PyQpWiq44nW0= +sigs.k8s.io/kustomize/kustomize/v4 v4.0.5 h1:0xQWp03aKWilF6UJrupcA2rCoCn3jejkJ+m/CCI/Fis= sigs.k8s.io/kustomize/kustomize/v4 v4.0.5/go.mod h1:C7rYla7sI8EnxHE/xEhRBSHMNfcL91fx0uKmUlUhrBk= sigs.k8s.io/kustomize/kyaml v0.10.15 h1:dSLgG78KyaxN4HylPXdK+7zB3k7sW6q3IcCmcfKA+aI= sigs.k8s.io/kustomize/kyaml v0.10.15/go.mod h1:mlQFagmkm1P+W4lZJbJ/yaxMd8PqMRSC4cPcfUVt5Hg= diff --git a/test/e2e/testdata/helm-external-values/app.yaml b/test/e2e/testdata/helm-external-values/app.yaml index da38d66804835..16ca2faccdefb 100644 --- a/test/e2e/testdata/helm-external-values/app.yaml +++ b/test/e2e/testdata/helm-external-values/app.yaml @@ -20,7 +20,7 @@ spec: - repoURL: {{.RepoURL}} targetRevision: HEAD valueFiles: - - {{.Path}}/values_external2.yaml + - {{.Path}}/values_external_2.yaml destination: server: https://kubernetes.default.svc - namespace: {{.DeploymentNamespace}} \ No newline at end of file + namespace: {{.DeploymentNamespace}} diff --git a/test/e2e/testdata/helm-external-values/chart/Chart.yaml b/test/e2e/testdata/helm-external-values/chart/Chart.yaml index a3becea5ac11b..4fbb07a6a3ea3 100644 --- a/test/e2e/testdata/helm-external-values/chart/Chart.yaml +++ b/test/e2e/testdata/helm-external-values/chart/Chart.yaml @@ -1,3 +1,3 @@ apiVersion: v2 version: 1.0.0 -name: helm \ No newline at end of file +name: helm diff --git a/test/e2e/testdata/helm-external-values/chart/templates/configmap.yaml b/test/e2e/testdata/helm-external-values/chart/templates/configmap.yaml index 8f4478ad6ef05..8a6d97efb2477 100644 --- a/test/e2e/testdata/helm-external-values/chart/templates/configmap.yaml +++ b/test/e2e/testdata/helm-external-values/chart/templates/configmap.yaml @@ -6,6 +6,7 @@ data: foo: "{{ .Values.default }}" --- + apiVersion: v1 kind: ConfigMap metadata: @@ -14,9 +15,10 @@ data: foo: "{{ .Values.external1Override }}" --- + apiVersion: v1 kind: ConfigMap metadata: name: external2Override data: - foo: "{{ .Values.external2Override }}" \ No newline at end of file + foo: "{{ .Values.external2Override }}" diff --git a/test/e2e/testdata/helm-external-values/chart/values.yaml b/test/e2e/testdata/helm-external-values/chart/values.yaml index c910471abc248..a7dae84f092f1 100644 --- a/test/e2e/testdata/helm-external-values/chart/values.yaml +++ b/test/e2e/testdata/helm-external-values/chart/values.yaml @@ -1,3 +1,3 @@ defaultValue: "defaultValue" external1Override: "defaultValue" -external2Override: "defaultValue" \ No newline at end of file +external2Override: "defaultValue" diff --git a/test/e2e/testdata/helm-external-values/chart/values_external.yaml b/test/e2e/testdata/helm-external-values/chart/values_external.yaml index 180f55edb0577..29782c6639b90 100644 --- a/test/e2e/testdata/helm-external-values/chart/values_external.yaml +++ b/test/e2e/testdata/helm-external-values/chart/values_external.yaml @@ -1,2 +1,2 @@ external1Override: "external1Value" -external2Override: "external1Value" \ No newline at end of file +external2Override: "external1Value" diff --git a/test/e2e/testdata/helm-external-values/chart/values_external_2.yaml b/test/e2e/testdata/helm-external-values/chart/values_external_2.yaml index 1653b682f662c..246c52430273e 100644 --- a/test/e2e/testdata/helm-external-values/chart/values_external_2.yaml +++ b/test/e2e/testdata/helm-external-values/chart/values_external_2.yaml @@ -1 +1 @@ -external2Override: "external2Value" \ No newline at end of file +external2Override: "external2Value" From 29bc569d2d402e7f1bcd8c7c2f362d79d6b385a0 Mon Sep 17 00:00:00 2001 From: Kai Reichart Date: Mon, 14 Jun 2021 13:15:14 +0200 Subject: [PATCH 05/25] go mod tidy Signed-off-by: Kai Reichart --- go.sum | 263 --------------------------------------------------------- 1 file changed, 263 deletions(-) diff --git a/go.sum b/go.sum index ae8d36ec961e0..67acdc1620a03 100644 --- a/go.sum +++ b/go.sum @@ -1,4 +1,3 @@ -bitbucket.org/bertimus9/systemstat v0.0.0-20180207000608-0eeff89b0690 h1:N9r8OBSXAgEUfho3SQtZLY8zo6E1OdOMvelvP22aVFc= bitbucket.org/bertimus9/systemstat v0.0.0-20180207000608-0eeff89b0690/go.mod h1:Ulb78X89vxKYgdL24HMTiXYHlyHEvruOj1ZPlqeNEZM= 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= @@ -15,25 +14,18 @@ cloud.google.com/go v0.54.0 h1:3ithwDMr7/3vpAMXiH+ZQnYbuIsh+OPhUPMFC9enmn0= cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc= 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 h1:xE3CPsOgttP4ACBePh79zTKALtXwn/Edhcr16R5hMWU= cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= -cloud.google.com/go/datastore v1.1.0 h1:/May9ojXjRkPBNVrq+oWLqmWCkr4OU5uRY29bu0mRyQ= cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= -cloud.google.com/go/firestore v1.1.0 h1:9x7Bx0A9R5/M9jibeJeZWqjeVEIxYW9fZYqB9a70/bY= cloud.google.com/go/firestore v1.1.0/go.mod h1:ulACoGHTpvq5r8rxGJ4ddJZBZqakUQqClKRT5SZwBmk= 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 h1:Lpy6hKgdcl7a3WGSfJIFmxmcdjSpP6OmBEfcOv1Y680= cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= 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 h1:UDpwYIwla4jHGzZJaEJYx1tOejbgSoNqsAfHAUYe2r8= cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= -dmitri.shuralyov.com/gpu/mtl v0.0.0-20201218220906-28db891af037 h1:+PdD6GLKejR9DizMAKT5DpSAkKswvZrurk1/eEt9+pw= dmitri.shuralyov.com/gpu/mtl v0.0.0-20201218220906-28db891af037/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= -github.com/Azure/azure-sdk-for-go v43.0.0+incompatible h1:/wSNCu0e6EsHFR4Qa3vBEBbicaprEHMyyga9g8RTULI= github.com/Azure/azure-sdk-for-go v43.0.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78 h1:w+iIsaOQNcT7OZ575w+acHgRric5iCyQh+xv+KJ4HB8= github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8= @@ -47,21 +39,15 @@ github.com/Azure/go-autorest/autorest/date v0.3.0 h1:7gUk1U5M/CQbp9WoqinNzJar+8K github.com/Azure/go-autorest/autorest/date v0.3.0/go.mod h1:BI0uouVdmngYNUzGWeSYnokU+TrmwEsOqdt8Y6sso74= github.com/Azure/go-autorest/autorest/mocks v0.4.1 h1:K0laFcLE6VLTOwNgSxaGbUcLPuGXlNkbVvq4cW4nIHk= github.com/Azure/go-autorest/autorest/mocks v0.4.1/go.mod h1:LTp+uSrOhSkaKrUy935gNZuuIPPVsHlr9DSOxSayd+k= -github.com/Azure/go-autorest/autorest/to v0.2.0 h1:nQOZzFCudTh+TvquAtCRjM01VEYx85e9qbwt5ncW4L8= github.com/Azure/go-autorest/autorest/to v0.2.0/go.mod h1:GunWKJp1AEqgMaGLV+iocmRAJWqST1wQYhyyjXJ3SJc= -github.com/Azure/go-autorest/autorest/validation v0.1.0 h1:ISSNzGUh+ZSzizJWOWzs8bwpXIePbGLW4z/AmUFGH5A= github.com/Azure/go-autorest/autorest/validation v0.1.0/go.mod h1:Ha3z/SqBeaalWQvokg3NZAlQTalVMtOIAs1aGK7G6u8= github.com/Azure/go-autorest/logger v0.2.0 h1:e4RVHVZKC5p6UANLJHkM4OfR1UKZPj8Wt8Pcx+3oqrE= github.com/Azure/go-autorest/logger v0.2.0/go.mod h1:T9E3cAhj2VqvPOtCYAvby9aBXkZmbF5NWuPV8+WeEW8= github.com/Azure/go-autorest/tracing v0.6.0 h1:TYi4+3m5t6K48TGI9AUdb+IzbnSxvnvUMfuitfgcfuo= github.com/Azure/go-autorest/tracing v0.6.0/go.mod h1:+vhtPC754Xsa23ID7GlGsrdKBpUA79WCAKPPZVC2DeU= -github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802 h1:1BDTz0u9nC3//pOCMdNH+CiXJVYJh5UQNCOBG7jbELc= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= -github.com/GoogleCloudPlatform/k8s-cloud-provider v0.0.0-20200415212048-7901bc822317 h1:JhyuWIqYrstW7KHMjk/fTqU0xtMpBOHuiTA2FVc7L4E= github.com/GoogleCloudPlatform/k8s-cloud-provider v0.0.0-20200415212048-7901bc822317/go.mod h1:DF8FZRxMHMGv/vP2lQP6h+dYzzjpuRn24VeRiYn3qjQ= -github.com/JeffAshton/win_pdh v0.0.0-20161109143554-76bb4ee9f0ab h1:UKkYhof1njT1/xq4SEg5z+VpTgjmNeHwPGRQl7takDI= github.com/JeffAshton/win_pdh v0.0.0-20161109143554-76bb4ee9f0ab/go.mod h1:3VYc5hodBMJ5+l/7J4xAyMeuM2PNuepvHlGs8yilUCA= github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible h1:1G1pk05UrOh0NlF1oeaaix1x8XzrfjIDK47TY0Zehcw= github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= @@ -70,14 +56,10 @@ github.com/MakeNowJust/heredoc v0.0.0-20170808103936-bb23615498cd/go.mod h1:64YH github.com/Masterminds/semver v1.5.0 h1:H65muMkzWKEuNDnfl9d70GUjFniHKHRbFPGBuZ3QEww= github.com/Masterminds/semver v1.5.0/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y= github.com/Microsoft/go-winio v0.4.15-0.20190919025122-fc70bd9a86b5/go.mod h1:tTuCMEN+UleMWgg9dVx4Hu52b1bJo+59jBh3ajtinzw= -github.com/Microsoft/go-winio v0.4.15 h1:qkLXKzb1QoVatRyd/YlXZ/Kg0m5K3SPuoD82jjSOaBc= github.com/Microsoft/go-winio v0.4.15/go.mod h1:tTuCMEN+UleMWgg9dVx4Hu52b1bJo+59jBh3ajtinzw= -github.com/Microsoft/hcsshim v0.8.10-0.20200715222032-5eafd1556990 h1:1xpVY4dSUSbW3PcSGxZJhI8Z+CJiqbd933kM7HIinTc= github.com/Microsoft/hcsshim v0.8.10-0.20200715222032-5eafd1556990/go.mod h1:ay/0dTb7NsG8QMDfsRfLHgZo/6xAJShLe1+ePPflihk= github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ= -github.com/NYTimes/gziphandler v1.1.1 h1:ZUDjpQae29j0ryrS0u/B8HZfJBtBQHjqw2rQ2cqUQ3I= github.com/NYTimes/gziphandler v1.1.1/go.mod h1:n/CVRwUEOgIxrgPvAQhUUr9oeUtvrhMomdKFjzJNB0c= -github.com/OneOfOne/xxhash v1.2.2 h1:KMrpdQIwFcEqXDklaen+P1axHaj9BSKzvpUUfnHldSE= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/PuerkitoBio/purell v1.1.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= github.com/PuerkitoBio/purell v1.1.1 h1:WEQqlqaGbrPkxLJWfBwQmfEAE1Z7ONdDLqrN38tNFfI= @@ -86,17 +68,13 @@ github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 h1:d+Bc7a5rLufV github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= github.com/TomOnTime/utfutil v0.0.0-20180511104225-09c41003ee1d h1:WtAMR0fPCOfK7TPGZ8ZpLLY18HRvL7XJ3xcs0wnREgo= github.com/TomOnTime/utfutil v0.0.0-20180511104225-09c41003ee1d/go.mod h1:WML6KOYjeU8N6YyusMjj2qRvaPNUEvrQvaxuFcMRFJY= -github.com/agnivade/levenshtein v1.0.1 h1:3oJU7J3FGFmyhn8KHjmVaZCN5hxTr7GxgRue+sxIXdQ= github.com/agnivade/levenshtein v1.0.1/go.mod h1:CURSv5d9Uaml+FovSIICkLbAUZ9S4RqaHDIsdSBg7lM= -github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af h1:wVe6/Ea46ZMeNkQjjBW6xcqyQA/j5e0D6GytH95g0gQ= github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af/go.mod h1:K08gAheRH3/J6wwsYMMT4xOr94bZjxIelGM0+d/wbFw= github.com/alcortesm/tgz v0.0.0-20161220082320-9c5fe88206d7 h1:uSoVVbwJiQipAclBbw+8quDsfcvFjOpI5iCf4p/cqCs= github.com/alcortesm/tgz v0.0.0-20161220082320-9c5fe88206d7/go.mod h1:6zEj6s6u/ghQa61ZWa/C2Aw3RkjiTBOix7dkqa1VLIs= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= -github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751 h1:JYp7IbQjafoB+tBA3gMyHYHrpOtNuDiK/uB5uXxq5wM= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= -github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4 h1:Hs82Z41s6SdL1CELW+XaDYmOH4hkBN4/N9og/AsOv7E= github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/alicebob/gopher-json v0.0.0-20200520072559-a9ecdc9d1d3a h1:HbKu58rmZpUGpz5+4FfNmIU+FmZg2P3Xaj2v2bfNWmk= github.com/alicebob/gopher-json v0.0.0-20200520072559-a9ecdc9d1d3a/go.mod h1:SGnFV6hVsYE877CKEZ6tDNTjaSXYUk6QqoIK6PrAtcc= @@ -104,58 +82,44 @@ github.com/alicebob/miniredis v2.5.0+incompatible h1:yBHoLpsyjupjz3NL3MhKMVkR41j github.com/alicebob/miniredis v2.5.0+incompatible/go.mod h1:8HZjEj4yU0dwhYHky+DxYx+6BMjkBbe5ONFIF1MXffk= github.com/alicebob/miniredis/v2 v2.14.2 h1:VeoqKUAsJfT2af61nDE7qhBzqn3J6xjnt9MFAbdrEtg= github.com/alicebob/miniredis/v2 v2.14.2/go.mod h1:gquAfGbzn92jvtrSC69+6zZnwSODVXVpYDRaGhWaL6I= -github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883 h1:bvNMNQO63//z+xNgfBlViaCIJKLlCJ6/fmUseuG0wVQ= github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8= github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239 h1:kFOfPq6dUM1hTo4JG6LR5AXSUEsOjtdm0kw0FtQtMJA= 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/argoproj/gitops-engine v0.3.1-0.20210610000233-6884d330a049 h1:Swa2K+be8ZB1YeyCe5s2kR/b+gyawo5jcPRMwT3L5zY= github.com/argoproj/gitops-engine v0.3.1-0.20210610000233-6884d330a049/go.mod h1:EdFe8qIOqsmbyxRhtIydU4BUeyZ4VTsY6R3XVQhU9LA= github.com/argoproj/pkg v0.9.1-0.20210512035321-be5ba22dca5b h1:qtlM7ioAFP40LPN7A5ZqquVmAtv08LLSZTcCNYUQx8s= github.com/argoproj/pkg v0.9.1-0.20210512035321-be5ba22dca5b/go.mod h1:ra+bQPmbVAoEL+gYSKesuigt4m49i3Qa3mE/xQcjCiA= -github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e h1:QEF07wC0T1rKkctt1RINW/+RMTVmiwxETico2l3gxJA= github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= -github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6 h1:G1bPvciwNyF7IUmKXNt9Ak3m6u9DE1rF+RmtIkBpVdA= github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= -github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da h1:8GUt8eRujhVEGZFFEjBj46YV4rDjvGrNxb0KMWYkL2I= github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= -github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310 h1:BUAU3CGlLvorLI26FmByPp2eC2qla6E1Tw+scpcg/to= github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio= github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= github.com/asaskevich/govalidator v0.0.0-20180720115003-f9ffefc3facf/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a h1:idn718Q4B6AGu/h5Sxe66HYVdqdGu2l9Iebqhi/AEoA= github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= -github.com/auth0/go-jwt-middleware v0.0.0-20170425171159-5493cabe49f7 h1:irR1cO6eek3n5uquIVaRAsQmZnlsfPuHNz31cXo4eyk= github.com/auth0/go-jwt-middleware v0.0.0-20170425171159-5493cabe49f7/go.mod h1:LWMyo4iOLWXHGdBki7NIht1kHru/0wM179h+d3g8ATM= github.com/aws/aws-sdk-go v1.33.16/go.mod h1:5zCpMtNQVjRREroY7sYe8lOMRSxkhG6MZveU8YkpAk0= -github.com/aws/aws-sdk-go v1.35.24 h1:U3GNTg8+7xSM6OAJ8zksiSM4bRqxBWmVwwehvOSNG3A= github.com/aws/aws-sdk-go v1.35.24/go.mod h1:tlPOdRjfxPBpNIwqDj61rmsnA85v9jc0Ps9+muhnW+k= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= -github.com/bgentry/speakeasy v0.1.0 h1:ByYyxL9InA1OWqxJqqp2A5pYHUrCiAL6K3J+LKSsQkY= github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= -github.com/bifurcation/mint v0.0.0-20180715133206-93c51c6ce115 h1:fUjoj2bT6dG8LoEe+uNsKk8J+sLkDbQkJnB6Z1F02Bc= github.com/bifurcation/mint v0.0.0-20180715133206-93c51c6ce115/go.mod h1:zVt7zX3K/aDCk9Tj+VM7YymsX66ERvzCJzw8rFCX2JU= -github.com/bketelsen/crypt v0.0.3-0.20200106085610-5cbc8cc4026c h1:+0HFd5KSZ/mm3JmhmrDukiId5iR6w4+BdFtfSy4yWIc= github.com/bketelsen/crypt v0.0.3-0.20200106085610-5cbc8cc4026c/go.mod h1:MKsuJmJgSg28kpZDP6UIiPt0e0Oz0kqKNGyRaWEPv84= github.com/blang/semver v3.5.0+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= github.com/blang/semver v3.5.1+incompatible h1:cQNTCjp13qL8KC3Nbxr/y2Bqb63oX6wdnnjpJbkM4JQ= github.com/blang/semver v3.5.1+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= -github.com/boltdb/bolt v1.3.1 h1:JQmyP4ZBrce+ZQu0dY660FMfatumYDLun9hBCUVIkF4= github.com/boltdb/bolt v1.3.1/go.mod h1:clJnj/oiGkjum5o1McbSZDSLxVThjynRyGBgiAx27Ps= github.com/bombsimon/logrusr v1.0.0 h1:CTCkURYAt5nhCCnKH9eLShYayj2/8Kn/4Qg3QfiU+Ro= github.com/bombsimon/logrusr v1.0.0/go.mod h1:Jq0nHtvxabKE5EMwAAdgTaz7dfWE8C4i11NOltxGQpc= github.com/bradleyfalzon/ghinstallation v1.1.1 h1:pmBXkxgM1WeF8QYvDLT5kuQiHMcmf+X015GI0KM/E3I= github.com/bradleyfalzon/ghinstallation v1.1.1/go.mod h1:vyCmHTciHx/uuyN82Zc3rXN3X2KTK8nUTCrTMwAhcug= -github.com/caddyserver/caddy v1.0.3 h1:i9gRhBgvc5ifchwWtSe7pDpsdS9+Q0Rw9oYQmYUTw1w= github.com/caddyserver/caddy v1.0.3/go.mod h1:G+ouvOY32gENkJC+jhgl62TyhvqEsFaDiZ4uw0RzP1E= github.com/casbin/casbin v1.9.1 h1:ucjbS5zTrmSLtH4XogqOG920Poe6QatdXtz1FEbApeM= github.com/casbin/casbin v1.9.1/go.mod h1:z8uPsfBJGUsnkagrt3G8QvjgTKFMBJ32UP8HpZllfog= -github.com/cenkalti/backoff v2.1.1+incompatible h1:tKJnvO2kl0zmb/jA5UKAt4VoEVw1qxKWjE/Bpp46npY= github.com/cenkalti/backoff v2.1.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= @@ -164,69 +128,43 @@ github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XL github.com/chai2010/gettext-go v0.0.0-20160711120539-c6fed771bfd5/go.mod h1:/iP1qXHoty45bqomnu2LM+VVyAEdWN+vtSHGlQgyxbw= github.com/chai2010/gettext-go v0.0.0-20170215093142-bf70f2a70fb1 h1:HD4PLRzjuCVW79mQ0/pdsalOLHJ+FaEoqJLxfltpb2U= github.com/chai2010/gettext-go v0.0.0-20170215093142-bf70f2a70fb1/go.mod h1:/iP1qXHoty45bqomnu2LM+VVyAEdWN+vtSHGlQgyxbw= -github.com/checkpoint-restore/go-criu/v4 v4.1.0 h1:WW2B2uxx9KWF6bGlHqhm8Okiafwwx7Y2kcpn8lCpjgo= github.com/checkpoint-restore/go-criu/v4 v4.1.0/go.mod h1:xUQBLp4RLc5zJtWY++yjOoMoB5lihDt7fai+75m+rGw= -github.com/cheekybits/genny v0.0.0-20170328200008-9127e812e1e9 h1:a1zrFsLFac2xoM6zG1u72DWJwZG3ayttYLfmLbxVETk= github.com/cheekybits/genny v0.0.0-20170328200008-9127e812e1e9/go.mod h1:+tQajlRqAUrPI7DOSpB0XAqZYtQakVtB7wXkRAgjxjQ= -github.com/chzyer/logex v1.1.10 h1:Swpa1K6QvQznwJRcfTfQJmTE72DqScAa40E+fbHEXEE= github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= -github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e h1:fY5BOSpyZCqRo5OhCuC+XN+r/bBCmeuuJtjz+bCNIf8= github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= -github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1 h1:q763qf9huN11kDQavWsoZXJNW3xEE4JJyHa5Q25/sd8= github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= github.com/cilium/ebpf v0.0.0-20200110133405-4032b1d8aae3/go.mod h1:MA5e5Lr8slmEg9bt0VpxxWqJlO4iwu3FBdHUzV7wQVg= -github.com/cilium/ebpf v0.2.0 h1:Fv93L3KKckEcEHR3oApXVzyBTDA8WAm6VXhPE00N3f8= github.com/cilium/ebpf v0.2.0/go.mod h1:To2CFviqOWL/M0gIMsvSMlqe7em/l1ALkX1PyjrX2Qs= -github.com/client9/misspell v0.3.4 h1:ta993UF76GwbvJcIo3Y68y/M3WxlpEHPWIGDkJYwzJI= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= -github.com/clusterhq/flocker-go v0.0.0-20160920122132-2b8b7259d313 h1:eIHD9GNM3Hp7kcRW5mvcz7WTR3ETeoYYKwpgA04kaXE= github.com/clusterhq/flocker-go v0.0.0-20160920122132-2b8b7259d313/go.mod h1:P1wt9Z3DP8O6W3rvwCt0REIlshg1InHImaLW0t3ObY0= -github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa h1:OaNxuTZr7kxeODyLWsRMC+OD03aFUH+mW6r2d+MWa5Y= github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= -github.com/container-storage-interface/spec v1.3.0 h1:wMH4UIoWnK/TXYw8mbcIHgZmB6kHOeIsYsiaTJwa6bc= github.com/container-storage-interface/spec v1.3.0/go.mod h1:6URME8mwIBbpVyZV93Ce5St17xBiQJQY67NDsuohiy4= -github.com/containerd/cgroups v0.0.0-20200531161412-0dbf7f05ba59 h1:qWj4qVYZ95vLWwqyNJCQg7rDsG5wPdze0UaPolH7DUk= github.com/containerd/cgroups v0.0.0-20200531161412-0dbf7f05ba59/go.mod h1:pA0z1pT8KYB3TCXK/ocprsh7MAkoW8bZVzPdih9snmM= github.com/containerd/console v0.0.0-20180822173158-c12b1e7919c1/go.mod h1:Tj/on1eG8kiEhd0+fhSDzsPAFESxzBBvdyEgyryXffw= -github.com/containerd/console v1.0.1 h1:u7SFAJyRqWcG6ogaMAx3KjSTy1e3hT9QxqX7Jco7dRc= github.com/containerd/console v1.0.1/go.mod h1:XUsP6YE/mKtz6bxc+I8UiKKTP04qjQL4qcS3XoQ5xkw= github.com/containerd/containerd v1.3.2/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= -github.com/containerd/containerd v1.4.4 h1:rtRG4N6Ct7GNssATwgpvMGfnjnwfjnu/Zs9W3Ikzq+M= github.com/containerd/containerd v1.4.4/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= -github.com/containerd/continuity v0.0.0-20190426062206-aaeac12a7ffc h1:TP+534wVlf61smEIq1nwLLAjQVEK2EADoW3CX9AuT+8= github.com/containerd/continuity v0.0.0-20190426062206-aaeac12a7ffc/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y= -github.com/containerd/fifo v0.0.0-20190226154929-a9fb20d87448 h1:PUD50EuOMkXVcpBIA/R95d56duJR9VxhwncsFbNnxW4= github.com/containerd/fifo v0.0.0-20190226154929-a9fb20d87448/go.mod h1:ODA38xgv3Kuk8dQz2ZQXpnv/UZZUHUCL7pnLehbXgQI= -github.com/containerd/go-runc v0.0.0-20180907222934-5a6d9f37cfa3 h1:esQOJREg8nw8aXj6uCN5dfW5cKUBiEJ/+nni1Q/D/sw= github.com/containerd/go-runc v0.0.0-20180907222934-5a6d9f37cfa3/go.mod h1:IV7qH3hrUgRmyYrtgEeGWJfWbgcHL9CSRruz2Vqcph0= github.com/containerd/ttrpc v0.0.0-20190828154514-0e0f228740de/go.mod h1:PvCDdDGpgqzQIzDW1TphrGLssLDZp2GuS+X5DkEJB8o= -github.com/containerd/ttrpc v1.0.2 h1:2/O3oTZN36q2xRolk0a2WWGgh7/Vf/liElg5hFYLX9U= github.com/containerd/ttrpc v1.0.2/go.mod h1:UAxOpgT9ziI0gJrmKvgcZivgxOp8iFPSk8httJEt98Y= github.com/containerd/typeurl v0.0.0-20180627222232-a93fcdb778cd/go.mod h1:Cm3kwCdlkCfMSHURc+r6fwoGH6/F1hH3S4sg0rLFWPc= -github.com/containerd/typeurl v1.0.1 h1:PvuK4E3D5S5q6IqsPDCy928FhP0LUIGcmZ/Yhgp5Djw= github.com/containerd/typeurl v1.0.1/go.mod h1:TB1hUtrpaiO88KEK56ijojHS1+NeF0izUACaJW2mdXg= -github.com/containernetworking/cni v0.8.0 h1:BT9lpgGoH4jw3lFC7Odz2prU5ruiYKcgAjMCbgybcKI= github.com/containernetworking/cni v0.8.0/go.mod h1:LGwApLUm2FpoOfxTDEeq8T9ipbpZ61X79hmU3w8FmsY= -github.com/coredns/corefile-migration v1.0.11 h1:ptBYGW2ADXIB7ZEBPrhhTvNwJLQfxE3Q9IUMBhJCEeI= github.com/coredns/corefile-migration v1.0.11/go.mod h1:RMy/mXdeDlYwzt0vdMEJvT2hGJ2I86/eO0UdXmH9XNI= -github.com/coreos/bbolt v1.3.2 h1:wZwiHHUieZCquLkDL0B8UhzreNWsPHooDAG3q34zk0s= github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= -github.com/coreos/etcd v3.3.13+incompatible h1:8F3hqu9fGYLBifCmRCJsicFqDx/D68Rt3q1JMazcgBQ= github.com/coreos/etcd v3.3.13+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= github.com/coreos/go-oidc v2.1.0+incompatible h1:sdJrfw8akMnCuUlaZU3tE/uYXFgfqom8DBE9so9EBsM= github.com/coreos/go-oidc v2.1.0+incompatible/go.mod h1:CgnwVTmzoESiwO9qyAFEMiHoZ1nMCKZlZ9V6mm3/LKc= github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= -github.com/coreos/go-semver v0.3.0 h1:wkHLiw0WNATZnSG7epLsujiMCgPAc9xhjJ4tgnAxmfM= github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= -github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e h1:Wf6HqHfScWJN9/ZjdUKyjop4mf3Qdd+1TvvltAvM3m8= github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= github.com/coreos/go-systemd/v22 v22.0.0/go.mod h1:xO0FLkIi5MaZafQlIrOotqXZ90ih+1atmu1JpKERPPk= -github.com/coreos/go-systemd/v22 v22.1.0 h1:kq/SbG2BCKLkDKkjQf5OWwKWUKj1lgs3lFI4PxnR5lg= github.com/coreos/go-systemd/v22 v22.1.0/go.mod h1:xO0FLkIi5MaZafQlIrOotqXZ90ih+1atmu1JpKERPPk= github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= -github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f h1:lBNOc5arjvs8E5mO2tbpBpLoyyu8B6e44T7hJy6potg= github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/cpuguy83/go-md2man/v2 v2.0.0 h1:EoUDS0afbrsXAZ9YQ9jdu/mZ2sXgT1/2yyNng4PGlyM= @@ -235,12 +173,10 @@ github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7Do github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/creack/pty v1.1.11 h1:07n33Z8lZxZ2qwegKbObQohDhXDQxiMMz1NOUGYlesw= github.com/creack/pty v1.1.11/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= -github.com/cyphar/filepath-securejoin v0.2.2 h1:jCwT2GTP+PY5nBz3c/YL5PAIbusElVrPujOBSCj8xRg= github.com/cyphar/filepath-securejoin v0.2.2/go.mod h1:FpkQEhXnPnOthhzymB7CGsFk2G9VLXONKD9G7QGMM+4= 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/daviddengcn/go-colortext v0.0.0-20160507010035-511bcaf42ccd h1:uVsMphB1eRx7xB1njzL3fuMdWRN8HtVzoUOItHMwv5c= github.com/daviddengcn/go-colortext v0.0.0-20160507010035-511bcaf42ccd/go.mod h1:dv4zxwHi5C/8AeI+4gX4dCWOIvNi7I6JCSX0HvlKPgE= github.com/dgrijalva/jwt-go v3.2.0+incompatible h1:7qlOGliEKZXTDg6OTjfoBKDXWrumCAMpl/TFQ4/5kLM= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= @@ -248,21 +184,15 @@ github.com/dgrijalva/jwt-go/v4 v4.0.0-preview1 h1:CaO/zOnF8VvUfEbhRatPcwKVWamvbY github.com/dgrijalva/jwt-go/v4 v4.0.0-preview1/go.mod h1:+hnT3ywWDTAFrW5aE+u2Sa/wT555ZqwoCS+pk3p6ry4= github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/rVNCu3HqELle0jiPLLBs70cWOduZpkS1E78= github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc= -github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954 h1:RMLoZVzv4GliuWafOuPuQDKSm1SJph7uCRnnS61JAn4= github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= -github.com/dnaeon/go-vcr v1.0.1 h1:r8L/HqC0Hje5AXMu1ooW8oyQyOFv4GxqpL0nRP7SLLY= github.com/dnaeon/go-vcr v1.0.1/go.mod h1:aBB1+wY4s93YsC3HHjMBMrwTj2R9FHDzUr9KyGc8n1E= github.com/docker/distribution v2.7.1-0.20190205005809-0d3efadf0154+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= github.com/docker/distribution v2.7.1+incompatible h1:a5mlkVzth6W5A4fOsS3D2EO5BUmsJpcB+cRlLU7cSug= github.com/docker/distribution v2.7.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= -github.com/docker/docker v20.10.2+incompatible h1:vFgEHPqWBTp4pTjdLwjAA4bSo3gvIGOYwuJTlEjVBCw= github.com/docker/docker v20.10.2+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= -github.com/docker/go-connections v0.4.0 h1:El9xVISelRB7BuFusrZozjnkIM5YnzCViNKohAFqRJQ= github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec= github.com/docker/go-units v0.3.3/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= -github.com/docker/go-units v0.4.0 h1:3uh0PgVws3nIA0Q+MwDC8yjEPf9zjRfZZWXZYDct3Tw= github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= -github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815 h1:bWDMxwH3px2JBh6AyO7hdCn/PkvCZXii8TGj7sbtEbQ= github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE= github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4zYo= @@ -274,7 +204,6 @@ github.com/emicklei/go-restful v2.9.5+incompatible h1:spTtZBk5DYEvbxMVutUuTyh1Ao github.com/emicklei/go-restful v2.9.5+incompatible/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= github.com/emirpasic/gods v1.12.0 h1:QAUIPSaCu4G+POclxeqb3F+WPpdKqFGlw36+yOzGlrg= github.com/emirpasic/gods v1.12.0/go.mod h1:YfzfFFoVP/catgzJb4IKIqXjX78Ha8FMSDh3ymbK86o= -github.com/euank/go-kmsg-parser v2.0.0+incompatible h1:cHD53+PLQuuQyLZeriD1V/esuG4MuU0Pjs5y6iknohY= github.com/euank/go-kmsg-parser v2.0.0+incompatible/go.mod h1:MhmAMZ8V4CYH4ybgdRwPr2TU5ThnS43puaKEMpja1uw= github.com/evanphx/json-patch v4.5.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= github.com/evanphx/json-patch v4.9.0+incompatible h1:kLcOMZeuLAJvL2BPWLMIj5oaZQobrkAqrL+WFZwQses= @@ -284,31 +213,24 @@ github.com/exponent-io/jsonpath v0.0.0-20151013193312-d6023ce2651d/go.mod h1:ZZM github.com/fatih/camelcase v1.0.0 h1:hxNvNX/xYBp0ovncs8WyWZrOrpBNub/JfaMvbURyft8= github.com/fatih/camelcase v1.0.0/go.mod h1:yN2Sb0lFhZJUdVvtELVWefmrXpuZESvPmqwoZc+/fpc= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= -github.com/fatih/color v1.9.0 h1:8xPHl4/q1VyqGIPif1F+1V3Y3lSmrq01EabUW3CoW5s= github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU= github.com/felixge/httpsnoop v1.0.1 h1:lvB5Jl89CsZtGIWuTcDM1E/vkVs49/Ml7JJe07l8SPQ= github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= -github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568 h1:BHsljHzVlRcyQhjrss6TZTdY2VfCqZPbv5k3iBFa2ZQ= github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= -github.com/fogleman/gg v1.2.1-0.20190220221249-0403632d5b90 h1:WXb3TSNmHp2vHoCroCIB1foO/yQ36swABL8aOVeDpgg= github.com/fogleman/gg v1.2.1-0.20190220221249-0403632d5b90/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= github.com/form3tech-oss/jwt-go v3.2.2+incompatible h1:TcekIExNqud5crz4xD2pavyTgWiPvpYe4Xau31I0PRk= github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= -github.com/fvbommel/sortorder v1.0.1 h1:dSnXLt4mJYH25uDDGa3biZNQsozaUWDSWeKJ0qqFfzE= github.com/fvbommel/sortorder v1.0.1/go.mod h1:uk88iVf1ovNn1iLfgUVU2F9o5eO30ui720w+kxuqRs0= github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/gliderlabs/ssh v0.2.2 h1:6zsha5zo/TWhRhwqCD3+EarCAgZ2yN28ipRnGPnwkI0= github.com/gliderlabs/ssh v0.2.2/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0= github.com/globalsign/mgo v0.0.0-20180905125535-1ca0a4f7cbcb/go.mod h1:xkRDCp4j0OGD1HRkm4kmhM+pmpv3AKq5SU7GMg4oO/Q= -github.com/globalsign/mgo v0.0.0-20181015135952-eeefdecb41b8 h1:DujepqpGd1hyOd7aW59XpK7Qymp8iy83xq74fLr21is= github.com/globalsign/mgo v0.0.0-20181015135952-eeefdecb41b8/go.mod h1:xkRDCp4j0OGD1HRkm4kmhM+pmpv3AKq5SU7GMg4oO/Q= -github.com/go-acme/lego v2.5.0+incompatible h1:5fNN9yRQfv8ymH3DSsxla+4aYeQt2IgfZqHKVnK8f0s= github.com/go-acme/lego v2.5.0+incompatible/go.mod h1:yzMNe9CasVUhkquNvti5nAtPmG94USbYxYrZfTkIn0M= -github.com/go-bindata/go-bindata v3.1.1+incompatible h1:tR4f0e4VTO7LK6B2YWyAoVEzG9ByG1wrXB4TL9+jiYg= github.com/go-bindata/go-bindata v3.1.1+incompatible/go.mod h1:xK8Dsgwmeed+BBsSy2XTopBn/8uK2HWuGSnA11C3Joo= github.com/go-errors/errors v1.0.1 h1:LUHzmkK3GUKUrL/1gfBUxAHzcev3apQlezX/+O7ma6w= github.com/go-errors/errors v1.0.1/go.mod h1:f4zRHt4oKfwPJE5k8C9vpYG+aDHdBFUsgrm6/TyX73Q= @@ -320,16 +242,12 @@ github.com/go-git/go-git-fixtures/v4 v4.0.2-0.20200613231340-f56387b50c12 h1:PbK github.com/go-git/go-git-fixtures/v4 v4.0.2-0.20200613231340-f56387b50c12/go.mod h1:m+ICp2rF3jDhFgEZ/8yziagdT1C+ZpZcrJjappBCDSw= github.com/go-git/go-git/v5 v5.2.0 h1:YPBLG/3UK1we1ohRkncLjaXWLW+HKp5QNM/jTli2JgI= github.com/go-git/go-git/v5 v5.2.0/go.mod h1:kh02eMX+wdqqxgNMEyq8YgwlIOsDOa9homkUq1PoTMs= -github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1 h1:QbL/5oDUmRBzO9/Z7Seo6zf912W/a6Sr4Eu0G/3Jho0= 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 h1:WtGNWLvXpe6ZudgnXrq0barxBImvnnJoMEhXAzcbM0I= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= -github.com/go-kit/kit v0.9.0 h1:wDJmvq38kDhkVxi50ni9ykkdUr1PKgqKOoi01fa0Mdk= github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= -github.com/go-logfmt/logfmt v0.4.0 h1:MP4Eh7ZCb31lleYCFuwm0oe4/YGak+5l1vA2NOE80nA= github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas= github.com/go-logr/logr v0.2.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU= @@ -389,21 +307,17 @@ github.com/go-openapi/validate v0.18.0/go.mod h1:Uh4HdOzKt19xGIGm1qHf/ofbX1YQ4Y+ github.com/go-openapi/validate v0.19.2/go.mod h1:1tRCw7m3jtI8eNWEEliiAqUIcBztB2KDnRCRMUi7GTA= github.com/go-openapi/validate v0.19.8 h1:YFzsdWIDfVuLvIOF+ZmKjVg1MbPJ1QgY9PihMwei1ys= github.com/go-openapi/validate v0.19.8/go.mod h1:8DJv2CVJQ6kGNpFW6eV9N3JviE1C85nY1c2z52x1Gk4= -github.com/go-ozzo/ozzo-validation v3.5.0+incompatible h1:sUy/in/P6askYr16XJgTKq/0SZhiWsdg4WZGaLsGQkM= github.com/go-ozzo/ozzo-validation v3.5.0+incompatible/go.mod h1:gsEKFIVnabGBt6mXmxK0MoFy+cZoTJY6mu5Ll3LVLBU= github.com/go-redis/cache/v8 v8.2.1 h1:G4CtEQDT3JsiERPob1nUL/KTkiC317rAJvHx6GdWjiM= github.com/go-redis/cache/v8 v8.2.1/go.mod h1:8PFGBZrRqG2nToSHw76mSsozxgSKrn3vsZerq/NJtt8= github.com/go-redis/redis/v8 v8.3.2 h1:1bJscgN2yGtKLW6MsTRosa2LHyeq94j0hnNAgRZzj/M= github.com/go-redis/redis/v8 v8.3.2/go.mod h1:jszGxBCez8QA1HWSmQxJO9Y82kNibbUmeYhKWrBejTU= -github.com/go-sql-driver/mysql v1.5.0 h1:ozyZYNQW3x3HtqT1jira07DN2PArx2v7/mN66gGcHOs= github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= github.com/go-stack/stack v1.8.0 h1:5SgMzNM5HxrEjV0ww2lTmX6E2Izsfxas4+YHWRs3Lsk= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= -github.com/gobuffalo/here v0.6.0 h1:hYrd0a6gDmWxBM4TnrGw8mQg24iSVoIkHEk7FodQcBI= github.com/gobuffalo/here v0.6.0/go.mod h1:wAG085dHOYqUpf+Ap+WOdrPTp5IYcDAs/x7PLa8Y5fM= github.com/gobwas/glob v0.2.3 h1:A4xDbljILXROh+kObIiy5kIaPYD8e96x1tgBhUI5J+Y= github.com/gobwas/glob v0.2.3/go.mod h1:d3Ez4x06l9bZtSvzIay5+Yzi0fmZzPgnTbPcKjJAkT8= -github.com/godbus/dbus/v5 v5.0.3 h1:ZqHaoEF7TBzh4jzPmqVhE/5A1z9of6orkAe5uHoAeME= github.com/godbus/dbus/v5 v5.0.3/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/gogits/go-gogs-client v0.0.0-20190616193657-5a05380e4bc2 h1:BbwX8wsMRDZRdNYxAna+4ls3wvMKJyn4PT6Zk1CPxP4= github.com/gogits/go-gogs-client v0.0.0-20190616193657-5a05380e4bc2/go.mod h1:cY2AIrMgHm6oOHmR7jY+9TtjzSjQ3iG7tURJG3Y6XH0= @@ -412,7 +326,6 @@ github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zV github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= -github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 h1:DACJavvAHhabrF08vX0COfcOBJRhZ8lUbR+ZWIs0Y5g= github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= @@ -422,7 +335,6 @@ github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4er github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e h1:1r7pUrabqp18hOBcwBwiTsbnFeTZHV9eER/QT5JVZxY= github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/lint v0.0.0-20180702182130-06c8688daad7 h1:2hRPrmiwPrp3fQX967rNJIhQPtiGXdlQWAxKbKw3VHA= github.com/golang/lint v0.0.0-20180702182130-06c8688daad7/go.mod h1:tluoj9z5200jBnyusfRPU2LqT6J+DAorxEvtC7LHB+E= 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= @@ -434,14 +346,12 @@ github.com/golang/mock v1.5.0 h1:jlYHihg//f7RRwuPfptm04yp4s7O6Kw8EZiVYIGcH0g= github.com/golang/mock v1.5.0/go.mod h1:CWnOUgYIOo4TcNZ0wHX3YZCqsaM1I1Jvs6v3mP3KVu8= github.com/golang/protobuf v1.4.2 h1:+Z5KGCizgyZCbGh1KZqA0fcLLkwbsjIzS4aV2v7wJX0= github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/golangplus/testing v0.0.0-20180327235837-af21d9c3145e h1:KhcknUwkWHKZPbFy2P7jH5LKJ3La+0ZeknkkmrSgqb0= github.com/golangplus/testing v0.0.0-20180327235837-af21d9c3145e/go.mod h1:0AA//k/eakGydO4jKRoRL2j92ZKSzTgj9tclaCrvXHk= github.com/gomodule/redigo v2.0.0+incompatible h1:K/R+8tc58AaqLkqG2Ol3Qk+DR/TlNuhuh457pBFPtt0= github.com/gomodule/redigo v2.0.0+incompatible/go.mod h1:B4C85qUVwatsJoIUNIfCRsp7qO0iAmpGFZ4EELWSbC4= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.0 h1:0udJVsspx3VBr5FwtLhQQtuAsVc79tTq0ocGIPAU6qo= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/cadvisor v0.39.0 h1:jai6dmBP9QAYluNGqU18yVUTw6uuyAW0AqtZIjvl8Qg= github.com/google/cadvisor v0.39.0/go.mod h1:rjQFmK4jPCpxeUdLq9bYhNFFsjgGOtpnDmDeap0+nsw= 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= @@ -460,15 +370,12 @@ github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/gofuzz v1.1.0 h1:Hsa8mG0dQ46ij8Sl2AYJDUv1oA9/d6Vk+3LG99Oe02g= github.com/google/gofuzz v1.1.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= -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/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 h1:SRgJV+IoxM5MKyFdlSUeNy6/ycRUF2yBAKdAQswoHUk= github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/renameio v0.1.0 h1:GOZbcHa3HfsPKPlmyPyN2KEohoMXOhdMbHrvbpl2QaA= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 h1:El6M4kTTCOh6aBiKaUGG7oYTSPP8MxqL4YI3kZKwcP4= github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510/go.mod h1:pupxD2MaaD3pAXIBCelhxNneeOaAeabZDe5s4K6zSpQ= @@ -477,18 +384,14 @@ github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+ github.com/google/uuid v1.1.2 h1:EVhdT+1Kseyi1/pUmXKaFxYsDNy9RQYkMWRH68J/W7Y= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= -github.com/googleapis/gax-go/v2 v2.0.5 h1:sjZBwGj9Jlw33ImPtvFviGYvseOtDM7hkSKB7+Tv3SM= github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= github.com/googleapis/gnostic v0.4.1/go.mod h1:LRhVm6pbyptWbWbuZ38d1eyptfvIytN3ir6b65WBswg= github.com/googleapis/gnostic v0.5.1 h1:A8Yhf6EtqTv9RMsU6MQTyrtV1TjWlR6xU9BsZIwuTCM= github.com/googleapis/gnostic v0.5.1/go.mod h1:6U4PtQXGIEt/Z3h5MAT7FNofLnw9vXk2cUuW7uA/OeU= -github.com/gophercloud/gophercloud v0.1.0 h1:P/nh25+rzXouhytV2pUHBb65fnds26Ghl8/391+sT5o= github.com/gophercloud/gophercloud v0.1.0/go.mod h1:vxM41WHh5uqHVBMZHzuwNOHh8XEoIEcSTewFxm1c5g8= -github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 h1:EGx4pi6eqNxGaHF6qqu48+N2wcFQ5qg5FXgOdqsJ5d8= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= github.com/gorilla/handlers v1.5.1 h1:9lRY6j8DEeeBT10CvO9hGW0gmky0BprnvDI5vfhUHH4= github.com/gorilla/handlers v1.5.1/go.mod h1:t8XrUpc4KVXb7HGyJ4/cEnwQiaxrX/hz1Zv/4g96P1Q= -github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI= github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc= github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= @@ -502,53 +405,32 @@ github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0 h1:Ovs26xHkKqVztRpIrF/92Bcuy github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= github.com/grpc-ecosystem/grpc-gateway v1.16.0 h1:gmcG1KaJ57LophUzW0Hy8NmPhnMZb4M0+kPpLofRdBo= github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= -github.com/hashicorp/consul/api v1.1.0 h1:BNQPM9ytxj6jbjjdRPioQ94T6YXriSopn0i8COv6SRA= github.com/hashicorp/consul/api v1.1.0/go.mod h1:VmuI/Lkw1nC05EYQWNKwWGbkg+FbDBtguAZLlVdkD9Q= -github.com/hashicorp/consul/sdk v0.1.1 h1:LnuDWGNsoajlhGyHJvuWW6FVqRl8JOTPqS6CPTsYjhY= github.com/hashicorp/consul/sdk v0.1.1/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= -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.1 h1:dH3aiDG9Jvb5r5+bYHsikaOUIpcM0xvgMXVoDkXMzJM= github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= -github.com/hashicorp/go-immutable-radix v1.0.0 h1:AKDB1HM5PWEA7i4nhcpwOrO2byshxBjXVn/J/3+z5/0= github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= -github.com/hashicorp/go-msgpack v0.5.3 h1:zKjpN5BK/P5lMYrLmBHdBULWbJ0XpYR+7NGzqkZzoD4= github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= -github.com/hashicorp/go-multierror v1.0.0 h1:iVjPR7a6H0tWELX5NxNe7bYopibicUzc7uPribsnS6o= github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= -github.com/hashicorp/go-rootcerts v1.0.0 h1:Rqb66Oo1X/eSV1x66xbDccZjhJigjg0+e82kpwzSwCI= github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU= -github.com/hashicorp/go-sockaddr v1.0.0 h1:GeH6tui99pF4NJgfnhp+L6+FfobzVW3Ah46sLo0ICXs= github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU= -github.com/hashicorp/go-syslog v1.0.0 h1:KaodqZuhUoZereWVIYmpUgZysurB1kBLX2j0MwMrUAE= github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4= github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= -github.com/hashicorp/go-uuid v1.0.1 h1:fv1ep09latC32wFoVwnqcnKJGnMSdBanPczbHAYm1BE= github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= -github.com/hashicorp/go.net v0.0.1 h1:sNCoNyDEvN1xa+X0baata4RdcpKwcMS6DH+xwfqPgjw= github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA0oac0k90= github.com/hashicorp/golang-lru v0.0.0-20180201235237-0fb14efe8c47/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.4 h1:YDjusn29QI/Das2iO9M0BHnIbxPeyuCHsjMW+lJfyTc= github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= -github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= -github.com/hashicorp/logutils v1.0.0 h1:dLEQVugN8vlakKOUE3ihGLTZJRB4j+M2cdTm/ORI65Y= github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64= -github.com/hashicorp/mdns v1.0.0 h1:WhIgCr5a7AaVH6jPUwjtRuuE7/RDufnUvzIr48smyxs= github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ= -github.com/hashicorp/memberlist v0.1.3 h1:EmmoJme1matNzb+hMpDuR/0sbJSUisxyqBGG676r31M= github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I= -github.com/hashicorp/serf v0.8.2 h1:YZ7UKsJv+hKjqGVUUbtE3HNj79Eln2oQ75tniF6iPt0= github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc= -github.com/heketi/heketi v10.2.0+incompatible h1:kw0rXzWGCXZP5XMP07426kKiz4hGFgR9ok+GTg+wDS8= github.com/heketi/heketi v10.2.0+incompatible/go.mod h1:bB9ly3RchcQqsQ9CpyaQwvva7RS5ytVoSoholZQON6o= -github.com/heketi/tests v0.0.0-20151005000721-f3775cbcefd6 h1:oJ/NLadJn5HoxvonA6VxG31lg0d6XOURNA09BTtM4fY= github.com/heketi/tests v0.0.0-20151005000721-f3775cbcefd6/go.mod h1:xGMAM8JLi7UkZt1i4FQeQy0R2T8GLUwQhOP5M1gBhy4= -github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= -github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6 h1:UDMh68UUwekSh5iP2OMhRRZJiiBccgV7axzUG8vi56c= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/imdario/mergo v0.3.5/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= github.com/imdario/mergo v0.3.9/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= @@ -558,9 +440,7 @@ github.com/improbable-eng/grpc-web v0.0.0-20181111100011-16092bd1d58a h1:RweVA0v github.com/improbable-eng/grpc-web v0.0.0-20181111100011-16092bd1d58a/go.mod h1:6hRR09jOEG81ADP5wCQju1z71g6OL4eEvELdran/3cs= github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM= github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= -github.com/ishidawataru/sctp v0.0.0-20190723014705-7c296d48a2b5 h1:qPmlgoeRS18y2dT+iAH5vEKZgIqgiPi2Y8UCu/b7Aq8= github.com/ishidawataru/sctp v0.0.0-20190723014705-7c296d48a2b5/go.mod h1:DM4VvS+hD/kDi1U1QsX2fnZowwBhqD0Dk3bRPKF/Oc8= -github.com/itchyny/go-flags v1.5.0 h1:Z5q2ist2sfDjDlExVPBrMqlsEDxDR2h4zuOElB0OEYI= github.com/itchyny/go-flags v1.5.0/go.mod h1:lenkYuCobuxLBAd/HGFE4LRoW8D3B6iXRQfWYJ+MNbA= github.com/itchyny/gojq v0.12.3 h1:s7jTCyOk/dy5bnDIScj24YX4Cr1yhEO2iW/bQT4Pm2s= github.com/itchyny/gojq v0.12.3/go.mod h1:mi4PdXSlFllHyByM68JKUrbiArtEdEnNEmjbwxcQKAg= @@ -568,14 +448,10 @@ github.com/itchyny/timefmt-go v0.1.2 h1:q0Xa4P5it6K6D7ISsbLAMwx1PnWlixDcJL6/sFs9 github.com/itchyny/timefmt-go v0.1.2/go.mod h1:0osSSCQSASBJMsIZnhAaF1C2fCBTJZXrnj37mG8/c+A= github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 h1:BQSFePA1RWJOlocH6Fxy8MmwDt+yVQYULKfN0RoTN8A= github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo= -github.com/jessevdk/go-flags v1.4.0 h1:4IU2WS7AumrZ/40jfhf4QVDMsQwqA7VEHozFRrGARJA= github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= -github.com/jimstudt/http-authentication v0.0.0-20140401203705-3eca13d6893a h1:BcF8coBl0QFVhe8vAMMlD+CV8EISiu9MGKLoj6ZEyJA= github.com/jimstudt/http-authentication v0.0.0-20140401203705-3eca13d6893a/go.mod h1:wK6yTYYcgjHE1Z1QtXACPDjcFJyBskHEdagmnq3vsP8= github.com/jmespath/go-jmespath v0.3.0/go.mod h1:9QtRXoHjLGCJ5IBSaohpXITPlowMeeYCZ7fLUTSywik= -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/jonboulle/clockwork v0.1.0 h1:VKV+ZcuP6l3yW9doeqz6ziZGgcynBVQO+obU0+0hcPo= github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= @@ -584,15 +460,10 @@ github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/u github.com/json-iterator/go v1.1.10 h1:Kz6Cvnvv2wGdaG/V8yMvfkmNiXq9Ya2KUv4rouJJr68= github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= 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 h1:6QPYqodiu3GuPL+7mfx+NwDdp2eTkp9IfEUpgAwUN0o= github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= -github.com/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7C0MuV77Wo= github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= -github.com/julienschmidt/httprouter v1.2.0 h1:TDTW5Yz1mjftljbcKqRcrYhd4XeOoI98t+9HbQbYf7g= github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= -github.com/jung-kurt/gofpdf v1.0.3-0.20190309125859-24315acbbda5 h1:PJr+ZMXIecYc1Ey2zucXdR73SMBtgjPgwa31099IMv0= github.com/jung-kurt/gofpdf v1.0.3-0.20190309125859-24315acbbda5/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes= -github.com/karrick/godirwalk v1.16.1 h1:DynhcF+bztK8gooS0+NDJFrdNZjJ3gzVzC545UNA9iw= github.com/karrick/godirwalk v1.16.1/go.mod h1:j4mkqPuvaLI8mp1DroR3P6ad7cyYd4c1qeJ3RV7ULlk= github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 h1:Z9n2FFNUXsshfwJMBgNA0RU6/i7WVaAegv3PtuIHPMs= github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51/go.mod h1:CzGEWj7cYgsdH8dAjBGEr58BoE7ScuLd+fwFZ44+/x8= @@ -600,50 +471,34 @@ github.com/kevinburke/ssh_config v0.0.0-20190725054713-01f96b0aa0cd h1:Coekwdh0v github.com/kevinburke/ssh_config v0.0.0-20190725054713-01f96b0aa0cd/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= -github.com/kisielk/errcheck v1.5.0 h1:e8esj/e4R+SAOwFwN+n3zr0nYeCyeweozKfO23MvHzY= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= -github.com/kisielk/gotool v1.0.0 h1:AV2c/EiW3KqPNT9ZKl07ehoAGi4C5/01Cfbblndcapg= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/klauspost/compress v1.11.1 h1:bPb7nMRdOZYDrpPMTA3EInUQrdgoBinqUuSwlGdKDdE= github.com/klauspost/compress v1.11.1/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= github.com/klauspost/cpuid v1.2.0/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= -github.com/klauspost/cpuid v1.2.3 h1:CCtW0xUnWGVINKvE/WWOYKdsPV6mawAtvQuSl8guwQs= github.com/klauspost/cpuid v1.2.3/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/konsorten/go-windows-terminal-sequences v1.0.3 h1:CE8S1cTafDpPvMhIxNJKvHsGVBgn1xWYf1NbHQhywc8= github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515 h1:T+h1c/A9Gawja4Y9mFVWj2vyii2bbUNDw3kt9VxK2EY= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= -github.com/kr/pretty v0.2.0 h1:s5hAObm+yFO5uHYt5dYjxi2rXrsnmRpJx4OYvIWUaQs= github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/pty v1.1.5 h1:hyz3dwM5QLc1Rfoz4FuWJQG5BN7tc6K1MndAUnGpQr4= github.com/kr/pty v1.1.5/go.mod h1:9r2w37qlBe7rQ6e1fg1S/9xpWHSnaqNdHD3WcMdbPDA= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= -github.com/kylelemons/godebug v0.0.0-20170820004349-d65d576e9348 h1:MtvEpTB6LX3vkb4ax0b5D2DHbNAUsen0Gx5wZoq3lV4= github.com/kylelemons/godebug v0.0.0-20170820004349-d65d576e9348/go.mod h1:B69LEHPfb2qLo0BaaOLcbitczOKLWTsrBG9LczfCD4k= -github.com/libopenstorage/openstorage v1.0.0 h1:GLPam7/0mpdP8ZZtKjbfcXJBTIA/T1O6CBErVEFEyIM= github.com/libopenstorage/openstorage v1.0.0/go.mod h1:Sp1sIObHjat1BeXhfMqLZ14wnOzEhNx2YQedreMcUyc= github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de h1:9TO3cAIGXtEhnIaL+V+BEER86oLrvS+kWobKpbJuye0= github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de/go.mod h1:zAbeS9B/r2mtpb6U+EI2rYA5OAXxsYw6wTamcNW+zcE= -github.com/lithammer/dedent v1.1.0 h1:VNzHMVCBNG1j0fh3OrsFRkVUwStdDArbgBWoPAffktY= github.com/lithammer/dedent v1.1.0/go.mod h1:jrXYCQtgg0nJiN+StA2KgR7w6CiQNv9Fd/Z9BP0jIOc= -github.com/lpabon/godbc v0.1.1 h1:ilqjArN1UOENJJdM34I2YHKmF/B0gGq4VLoSGy9iAao= github.com/lpabon/godbc v0.1.1/go.mod h1:Jo9QV0cf3U6jZABgiJ2skINAXb9j8m51r07g4KI92ZA= -github.com/lucas-clemente/aes12 v0.0.0-20171027163421-cd47fb39b79f h1:sSeNEkJrs+0F9TUau0CgWTTNEwF23HST3Eq0A+QIx+A= github.com/lucas-clemente/aes12 v0.0.0-20171027163421-cd47fb39b79f/go.mod h1:JpH9J1c9oX6otFSgdUHwUBUizmKlrMjxWnIAjff4m04= -github.com/lucas-clemente/quic-clients v0.1.0 h1:/P9n0nICT/GnQJkZovtBqridjxU0ao34m7DpMts79qY= github.com/lucas-clemente/quic-clients v0.1.0/go.mod h1:y5xVIEoObKqULIKivu+gD/LU90pL73bTdtQjPBvtCBk= -github.com/lucas-clemente/quic-go v0.10.2 h1:iQtTSZVbd44k94Lu0U16lLBIG3lrnjDvQongjPd4B/s= github.com/lucas-clemente/quic-go v0.10.2/go.mod h1:hvaRS9IHjFLMq76puFJeWNfmn+H70QZ/CXoxqw9bzao= -github.com/lucas-clemente/quic-go-certificates v0.0.0-20160823095156-d2f86524cced h1:zqEC1GJZFbGZA0tRyNZqRjep92K5fujFtFsu5ZW7Aug= github.com/lucas-clemente/quic-go-certificates v0.0.0-20160823095156-d2f86524cced/go.mod h1:NCcRLrOTZbzhZvixZLlERbJtDtYsmMw8Jc4vS8Z0g58= github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= -github.com/magiconair/properties v1.8.1 h1:ZC2Vc7/ZFkGmsVC9KvOjumD+G5lXy2RtTKyzRKO2BQ4= github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/mailru/easyjson v0.0.0-20180823135443-60711f1a8329/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.0.0-20190312143242-1de009706dbe/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= @@ -653,12 +508,9 @@ github.com/mailru/easyjson v0.7.0 h1:aizVhC/NAAcKWb+5QsU1iNOZb4Yws5UO2I+aIprQITM github.com/mailru/easyjson v0.7.0/go.mod h1:KAzv3t3aY1NaHWoQz1+4F1ccyAH66Jk7yos7ldAVICs= github.com/malexdev/utfutil v0.0.0-20180510171754-00c8d4a8e7a8 h1:A6SLdFpRzUUF5v9F/7T1fu3DERmOCgTwwP6x54eyFfU= github.com/malexdev/utfutil v0.0.0-20180510171754-00c8d4a8e7a8/go.mod h1:UtpLyb/EupVKXF/N0b4NRe1DNg+QYJsnsHQ038romhM= -github.com/markbates/pkger v0.17.1 h1:/MKEtWqtc0mZvu9OinB9UzVN9iYCwLWuyUv4Bw+PCno= github.com/markbates/pkger v0.17.1/go.mod h1:0JoVlrol20BSywW79rN3kdFFsE5xYM+rSCQDXbLhiuI= -github.com/marten-seemann/qtls v0.2.3 h1:0yWJ43C62LsZt08vuQJDK1uC1czUc3FJeCLPoNAI4vA= github.com/marten-seemann/qtls v0.2.3/go.mod h1:xzjG7avBwGGbdZ8dTGxlBnLArsVKLvwmjgmPuiQEcYk= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= -github.com/mattn/go-colorable v0.1.4 h1:snbPLB8fVfU9iwbbo30TPtbLRzwWu6aJS6Xh4eaaviA= github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= @@ -668,48 +520,34 @@ github.com/mattn/go-isatty v0.0.12 h1:wuysRhFDzyxgEmMf5xjvJ2M9dZoWAXNNr5LSBS7uHX github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/mattn/go-runewidth v0.0.7/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= -github.com/mattn/go-runewidth v0.0.9 h1:Lm995f3rfxdpd6TSmuVCHVb/QhupuXlYr8sCI/QdE+0= github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369 h1:I0XW9+e1XWDxdcEniV4rQAIOPUGDq67JSCiRCgGCZLI= github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= -github.com/mholt/certmagic v0.6.2-0.20190624175158-6a42ef9fe8c2 h1:xKE9kZ5C8gelJC3+BNM6LJs1x21rivK7yxfTZMAuY2s= github.com/mholt/certmagic v0.6.2-0.20190624175158-6a42ef9fe8c2/go.mod h1:g4cOPxcjV0oFq3qwpjSA30LReKD8AoIfwAY9VvG35NY= github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= github.com/miekg/dns v1.1.3/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= -github.com/miekg/dns v1.1.35 h1:oTfOaDH+mZkdcgdIjH6yBajRGtIwcwcaR+rt23ZSrJs= github.com/miekg/dns v1.1.35/go.mod h1:KNUDUusw/aVsxyTYZM1oqvCicbwhgbNgztCETuNZ7xM= -github.com/mindprince/gonvml v0.0.0-20190828220739-9ebdce4bb989 h1:PS1dLCGtD8bb9RPKJrc8bS7qHL6JnW1CZvwzH9dPoUs= github.com/mindprince/gonvml v0.0.0-20190828220739-9ebdce4bb989/go.mod h1:2eu9pRWp8mo84xCg6KswZ+USQHjwgRhNp06sozOdsTY= -github.com/minio/md5-simd v1.1.0 h1:QPfiOqlZH+Cj9teu0t9b1nTBfPbyTl16Of5MeuShdK4= github.com/minio/md5-simd v1.1.0/go.mod h1:XpBqgZULrMYD3R+M28PcmP0CkI7PEMzB3U77ZrKZ0Gw= -github.com/minio/minio-go/v7 v7.0.2 h1:P/7wFd4KrRBHVo7AKdcqO+9ReoS+XpMjfRFoE5quH0E= github.com/minio/minio-go/v7 v7.0.2/go.mod h1:dJ80Mv2HeGkYLH1sqS/ksz07ON6csH3S6JUMSQ2zAns= -github.com/minio/sha256-simd v0.1.1 h1:5QHSlgo3nt5yKOJrC7W8w7X+NFl8cMPZm96iu8kKUJU= github.com/minio/sha256-simd v0.1.1/go.mod h1:B5e1o+1/KgNmWrSQK08Y6Z1Vb5pwIktudl0J58iy0KM= -github.com/mistifyio/go-zfs v2.1.2-0.20190413222219-f784269be439+incompatible h1:aKW/4cBs+yK6gpqU3K/oIwk9Q/XICqd3zOX/UFuvqmk= github.com/mistifyio/go-zfs v2.1.2-0.20190413222219-f784269be439+incompatible/go.mod h1:8AuVvqP/mXw1px98n46wfvcGfQ4ci2FwoAjKYxuo3Z4= -github.com/mitchellh/cli v1.0.0 h1:iGBIsUe3+HZ/AD/Vd7DErOt5sU9fa8Uj7A2s1aggv1Y= github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= 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.0.0 h1:fzU/JVNcaqHQEcVFAKeR41fkiLdIPrefOvVG1VZ96U0= github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= github.com/mitchellh/go-wordwrap v1.0.0 h1:6GlHJ/LTGMrIJbwgdqdl2eEH8o+Exx/0m8ir9Gns0u4= github.com/mitchellh/go-wordwrap v1.0.0/go.mod h1:ZXFpozHsX6DPmq2I0TCekCxypsnAUbP2oI0UX1GXzOo= -github.com/mitchellh/gox v0.4.0 h1:lfGJxY7ToLJQjHHwi0EX6uYBdK78egf954SQl13PQJc= github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS42BGNg= -github.com/mitchellh/iochan v1.0.0 h1:C+X3KsSTLFVBr/tK1eYN/vs4rJcvsiLU338UhYPJWeY= github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY= github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/mitchellh/mapstructure v1.1.2 h1:fmNYVwqnSfB9mZU6OS2O6GsXM+wcskZDuKQzvN1EDeE= github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= -github.com/moby/ipvs v1.0.1 h1:aoZ7fhLTXgDbzVrAnvV+XbKOU8kOET7B3+xULDF/1o0= github.com/moby/ipvs v1.0.1/go.mod h1:2pngiyseZbIKXNv7hsKj3O9UEz30c53MT9005gt2hxQ= github.com/moby/spdystream v0.2.0 h1:cjW1zVyyoiM0T7b6UoySUFqzXMoqRckQtXwGPiBhOM8= github.com/moby/spdystream v0.2.0/go.mod h1:f7i0iNDQJ059oMTcWxx8MA/zKFIuD/lY+0GqbN2Wy8c= -github.com/moby/sys/mountinfo v0.4.0 h1:1KInV3Huv18akCu58V7lzNlt+jFmqlu1EaErnEHE/VM= github.com/moby/sys/mountinfo v0.4.0/go.mod h1:rEr8tzG/lsIZHBtN/JjGG+LMYx9eXgW2JI+6q0qou+A= github.com/moby/term v0.0.0-20201216013528-df9cb8a40635 h1:rzf0wL0CHVc8CEsgyygG0Mn9CNCCPZqOPaz8RiiHYQk= github.com/moby/term v0.0.0-20201216013528-df9cb8a40635/go.mod h1:FBS0z0QWA44HXygs7VXDUOGoN/1TV3RuWkLO04am3wc= @@ -719,38 +557,27 @@ github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJ github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/modern-go/reflect2 v1.0.1 h1:9f412s+6RmYXLWZSEzVVgPGK7C2PphHj5RJrvfx9AWI= github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= -github.com/mohae/deepcopy v0.0.0-20170603005431-491d3605edfb h1:e+l77LJOEqXTIQihQJVkA6ZxPOUmfPM5e4H7rcpgtSk= github.com/mohae/deepcopy v0.0.0-20170603005431-491d3605edfb/go.mod h1:TaXosZuwdSHYgviHp1DAtfrULt5eUgsSMsZf+YrPgl8= github.com/monochromegane/go-gitignore v0.0.0-20200626010858-205db1a8cc00 h1:n6/2gBQ3RWajuToeY6ZtZTIKv2v7ThUy5KKusIT0yc0= github.com/monochromegane/go-gitignore v0.0.0-20200626010858-205db1a8cc00/go.mod h1:Pm3mSP3c5uWn86xMLZ5Sa7JB9GsEZySvHYXCTK4E9q4= -github.com/morikuni/aec v1.0.0 h1:nP9CBfwrvYnBRgY6qfDQkygYDmYwOilePFkwzv4dU8A= github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc= -github.com/mrunalp/fileutils v0.5.0 h1:NKzVxiH7eSk+OQ4M+ZYW1K6h27RUV3MI6NUTsHhU6Z4= github.com/mrunalp/fileutils v0.5.0/go.mod h1:M1WthSahJixYnrXQl/DFQuteStB1weuxD2QJNHXfbSQ= github.com/munnerz/goautoneg v0.0.0-20120707110453-a547fc61f48d/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= -github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= -github.com/mvdan/xurls v1.1.0 h1:OpuDelGQ1R1ueQ6sSryzi6P+1RtBpfQHM8fJwlE45ww= github.com/mvdan/xurls v1.1.0/go.mod h1:tQlNn3BED8bE/15hnSL2HLkDeLWpNPAwtw7wkEq44oU= github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f h1:KUppIJq7/+SVif2QVs3tOP0zanoHgBEVAwHxUSIzRqU= github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= -github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f h1:y5//uYreIhSUg3J1GEMiLbxo1LJaP8RfCpH6pymGZus= github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw= -github.com/naoina/go-stringutil v0.1.0 h1:rCUeRUHjBjGTSHl0VC00jUPLz8/F9dDzYI70Hzifhks= github.com/naoina/go-stringutil v0.1.0/go.mod h1:XJ2SJL9jCtBh+P9q5btrd/Ylo8XwT/h1USek5+NqSA0= -github.com/naoina/toml v0.1.1 h1:PT/lllxVVN0gzzSqSlHEmP8MJB4MY2U7STGxiouV4X8= github.com/naoina/toml v0.1.1/go.mod h1:NBIhNtsFMo3G2szEBne+bO4gS192HuIYRqfvOWb4i1E= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= github.com/nxadm/tail v1.4.4 h1:DQuhQpB1tVlglWS2hLQ5OV6B5r8aGxSrPc5Qo6uTN78= github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= -github.com/oklog/ulid v1.3.1 h1:EGfNDEx6MqHz8B3uNV6QAib1UR2Lm97sHi3ocA6ESJ4= github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= -github.com/olekukonko/tablewriter v0.0.4 h1:vHD/YYe1Wolo78koG299f7V/VAS08c6IpCLn+Ejf/w8= github.com/olekukonko/tablewriter v0.0.4/go.mod h1:zq6QwlOf5SlnkVbMSr5EoBv3636FWnp+qbPhuoO21uA= -github.com/oliveagle/jsonpath v0.0.0-20180606110733-2e52cf6e6852 h1:Yl0tPBa8QPjGmesFh1D0rDy+q1Twx6FyU7VWHi8wZbI= github.com/oliveagle/jsonpath v0.0.0-20180606110733-2e52cf6e6852/go.mod h1:eqOVx5Vwu4gd2mmMZvVZsgIqNSaW3xxRThUJ0k/TPk4= github.com/onsi/ginkgo v0.0.0-20170829012221-11459a886d9c/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= @@ -771,23 +598,16 @@ github.com/onsi/gomega v1.10.3/go.mod h1:V9xEwhxec5O8UDM77eCW8vLymOMltsqPVYWrpDs github.com/opencontainers/go-digest v0.0.0-20180430190053-c9281466c8b2/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= -github.com/opencontainers/image-spec v1.0.1 h1:JMemWkRwHx4Zj+fVxWoMCFm/8sYGGrUVojFA6h/TRcI= github.com/opencontainers/image-spec v1.0.1/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0= github.com/opencontainers/runc v0.0.0-20190115041553-12f6a991201f/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U= -github.com/opencontainers/runc v1.0.0-rc93 h1:x2UMpOOVf3kQ8arv/EsDGwim8PTNqzL1/EYDr/+scOM= github.com/opencontainers/runc v1.0.0-rc93/go.mod h1:3NOsor4w32B2tC0Zbl8Knk4Wg84SM2ImC1fxBuqJ/H0= github.com/opencontainers/runtime-spec v1.0.2/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= -github.com/opencontainers/runtime-spec v1.0.3-0.20200929063507-e6143ca7d51d h1:pNa8metDkwZjb9g4T8s+krQ+HRgZAkqnXml+wNir/+s= github.com/opencontainers/runtime-spec v1.0.3-0.20200929063507-e6143ca7d51d/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= -github.com/opencontainers/selinux v1.8.0 h1:+77ba4ar4jsCbL1GLbFL8fFM57w6suPfSS9PDLDY7KM= github.com/opencontainers/selinux v1.8.0/go.mod h1:RScLhm78qiWa2gbVCcGkC7tCGdgk3ogry1nUQF8Evvo= -github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c h1:Lgl0gzECD8GnQ5QCWA8o6BtfL6mDH5rQgM4/fX3avOs= github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/patrickmn/go-cache v2.1.0+incompatible h1:HRMgzkcYKYpi3C8ajMPV8OFXaaRUnok+kx1WdO15EQc= github.com/patrickmn/go-cache v2.1.0+incompatible/go.mod h1:3Qf8kWWT7OJRJbdiICTKqZju1ZixQ/KpMGzzAfe6+WQ= -github.com/pborman/uuid v1.2.0 h1:J7Q5mO4ysT1dv8hyrUGHb9+ooztCXu1D8MY8DZYsu3g= github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= -github.com/pelletier/go-toml v1.2.0 h1:T5zMGML61Wp+FlcbWjRDT7yAxhJNAiPPLOFECq181zc= github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= github.com/peterbourgon/diskv v2.0.1+incompatible h1:UBdAOUP5p4RWqPBg048CAvpKN+vxiaj6gdUUzhl4XmI= github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU= @@ -797,7 +617,6 @@ github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= 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/posener/complete v1.1.1 h1:ccV59UEOTzVDnDUEFdT95ZzHVZ+5+158q8+SJb2QV5w= github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= github.com/pquerna/cachecontrol v0.0.0-20171018203845-0dec1b30a021/go.mod h1:prYjPmNq4d1NPVmpShWobRqXY3q7Vp+80DqgxxUrUIA= github.com/pquerna/cachecontrol v0.0.0-20180306154005-525d0eb5f91d h1:7gXyC293Lsm2YWgQ+0uaAFFFDO82ruiQSwc3ua+Vtlc= @@ -825,34 +644,24 @@ github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsT github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= github.com/prometheus/procfs v0.2.0 h1:wH4vA7pcjKuZzjF7lM8awk4fnuJO6idemZXoKnULUx4= github.com/prometheus/procfs v0.2.0/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= -github.com/prometheus/tsdb v0.7.1 h1:YZcsG11NqnK4czYLrWd9mpEuAJIHVQLwdrleYfszMAA= github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= -github.com/quobyte/api v0.1.8 h1:+sOX1gIlC/OaLipqVZWrHgly9Kh9Qo8OygeS0mWAg30= github.com/quobyte/api v0.1.8/go.mod h1:jL7lIHrmqQ7yh05OJ+eEEdHr0u/kmT1Ff9iHd+4H6VI= -github.com/remyoudompheng/bigfft v0.0.0-20170806203942-52369c62f446 h1:/NRJ5vAYoqz+7sG51ubIDHXeWO8DlTSrToPu6q11ziA= github.com/remyoudompheng/bigfft v0.0.0-20170806203942-52369c62f446/go.mod h1:uYEyJGbgTkfkS4+E/PavXkNJcbFIpEtjt2B0KDQ5+9M= github.com/robfig/cron v1.1.0 h1:jk4/Hud3TTdcrJgUOBgsqrZBarcxl6ADIjSC2iniwLY= github.com/robfig/cron v1.1.0/go.mod h1:JGuDeoQd7Z6yL4zQhZ3OPEVHB7fL6Ka6skscFHfmt2k= -github.com/rogpeppe/fastuuid v1.2.0 h1:Ppwyp6VYCF1nvBTXL3trRso7mXMlRrw9ooo375wvi2s= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= -github.com/rogpeppe/go-internal v1.3.0 h1:RR9dF3JtopPvtkroDZuVD7qquD0bnHlKSqaQhgwt8yk= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rs/cors v1.6.0 h1:G9tHG9lebljV9mfp9SNPDL36nCDxmo3zTlAf1YgvzmI= github.com/rs/cors v1.6.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= -github.com/rubiojr/go-vhd v0.0.0-20200706105327-02e210299021 h1:if3/24+h9Sq6eDx8UUz1SO9cT9tizyIsATfB7b4D3tc= github.com/rubiojr/go-vhd v0.0.0-20200706105327-02e210299021/go.mod h1:DM5xW0nvfNNm2uytzsvhI3OnX8uzaRAg8UX/CnDqbto= github.com/russross/blackfriday v0.0.0-20170610170232-067529f716f4/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= github.com/russross/blackfriday v1.5.2 h1:HyvC0ARfnZBqnXwABFeSZHpKvJHJJfPz81GNueLj0oo= github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= github.com/russross/blackfriday/v2 v2.0.1 h1:lPqVAte+HuHNfhJ/0LC98ESWRz8afy9tM/0RK8m9o+Q= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= -github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f h1:UFr9zpz4xgTnIE5yIMtWAMngCdZ9p/+q6lTbgelo80M= github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= -github.com/satori/go.uuid v1.2.0 h1:0uYX9dsZ2yD7q2RtLRtPSdGDWzjeM3TbMJP9utgA0ww= github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= -github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529 h1:nn5Wsu0esKSJiIVhscUtVbo7ada43DJhG55ua/hjS5I= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= -github.com/seccomp/libseccomp-golang v0.9.1 h1:NJjM5DNFOs0s3kYE1WUOr6G8V97sdt46rlXTMfXGWBo= github.com/seccomp/libseccomp-golang v0.9.1/go.mod h1:GbW5+tmTXfcxTToHLXlScSlAvWlF4P2Ca7zGrPiEpWo= github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= github.com/sergi/go-diff v1.1.0 h1:we8PVUC3FE2uYfodKH/nBHMSetSfHDR6scGdBi+erh0= @@ -867,19 +676,14 @@ github.com/sirupsen/logrus v1.7.0 h1:ShrD1U9pZB12TX0cVy0DtePoCH97K8EtX+mg7ZARUtM github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= github.com/skratchdot/open-golang v0.0.0-20160302144031-75fb7ed4208c h1:fyKiXKO1/I/B6Y2U8T7WdQGWzwehOuGIrljPtt7YTTI= github.com/skratchdot/open-golang v0.0.0-20160302144031-75fb7ed4208c/go.mod h1:sUM3LWHvSMaG192sy56D9F7CNvL7jUJVXoqM1QKLnog= -github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d h1:zE9ykElWQ6/NYmHa3jpm/yHnI4xSofP+UP6SpjHcSeM= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= github.com/smartystreets/goconvey v0.0.0-20190330032615-68dc04aab96a/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= -github.com/smartystreets/goconvey v1.6.4 h1:fv0U8FUIMPNf1L9lnHLvLhgicrIVChEkdzIKYqbNC9s= github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= github.com/soheilhy/cmux v0.1.4 h1:0HKaf1o97UwFjHH9o5XsHUOF+tqmdA7KEzXLpiyaw0E= github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= -github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72 h1:qLC7fQah7D6K1B0ujays3HV9gkFtllcxhzImRR7ArPQ= github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= -github.com/spf13/afero v1.2.2 h1:5jhuqJyZCZf2JRofRvN/nIFgIWNzPa3/Vz8mYylgbWc= github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk= -github.com/spf13/cast v1.3.0 h1:oget//CVOEoFewqQxwr0Ej5yjygnqGkvggSE/gB35Q8= github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= github.com/spf13/cobra v1.0.0/go.mod h1:/6GTrnGXV9HjY+aR4k0oJ5tcvakLuG6EuKReYlHNrgE= @@ -887,7 +691,6 @@ github.com/spf13/cobra v1.1.1/go.mod h1:WnodtKOvamDL/PwE2M4iKs8aMDBZ5Q5klgD3qfVJ github.com/spf13/cobra v1.1.3 h1:xghbfqPkxzxP3C/f3n5DdpAbdKLj4ZE4BWQI362l53M= github.com/spf13/cobra v1.1.3/go.mod h1:pGADOWyqRD/YMrPZigI/zbliZ2wVD/23d+is3pSWzOo= github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= -github.com/spf13/jwalterweatherman v1.1.0 h1:ue6voC5bR5F8YxI5S67j9i582FU4Qvo2bmqnqMYADFk= github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo= github.com/spf13/pflag v0.0.0-20170130214245-9ff6c6923cff/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= @@ -895,11 +698,8 @@ github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnIn github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= github.com/spf13/viper v1.4.0/go.mod h1:PTJ7Z/lr49W6bUbkmS1V3by4uWynFiR9p7+dSq/yZzE= -github.com/spf13/viper v1.7.0 h1:xVKxvI7ouOI5I+U9s2eeiUfMaWBVoXA3AWskkrqK0VM= github.com/spf13/viper v1.7.0/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg= -github.com/stoewer/go-strcase v1.2.0 h1:Z2iHWqGXH00XYgqDmNgQbIBxf3wrNq0F3feEy0ainaU= github.com/stoewer/go-strcase v1.2.0/go.mod h1:IBiWB2sKIp3wVVQ3Y035++gc+knqhUQag1KpM8ahLw8= -github.com/storageos/go-api v2.2.0+incompatible h1:U0SablXoZIg06gvSlg8BCdzq1C/SkHVygOVX95Z2MU0= github.com/storageos/go-api v2.2.0+incompatible/go.mod h1:ZrLn+e0ZuF3Y65PNF6dIwbJPZqfmtCXxFm9ckv0agOY= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= @@ -912,33 +712,23 @@ github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5 github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/subosito/gotenv v1.2.0 h1:Slr1R9HxAlEKefgq5jn9U+DnETlIUa6HfgEzj0g5d7s= github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= -github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635 h1:kdXcSzyDtseVEc4yCz2qF8ZrQvIDBJLl4S1c3GCXmoI= github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= -github.com/thecodeteam/goscaleio v0.1.0 h1:SB5tO98lawC+UK8ds/U2jyfOCH7GTcFztcF5x9gbut4= github.com/thecodeteam/goscaleio v0.1.0/go.mod h1:68sdkZAsK8bvEwBlbQnlLS+xU+hvLYM/iQ8KXej1AwM= github.com/tidwall/pretty v1.0.0 h1:HsD+QiTn7sK6flMKIvNmpqz1qrpP3Ps6jOKIKMooyg4= github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= -github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5 h1:LnC5Kc/wtumK+WB441p7ynQJzVuNRJiqddSIE3IlSEQ= github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= -github.com/ugorji/go v1.1.4 h1:j4s+tAvLfL3bZyefP2SEWmhBzmuIlH/eqNuPdFPgngw= github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc= github.com/undefinedlabs/go-mpatch v1.0.6 h1:h8q5ORH/GaOE1Se1DMhrOyljXZEhRcROO7agMqWXCOY= github.com/undefinedlabs/go-mpatch v1.0.6/go.mod h1:TyJZDQ/5AgyN7FSLiBJ8RO9u2c6wbtRvK827b6AVqY4= github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= -github.com/urfave/cli v1.22.2 h1:gsqYFH8bb9ekPA12kRo0hfjngWQjkJPlN9R0N78BoUo= github.com/urfave/cli v1.22.2/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= -github.com/urfave/negroni v1.0.0 h1:kIimOitoypq34K7TG7DUaJ9kq/N4Ofuwi1sjz0KipXc= github.com/urfave/negroni v1.0.0/go.mod h1:Meg73S6kFm/4PpbYdq35yYWoCZ9mS/YSx+lKnmiohz4= -github.com/vektah/gqlparser v1.1.2 h1:ZsyLGn7/7jDNI+y4SEhI4yAxRChlv15pUHMjijT+e68= github.com/vektah/gqlparser v1.1.2/go.mod h1:1ycwN7Ij5njmMkPPAOaRFY4rET2Enx7IkVv3vaXspKw= -github.com/vishvananda/netlink v1.1.0 h1:1iyaYNBLmP6L0220aDnYQpo1QEV4t4hJ+xEEhhJH8j0= github.com/vishvananda/netlink v1.1.0/go.mod h1:cTgwzPIzzgDAYoQrMm0EdrjRUBkTqKYppBueQtXaqoE= github.com/vishvananda/netns v0.0.0-20191106174202-0a2b9b5464df/go.mod h1:JP3t17pCcGlemwknint6hfoeCVQrEMVwxRLRjXpq+BU= -github.com/vishvananda/netns v0.0.0-20200728191858-db3c7e526aae h1:4hwBBUfQCFe3Cym0ZtKyq7L16eZUtYKs+BaHDN6mAns= github.com/vishvananda/netns v0.0.0-20200728191858-db3c7e526aae/go.mod h1:DD4vA1DwXk04H54A1oHXtwZmA0grkVMdPxx/VGLCah0= github.com/vmihailenco/bufpool v0.1.11 h1:gOq2WmBrq0i2yW5QJ16ykccQ4wH9UyEsgLm6czKAd94= github.com/vmihailenco/bufpool v0.1.11/go.mod h1:AFf/MOy3l2CFTKbxwt0mp2MwnqjNEs5H/UxrkA5jxTQ= @@ -949,29 +739,22 @@ github.com/vmihailenco/msgpack/v5 v5.1.0 h1:+od5YbEXxW95SPlW6beocmt8nOtlh83zqat5 github.com/vmihailenco/msgpack/v5 v5.1.0/go.mod h1:C5gboKD0TJPqWDTVTtrQNfRbiBwHZGo8UTqP/9/XvLI= github.com/vmihailenco/tagparser v0.1.2 h1:gnjoVuB/kljJ5wICEEOpx98oXMWPLj22G67Vbd1qPqc= github.com/vmihailenco/tagparser v0.1.2/go.mod h1:OeAg3pn3UbLjkWt+rN9oFYB6u/cQgqMEUPoW2WPyhdI= -github.com/vmware/govmomi v0.20.3 h1:gpw/0Ku+6RgF3jsi7fnCLmlcikBHfKBCUcu1qgc16OU= github.com/vmware/govmomi v0.20.3/go.mod h1:URlwyTFZX72RmxtxuaFL2Uj3fD1JTvZdx59bHWk6aFU= -github.com/willf/bitset v1.1.11 h1:N7Z7E9UvjW+sGsEl7k/SJrvY2reP1A07MrGuCjIOjRE= github.com/willf/bitset v1.1.11/go.mod h1:83CECat5yLh5zVOf4P1ErAgKA5UDvKtgyUABdr3+MjI= github.com/xanzy/ssh-agent v0.2.1 h1:TCbipTQL2JiiCprBWx9frJ2eJlCYT00NmctrHxVAr70= github.com/xanzy/ssh-agent v0.2.1/go.mod h1:mLlQY/MoOhWBj+gOGMQkOeiEvkx+8pJSI+0Bx9h2kr4= -github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2 h1:eY9dn8+vbi4tKz5Qo6v2eYzo7kUS51QINcR5jNpbZS8= github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= github.com/xlab/treeprint v0.0.0-20181112141820-a009c3971eca h1:1CFlNzQhALwjS9mBAUkycX616GzgsuYUOCHA5+HSlXI= github.com/xlab/treeprint v0.0.0-20181112141820-a009c3971eca/go.mod h1:ce1O1j6UtZfjr22oyGxGLbauSBp2YVXpARAosm7dHBg= -github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77 h1:ESFSdwYZvkeru3RtdrYueztKhOBCSAAzS4Gf+k0tEow= github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.3.5 h1:dPmz1Snjq0kmkz159iL7S6WzdahUTHnHB5M56WFVifs= github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= github.com/yuin/gopher-lua v0.0.0-20200816102855-ee81675732da h1:NimzV1aGyq29m5ukMK0AMWEhFaL/lrEOaephfuoiARg= github.com/yuin/gopher-lua v0.0.0-20200816102855-ee81675732da/go.mod h1:E1AXubJBdNmFERAOucpDIxNzeGfLzg0mYh+UfMWdChA= go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= -go.etcd.io/bbolt v1.3.5 h1:XAzx9gjCb0Rxj7EoqcClPD1d5ZBxZJk0jbuoPHenBt0= go.etcd.io/bbolt v1.3.5/go.mod h1:G5EMThwa9y8QZGBClrRx5EY+Yw9kAhnjy3bSjsnlVTQ= -go.etcd.io/etcd v0.5.0-alpha.5.0.20200910180754-dd1b699fc489 h1:1JFLBqwIgdyHN1ZtgjTBwO+blA6gVOmZurpiMEsETKo= go.etcd.io/etcd v0.5.0-alpha.5.0.20200910180754-dd1b699fc489/go.mod h1:yVHk9ub3CSBatqGNg7GRmsnfLWtoW60w4eDYfh7vHDg= go.mongodb.org/mongo-driver v1.0.3/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM= go.mongodb.org/mongo-driver v1.1.1/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM= @@ -980,7 +763,6 @@ go.mongodb.org/mongo-driver v1.1.2/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qL 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 h1:8sGtKOrtQqkN1bp2AtX+misvLIlOmsEsNd+9NIcPEm8= go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opentelemetry.io/otel v0.13.0 h1:2isEnyzjjJZq6r2EKMsFj4TxiQiexsM04AVhwbR/oBA= go.opentelemetry.io/otel v0.13.0/go.mod h1:dlSNewoRYikTkotEnxdmuBHgzT+k/idJSfDv/FxEnOY= @@ -990,12 +772,10 @@ go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.6.0 h1:Ezj3JGmsOnG1MoRWQkPBsKLe9DwWD9QeXzTRzzldNVk= go.uber.org/atomic v1.6.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= -go.uber.org/goleak v1.1.10 h1:z+mqJhf6ss6BSfSM671tgKyZBFPTTJM+HLxnhPC3wu0= go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A= go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= go.uber.org/multierr v1.5.0 h1:KCa4XfM8CWFCpxXRGok+Q0SS/0XBhMDbHHGABQLvD2A= go.uber.org/multierr v1.5.0/go.mod h1:FeouvMocqHpRaaGuG9EjoKcStLC43Zu/fmqdUMPcKYU= -go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee h1:0mgffUl7nfd+FpvXMVz4IDEaUSmT1ysygQC7qYo7sG4= go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA= go.uber.org/zap v1.8.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= @@ -1039,7 +819,6 @@ golang.org/x/exp v0.0.0-20210220032938-85be41e4509f h1:GrkO5AtFUU9U/1f5ctbIBXtBG golang.org/x/exp v0.0.0-20210220032938-85be41e4509f/go.mod h1:I6l2HNBLBZEcrOoCpyKLdY2lHoRZ8lI4x60KMCQDft4= golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= -golang.org/x/image v0.0.0-20190802002840-cff245a6509b h1:+qEpEAPhDZ1o0x3tHzZTQDArnOixOzGD9HUJfcg0mb4= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/lint v0.0.0-20180702182130-06c8688daad7/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= @@ -1050,11 +829,9 @@ golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHl 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 h1:Wh+f8QHJXR411sJR8/vRBTZ7YapZaRvUcLFFJhusH0k= golang.org/x/lint v0.0.0-20200302205851-738671d3881b/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/mobile v0.0.0-20201217150744-e6ae53a27f4f h1:kgfVkAEEQXXQ0qc6dH7n6y37NAYmTFmz0YRwrRjgxKw= golang.org/x/mobile v0.0.0-20201217150744-e6ae53a27f4f/go.mod h1:skQtrUTUwhdJvXM/2KKJzY8pDgNr9I/FOMqDVRPBUS4= 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= @@ -1265,12 +1042,9 @@ gomodules.xyz/jsonpatch/v2 v2.1.0 h1:Phva6wqu+xR//Njw6iorylFFgn/z547tw5Ne3HZPQ+k gomodules.xyz/jsonpatch/v2 v2.1.0/go.mod h1:IhYNNY4jnS53ZnfE4PAmpKtDpTCj1JFXc+3mwe7XcUU= gonum.org/v1/gonum v0.0.0-20180816165407-929014505bf4/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo= gonum.org/v1/gonum v0.0.0-20190331200053-3d26580ed485/go.mod h1:2ltnJ7xHfj0zHS40VVPYEAAMTa3ZGguvHGBSJeRWqE0= -gonum.org/v1/gonum v0.6.2 h1:4r+yNT0+8SWcOkXP+63H2zQbN+USnC73cjGUxnDF94Q= gonum.org/v1/gonum v0.6.2/go.mod h1:9mxDZsDKxgMAuccQkewq682L+0eCu4dCN2yonUJTCLU= gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw= -gonum.org/v1/netlib v0.0.0-20190331212654-76723241ea4e h1:jRyg0XfpwWlhEV8mDfdNGBeSJM2fuyh9Yjrnd8kF2Ts= gonum.org/v1/netlib v0.0.0-20190331212654-76723241ea4e/go.mod h1:kS+toOQn6AQKjmKJ7gzohV1XkqsFehRA2FbsbkopSuQ= -gonum.org/v1/plot v0.0.0-20190515093506-e2840ee46a6b h1:Qh4dB5D/WpoUUp3lSod7qgoyEHbDGPUWjIbnqdqqe1k= gonum.org/v1/plot v0.0.0-20190515093506-e2840ee46a6b/go.mod h1:Wt8AAjI+ypCyYX3nZBvf6cAIx93T+c/OS2HFAYskSZc= 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= @@ -1282,7 +1056,6 @@ google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsb google.golang.org/api v0.15.1-0.20200106000736-b8fc810ca6b5/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.20.0 h1:jz2KixHX7EcCPiQrySzPdnYT7DbINAypCqKZ1Z7GM40= google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= 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= @@ -1322,31 +1095,23 @@ google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpAD google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= google.golang.org/protobuf v1.25.0 h1:Ejskq+SyPohKW+1uil0JJMtmHCgJPJ/qWTxr8qp+R4c= google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= -gopkg.in/alecthomas/kingpin.v2 v2.2.6 h1:jMFz6MfLP0/4fUyZle81rXUoxOBFi19VUFKVDOQfozc= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f h1:BLraFXnmrev5lT+xlilqcH8XK9/i0At2xKjWk4p6zsU= gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/cheggaaa/pb.v1 v1.0.25 h1:Ev7yu1/f6+d+b3pi5vPdRPc6nNtP1umSfcWiEfRqv6I= gopkg.in/cheggaaa/pb.v1 v1.0.25/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= -gopkg.in/errgo.v2 v2.1.0 h1:0vLT13EuvQ0hNvakwLuFZ/jYrLp5F3kcWHXdRggjCE8= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= -gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= -gopkg.in/gcfg.v1 v1.2.0 h1:0HIbH907iBTAntm+88IJV2qmJALDAh8sPekI9Vc1fm0= gopkg.in/gcfg.v1 v1.2.0/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o= gopkg.in/go-playground/webhooks.v5 v5.11.0 h1:V3vej+ZXrVvO2EmBTKlhClEbpTqXH44K5OyLUMOkHMg= gopkg.in/go-playground/webhooks.v5 v5.11.0/go.mod h1:LZbya/qLVdbqDR1aKrGuWV6qbia2zCYSR5dpom2SInQ= gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= gopkg.in/ini.v1 v1.51.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= -gopkg.in/ini.v1 v1.57.0 h1:9unxIsFcTt4I55uWluz+UmL95q4kdJ0buvQ1ZIqVQww= gopkg.in/ini.v1 v1.57.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= -gopkg.in/mcuadros/go-syslog.v2 v2.2.1 h1:60g8zx1BijSVSgLTzLCW9UC4/+i1Ih9jJ1DR5Tgp9vE= gopkg.in/mcuadros/go-syslog.v2 v2.2.1/go.mod h1:l5LPIyOOyIdQquNg+oU6Z3524YwrcqEm0aKH+5zpt2U= -gopkg.in/natefinch/lumberjack.v2 v2.0.0 h1:1Lc07Kr7qY4U2YPouBjpCLxpiyxIVoxqXgkXLknAOE8= gopkg.in/natefinch/lumberjack.v2 v2.0.0/go.mod h1:l0ndWWf7gzL7RNwBG7wST/UCcT4T24xpD6X8LsfU/+k= gopkg.in/square/go-jose.v2 v2.2.2 h1:orlkJ3myw8CN1nVQHBFfloD+L3egixIa4FvUP6RosSA= gopkg.in/square/go-jose.v2 v2.2.2/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= @@ -1380,7 +1145,6 @@ honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWh 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 h1:sXmLre5bzIR6ypkjXCDI3jHPssRhc8KD/Ome589sc3U= honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= k8s.io/api v0.21.0 h1:gu5iGF4V6tfVCQ/R+8Hc0h7H1JuEhzyEi9S4R5LM8+Y= k8s.io/api v0.21.0/go.mod h1:+YbrhBBGgsxbF6o6Kj4KJPJnBmAKuXDeS3E18bgHNVU= @@ -1394,9 +1158,7 @@ k8s.io/cli-runtime v0.21.0 h1:/V2Kkxtf6x5NI2z+Sd/mIrq4FQyQ8jzZAUD6N5RnN7Y= k8s.io/cli-runtime v0.21.0/go.mod h1:XoaHP93mGPF37MkLbjGVYqg3S1MnsFdKtiA/RZzzxOo= k8s.io/client-go v0.21.0 h1:n0zzzJsAQmJngpC0IhgFcApZyoGXPrDIAD601HD09ag= k8s.io/client-go v0.21.0/go.mod h1:nNBytTF9qPFDEhoqgEPaarobC8QPae13bElIVHzIglA= -k8s.io/cloud-provider v0.21.0 h1:NSTS+czpv6LQAaIpY/VUghsT4oj62hYmQPErkDKTzKU= k8s.io/cloud-provider v0.21.0/go.mod h1:z17TQgu3JgUFjcgby8sj5X86YdVK5Pbt+jm/eYMZU9M= -k8s.io/cluster-bootstrap v0.21.0 h1:9CfnWrvXm12k6fP3WR3ist76rrqGq6H5pRVEUvEc4Ws= k8s.io/cluster-bootstrap v0.21.0/go.mod h1:rs7i1JpBCa56YNmnYxFJuoUghIwpMzDidY8ZmqiRnrQ= k8s.io/code-generator v0.21.0 h1:LGWJOvkbBNpuRBqBRXUjzfvymUh7F/iR2KDpwLnqCM4= k8s.io/code-generator v0.21.0/go.mod h1:hUlps5+9QaTrKx+jiM4rmq7YmH8wPOIko64uZCHDh6Q= @@ -1404,16 +1166,12 @@ k8s.io/component-base v0.21.0 h1:tLLGp4BBjQaCpS/KiuWh7m2xqvAdsxLm4ATxHSe5Zpg= k8s.io/component-base v0.21.0/go.mod h1:qvtjz6X0USWXbgmbfXR+Agik4RZ3jv2Bgr5QnZzdPYw= k8s.io/component-helpers v0.21.0 h1:SoWLsd63LI5uwofcHVSO4jtlmZEJRycfwNBKU4eAGPQ= k8s.io/component-helpers v0.21.0/go.mod h1:tezqefP7lxfvJyR+0a+6QtVrkZ/wIkyMLK4WcQ3Cj8U= -k8s.io/controller-manager v0.21.0 h1:60kaloHJ815CDLohPmoa0n5/WbW7J0PXHX+y+dOBSWc= k8s.io/controller-manager v0.21.0/go.mod h1:Ohy0GRNRKPVjB8C8G+dV+4aPn26m8HYUI6ejloUBvUA= -k8s.io/cri-api v0.21.0 h1:BxSMDXDuNE+Cv9CMenzQBn5SXYBTid/fhLetjI2KK14= k8s.io/cri-api v0.21.0/go.mod h1:nJbXlTpXwYCYuGMR7v3PQb1Du4WOGj2I9085xMVjr3I= -k8s.io/csi-translation-lib v0.21.0 h1:kzwraa2eenvtMuOAe+xSQgIgG0G88pocorYP8CSitRY= k8s.io/csi-translation-lib v0.21.0/go.mod h1:edq+UMpgqEx3roTuGF/03uIuSOsI986jtu65+ytLlkA= k8s.io/gengo v0.0.0-20200413195148-3a45101e95ac/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= k8s.io/gengo v0.0.0-20201214224949-b6c5ce23f027 h1:Uusb3oh8XcdzDF/ndlI4ToKTYVlkCSJP39SRY2mfRAw= k8s.io/gengo v0.0.0-20201214224949-b6c5ce23f027/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E= -k8s.io/heapster v1.2.0-beta.1 h1:lUsE/AHOMHpi3MLlBEkaU8Esxm5QhdyCrv1o7ot0s84= k8s.io/heapster v1.2.0-beta.1/go.mod h1:h1uhptVXMwC8xtZBYsPXKVi8fpdlYkTs6k949KozGrM= k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE= k8s.io/klog/v2 v2.2.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y= @@ -1422,62 +1180,41 @@ k8s.io/klog/v2 v2.8.0 h1:Q3gmuM9hKEjefWFFYF0Mat+YyFJvsUyYuwyNNJ5C9Ts= k8s.io/klog/v2 v2.8.0/go.mod h1:hy9LJ/NvuK+iVyP4Ehqva4HxZG/oXyIS3n3Jmire4Ec= k8s.io/kube-aggregator v0.21.0 h1:my2WYu8RJcj/ZzWAjPPnmxNRELk/iCdPjMaOmsZOeBU= k8s.io/kube-aggregator v0.21.0/go.mod h1:sIaa9L4QCBo9gjPyoGJns4cBjYVLq3s49FxF7m/1A0A= -k8s.io/kube-controller-manager v0.21.0 h1:Ot5d8YAZfqR7Sp4Hh+XGUWQGQByP8UYoELgfJTpSSDw= k8s.io/kube-controller-manager v0.21.0/go.mod h1:QGJ1P7eU4FQq8evpCHN5e4QwPpcr2sbWFJBO/DKBUrw= k8s.io/kube-openapi v0.0.0-20210305001622-591a79e4bda7 h1:vEx13qjvaZ4yfObSSXW7BrMc/KQBBT/Jyee8XtLf4x0= k8s.io/kube-openapi v0.0.0-20210305001622-591a79e4bda7/go.mod h1:wXW5VT87nVfh/iLV8FpR2uDvrFyomxbtb1KivDbvPTE= -k8s.io/kube-proxy v0.21.0 h1:wByz/w3nbdBQK62I4GiCUSkBhMLWTrOWKMbZ1VzSsp0= k8s.io/kube-proxy v0.21.0/go.mod h1:36jW3e6+5iQql9tHrLjVrmwpPsbhTywoI6OCFL7MWRs= -k8s.io/kube-scheduler v0.21.0 h1:0xeKSafaqxfYJNrZne08/7YGrLXJF0H3htAMApXN5I4= k8s.io/kube-scheduler v0.21.0/go.mod h1:wf1oi1NHSsFYfG7lKwxJVmnQNBnhL9vOMXztcKQu5IU= k8s.io/kubectl v0.21.0 h1:WZXlnG/yjcE4LWO2g6ULjFxtzK6H1TKzsfaBFuVIhNg= k8s.io/kubectl v0.21.0/go.mod h1:EU37NukZRXn1TpAkMUoy8Z/B2u6wjHDS4aInsDzVvks= -k8s.io/kubelet v0.21.0 h1:1VUfM5vKqLPlWFI0zee6fm9kwIZ/UEOGCodVFN+OZrg= k8s.io/kubelet v0.21.0/go.mod h1:G5ZxMTVev9t4bhmsSxDAWhH6wXDYEVHVVFyYsw4laR4= k8s.io/kubernetes v1.21.0 h1:LUUQgdFsKB+wVgKPUapmXjkvvJHSLN53CuQwre4c+mM= k8s.io/kubernetes v1.21.0/go.mod h1:Yx6XZ8zalyqEk7but+j4+5SvLzdyH1eeqZ4cwO+5dD4= -k8s.io/legacy-cloud-providers v0.21.0 h1:iWf5xaX9yvYT5mkz8UB96UtISQ5IkrWeuMPMhRp01ZY= k8s.io/legacy-cloud-providers v0.21.0/go.mod h1:bNxo7gDg+PGkBmT/MFZswLTWdSWK9kAlS1s8DJca5q4= -k8s.io/metrics v0.21.0 h1:uwS3CgheLKaw3PTpwhjMswnm/PMqeLbdLH88VI7FMQQ= k8s.io/metrics v0.21.0/go.mod h1:L3Ji9EGPP1YBbfm9sPfEXSpnj8i24bfQbAFAsW0NueQ= -k8s.io/mount-utils v0.21.0 h1:Z8mCBpIBG26Q9TFg6d0Wvai6AL1mMPqSYBbNVxo6J2A= k8s.io/mount-utils v0.21.0/go.mod h1:dwXbIPxKtTjrBEaX1aK/CMEf1KZ8GzMHpe3NEBfdFXI= -k8s.io/sample-apiserver v0.21.0 h1:hylPe5pJdromq/WnxyzIohFByOfNOC3agzoXWeqb+T4= k8s.io/sample-apiserver v0.21.0/go.mod h1:yMffYq14yQZtuVPVBGaBJ+3Scb2xHT6QeqFfk3v+AEY= -k8s.io/system-validators v1.4.0 h1:8ruXIHkuTAGfv9rHJproNWFW8oLASThFkCOxeHPYkNU= k8s.io/system-validators v1.4.0/go.mod h1:bPldcLgkIUK22ALflnsXk8pvkTEndYdNuaHH6gRrl0Q= k8s.io/utils v0.0.0-20201110183641-67b214c5f920/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= k8s.io/utils v0.0.0-20210111153108-fddb29f9d009 h1:0T5IaWHO3sJTEmCP6mUlBvMukxPKUQWqiI/YuiBNMiQ= k8s.io/utils v0.0.0-20210111153108-fddb29f9d009/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= layeh.com/gopher-json v0.0.0-20190114024228-97fed8db8427 h1:RZkKxMR3jbQxdCEcglq3j7wY3PRJIopAwBlx1RE71X0= layeh.com/gopher-json v0.0.0-20190114024228-97fed8db8427/go.mod h1:ivKkcY8Zxw5ba0jldhZCYYQfGdb2K6u9tbYK1AwMIBc= -modernc.org/cc v1.0.0 h1:nPibNuDEx6tvYrUAtvDTTw98rx5juGsa5zuDnKwEEQQ= modernc.org/cc v1.0.0/go.mod h1:1Sk4//wdnYJiUIxnW8ddKpaOJCF37yAdqYnkxUpaYxw= -modernc.org/golex v1.0.0 h1:wWpDlbK8ejRfSyi0frMyhilD3JBvtcx2AdGDnU+JtsE= modernc.org/golex v1.0.0/go.mod h1:b/QX9oBD/LhixY6NDh+IdGv17hgB+51fET1i2kPSmvk= -modernc.org/mathutil v1.0.0 h1:93vKjrJopTPrtTNpZ8XIovER7iCIH1QU7wNbOQXC60I= modernc.org/mathutil v1.0.0/go.mod h1:wU0vUrJsVWBZ4P6e7xtFJEhFSNsfRLJ8H458uRjg03k= -modernc.org/strutil v1.0.0 h1:XVFtQwFVwc02Wk+0L/Z/zDDXO81r5Lhe6iMKmGX3KhE= modernc.org/strutil v1.0.0/go.mod h1:lstksw84oURvj9y3tn8lGvRxyRC1S2+g5uuIzNfIOBs= -modernc.org/xc v1.0.0 h1:7ccXrupWZIS3twbUGrtKmHS2DXY6xegFua+6O3xgAFU= modernc.org/xc v1.0.0/go.mod h1:mRNCo0bvLjGhHO9WsyuKVU4q0ceiDDDoEeWDJHrNx8I= -rsc.io/binaryregexp v0.2.0 h1:HfqmD5MEmC0zvwBuF187nq9mdnXjXsSivRiXN7SmRkE= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= -rsc.io/pdf v0.1.1 h1:k1MczvYDUvJBe93bYd7wrZLLUEcLZAuF824/I4e5Xr4= rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= -rsc.io/quote/v3 v3.1.0 h1:9JKUTTIUgS6kzR9mK1YuGKv6Nl+DijDNIc0ghT58FaY= rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= -rsc.io/sampler v1.3.0 h1:7uVkIFmeBqHfdjD+gZwtXXI+RODJ2Wc4O7MPEh/QiW4= rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= -sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.15 h1:4uqm9Mv+w2MmBYD+F4qf/v6tDFUdPOk29C095RbU5mY= sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.15/go.mod h1:LEScyzhFmoF5pso/YSeBstl57mOzx9xlU9n85RGrDQg= sigs.k8s.io/controller-runtime v0.8.3 h1:GMHvzjTmaWHQB8HadW+dIvBoJuLvZObYJ5YoZruPRao= sigs.k8s.io/controller-runtime v0.8.3/go.mod h1:U/l+DUopBc1ecfRZ5aviA9JDmGFQKvLf5YkZNx2e0sU= sigs.k8s.io/kustomize/api v0.8.5 h1:bfCXGXDAbFbb/Jv5AhMj2BB8a5VAJuuQ5/KU69WtDjQ= sigs.k8s.io/kustomize/api v0.8.5/go.mod h1:M377apnKT5ZHJS++6H4rQoCHmWtt6qTpp3mbe7p6OLY= -sigs.k8s.io/kustomize/cmd/config v0.9.7 h1:xxvL/np/zYHVuCH1tNFehlyEtSW5oXjoI6ycejiyOwQ= sigs.k8s.io/kustomize/cmd/config v0.9.7/go.mod h1:MvXCpHs77cfyxRmCNUQjIqCmZyYsbn5PyQpWiq44nW0= -sigs.k8s.io/kustomize/kustomize/v4 v4.0.5 h1:0xQWp03aKWilF6UJrupcA2rCoCn3jejkJ+m/CCI/Fis= sigs.k8s.io/kustomize/kustomize/v4 v4.0.5/go.mod h1:C7rYla7sI8EnxHE/xEhRBSHMNfcL91fx0uKmUlUhrBk= sigs.k8s.io/kustomize/kyaml v0.10.15 h1:dSLgG78KyaxN4HylPXdK+7zB3k7sW6q3IcCmcfKA+aI= sigs.k8s.io/kustomize/kyaml v0.10.15/go.mod h1:mlQFagmkm1P+W4lZJbJ/yaxMd8PqMRSC4cPcfUVt5Hg= From 2ef8dd5cd62fcc6ce72693e4a5390b8b2f76777d Mon Sep 17 00:00:00 2001 From: Kai Reichart Date: Mon, 14 Jun 2021 14:37:13 +0200 Subject: [PATCH 06/25] change value file name Signed-off-by: Kai Reichart --- test/e2e/helm_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/e2e/helm_test.go b/test/e2e/helm_test.go index 7c7ba171ac34f..f181c8d33e7ae 100644 --- a/test/e2e/helm_test.go +++ b/test/e2e/helm_test.go @@ -126,7 +126,7 @@ func TestHelmExternalValuesAdded(t *testing.T) { Expect(SyncStatusIs(SyncStatusCodeSynced)). And(func(app *Application) { assert.Equal(t, []string{"helm-external-values/chart/values_external.yaml"}, app.Spec.Source.Helm.ExternalValueFiles[0].ValueFiles) - assert.Equal(t, []string{"helm-external-values/chart/values_external2.yaml"}, app.Spec.Source.Helm.ExternalValueFiles[1].ValueFiles) + assert.Equal(t, []string{"helm-external-values/chart/values_external_2.yaml"}, app.Spec.Source.Helm.ExternalValueFiles[1].ValueFiles) }). And(func(app *Application) { output, err := RunCli("app", "manifests", app.Name) From 23241550b1553d36c36d91d7a3d4d380985f00ce Mon Sep 17 00:00:00 2001 From: Kai Reichart Date: Mon, 14 Jun 2021 15:53:47 +0200 Subject: [PATCH 07/25] package versions Signed-off-by: Kai Reichart --- go.mod | 3 +-- go.sum | 14 ++++---------- 2 files changed, 5 insertions(+), 12 deletions(-) diff --git a/go.mod b/go.mod index a4f64818de381..af303e08a71df 100644 --- a/go.mod +++ b/go.mod @@ -62,11 +62,10 @@ require ( github.com/vmihailenco/msgpack/v5 v5.1.0 // indirect github.com/yuin/gopher-lua v0.0.0-20200816102855-ee81675732da golang.org/x/crypto v0.0.0-20210220033148-5ea612d1eb83 - golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4 + golang.org/x/net v0.0.0-20210224082022-3d97a244fca7 golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d golang.org/x/sync v0.0.0-20210220032951-036812b2e83c golang.org/x/term v0.0.0-20210220032956-6a3ed077a48d - golang.org/x/tools v0.1.1 // indirect google.golang.org/genproto v0.0.0-20201110150050-8816d57aaa9a google.golang.org/grpc v1.33.1 google.golang.org/protobuf v1.25.0 diff --git a/go.sum b/go.sum index 67acdc1620a03..bbb225f0e0103 100644 --- a/go.sum +++ b/go.sum @@ -749,7 +749,6 @@ github.com/xlab/treeprint v0.0.0-20181112141820-a009c3971eca/go.mod h1:ce1O1j6Ut github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= github.com/yuin/goldmark v1.1.27/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/gopher-lua v0.0.0-20200816102855-ee81675732da h1:NimzV1aGyq29m5ukMK0AMWEhFaL/lrEOaephfuoiARg= github.com/yuin/gopher-lua v0.0.0-20200816102855-ee81675732da/go.mod h1:E1AXubJBdNmFERAOucpDIxNzeGfLzg0mYh+UfMWdChA= go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= @@ -840,9 +839,8 @@ golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzB golang.org/x/mod v0.1.1-0.20191209134235-331c550502dd/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= 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.3.1-0.20200828183125-ce943fd02449 h1:xUIPaMhvROX9dhPvRCenIJtU78+lbEenGbgqB5hfHCQ= golang.org/x/mod v0.3.1-0.20200828183125-ce943fd02449/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.4.2 h1:Gz96sIWK3OalVv/I/qNygP42zyoKp3xptRVCWRFEBvo= -golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -883,9 +881,8 @@ golang.org/x/net v0.0.0-20201022231255-08b38378de70/go.mod h1:sp8m0HH+o8qH0wwXwY golang.org/x/net v0.0.0-20201024042810-be3efd7ff127/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-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20210224082022-3d97a244fca7 h1:OgUuv8lsRpBibGNbSizVwKWlysjaNzmC9gYMhPVfqFM= golang.org/x/net v0.0.0-20210224082022-3d97a244fca7/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4 h1:4nGaVu0QrbjT/AK2PRLuQfQuh6DJve+pELhqTdAj3x0= -golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= 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= @@ -960,10 +957,8 @@ golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210225134936-a50acf3fe073/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210301091718-77cc2087c03b h1:kHlr0tATeLRMEiZJu5CknOw/E8V6h69sXXQFGoPtjcc= golang.org/x/sys v0.0.0-20210301091718-77cc2087c03b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210510120138-977fb7262007 h1:gG67DSER+11cZvqIMb8S8bt0vZtiN6xWYARwirrOSfE= -golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210220032956-6a3ed077a48d h1:SZxvLBoTP5yHO3Frd4z4vrF+DBX9vMVanchswa69toE= @@ -1030,9 +1025,8 @@ golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjs golang.org/x/tools v0.0.0-20200505023115-26f46d2f7ef8/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.1.0 h1:po9/4sTYwZU9lPhi1tOrb4hCv3qrhiQ77LZfGa2OjwY= golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= -golang.org/x/tools v0.1.1 h1:wGiQel/hW0NnEkJUk8lbzkX2gFJU6PFxf1v5OlCfuOs= -golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= 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= From 4afedb95676ab9028d90b0da7ea920f5ad44a2bf Mon Sep 17 00:00:00 2001 From: Kai Reichart Date: Tue, 15 Jun 2021 10:01:14 +0200 Subject: [PATCH 08/25] change test location Signed-off-by: Kai Reichart --- test/e2e/testdata/helm-external-values/app.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/test/e2e/testdata/helm-external-values/app.yaml b/test/e2e/testdata/helm-external-values/app.yaml index 16ca2faccdefb..6ff5f68e8a793 100644 --- a/test/e2e/testdata/helm-external-values/app.yaml +++ b/test/e2e/testdata/helm-external-values/app.yaml @@ -8,7 +8,7 @@ spec: source: repoURL: {{.RepoURL}} targetRevision: HEAD - path: {{.Path}} + path: {{.Path}}/chart helm: valueFiles: - values.yaml @@ -16,11 +16,11 @@ spec: - repoURL: {{.RepoURL}} targetRevision: HEAD valueFiles: - - {{.Path}}/values_external.yaml + - {{.Path}}/chart/values_external.yaml - repoURL: {{.RepoURL}} targetRevision: HEAD valueFiles: - - {{.Path}}/values_external_2.yaml + - {{.Path}}/chart/values_external_2.yaml destination: server: https://kubernetes.default.svc namespace: {{.DeploymentNamespace}} From a0026b0c268b8c1b2e5ecbe60fb348d6d311a32b Mon Sep 17 00:00:00 2001 From: Kai Reichart Date: Tue, 15 Jun 2021 10:19:35 +0200 Subject: [PATCH 09/25] change test Signed-off-by: Kai Reichart --- test/e2e/testdata/helm-external-values/app.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/e2e/testdata/helm-external-values/app.yaml b/test/e2e/testdata/helm-external-values/app.yaml index 6ff5f68e8a793..12f89bb1b95c1 100644 --- a/test/e2e/testdata/helm-external-values/app.yaml +++ b/test/e2e/testdata/helm-external-values/app.yaml @@ -8,7 +8,7 @@ spec: source: repoURL: {{.RepoURL}} targetRevision: HEAD - path: {{.Path}}/chart + path: {{.Path}} helm: valueFiles: - values.yaml From 16b9d34b62ccda6c66275b7b14ae394f91e6356f Mon Sep 17 00:00:00 2001 From: Kai Reichart Date: Tue, 15 Jun 2021 10:38:03 +0200 Subject: [PATCH 10/25] values file location Signed-off-by: Kai Reichart --- test/e2e/testdata/helm-external-values/app.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/e2e/testdata/helm-external-values/app.yaml b/test/e2e/testdata/helm-external-values/app.yaml index 12f89bb1b95c1..7776795afaddc 100644 --- a/test/e2e/testdata/helm-external-values/app.yaml +++ b/test/e2e/testdata/helm-external-values/app.yaml @@ -16,11 +16,11 @@ spec: - repoURL: {{.RepoURL}} targetRevision: HEAD valueFiles: - - {{.Path}}/chart/values_external.yaml + - "{{.Path}}/values_external.yaml" - repoURL: {{.RepoURL}} targetRevision: HEAD valueFiles: - - {{.Path}}/chart/values_external_2.yaml + - "{{.Path}}/values_external_2.yaml" destination: server: https://kubernetes.default.svc namespace: {{.DeploymentNamespace}} From fd14f72e78558b3511fb6f035b67f75e543dbbab Mon Sep 17 00:00:00 2001 From: Kai Reichart Date: Tue, 15 Jun 2021 11:02:56 +0200 Subject: [PATCH 11/25] values file location Signed-off-by: Kai Reichart --- test/e2e/testdata/helm-external-values/app.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/e2e/testdata/helm-external-values/app.yaml b/test/e2e/testdata/helm-external-values/app.yaml index 7776795afaddc..e873d3855f35f 100644 --- a/test/e2e/testdata/helm-external-values/app.yaml +++ b/test/e2e/testdata/helm-external-values/app.yaml @@ -16,11 +16,11 @@ spec: - repoURL: {{.RepoURL}} targetRevision: HEAD valueFiles: - - "{{.Path}}/values_external.yaml" + - argo-e2e/testdata/helm-external-values/values_external.yaml - repoURL: {{.RepoURL}} targetRevision: HEAD valueFiles: - - "{{.Path}}/values_external_2.yaml" + - argo-e2e/testdata/helm-external-values/values_external.yaml destination: server: https://kubernetes.default.svc namespace: {{.DeploymentNamespace}} From e6bcd7c0452784d65ec94e74cfb9296306863ed9 Mon Sep 17 00:00:00 2001 From: Kai Reichart Date: Tue, 15 Jun 2021 11:21:16 +0200 Subject: [PATCH 12/25] value file location Signed-off-by: Kai Reichart --- test/e2e/testdata/helm-external-values/app.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/e2e/testdata/helm-external-values/app.yaml b/test/e2e/testdata/helm-external-values/app.yaml index e873d3855f35f..4630b08bb389b 100644 --- a/test/e2e/testdata/helm-external-values/app.yaml +++ b/test/e2e/testdata/helm-external-values/app.yaml @@ -16,11 +16,11 @@ spec: - repoURL: {{.RepoURL}} targetRevision: HEAD valueFiles: - - argo-e2e/testdata/helm-external-values/values_external.yaml + - helm-external-values/values_external.yaml - repoURL: {{.RepoURL}} targetRevision: HEAD valueFiles: - - argo-e2e/testdata/helm-external-values/values_external.yaml + - helm-external-values/values_external.yaml destination: server: https://kubernetes.default.svc namespace: {{.DeploymentNamespace}} From 48b08017575431b650d6a596c728b36d818a3e6d Mon Sep 17 00:00:00 2001 From: Kai Reichart Date: Tue, 15 Jun 2021 11:57:01 +0200 Subject: [PATCH 13/25] fixed bug with file:// urls Signed-off-by: Kai Reichart --- reposerver/repository/repository.go | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/reposerver/repository/repository.go b/reposerver/repository/repository.go index a3412a545bf5f..4daec52dd08c4 100644 --- a/reposerver/repository/repository.go +++ b/reposerver/repository/repository.go @@ -651,7 +651,13 @@ func helmTemplate(appPath string, repoRoot string, env *v1alpha1.Env, q *apiclie templateOpts.Values = append(templateOpts.Values, val) } for _, exVal := range appHelm.ExternalValueFiles { - repoFilePath := filepath.Join(os.TempDir(), strings.Replace(git.NormalizeGitURL(exVal.RepoURL), "/", "_", -1)) + repoFilePath := "" + if strings.HasPrefix(exVal.RepoURL, "file://") { + repoFilePath = exVal.RepoURL + } else { + repoFilePath = filepath.Join(os.TempDir(), strings.Replace(git.NormalizeGitURL(exVal.RepoURL), "/", "_", -1)) + } + for _, file := range exVal.ValueFiles { valueFilePath := filepath.Join(repoFilePath, file) templateOpts.Values = append(templateOpts.Values, valueFilePath) From 988d7c859c59acffb468c03b0532fa2f29ffe165 Mon Sep 17 00:00:00 2001 From: Kai Reichart Date: Tue, 15 Jun 2021 12:50:04 +0200 Subject: [PATCH 14/25] file bug Signed-off-by: Kai Reichart --- reposerver/repository/repository.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reposerver/repository/repository.go b/reposerver/repository/repository.go index 4daec52dd08c4..7889b6eaa150f 100644 --- a/reposerver/repository/repository.go +++ b/reposerver/repository/repository.go @@ -653,7 +653,7 @@ func helmTemplate(appPath string, repoRoot string, env *v1alpha1.Env, q *apiclie for _, exVal := range appHelm.ExternalValueFiles { repoFilePath := "" if strings.HasPrefix(exVal.RepoURL, "file://") { - repoFilePath = exVal.RepoURL + repoFilePath = exVal.RepoURL[7:] } else { repoFilePath = filepath.Join(os.TempDir(), strings.Replace(git.NormalizeGitURL(exVal.RepoURL), "/", "_", -1)) } From d6d3b3e64c28e7330c0704345da6cd7f730bee8b Mon Sep 17 00:00:00 2001 From: Kai Reichart Date: Tue, 15 Jun 2021 13:08:26 +0200 Subject: [PATCH 15/25] file path Signed-off-by: Kai Reichart --- test/e2e/testdata/helm-external-values/app.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/e2e/testdata/helm-external-values/app.yaml b/test/e2e/testdata/helm-external-values/app.yaml index 4630b08bb389b..16ca2faccdefb 100644 --- a/test/e2e/testdata/helm-external-values/app.yaml +++ b/test/e2e/testdata/helm-external-values/app.yaml @@ -16,11 +16,11 @@ spec: - repoURL: {{.RepoURL}} targetRevision: HEAD valueFiles: - - helm-external-values/values_external.yaml + - {{.Path}}/values_external.yaml - repoURL: {{.RepoURL}} targetRevision: HEAD valueFiles: - - helm-external-values/values_external.yaml + - {{.Path}}/values_external_2.yaml destination: server: https://kubernetes.default.svc namespace: {{.DeploymentNamespace}} From 29b4ef553aa7b276e1db12d1b3420153bc57f50c Mon Sep 17 00:00:00 2001 From: Kai Reichart Date: Tue, 15 Jun 2021 13:23:45 +0200 Subject: [PATCH 16/25] test chart fix Signed-off-by: Kai Reichart --- .../helm-external-values/chart/templates/configmap.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/e2e/testdata/helm-external-values/chart/templates/configmap.yaml b/test/e2e/testdata/helm-external-values/chart/templates/configmap.yaml index 8a6d97efb2477..ac53f24bb0705 100644 --- a/test/e2e/testdata/helm-external-values/chart/templates/configmap.yaml +++ b/test/e2e/testdata/helm-external-values/chart/templates/configmap.yaml @@ -3,7 +3,7 @@ kind: ConfigMap metadata: name: default data: - foo: "{{ .Values.default }}" + foo: "{{ .Values.defaultValue }}" --- From fd26f1fce91ff6421db39445a22e158299b2b41c Mon Sep 17 00:00:00 2001 From: Kai Reichart Date: Tue, 15 Jun 2021 14:11:32 +0200 Subject: [PATCH 17/25] test configmap changes Signed-off-by: Kai Reichart --- .../helm-external-values/chart/templates/configmap.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/e2e/testdata/helm-external-values/chart/templates/configmap.yaml b/test/e2e/testdata/helm-external-values/chart/templates/configmap.yaml index ac53f24bb0705..04969389b29fc 100644 --- a/test/e2e/testdata/helm-external-values/chart/templates/configmap.yaml +++ b/test/e2e/testdata/helm-external-values/chart/templates/configmap.yaml @@ -10,7 +10,7 @@ data: apiVersion: v1 kind: ConfigMap metadata: - name: external1Override + name: external-override-1 data: foo: "{{ .Values.external1Override }}" @@ -19,6 +19,6 @@ data: apiVersion: v1 kind: ConfigMap metadata: - name: external2Override + name: external-override-2 data: foo: "{{ .Values.external2Override }}" From 9ad1353f3717d399ca389d28d49d65babc536275 Mon Sep 17 00:00:00 2001 From: Kai Reichart Date: Tue, 29 Jun 2021 15:05:36 +0200 Subject: [PATCH 18/25] generate files Signed-off-by: Kai Reichart --- pkg/apis/application/v1alpha1/generated.pb.go | 834 +++++++++--------- 1 file changed, 419 insertions(+), 415 deletions(-) diff --git a/pkg/apis/application/v1alpha1/generated.pb.go b/pkg/apis/application/v1alpha1/generated.pb.go index e42b64b8067f4..134539653736b 100644 --- a/pkg/apis/application/v1alpha1/generated.pb.go +++ b/pkg/apis/application/v1alpha1/generated.pb.go @@ -2660,421 +2660,425 @@ func init() { } var fileDescriptor_030104ce3b95bcac = []byte{ - // 6622 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x3d, 0x5b, 0x6c, 0x24, 0xd9, - 0x55, 0x5b, 0xdd, 0x7e, 0x74, 0x1f, 0x3f, 0x66, 0x7c, 0xe7, 0xb1, 0xce, 0xb0, 0x19, 0x8f, 0x6a, - 0x95, 0x64, 0x21, 0x89, 0xcd, 0x0e, 0x4b, 0x58, 0xb2, 0x21, 0xc1, 0x6d, 0xcf, 0xc3, 0x33, 0x9e, - 0x19, 0xef, 0xb1, 0x67, 0x86, 0x3c, 0x08, 0x5b, 0xae, 0xbe, 0xdd, 0xae, 0x71, 0x77, 0x55, 0x6f, - 0x55, 0xb5, 0xc7, 0x9d, 0x90, 0x17, 0x0a, 0x64, 0x45, 0x1e, 0x1b, 0x25, 0xf9, 0x48, 0x24, 0x04, - 0xe1, 0x21, 0x24, 0x3e, 0x22, 0xe0, 0x0b, 0x10, 0xf0, 0x93, 0xaf, 0x00, 0x12, 0x44, 0x02, 0x25, - 0x81, 0x08, 0x93, 0x0c, 0x41, 0x3c, 0x24, 0x40, 0x40, 0x7e, 0x98, 0x2f, 0x74, 0xdf, 0xb7, 0xaa, - 0xbb, 0xc7, 0xf6, 0xb8, 0x66, 0x12, 0x45, 0xfc, 0x75, 0x9d, 0x73, 0xee, 0x39, 0xe7, 0xbe, 0xce, - 0x3d, 0xf7, 0xdc, 0x73, 0x6f, 0xc3, 0x6a, 0x33, 0x48, 0xb7, 0xba, 0x9b, 0xf3, 0x7e, 0xd4, 0x5e, - 0xf0, 0xe2, 0x66, 0xd4, 0x89, 0xa3, 0x3b, 0xfc, 0xc7, 0x9b, 0xfd, 0xfa, 0xc2, 0xce, 0xf9, 0x85, - 0xce, 0x76, 0x73, 0xc1, 0xeb, 0x04, 0xc9, 0x82, 0xd7, 0xe9, 0xb4, 0x02, 0xdf, 0x4b, 0x83, 0x28, - 0x5c, 0xd8, 0x79, 0xd6, 0x6b, 0x75, 0xb6, 0xbc, 0x67, 0x17, 0x9a, 0x34, 0xa4, 0xb1, 0x97, 0xd2, - 0xfa, 0x7c, 0x27, 0x8e, 0xd2, 0x88, 0xbc, 0xcd, 0x70, 0x9b, 0x57, 0xdc, 0xf8, 0x8f, 0x9f, 0xf3, - 0xeb, 0xf3, 0x3b, 0xe7, 0xe7, 0x3b, 0xdb, 0xcd, 0x79, 0xc6, 0x6d, 0xde, 0xe2, 0x36, 0xaf, 0xb8, - 0x9d, 0x79, 0xb3, 0xa5, 0x4b, 0x33, 0x6a, 0x46, 0x0b, 0x9c, 0xe9, 0x66, 0xb7, 0xc1, 0xbf, 0xf8, - 0x07, 0xff, 0x25, 0x84, 0x9d, 0x71, 0xb7, 0x9f, 0x4f, 0xe6, 0x83, 0x88, 0xa9, 0xb7, 0xe0, 0x47, - 0x31, 0x5d, 0xd8, 0xe9, 0x53, 0xe8, 0xcc, 0x73, 0x86, 0xa6, 0xed, 0xf9, 0x5b, 0x41, 0x48, 0xe3, - 0x9e, 0xa9, 0x53, 0x9b, 0xa6, 0xde, 0xa0, 0x52, 0x0b, 0xc3, 0x4a, 0xc5, 0xdd, 0x30, 0x0d, 0xda, - 0xb4, 0xaf, 0xc0, 0x5b, 0xf6, 0x2b, 0x90, 0xf8, 0x5b, 0xb4, 0xed, 0xe5, 0xcb, 0xb9, 0x2f, 0xc3, - 0xd4, 0xe2, 0xed, 0xf5, 0xc5, 0x6e, 0xba, 0xb5, 0x14, 0x85, 0x8d, 0xa0, 0x49, 0x7e, 0x1c, 0x26, - 0xfc, 0x56, 0x37, 0x49, 0x69, 0x7c, 0xdd, 0x6b, 0xd3, 0x59, 0xe7, 0x9c, 0xf3, 0x4c, 0xb5, 0x76, - 0xe2, 0x2b, 0x7b, 0x73, 0x4f, 0xdc, 0xdb, 0x9b, 0x9b, 0x58, 0x32, 0x28, 0xb4, 0xe9, 0xc8, 0x0f, - 0xc3, 0x78, 0x1c, 0xb5, 0xe8, 0x22, 0x5e, 0x9f, 0x2d, 0xf1, 0x22, 0xc7, 0x64, 0x91, 0x71, 0x14, - 0x60, 0x54, 0x78, 0xf7, 0x6b, 0x25, 0x80, 0xc5, 0x4e, 0x67, 0x2d, 0x8e, 0xee, 0x50, 0x3f, 0x25, - 0x2f, 0x41, 0x85, 0xb5, 0x42, 0xdd, 0x4b, 0x3d, 0x2e, 0x6d, 0xe2, 0xfc, 0x8f, 0xce, 0x8b, 0xca, - 0xcc, 0xdb, 0x95, 0x31, 0x3d, 0xc7, 0xa8, 0xe7, 0x77, 0x9e, 0x9d, 0xbf, 0xb1, 0xc9, 0xca, 0x5f, - 0xa3, 0xa9, 0x57, 0x23, 0x52, 0x18, 0x18, 0x18, 0x6a, 0xae, 0x24, 0x84, 0x91, 0xa4, 0x43, 0x7d, - 0xae, 0xd8, 0xc4, 0xf9, 0xd5, 0xf9, 0xa3, 0x0c, 0x91, 0x79, 0xa3, 0xf9, 0x7a, 0x87, 0xfa, 0xb5, - 0x49, 0x29, 0x79, 0x84, 0x7d, 0x21, 0x97, 0x43, 0x76, 0x60, 0x2c, 0x49, 0xbd, 0xb4, 0x9b, 0xcc, - 0x96, 0xb9, 0xc4, 0xeb, 0x85, 0x49, 0xe4, 0x5c, 0x6b, 0xd3, 0x52, 0xe6, 0x98, 0xf8, 0x46, 0x29, - 0xcd, 0xfd, 0x7b, 0x07, 0xa6, 0x0d, 0xf1, 0x6a, 0x90, 0xa4, 0xe4, 0x3d, 0x7d, 0x8d, 0x3b, 0x7f, - 0xb0, 0xc6, 0x65, 0xa5, 0x79, 0xd3, 0x1e, 0x97, 0xc2, 0x2a, 0x0a, 0x62, 0x35, 0x6c, 0x1b, 0x46, - 0x83, 0x94, 0xb6, 0x93, 0xd9, 0xd2, 0xb9, 0xf2, 0x33, 0x13, 0xe7, 0x2f, 0x17, 0x55, 0xcf, 0xda, - 0x94, 0x14, 0x3a, 0xba, 0xc2, 0xd8, 0xa3, 0x90, 0xe2, 0x7e, 0x17, 0xec, 0xfa, 0xb1, 0x06, 0x27, - 0xcf, 0xc2, 0x44, 0x12, 0x75, 0x63, 0x9f, 0x22, 0xed, 0x44, 0xc9, 0xac, 0x73, 0xae, 0xcc, 0x86, - 0x1e, 0x1b, 0xa9, 0xeb, 0x06, 0x8c, 0x36, 0x0d, 0xf9, 0x94, 0x03, 0x93, 0x75, 0x9a, 0xa4, 0x41, - 0xc8, 0xe5, 0x2b, 0xe5, 0x37, 0x8e, 0xac, 0xbc, 0x02, 0x2e, 0x1b, 0xe6, 0xb5, 0x93, 0xb2, 0x22, - 0x93, 0x16, 0x30, 0xc1, 0x8c, 0x7c, 0x36, 0xe3, 0xea, 0x34, 0xf1, 0xe3, 0xa0, 0xc3, 0xbe, 0xf9, - 0x98, 0xb1, 0x66, 0xdc, 0xb2, 0x41, 0xa1, 0x4d, 0x47, 0x42, 0x18, 0x65, 0x33, 0x2a, 0x99, 0x1d, - 0xe1, 0xfa, 0xaf, 0x1c, 0x4d, 0x7f, 0xd9, 0xa8, 0x6c, 0xb2, 0x9a, 0xd6, 0x67, 0x5f, 0x09, 0x0a, - 0x31, 0xe4, 0x93, 0x0e, 0xcc, 0xca, 0x19, 0x8f, 0x54, 0x34, 0xe8, 0xed, 0xad, 0x20, 0xa5, 0xad, - 0x20, 0x49, 0x67, 0x47, 0xb9, 0x0e, 0x0b, 0x07, 0x1b, 0x5b, 0x97, 0xe2, 0xa8, 0xdb, 0xb9, 0x1a, - 0x84, 0xf5, 0xda, 0x39, 0x29, 0x69, 0x76, 0x69, 0x08, 0x63, 0x1c, 0x2a, 0x92, 0x7c, 0xd6, 0x81, - 0x33, 0xa1, 0xd7, 0xa6, 0x49, 0xc7, 0x63, 0x5d, 0x2b, 0xd0, 0xb5, 0x96, 0xe7, 0x6f, 0x73, 0x8d, - 0xc6, 0x1e, 0x4e, 0x23, 0x57, 0x6a, 0x74, 0xe6, 0xfa, 0x50, 0xd6, 0xf8, 0x00, 0xb1, 0xe4, 0x37, - 0x1d, 0x98, 0x89, 0xe2, 0xce, 0x96, 0x17, 0xd2, 0xba, 0xc2, 0x26, 0xb3, 0xe3, 0x7c, 0xea, 0xbd, - 0xf7, 0x68, 0x5d, 0x74, 0x23, 0xcf, 0xf6, 0x5a, 0x14, 0x06, 0x69, 0x14, 0xaf, 0xd3, 0x34, 0x0d, - 0xc2, 0x66, 0x52, 0x3b, 0x75, 0x6f, 0x6f, 0x6e, 0xa6, 0x8f, 0x0a, 0xfb, 0xf5, 0x21, 0xef, 0x87, - 0x89, 0xa4, 0x17, 0xfa, 0xb7, 0x83, 0xb0, 0x1e, 0xdd, 0x4d, 0x66, 0x2b, 0x45, 0x4c, 0xdf, 0x75, - 0xcd, 0x50, 0x4e, 0x40, 0x23, 0x00, 0x6d, 0x69, 0x83, 0x3b, 0xce, 0x0c, 0xa5, 0x6a, 0xd1, 0x1d, - 0x67, 0x06, 0xd3, 0x03, 0xc4, 0x92, 0x8f, 0x39, 0x30, 0x95, 0x04, 0xcd, 0xd0, 0x4b, 0xbb, 0x31, - 0xbd, 0x4a, 0x7b, 0xc9, 0x2c, 0x70, 0x45, 0xae, 0x1c, 0xb1, 0x55, 0x2c, 0x96, 0xb5, 0x53, 0x52, - 0xc7, 0x29, 0x1b, 0x9a, 0x60, 0x56, 0xee, 0xa0, 0x89, 0x66, 0x86, 0xf5, 0x44, 0xb1, 0x13, 0xcd, - 0x0c, 0xea, 0xa1, 0x22, 0xdd, 0x3f, 0x2b, 0xc1, 0xf1, 0xfc, 0x1a, 0x44, 0x7e, 0xdb, 0x81, 0x63, - 0x77, 0xee, 0xa6, 0x1b, 0xd1, 0x36, 0x0d, 0x93, 0x5a, 0x8f, 0x59, 0x0a, 0x6e, 0x7d, 0x27, 0xce, - 0xfb, 0xc5, 0xae, 0x76, 0xf3, 0x57, 0xb2, 0x52, 0x2e, 0x84, 0x69, 0xdc, 0xab, 0x3d, 0x29, 0xeb, - 0x73, 0xec, 0xca, 0xed, 0x0d, 0x1b, 0x8b, 0x79, 0xa5, 0xce, 0x7c, 0xdc, 0x81, 0x93, 0x83, 0x58, - 0x90, 0xe3, 0x50, 0xde, 0xa6, 0x3d, 0xe1, 0xe0, 0x20, 0xfb, 0x49, 0x7e, 0x16, 0x46, 0x77, 0xbc, - 0x56, 0x97, 0x4a, 0x47, 0xe1, 0xd2, 0xd1, 0x2a, 0xa2, 0x35, 0x43, 0xc1, 0xf5, 0xad, 0xa5, 0xe7, - 0x1d, 0xf7, 0xaf, 0xca, 0x30, 0x61, 0x2d, 0x15, 0x8f, 0xc1, 0xf9, 0x89, 0x32, 0xce, 0xcf, 0xb5, - 0xc2, 0x56, 0xb9, 0xa1, 0xde, 0xcf, 0xdd, 0x9c, 0xf7, 0x73, 0xa3, 0x38, 0x91, 0x0f, 0x74, 0x7f, - 0x48, 0x0a, 0xd5, 0xa8, 0xc3, 0x9c, 0x5b, 0xb6, 0x8a, 0x8e, 0x14, 0xd1, 0x85, 0x37, 0x14, 0xbb, - 0xda, 0xd4, 0xbd, 0xbd, 0xb9, 0xaa, 0xfe, 0x44, 0x23, 0xc8, 0xfd, 0xba, 0x03, 0x27, 0x2d, 0x1d, - 0x97, 0xa2, 0xb0, 0x1e, 0xf0, 0xae, 0x3d, 0x07, 0x23, 0x69, 0xaf, 0xa3, 0x3c, 0x68, 0xdd, 0x52, - 0x1b, 0xbd, 0x0e, 0x45, 0x8e, 0x61, 0x3e, 0x73, 0x9b, 0x26, 0x89, 0xd7, 0xa4, 0x79, 0x9f, 0xf9, - 0x9a, 0x00, 0xa3, 0xc2, 0x93, 0x18, 0x48, 0xcb, 0x4b, 0xd2, 0x8d, 0xd8, 0x0b, 0x13, 0xce, 0x7e, - 0x23, 0x68, 0x53, 0xd9, 0xc0, 0x3f, 0x72, 0xb0, 0x11, 0xc3, 0x4a, 0xd4, 0x4e, 0xdf, 0xdb, 0x9b, - 0x23, 0xab, 0x7d, 0x9c, 0x70, 0x00, 0x77, 0xf7, 0xb3, 0x0e, 0x9c, 0x1e, 0xec, 0xd6, 0x90, 0xd7, - 0xc3, 0x58, 0x42, 0xe3, 0x1d, 0x1a, 0xcb, 0xda, 0x99, 0x2e, 0xe1, 0x50, 0x94, 0x58, 0xb2, 0x00, - 0x55, 0x6d, 0x72, 0x65, 0x1d, 0x67, 0x24, 0x69, 0xd5, 0xd8, 0x69, 0x43, 0xc3, 0x1a, 0x8d, 0x7d, - 0x48, 0x27, 0x48, 0x37, 0x1a, 0xdf, 0x6f, 0x70, 0x8c, 0xfb, 0x0f, 0x0e, 0x1c, 0xb3, 0xb4, 0x7a, - 0x0c, 0x5e, 0x6e, 0x98, 0xf5, 0x72, 0x57, 0x0a, 0x1b, 0xcf, 0x43, 0xdc, 0xdc, 0x2f, 0x8f, 0xc1, - 0x8c, 0x3d, 0xea, 0xb9, 0x39, 0xe6, 0x1b, 0x2c, 0xda, 0x89, 0x6e, 0xe2, 0xaa, 0x6c, 0x73, 0xb3, - 0xc1, 0x12, 0x60, 0x54, 0x78, 0xd6, 0x88, 0x1d, 0x2f, 0xdd, 0x92, 0x0d, 0xae, 0x1b, 0x71, 0xcd, - 0x4b, 0xb7, 0x90, 0x63, 0xc8, 0xdb, 0x61, 0x3a, 0xf5, 0xe2, 0x26, 0x4d, 0x91, 0xee, 0x04, 0x89, - 0x9a, 0x2f, 0xd5, 0xda, 0x69, 0x49, 0x3b, 0xbd, 0x91, 0xc1, 0x62, 0x8e, 0x9a, 0xbc, 0x0c, 0x23, - 0x5b, 0xb4, 0xd5, 0x96, 0x7e, 0xcd, 0x7a, 0x71, 0x33, 0x9c, 0xd7, 0xf5, 0x32, 0x6d, 0xb5, 0x6b, - 0x15, 0xa6, 0x32, 0xfb, 0x85, 0x5c, 0x14, 0xf9, 0x45, 0x07, 0xaa, 0xdb, 0xdd, 0x24, 0x8d, 0xda, - 0xc1, 0xfb, 0xe8, 0x6c, 0x85, 0x0b, 0xfe, 0x99, 0x82, 0x05, 0x5f, 0x55, 0xfc, 0xc5, 0x7c, 0xd7, - 0x9f, 0x68, 0x24, 0x93, 0x0f, 0xc0, 0xf8, 0x76, 0x12, 0x85, 0x21, 0x65, 0x9e, 0x0a, 0x53, 0xe2, - 0x56, 0xd1, 0x4a, 0x08, 0xee, 0xb5, 0x09, 0xd6, 0xb7, 0xf2, 0x03, 0x95, 0x4c, 0xde, 0x0c, 0xf5, - 0x20, 0xa6, 0x7e, 0x1a, 0xc5, 0xbd, 0x59, 0x78, 0x24, 0xcd, 0xb0, 0xac, 0xf8, 0x8b, 0x66, 0xd0, - 0x9f, 0x68, 0x24, 0x93, 0x1e, 0x8c, 0x75, 0x5a, 0xdd, 0x66, 0x10, 0xce, 0x4e, 0x70, 0x1d, 0x6e, - 0x16, 0xac, 0xc3, 0x1a, 0x67, 0x5e, 0x03, 0x66, 0x54, 0xc4, 0x6f, 0x94, 0x02, 0xc9, 0xd3, 0x30, - 0xea, 0x6f, 0x79, 0x71, 0x3a, 0x3b, 0xc9, 0xc7, 0xac, 0x9e, 0x44, 0x4b, 0x0c, 0x88, 0x02, 0xe7, - 0xfe, 0x7a, 0x09, 0xce, 0x0c, 0xaf, 0x98, 0x98, 0x4d, 0x7e, 0x37, 0x4e, 0x84, 0x7d, 0xae, 0xd8, - 0xb3, 0x89, 0x83, 0x51, 0xe1, 0xc9, 0x47, 0x1c, 0x18, 0xbf, 0x23, 0x7b, 0xbc, 0xf4, 0x48, 0x7a, - 0xfc, 0x8a, 0xec, 0x71, 0xad, 0xc3, 0x15, 0xd5, 0xeb, 0x52, 0x2e, 0x53, 0x97, 0xee, 0xfa, 0xad, - 0x6e, 0x5d, 0x59, 0x46, 0x4d, 0x7a, 0x41, 0x80, 0x51, 0xe1, 0x19, 0x69, 0x10, 0x0a, 0xd2, 0x91, - 0x2c, 0xe9, 0x4a, 0x28, 0x49, 0x25, 0xde, 0xfd, 0x4e, 0x19, 0x4e, 0x0d, 0x9c, 0x7c, 0x64, 0x1e, - 0x80, 0xfb, 0x2c, 0x17, 0x03, 0xb6, 0xc1, 0x14, 0xbb, 0xea, 0x69, 0xe6, 0x62, 0xdc, 0xd2, 0x50, - 0xb4, 0x28, 0xc8, 0x87, 0x00, 0x3a, 0x5e, 0xec, 0xb5, 0x69, 0x4a, 0x63, 0x65, 0x27, 0xaf, 0x1e, - 0xad, 0x95, 0x98, 0x1e, 0x6b, 0x8a, 0xa7, 0xf1, 0x71, 0x34, 0x28, 0x41, 0x4b, 0x24, 0xdb, 0x43, - 0xc7, 0xb4, 0x45, 0xbd, 0x84, 0x5e, 0x37, 0xcb, 0x87, 0xde, 0x43, 0xa3, 0x41, 0xa1, 0x4d, 0xc7, - 0xd6, 0x31, 0x5e, 0x8b, 0x44, 0xb6, 0x95, 0x5e, 0xc7, 0x78, 0x3d, 0x13, 0x94, 0x58, 0xf2, 0xaa, - 0x03, 0xd3, 0x8d, 0xa0, 0x45, 0x8d, 0x74, 0xb9, 0xe3, 0xbd, 0x71, 0xf4, 0x4a, 0x5e, 0xb4, 0xf9, - 0x1a, 0x0b, 0x9c, 0x01, 0x27, 0x98, 0x13, 0xcf, 0xba, 0x79, 0x87, 0xc6, 0xdc, 0x74, 0x8f, 0x65, - 0xbb, 0xf9, 0x96, 0x00, 0xa3, 0xc2, 0xbb, 0x5f, 0x28, 0xc1, 0xec, 0xb0, 0x31, 0x47, 0x12, 0x36, - 0xb2, 0xd2, 0x5b, 0x5e, 0x9c, 0x48, 0xf7, 0xfd, 0x88, 0xbb, 0x40, 0xc9, 0xf7, 0x96, 0x17, 0xdb, - 0x63, 0x94, 0x0b, 0x40, 0x25, 0x89, 0xdc, 0x81, 0x91, 0xb4, 0xe5, 0x15, 0x14, 0x36, 0xb2, 0x24, - 0x1a, 0x27, 0x6b, 0x75, 0x31, 0x41, 0x2e, 0x83, 0x3c, 0x05, 0x23, 0xad, 0x60, 0x93, 0x39, 0xa3, - 0x6c, 0x10, 0xf3, 0x55, 0x65, 0x35, 0xd8, 0x4c, 0x90, 0x43, 0xdd, 0xaf, 0x39, 0x03, 0xda, 0x46, - 0x1a, 0x5d, 0x36, 0xa8, 0x68, 0xb8, 0x13, 0xc4, 0x51, 0xd8, 0xa6, 0x61, 0x9a, 0x0f, 0x85, 0x5e, - 0x30, 0x28, 0xb4, 0xe9, 0xc8, 0x2f, 0x38, 0x03, 0x66, 0xc3, 0x11, 0x63, 0x80, 0x52, 0xa5, 0x03, - 0x4f, 0x08, 0xf7, 0x3f, 0xc7, 0x06, 0xd8, 0x3f, 0xbd, 0xa0, 0x91, 0xf3, 0x00, 0xcc, 0x9b, 0x5a, - 0x8b, 0x69, 0x23, 0xd8, 0x95, 0x35, 0xd3, 0x2c, 0xaf, 0x6b, 0x0c, 0x5a, 0x54, 0xaa, 0xcc, 0x7a, - 0xb7, 0xc1, 0xca, 0x94, 0xfa, 0xcb, 0x08, 0x0c, 0x5a, 0x54, 0xe4, 0x39, 0x18, 0x0b, 0xda, 0x5e, - 0x93, 0xaa, 0xf6, 0x7f, 0x8a, 0x4d, 0xae, 0x15, 0x0e, 0xb9, 0xbf, 0x37, 0x37, 0xad, 0x15, 0xe2, - 0x20, 0x94, 0xb4, 0xe4, 0xb7, 0x1c, 0x98, 0xf4, 0xa3, 0x76, 0x3b, 0x0a, 0x57, 0xbd, 0x4d, 0xda, - 0x52, 0x21, 0xae, 0x3b, 0x8f, 0x6a, 0xb9, 0x9f, 0x5f, 0xb2, 0x84, 0x89, 0x0d, 0xa6, 0x0e, 0xdc, - 0xd9, 0x28, 0xcc, 0x68, 0x65, 0xcf, 0xc1, 0xd1, 0x07, 0xcf, 0x41, 0xf2, 0x87, 0x0e, 0xcc, 0x88, - 0xb2, 0x8b, 0x61, 0x18, 0xa5, 0x32, 0xf2, 0x28, 0x62, 0x54, 0xd1, 0x23, 0xae, 0x96, 0x25, 0x51, - 0xd4, 0xed, 0x35, 0x52, 0xcd, 0x99, 0x3e, 0x3c, 0xf6, 0x2b, 0x49, 0x2e, 0xc1, 0x4c, 0x23, 0x8a, - 0x7d, 0x6a, 0x37, 0x04, 0x77, 0xfc, 0x2a, 0x86, 0xd1, 0xc5, 0x3c, 0x01, 0xf6, 0x97, 0x21, 0xb7, - 0xe0, 0xb4, 0x05, 0xb4, 0xdb, 0xa1, 0xc2, 0xb9, 0x9d, 0x95, 0xdc, 0x4e, 0x5f, 0x1c, 0x48, 0x85, - 0x43, 0x4a, 0x9f, 0x79, 0x07, 0xcc, 0xf4, 0xf5, 0xdf, 0x80, 0xdd, 0xfd, 0x49, 0x7b, 0x77, 0x5f, - 0xb5, 0x36, 0xe5, 0x67, 0x96, 0xe1, 0xf4, 0xe0, 0x96, 0x3a, 0x0c, 0x17, 0xf7, 0x57, 0x1d, 0x78, - 0x72, 0x88, 0x1b, 0xa3, 0xb7, 0x35, 0xce, 0xb0, 0x6d, 0x0d, 0xf1, 0xa0, 0x4c, 0xc3, 0x1d, 0x69, - 0x2c, 0x2e, 0x1e, 0x6d, 0x44, 0x5c, 0x08, 0x77, 0x44, 0x47, 0x8f, 0xdf, 0xdb, 0x9b, 0x2b, 0x5f, - 0x08, 0x77, 0x90, 0xf1, 0x76, 0x3f, 0x37, 0x96, 0xd9, 0x39, 0xad, 0xab, 0xcd, 0x3a, 0x57, 0x54, - 0xee, 0x9b, 0x6e, 0x14, 0x3c, 0x16, 0xad, 0x9d, 0xa1, 0x08, 0xc1, 0x4b, 0x71, 0xe4, 0xe3, 0x0e, - 0x8f, 0x7a, 0xab, 0x1d, 0xa5, 0xf4, 0xac, 0x1e, 0x4d, 0x10, 0xde, 0x8e, 0xa5, 0x2b, 0x20, 0xda, - 0xd2, 0xd9, 0x4c, 0xee, 0x88, 0xa0, 0x53, 0xde, 0xbf, 0x52, 0x71, 0x71, 0x85, 0x27, 0xbb, 0x00, - 0x49, 0x2f, 0xf4, 0xd7, 0xa2, 0x56, 0xe0, 0xf7, 0x64, 0x98, 0xa1, 0x80, 0xc8, 0xa9, 0xe0, 0x27, - 0x9c, 0x2c, 0xf3, 0x8d, 0x96, 0x2c, 0xf2, 0x45, 0x07, 0x66, 0x82, 0x66, 0x18, 0xc5, 0x74, 0x39, - 0x68, 0x34, 0x68, 0x4c, 0x43, 0x9f, 0x2a, 0x3f, 0xe4, 0xf6, 0xd1, 0x34, 0x50, 0x41, 0xbf, 0x95, - 0x3c, 0x7b, 0x33, 0xc5, 0xfb, 0x50, 0xd8, 0xaf, 0x0c, 0xa9, 0xc3, 0x48, 0x10, 0x36, 0x22, 0x69, - 0xd8, 0x6a, 0x47, 0x53, 0x6a, 0x25, 0x6c, 0x44, 0x66, 0xae, 0xb0, 0x2f, 0xe4, 0xdc, 0xc9, 0x2a, - 0x9c, 0x8c, 0xe5, 0x4e, 0xf4, 0x72, 0x90, 0x30, 0x7f, 0x7e, 0x35, 0x68, 0x07, 0x29, 0x37, 0x4a, - 0xe5, 0xda, 0xec, 0xbd, 0xbd, 0xb9, 0x93, 0x38, 0x00, 0x8f, 0x03, 0x4b, 0xb9, 0xaf, 0x54, 0xb3, - 0xdb, 0x6d, 0x11, 0x4c, 0xfa, 0x00, 0x54, 0x63, 0x1d, 0xbe, 0x17, 0x9e, 0xd1, 0x6a, 0x31, 0x6d, - 0x2c, 0xa3, 0x58, 0x3a, 0x0e, 0x62, 0x02, 0xf5, 0x46, 0x22, 0xf3, 0x90, 0x58, 0xcf, 0xcb, 0x69, - 0x51, 0xc0, 0xf8, 0x92, 0x52, 0x4d, 0xc0, 0xae, 0x17, 0xfa, 0xc8, 0x65, 0x90, 0x18, 0xc6, 0xb6, - 0xa8, 0xd7, 0x4a, 0xb7, 0x64, 0x3c, 0xe9, 0xca, 0x51, 0x7d, 0x5a, 0xc6, 0x2b, 0x1f, 0xab, 0x13, - 0x50, 0x94, 0x92, 0xc8, 0x2e, 0x8c, 0x6f, 0x89, 0x4e, 0x90, 0x6b, 0xfb, 0xb5, 0xa3, 0x36, 0x6e, - 0xa6, 0x67, 0xcd, 0xfc, 0x95, 0x00, 0x54, 0xe2, 0xc8, 0x2f, 0x39, 0x00, 0xbe, 0x0a, 0xd2, 0xa9, - 0xe9, 0x83, 0x85, 0xd9, 0x1d, 0x1d, 0xff, 0x33, 0xae, 0x91, 0x06, 0x25, 0x68, 0x49, 0x26, 0x2f, - 0xc1, 0x64, 0x4c, 0xfd, 0x28, 0xf4, 0x83, 0x16, 0xad, 0x2f, 0xa6, 0xdc, 0x8d, 0x3f, 0x5c, 0x30, - 0xef, 0x38, 0xf3, 0x4f, 0xd0, 0xe2, 0x81, 0x19, 0x8e, 0xe4, 0x15, 0x07, 0xa6, 0x75, 0xa0, 0x92, - 0x75, 0x08, 0x95, 0x01, 0x9b, 0xd5, 0x82, 0xc2, 0xa2, 0x9c, 0x67, 0x8d, 0xb0, 0xed, 0x4a, 0x16, - 0x86, 0x39, 0xb9, 0xe4, 0x5d, 0x00, 0xd1, 0x26, 0x0f, 0x0a, 0xb2, 0xaa, 0x56, 0x0e, 0x5d, 0xd5, - 0x69, 0x11, 0xdf, 0x56, 0x1c, 0xd0, 0xe2, 0x46, 0xae, 0x02, 0x88, 0x69, 0xb3, 0xd1, 0xeb, 0x50, - 0x1e, 0x94, 0xa9, 0xd6, 0xde, 0xa8, 0x1a, 0x7f, 0x5d, 0x63, 0xee, 0xef, 0xcd, 0xf5, 0xef, 0x76, - 0x79, 0x34, 0xd6, 0x2a, 0x4e, 0xde, 0x0f, 0xe3, 0x49, 0xb7, 0xdd, 0xf6, 0x74, 0x70, 0x65, 0xad, - 0xb8, 0x15, 0x51, 0xf0, 0x35, 0x63, 0x53, 0x02, 0x50, 0x49, 0x74, 0x43, 0x20, 0xfd, 0xf4, 0xe4, - 0x39, 0x98, 0xa4, 0xbb, 0x29, 0x8d, 0x43, 0xaf, 0x75, 0x13, 0x57, 0xd5, 0x76, 0x9c, 0x77, 0xfe, - 0x05, 0x0b, 0x8e, 0x19, 0x2a, 0xe2, 0x6a, 0xcf, 0xbb, 0xc4, 0xe9, 0xc1, 0x78, 0xde, 0xca, 0xcf, - 0x76, 0xff, 0xb7, 0x94, 0xf1, 0x08, 0x36, 0x62, 0x4a, 0x49, 0x04, 0xa3, 0x61, 0x54, 0xd7, 0x46, - 0xef, 0x4a, 0x31, 0x46, 0xef, 0x7a, 0x54, 0xb7, 0xce, 0x95, 0xd9, 0x57, 0x82, 0x42, 0x0e, 0x3f, - 0x78, 0x53, 0x27, 0x94, 0x1c, 0x21, 0x9d, 0xa0, 0x22, 0x25, 0xeb, 0x83, 0xb7, 0x1b, 0xb6, 0x20, - 0xcc, 0xca, 0x25, 0xdb, 0x30, 0xba, 0x15, 0x25, 0xa9, 0xd8, 0xab, 0x1c, 0xd9, 0x0b, 0xbb, 0x1c, - 0x25, 0x29, 0x5f, 0xc2, 0x74, 0xb5, 0x19, 0x24, 0x41, 0x21, 0xc3, 0xfd, 0x67, 0x27, 0x13, 0x7c, - 0xb9, 0xed, 0xa5, 0xfe, 0xd6, 0x85, 0x1d, 0xb6, 0x7f, 0xbc, 0x9a, 0x39, 0x38, 0xf8, 0x09, 0xfb, - 0xe0, 0xe0, 0xfe, 0xde, 0xdc, 0x1b, 0x86, 0x25, 0xfa, 0xdc, 0x65, 0x1c, 0xe6, 0x39, 0x0b, 0xeb, - 0x8c, 0xe1, 0xc3, 0x0e, 0x4c, 0x58, 0xea, 0xc9, 0x05, 0xa5, 0xc0, 0x18, 0xb6, 0x76, 0xae, 0x2c, - 0x20, 0xda, 0x22, 0xdd, 0xcf, 0x38, 0x30, 0x5e, 0xf3, 0xfc, 0xed, 0xa8, 0xd1, 0x20, 0x6f, 0x82, - 0x4a, 0xbd, 0x2b, 0x8f, 0x68, 0x44, 0xfd, 0x74, 0xe4, 0x7d, 0x59, 0xc2, 0x51, 0x53, 0xb0, 0x31, - 0xdc, 0xf0, 0xfc, 0x34, 0x8a, 0xb9, 0xda, 0x65, 0x31, 0x86, 0x2f, 0x72, 0x08, 0x4a, 0x0c, 0xdb, - 0xa4, 0xb7, 0xbd, 0x5d, 0x55, 0x38, 0x1f, 0xf9, 0xb9, 0x66, 0x50, 0x68, 0xd3, 0xb9, 0x7f, 0x3e, - 0x0a, 0xe3, 0xf2, 0x2c, 0xf4, 0xc0, 0xa7, 0x19, 0xca, 0x8b, 0x2f, 0x0d, 0xf5, 0xe2, 0x13, 0x18, - 0xf3, 0x79, 0x1a, 0x95, 0x5c, 0x4a, 0x8f, 0x18, 0x03, 0x93, 0x0a, 0x8a, 0xcc, 0x2c, 0xa3, 0x96, - 0xf8, 0x46, 0x29, 0x8a, 0x7c, 0xda, 0x81, 0x63, 0x7e, 0x14, 0x86, 0xd4, 0x37, 0x76, 0x7e, 0xa4, - 0x88, 0xd3, 0xbe, 0xa5, 0x2c, 0x53, 0x73, 0xe8, 0x9a, 0x43, 0x60, 0x5e, 0x3c, 0x79, 0x01, 0xa6, - 0x44, 0x9b, 0xdd, 0xca, 0xec, 0x8f, 0xcd, 0xf9, 0xb7, 0x8d, 0xc4, 0x2c, 0x2d, 0x99, 0x17, 0x71, - 0x06, 0x7e, 0x20, 0x24, 0xf6, 0xc8, 0x32, 0xf8, 0xa8, 0x4f, 0x8c, 0x12, 0xb4, 0x28, 0x48, 0x0c, - 0x24, 0xa6, 0x8d, 0x98, 0x26, 0x5b, 0x48, 0x5f, 0xee, 0xd2, 0x24, 0xe5, 0x6b, 0xcc, 0xf8, 0xc3, - 0x9d, 0x8d, 0x61, 0x1f, 0x27, 0x1c, 0xc0, 0x9d, 0x6c, 0x4b, 0x47, 0xb7, 0x52, 0xc4, 0x74, 0x92, - 0xdd, 0x3c, 0xd4, 0xdf, 0x9d, 0x83, 0xd1, 0x64, 0xcb, 0x8b, 0xeb, 0x7c, 0x6d, 0x2b, 0xd7, 0xaa, - 0xcc, 0x96, 0xac, 0x33, 0x00, 0x0a, 0xb8, 0xfb, 0x5d, 0x07, 0x8e, 0xab, 0xb1, 0xe2, 0xf9, 0x5b, - 0x94, 0x95, 0x25, 0x6f, 0x87, 0x69, 0xed, 0x4f, 0x2e, 0x45, 0x5d, 0x19, 0xc0, 0x2a, 0x9b, 0x08, - 0x23, 0x66, 0xb0, 0x98, 0xa3, 0x26, 0x0b, 0x50, 0x65, 0x2a, 0x8b, 0xa2, 0x62, 0xfe, 0x69, 0x9f, - 0x75, 0x71, 0x6d, 0x45, 0x96, 0x32, 0x34, 0x24, 0x82, 0x99, 0x96, 0x97, 0xa4, 0x5c, 0x03, 0xe6, - 0x5e, 0x3e, 0xe4, 0x11, 0x25, 0xcf, 0x62, 0x59, 0xcd, 0x33, 0xc2, 0x7e, 0xde, 0xee, 0xd7, 0x47, - 0x60, 0x2a, 0x33, 0x45, 0x98, 0x79, 0xe9, 0x26, 0x6c, 0x0d, 0xd4, 0x7b, 0x6d, 0x6d, 0x5e, 0x6e, - 0x4a, 0x38, 0x6a, 0x0a, 0x46, 0xdd, 0xf1, 0x92, 0xe4, 0x6e, 0x14, 0xd7, 0xe5, 0x9c, 0xd6, 0xd4, - 0x6b, 0x12, 0x8e, 0x9a, 0x82, 0x19, 0x9a, 0x4d, 0xea, 0xc5, 0x34, 0xe6, 0xa7, 0xfa, 0x79, 0x43, - 0x53, 0x33, 0x28, 0xb4, 0xe9, 0xf8, 0xec, 0x4c, 0x5b, 0xc9, 0x52, 0x2b, 0xa0, 0x61, 0x2a, 0xd4, - 0x2c, 0x66, 0x76, 0x6e, 0xac, 0xae, 0xdb, 0x4c, 0xcd, 0xec, 0xcc, 0x21, 0x30, 0x2f, 0x9e, 0x7c, - 0xd4, 0x81, 0x29, 0xef, 0x6e, 0x62, 0x92, 0x3e, 0xf9, 0xf4, 0x3c, 0xb2, 0xb5, 0xca, 0xe4, 0x91, - 0xd6, 0x66, 0xd8, 0x3c, 0xcf, 0x80, 0x30, 0x2b, 0x94, 0x7c, 0xde, 0x01, 0x42, 0x77, 0xa9, 0xbf, - 0x16, 0x47, 0x3b, 0x41, 0x5d, 0xf5, 0xa1, 0xf4, 0x83, 0x8f, 0xe8, 0x76, 0x5d, 0xe8, 0xe3, 0x2b, - 0xa6, 0x77, 0x3f, 0x1c, 0x07, 0xe8, 0xe0, 0xfe, 0x5d, 0x19, 0x26, 0xac, 0x59, 0x39, 0xd0, 0xc4, - 0x3a, 0xdf, 0x67, 0x26, 0xb6, 0x74, 0x08, 0x13, 0xfb, 0x21, 0xa8, 0xfa, 0xca, 0x50, 0x14, 0x93, - 0xa4, 0x9a, 0x37, 0x3f, 0xc6, 0x56, 0x68, 0x10, 0x1a, 0x99, 0xe4, 0x12, 0xcc, 0x58, 0x6c, 0xa4, - 0x91, 0x19, 0xe1, 0x46, 0x46, 0x47, 0x1c, 0x16, 0xf3, 0x04, 0xd8, 0x5f, 0x86, 0x3c, 0xcb, 0xdc, - 0x9b, 0x40, 0xd6, 0x4b, 0x6c, 0xe7, 0x64, 0x02, 0xe8, 0xe2, 0xda, 0x8a, 0x02, 0xa3, 0x4d, 0xe3, - 0x7e, 0xdd, 0xd1, 0x9d, 0xfb, 0x18, 0xb2, 0x07, 0xee, 0x64, 0xb3, 0x07, 0x2e, 0x14, 0xd2, 0xcc, - 0x43, 0x32, 0x07, 0xae, 0xc3, 0xf8, 0x52, 0xd4, 0x6e, 0x7b, 0x61, 0x9d, 0xbc, 0x0e, 0xc6, 0x7d, - 0xf1, 0x53, 0xee, 0x17, 0xf8, 0x71, 0xb2, 0xc4, 0xa2, 0xc2, 0x91, 0xa7, 0x60, 0xc4, 0x8b, 0x9b, - 0x6a, 0x8f, 0xc0, 0x4f, 0x47, 0x16, 0xe3, 0x66, 0x82, 0x1c, 0xea, 0x7e, 0xb6, 0x04, 0xb0, 0x14, - 0xb5, 0x3b, 0x5e, 0x4c, 0xeb, 0x1b, 0xd1, 0xff, 0x07, 0x0b, 0x85, 0xeb, 0xf8, 0x09, 0x07, 0x08, - 0x6b, 0x95, 0x28, 0xa4, 0xa1, 0x39, 0x91, 0x61, 0xeb, 0xa5, 0xaf, 0xa0, 0x72, 0xf1, 0x31, 0x73, - 0x40, 0x21, 0xd0, 0xd0, 0x1c, 0xc0, 0x9d, 0x7c, 0x5a, 0x05, 0x9b, 0xcb, 0xd9, 0x93, 0x6e, 0x7e, - 0x3a, 0x29, 0x63, 0xcf, 0xee, 0xe7, 0x4a, 0x70, 0x5a, 0x98, 0xad, 0x6b, 0x5e, 0xe8, 0x35, 0x69, - 0x9b, 0x69, 0x75, 0xd0, 0xb0, 0xb3, 0xcf, 0xfc, 0x98, 0x40, 0x1d, 0x6c, 0x1f, 0x75, 0x70, 0x8a, - 0x41, 0x25, 0x86, 0xd1, 0x4a, 0x18, 0xa4, 0xc8, 0x99, 0x93, 0x04, 0x2a, 0xea, 0xda, 0x81, 0x34, - 0x36, 0x05, 0x09, 0xd2, 0xf3, 0xee, 0x92, 0x64, 0x8f, 0x5a, 0x90, 0xfb, 0x65, 0x07, 0xf2, 0x46, - 0x94, 0x3b, 0xfa, 0x22, 0x35, 0x2d, 0xef, 0xe8, 0x67, 0x33, 0xc9, 0x0e, 0x91, 0x98, 0xf5, 0x1e, - 0x98, 0xf0, 0xd2, 0x94, 0xb6, 0x3b, 0xc2, 0xeb, 0x2c, 0x3f, 0x5c, 0x64, 0xe3, 0x5a, 0x54, 0x0f, - 0x1a, 0x01, 0xf7, 0x36, 0x6d, 0x76, 0xee, 0x8b, 0x50, 0x51, 0xc1, 0xfc, 0x03, 0x74, 0xe6, 0xd3, - 0x99, 0xb3, 0x89, 0x21, 0xc3, 0xe5, 0x7e, 0x09, 0x06, 0xac, 0x82, 0xac, 0xca, 0xc6, 0x5e, 0x64, - 0xaa, 0x7c, 0x38, 0x9b, 0x41, 0x76, 0xc5, 0x41, 0x86, 0xd8, 0x42, 0xbf, 0xb3, 0xe8, 0x55, 0xdc, - 0x9c, 0x6d, 0x4c, 0x48, 0xfd, 0xf4, 0xf9, 0x06, 0x39, 0x0f, 0x60, 0xcc, 0xbc, 0x3c, 0xd0, 0xd7, - 0x41, 0x38, 0xb3, 0x1a, 0xa0, 0x45, 0xc5, 0x9c, 0xba, 0x20, 0x4c, 0x52, 0xaf, 0xd5, 0xba, 0x1c, - 0x84, 0xa9, 0xdc, 0xa6, 0x68, 0x13, 0xb0, 0x62, 0x50, 0x68, 0xd3, 0x9d, 0x79, 0x8b, 0xd5, 0x2f, - 0x87, 0x39, 0x23, 0xfa, 0x44, 0x09, 0xa6, 0x2f, 0x85, 0xdd, 0xb5, 0x4b, 0x6b, 0xdd, 0xcd, 0x56, - 0xe0, 0x5f, 0xa5, 0x3d, 0xd6, 0x69, 0xdb, 0xb4, 0xb7, 0xb2, 0x2c, 0x9b, 0x5d, 0x77, 0xda, 0x55, - 0x06, 0x44, 0x81, 0x63, 0x6a, 0x36, 0x82, 0xb0, 0x49, 0xe3, 0x4e, 0x1c, 0x48, 0x6f, 0xdc, 0x52, - 0xf3, 0xa2, 0x41, 0xa1, 0x4d, 0xc7, 0x78, 0x47, 0x77, 0x43, 0x1a, 0xe7, 0xed, 0xc7, 0x0d, 0x06, - 0x44, 0x81, 0x63, 0x44, 0x69, 0xdc, 0x4d, 0x52, 0xd9, 0x62, 0x9a, 0x68, 0x83, 0x01, 0x51, 0xe0, - 0xd8, 0xf0, 0x48, 0xba, 0x9b, 0x3c, 0xc0, 0x96, 0x3b, 0xea, 0x5c, 0x17, 0x60, 0x54, 0x78, 0x46, - 0xba, 0x4d, 0x7b, 0xcb, 0x6c, 0x35, 0xcd, 0x65, 0x26, 0x5c, 0x15, 0x60, 0x54, 0x78, 0xf7, 0x9f, - 0x1c, 0x20, 0xd9, 0xe6, 0x78, 0x0c, 0x0b, 0xf2, 0xcb, 0xd9, 0x05, 0xf9, 0x88, 0xb1, 0xd0, 0xac, - 0xfa, 0x43, 0xd6, 0xe5, 0xdf, 0x70, 0x60, 0xd2, 0x0e, 0x8b, 0x93, 0x66, 0xce, 0x10, 0xdd, 0xc8, - 0x1a, 0xa2, 0xfb, 0x7b, 0x73, 0x3f, 0x35, 0xe8, 0x56, 0x5c, 0x33, 0x48, 0xa3, 0x4e, 0xf2, 0x66, - 0x1a, 0x36, 0x83, 0x90, 0xf2, 0xa0, 0x8f, 0x08, 0xa7, 0x67, 0x62, 0xee, 0x4b, 0x51, 0x9d, 0x3e, - 0x84, 0x25, 0x73, 0x6f, 0xc3, 0x4c, 0x5f, 0x3a, 0xca, 0x01, 0x8c, 0xce, 0xbe, 0xc9, 0x86, 0xee, - 0x27, 0x1d, 0x98, 0xca, 0x64, 0xf3, 0x14, 0x64, 0xca, 0xf8, 0xac, 0x88, 0xf8, 0x89, 0x4a, 0x1c, - 0x84, 0x22, 0xe4, 0x52, 0xb1, 0x66, 0x85, 0x41, 0xa1, 0x4d, 0xe7, 0x7e, 0xa6, 0x04, 0x15, 0x15, - 0x9c, 0x3b, 0x80, 0x2a, 0x1f, 0x77, 0x60, 0x4a, 0x6f, 0x8d, 0xb9, 0xc3, 0x5c, 0x48, 0x46, 0x07, - 0xd3, 0x40, 0x1f, 0xbb, 0x31, 0x87, 0x59, 0x7b, 0xee, 0x68, 0x0b, 0xc3, 0xac, 0x6c, 0x72, 0x0b, - 0x20, 0xe9, 0x25, 0x29, 0x6d, 0x5b, 0xae, 0xbb, 0x6b, 0xcd, 0x8e, 0x79, 0x3f, 0x8a, 0x29, 0x9b, - 0x0b, 0xd7, 0xa3, 0x3a, 0x5d, 0xd7, 0x94, 0xc6, 0x10, 0x1a, 0x18, 0x5a, 0x9c, 0xdc, 0xdf, 0x2d, - 0xc1, 0xf1, 0xbc, 0x4a, 0xe4, 0xdd, 0x30, 0xa9, 0xa4, 0x5b, 0x97, 0x01, 0x55, 0x44, 0x72, 0x12, - 0x2d, 0xdc, 0xfd, 0xbd, 0xb9, 0xb9, 0xfe, 0xdb, 0x90, 0xf3, 0x36, 0x09, 0x66, 0x98, 0x89, 0xf8, - 0x84, 0x8c, 0xa8, 0xd4, 0x7a, 0x8b, 0x9d, 0x8e, 0x0c, 0x32, 0x58, 0xf1, 0x09, 0x1b, 0x8b, 0x39, - 0x6a, 0xb2, 0x06, 0x27, 0x2d, 0xc8, 0x75, 0x1a, 0x34, 0xb7, 0x36, 0xa3, 0x58, 0x64, 0x9d, 0x97, - 0x6b, 0x4f, 0x49, 0x2e, 0x27, 0x71, 0x00, 0x0d, 0x0e, 0x2c, 0x49, 0xde, 0x04, 0x15, 0xdf, 0xeb, - 0x78, 0x7e, 0x90, 0xf6, 0xe4, 0x5e, 0x44, 0xdb, 0x91, 0x25, 0x09, 0x47, 0x4d, 0xe1, 0x5e, 0x83, - 0x91, 0x03, 0x8e, 0xa0, 0x03, 0xad, 0xcb, 0x2f, 0x42, 0x85, 0xb1, 0x63, 0x76, 0xa3, 0x28, 0x96, - 0x11, 0x54, 0xd4, 0x25, 0x04, 0xe2, 0x42, 0x39, 0xf0, 0x54, 0x08, 0x48, 0x57, 0x6b, 0x25, 0x49, - 0xba, 0xdc, 0xeb, 0x60, 0x48, 0xf2, 0x34, 0x94, 0xe9, 0x6e, 0x27, 0x1f, 0xeb, 0xb9, 0xb0, 0xdb, - 0x09, 0x62, 0x9a, 0x30, 0x22, 0xba, 0xdb, 0x21, 0x67, 0xa0, 0x14, 0xd4, 0xe5, 0x82, 0x02, 0x92, - 0xa6, 0xb4, 0xb2, 0x8c, 0xa5, 0xa0, 0xee, 0xee, 0x42, 0x55, 0xdf, 0x7a, 0x20, 0xdb, 0xca, 0xce, - 0x3a, 0x45, 0x44, 0xd3, 0x15, 0xdf, 0x21, 0x16, 0xb6, 0x0b, 0x60, 0xf2, 0xc0, 0x8a, 0xb2, 0x2f, - 0xe7, 0x60, 0xc4, 0x8f, 0x64, 0xca, 0x65, 0xc5, 0xb0, 0xe1, 0x06, 0x96, 0x63, 0xdc, 0xdb, 0x30, - 0x7d, 0x35, 0x8c, 0xee, 0x86, 0x6c, 0xe1, 0xbb, 0x18, 0xd0, 0x56, 0x9d, 0x31, 0x6e, 0xb0, 0x1f, - 0xf9, 0xe5, 0x9c, 0x63, 0x51, 0xe0, 0xf4, 0xd5, 0x80, 0xd2, 0xb0, 0xab, 0x01, 0xee, 0x2f, 0x3b, - 0x70, 0x3c, 0x9f, 0xf3, 0xf5, 0x3d, 0xdb, 0x61, 0x7c, 0x98, 0x29, 0xa3, 0x92, 0x8a, 0x6e, 0x74, - 0xc4, 0xf1, 0xe5, 0xf3, 0x30, 0xb9, 0xd9, 0x0d, 0x5a, 0x75, 0xf9, 0x2d, 0xf5, 0xd1, 0x69, 0x53, - 0x35, 0x0b, 0x87, 0x19, 0x4a, 0xe6, 0xa7, 0x6d, 0x06, 0xa1, 0x17, 0xf7, 0xd6, 0xcc, 0xba, 0xa1, - 0xcd, 0x53, 0x4d, 0x63, 0xd0, 0xa2, 0x72, 0xff, 0xa6, 0x0c, 0xe6, 0xfa, 0x05, 0x09, 0xe4, 0xe9, - 0xb8, 0x53, 0x44, 0xd8, 0x6a, 0xbd, 0x17, 0xfa, 0xe6, 0xa2, 0x47, 0x25, 0x77, 0x38, 0xfe, 0x31, - 0x87, 0x79, 0x88, 0x41, 0x1a, 0x78, 0xdc, 0x58, 0xc8, 0x8d, 0xd2, 0x5a, 0x41, 0x07, 0xa8, 0x2b, - 0x82, 0x73, 0x14, 0xdb, 0x3e, 0xa7, 0x16, 0x86, 0xb6, 0x64, 0xf2, 0x92, 0x0c, 0x39, 0x97, 0x0b, - 0xcb, 0xad, 0xa8, 0xe4, 0xe2, 0xcc, 0x1d, 0x18, 0x8d, 0x69, 0x1a, 0xab, 0xac, 0x96, 0xab, 0x47, - 0x3d, 0x80, 0x4b, 0xe3, 0xde, 0x7a, 0xca, 0x36, 0x63, 0x4d, 0xcb, 0x31, 0xe2, 0x60, 0x14, 0x82, - 0xdc, 0x04, 0x48, 0x7f, 0x5b, 0x1c, 0x32, 0x8a, 0xbb, 0x00, 0x55, 0xaf, 0x9b, 0x46, 0x6d, 0xd6, - 0x4c, 0xbc, 0x7b, 0x2a, 0x56, 0x9c, 0x5a, 0x21, 0xd0, 0xd0, 0xb8, 0xaf, 0x8e, 0x42, 0xee, 0xb8, - 0x9a, 0xec, 0xda, 0x57, 0x87, 0x9c, 0x62, 0xaf, 0x0e, 0x69, 0x65, 0x06, 0x5d, 0x1f, 0x22, 0x4d, - 0x18, 0xed, 0x6c, 0x79, 0x89, 0x9a, 0xa3, 0x2f, 0xaa, 0x66, 0x5a, 0x63, 0xc0, 0xfb, 0x7b, 0x73, - 0x3f, 0x7d, 0x30, 0x3f, 0x90, 0x8d, 0xd5, 0x05, 0x91, 0xbb, 0x67, 0x44, 0x73, 0x1e, 0x28, 0xf8, - 0xdb, 0x9e, 0x60, 0x79, 0x9f, 0x3d, 0xed, 0x47, 0x1c, 0x91, 0xe3, 0x84, 0x34, 0xe9, 0xb6, 0x52, - 0x39, 0x1a, 0x5e, 0x2c, 0x70, 0x96, 0x09, 0xc6, 0x26, 0xd9, 0x49, 0x7c, 0xa3, 0x25, 0x94, 0xbc, - 0x1b, 0xaa, 0x49, 0xea, 0xc5, 0xe9, 0x43, 0xa6, 0x46, 0xe8, 0x46, 0x5f, 0x57, 0x4c, 0xd0, 0xf0, - 0x23, 0xef, 0x02, 0x68, 0x04, 0x61, 0x90, 0x6c, 0x3d, 0xe4, 0x49, 0x11, 0x57, 0xfc, 0xa2, 0xe6, - 0x80, 0x16, 0x37, 0x66, 0xdd, 0xf8, 0xd8, 0x16, 0x21, 0xcd, 0x0a, 0x5f, 0x4b, 0xb5, 0x75, 0x43, - 0x8d, 0x41, 0x8b, 0xca, 0xfd, 0x20, 0x9c, 0xc8, 0x5f, 0xdb, 0x95, 0x5b, 0xc3, 0x66, 0x1c, 0x75, - 0x3b, 0xf9, 0xb5, 0x84, 0x5f, 0xeb, 0x44, 0x81, 0x63, 0x36, 0x7e, 0x3b, 0x08, 0xeb, 0x79, 0x1b, - 0x7f, 0x35, 0x08, 0xeb, 0xc8, 0x31, 0x07, 0xb8, 0x53, 0xf5, 0xc7, 0x0e, 0x9c, 0xdb, 0xef, 0x76, - 0x31, 0xdb, 0xf6, 0xdf, 0xf5, 0xe2, 0x50, 0xde, 0x97, 0xe0, 0xb6, 0xe3, 0xb6, 0x17, 0x87, 0xc8, - 0xa1, 0xa4, 0x07, 0x63, 0x22, 0x1d, 0x4c, 0x7a, 0xc7, 0x2f, 0x16, 0x7b, 0xd7, 0x99, 0xed, 0xad, - 0x74, 0xb4, 0x46, 0xa4, 0xa2, 0xa1, 0x14, 0xe8, 0xbe, 0xea, 0x00, 0xb9, 0xb1, 0x43, 0xe3, 0x38, - 0xa8, 0x5b, 0x09, 0x6c, 0xe4, 0x39, 0x98, 0xbc, 0xb3, 0x7e, 0xe3, 0xfa, 0x5a, 0x14, 0x84, 0x3c, - 0x0f, 0xdb, 0x4a, 0x9b, 0xb8, 0x62, 0xc1, 0x31, 0x43, 0x45, 0x96, 0x60, 0xe6, 0xce, 0xcb, 0x6c, - 0xc9, 0xb9, 0xb0, 0xdb, 0x89, 0x69, 0x92, 0xe8, 0x17, 0x02, 0xaa, 0xe2, 0x60, 0xea, 0xca, 0x8b, - 0x39, 0x24, 0xf6, 0xd3, 0xbb, 0x5f, 0x2a, 0xc1, 0x84, 0x75, 0xa1, 0xfe, 0x00, 0xfe, 0x48, 0xee, - 0x0d, 0x80, 0xd2, 0x01, 0xdf, 0x00, 0x78, 0x06, 0x2a, 0x9d, 0xa8, 0x15, 0xf8, 0x81, 0x4e, 0xb0, - 0x9e, 0xe4, 0xa7, 0x57, 0x12, 0x86, 0x1a, 0x4b, 0xee, 0x42, 0x55, 0xdf, 0x8c, 0x95, 0x29, 0x57, - 0x45, 0x79, 0x64, 0x7a, 0xae, 0x99, 0x1b, 0xaf, 0x46, 0x16, 0x71, 0x61, 0x8c, 0x0f, 0x54, 0x15, - 0x9b, 0xe7, 0x67, 0xf8, 0x7c, 0x04, 0x27, 0x28, 0x31, 0xee, 0xbf, 0x8d, 0x42, 0x15, 0x69, 0x27, - 0x5a, 0x8a, 0x69, 0x3d, 0x21, 0xaf, 0x85, 0x72, 0x37, 0x6e, 0xc9, 0xc6, 0xd2, 0x61, 0x9e, 0x9b, - 0xb8, 0x8a, 0x0c, 0x9e, 0x59, 0x1d, 0x4a, 0x87, 0x3a, 0xe3, 0x2b, 0xef, 0x7b, 0xc6, 0xf7, 0x02, - 0x4c, 0x25, 0xc9, 0xd6, 0x5a, 0x1c, 0xec, 0x78, 0x29, 0x1b, 0x73, 0x32, 0x26, 0x62, 0x0e, 0x55, - 0xd6, 0x2f, 0x1b, 0x24, 0x66, 0x69, 0xc9, 0x25, 0x98, 0x31, 0x27, 0x6d, 0x34, 0x4e, 0x79, 0x08, - 0x44, 0x44, 0x4b, 0xf4, 0x99, 0x86, 0x39, 0x9b, 0x93, 0x04, 0xd8, 0x5f, 0x86, 0x2c, 0xc3, 0xf1, - 0x0c, 0x90, 0x29, 0x22, 0x42, 0x29, 0xb3, 0x92, 0xcf, 0xf1, 0x0c, 0x1f, 0xa6, 0x4b, 0x5f, 0x09, - 0x72, 0x0d, 0x4e, 0x88, 0xfe, 0xe5, 0x37, 0xaa, 0x75, 0x8d, 0xc6, 0x39, 0xa3, 0x1f, 0x92, 0x8c, - 0x4e, 0x5c, 0xea, 0x27, 0xc1, 0x41, 0xe5, 0xd8, 0x08, 0xd5, 0xe0, 0x95, 0x65, 0x69, 0xd8, 0xf4, - 0x08, 0xd5, 0x6c, 0x56, 0xea, 0x68, 0xd3, 0x91, 0x77, 0xc2, 0x93, 0xe6, 0x53, 0x44, 0xd0, 0xc4, - 0x6a, 0xbf, 0x2c, 0x4f, 0xb3, 0xe7, 0x24, 0x8b, 0x27, 0x2f, 0x0d, 0x24, 0xab, 0xe3, 0xb0, 0xf2, - 0x64, 0x13, 0xce, 0x68, 0xd4, 0x05, 0x36, 0x7b, 0x3b, 0x71, 0x90, 0xd0, 0x9a, 0x97, 0xd0, 0x9b, - 0x71, 0x8b, 0x67, 0x6f, 0x55, 0xcd, 0xab, 0x00, 0x97, 0x82, 0xf4, 0xf2, 0x20, 0x4a, 0x5c, 0xc5, - 0x07, 0x70, 0x61, 0xce, 0x05, 0x0d, 0xbd, 0xcd, 0x16, 0xbd, 0xb1, 0xb4, 0xc2, 0x6f, 0xba, 0x59, - 0xce, 0xc5, 0x05, 0x85, 0x40, 0x43, 0xa3, 0x5d, 0xfb, 0xc9, 0xa1, 0xae, 0xfd, 0x37, 0x1d, 0x98, - 0xd2, 0x83, 0xfd, 0x31, 0xc4, 0xbb, 0x5a, 0xd9, 0x78, 0xd7, 0xa5, 0xa3, 0x7a, 0x75, 0x52, 0xf3, - 0x21, 0x1b, 0xb1, 0x3f, 0xa9, 0x02, 0xf0, 0x77, 0x56, 0x02, 0x9e, 0x6d, 0x79, 0x0e, 0x46, 0x62, - 0xda, 0x89, 0xf2, 0x96, 0x8f, 0x51, 0x20, 0xc7, 0x7c, 0xff, 0x4e, 0xe7, 0x41, 0x67, 0xbe, 0xa3, - 0xdf, 0xdb, 0x33, 0xdf, 0x75, 0x38, 0x15, 0x84, 0x09, 0xf5, 0xbb, 0xb1, 0x5c, 0xe8, 0x2e, 0x47, - 0x89, 0xb6, 0x0e, 0x95, 0xda, 0x6b, 0x25, 0xa3, 0x53, 0x2b, 0x83, 0x88, 0x70, 0x70, 0x59, 0xd6, - 0xa4, 0x0a, 0x21, 0xaf, 0x75, 0x98, 0xf0, 0x80, 0x84, 0xa3, 0xa6, 0x30, 0x13, 0x62, 0xb5, 0xa1, - 0xee, 0x6d, 0xe4, 0x26, 0xc4, 0xea, 0xc5, 0x75, 0x34, 0x34, 0x83, 0xad, 0x62, 0xb5, 0x20, 0xab, - 0x08, 0x87, 0xb6, 0x8a, 0x6a, 0x7e, 0x4e, 0x0c, 0xbd, 0x95, 0xaf, 0x16, 0xeb, 0xc9, 0xa1, 0x8b, - 0xf5, 0xdb, 0x61, 0x3a, 0x08, 0xb7, 0x68, 0x1c, 0xa4, 0xb4, 0xce, 0xe7, 0xc2, 0xec, 0x14, 0x6f, - 0x08, 0x1d, 0xb9, 0x5a, 0xc9, 0x60, 0x31, 0x47, 0x9d, 0x35, 0x2a, 0xd3, 0x07, 0x30, 0x2a, 0x43, - 0x4c, 0xf9, 0xb1, 0x62, 0x4c, 0xf9, 0xf1, 0xa3, 0x9b, 0xf2, 0x99, 0x47, 0x6a, 0xca, 0x49, 0x21, - 0xa6, 0xfc, 0x69, 0x18, 0xed, 0xc4, 0xd1, 0x6e, 0x6f, 0xf6, 0x44, 0xd6, 0x9b, 0x5e, 0x63, 0x40, - 0x14, 0x38, 0xf7, 0x95, 0x12, 0x9c, 0x32, 0xe6, 0x8b, 0x0d, 0x9a, 0xa0, 0xc1, 0x26, 0x30, 0xbf, - 0x31, 0x27, 0x72, 0x28, 0xac, 0x48, 0xa8, 0x09, 0xaa, 0x6a, 0x0c, 0x5a, 0x54, 0x3c, 0xa0, 0x48, - 0x63, 0x9e, 0x8e, 0x99, 0xb7, 0x6d, 0x4b, 0x12, 0x8e, 0x9a, 0x82, 0xbf, 0xbc, 0x46, 0xe3, 0x54, - 0x1e, 0xa8, 0xe4, 0x13, 0x8c, 0x96, 0x0c, 0x0a, 0x6d, 0x3a, 0xe6, 0x03, 0xfa, 0x6a, 0x5e, 0x31, - 0xfb, 0x36, 0x29, 0x7c, 0x40, 0x3d, 0x95, 0x34, 0x56, 0xa9, 0xc3, 0x23, 0xc7, 0xa3, 0xfd, 0xea, - 0xf0, 0x48, 0x80, 0xa6, 0x70, 0xff, 0xc7, 0x81, 0xd7, 0x0c, 0x6c, 0x8a, 0xc7, 0xb0, 0x66, 0xed, - 0x66, 0xd7, 0xac, 0xf5, 0xa3, 0xaf, 0x59, 0x7d, 0xb5, 0x18, 0xb2, 0x7e, 0xfd, 0xad, 0x03, 0xd3, - 0x86, 0xfe, 0x31, 0x54, 0x35, 0x28, 0xf4, 0x0d, 0x35, 0xa3, 0xba, 0x48, 0x13, 0xcc, 0xd4, 0xed, - 0x9b, 0xbc, 0x6e, 0x62, 0x43, 0xb5, 0xe8, 0xab, 0x47, 0x4a, 0xf6, 0xd9, 0x99, 0xf4, 0x60, 0x8c, - 0x5f, 0x2b, 0x4d, 0x8a, 0xd9, 0xd8, 0x65, 0xe5, 0xf3, 0xd8, 0xa6, 0xd9, 0xd8, 0xf1, 0xcf, 0x04, - 0xa5, 0x40, 0x9e, 0x2c, 0x1c, 0x24, 0xcc, 0x08, 0xd6, 0x65, 0x0c, 0xd6, 0x24, 0x0b, 0x4b, 0x38, - 0x6a, 0x0a, 0xb7, 0x0d, 0xb3, 0x59, 0xe6, 0xcb, 0xb4, 0xc1, 0xe3, 0x67, 0x07, 0xaa, 0xe6, 0x02, - 0x54, 0x3d, 0x5e, 0x6a, 0xb5, 0xeb, 0xe5, 0x5f, 0x2a, 0x59, 0x54, 0x08, 0x34, 0x34, 0xee, 0xef, - 0x38, 0x70, 0x62, 0x40, 0x65, 0x0a, 0x8c, 0x3d, 0xa7, 0xc6, 0x0a, 0x0c, 0x79, 0x3d, 0xa6, 0x4e, - 0x1b, 0x9e, 0x8a, 0xd0, 0x58, 0x01, 0x9d, 0x65, 0x01, 0x46, 0x85, 0x77, 0xff, 0xdd, 0x81, 0x63, - 0x59, 0x5d, 0x13, 0x72, 0x05, 0x88, 0xa8, 0xcc, 0x72, 0x90, 0xf8, 0xd1, 0x0e, 0x8d, 0x7b, 0xac, - 0xe6, 0x42, 0xeb, 0x33, 0x92, 0x13, 0x59, 0xec, 0xa3, 0xc0, 0x01, 0xa5, 0xc8, 0x27, 0x79, 0x7e, - 0x8e, 0x6a, 0x6d, 0x35, 0x52, 0x6e, 0x15, 0x39, 0x52, 0x4c, 0x67, 0xda, 0xdb, 0x62, 0x2d, 0x12, - 0x6d, 0xf9, 0xee, 0xb7, 0x46, 0x40, 0x1f, 0x4e, 0xf1, 0x58, 0x40, 0x41, 0x91, 0x94, 0xcc, 0x73, - 0x36, 0xe5, 0x43, 0x3c, 0x67, 0x33, 0xf2, 0xa0, 0x8d, 0xbf, 0x78, 0x5b, 0xc5, 0x38, 0x98, 0x96, - 0xd1, 0xdf, 0x30, 0x28, 0xb4, 0xe9, 0x98, 0x26, 0xad, 0x60, 0x87, 0x8a, 0x42, 0x63, 0x59, 0x4d, - 0x56, 0x15, 0x02, 0x0d, 0x0d, 0xd3, 0xa4, 0x1e, 0x34, 0x1a, 0x72, 0xfb, 0xa7, 0x35, 0x61, 0xad, - 0x83, 0x1c, 0xc3, 0x28, 0xb6, 0xa2, 0x68, 0x5b, 0x3a, 0x75, 0x9a, 0xe2, 0x72, 0x14, 0x6d, 0x23, - 0xc7, 0x30, 0x37, 0x24, 0x8c, 0xe2, 0xb6, 0xd7, 0x0a, 0xde, 0x47, 0xeb, 0x5a, 0x8a, 0x74, 0xe6, - 0xb4, 0x1b, 0x72, 0xbd, 0x9f, 0x04, 0x07, 0x95, 0x63, 0x23, 0xb0, 0x13, 0xd3, 0x7a, 0xe0, 0xa7, - 0x36, 0x37, 0xc8, 0x8e, 0xc0, 0xb5, 0x3e, 0x0a, 0x1c, 0x50, 0x8a, 0x2c, 0xc2, 0x31, 0x75, 0xb8, - 0xa8, 0x12, 0x40, 0x84, 0x87, 0xa7, 0x9d, 0x6b, 0xcc, 0xa2, 0x31, 0x4f, 0xcf, 0xac, 0x4d, 0x5b, - 0xa6, 0xe1, 0x70, 0xdf, 0xcf, 0xb2, 0x36, 0x2a, 0x3d, 0x07, 0x35, 0x85, 0xfb, 0x7b, 0x25, 0xb6, - 0x3a, 0x0e, 0xb9, 0x35, 0xf9, 0xd8, 0x22, 0x77, 0xd9, 0x11, 0x39, 0x72, 0x80, 0x11, 0xf9, 0x1c, - 0x4c, 0xde, 0x49, 0xa2, 0x50, 0x47, 0xc5, 0x46, 0x87, 0x46, 0xc5, 0x2c, 0xaa, 0xc1, 0x51, 0xb1, - 0xb1, 0x43, 0x46, 0xc5, 0xfe, 0x62, 0x14, 0x4e, 0xeb, 0xf3, 0x60, 0x9a, 0xde, 0x8d, 0xe2, 0xed, - 0x20, 0x6c, 0xf2, 0x33, 0xd4, 0x2f, 0x3a, 0x30, 0x29, 0x86, 0xb7, 0xbc, 0x5f, 0x2e, 0xce, 0x0c, - 0x1b, 0x05, 0x5d, 0x01, 0xca, 0x08, 0x9b, 0xdf, 0xb0, 0x04, 0xe5, 0x2e, 0xfb, 0xdb, 0x28, 0xcc, - 0x68, 0x44, 0x3e, 0x00, 0xa0, 0x1e, 0x41, 0x6a, 0x14, 0xf4, 0x14, 0x94, 0xd2, 0x0f, 0x69, 0xc3, - 0xb8, 0x92, 0x1b, 0x5a, 0x08, 0x5a, 0x02, 0xc9, 0x2b, 0x0e, 0x8c, 0xb5, 0x44, 0xdb, 0x88, 0x03, - 0xa0, 0x97, 0x1e, 0x49, 0xdb, 0xd8, 0xad, 0xa2, 0x97, 0x65, 0xd9, 0x1e, 0x52, 0x3e, 0x41, 0x18, - 0x0f, 0xc2, 0x26, 0xeb, 0x56, 0x19, 0x48, 0x7c, 0xc3, 0xa0, 0xfc, 0x83, 0xd5, 0xc8, 0xab, 0xd7, - 0xbc, 0x96, 0x17, 0xfa, 0x34, 0x5e, 0x11, 0xe4, 0xf6, 0x53, 0x34, 0x1c, 0x80, 0x8a, 0x51, 0xdf, - 0x1d, 0xb7, 0xd1, 0x83, 0xdc, 0x71, 0x3b, 0xf3, 0x0e, 0x98, 0xe9, 0xeb, 0xcc, 0x43, 0xdd, 0xfc, - 0xff, 0x49, 0x98, 0x78, 0xc8, 0xa2, 0xee, 0x9f, 0x8e, 0x99, 0x35, 0xe6, 0x7a, 0x54, 0x17, 0x37, - 0xad, 0x62, 0xd3, 0xa3, 0xd2, 0x55, 0x2c, 0x70, 0x88, 0x58, 0xcf, 0xd9, 0x68, 0x20, 0xda, 0x22, - 0xd9, 0x18, 0xed, 0x78, 0x31, 0x0d, 0x1f, 0xf5, 0x18, 0x5d, 0xd3, 0x42, 0xd0, 0x12, 0x48, 0xb6, - 0x32, 0x27, 0x94, 0x17, 0x8f, 0x7e, 0x42, 0xc9, 0xbc, 0xd7, 0x81, 0x37, 0x62, 0x3e, 0xed, 0xc0, - 0x74, 0x98, 0x19, 0xb9, 0xf2, 0x94, 0x6a, 0xe3, 0x51, 0xcc, 0x0a, 0x71, 0xc3, 0x35, 0x0b, 0xc3, - 0x9c, 0xfc, 0x41, 0x2b, 0xd0, 0xe8, 0x21, 0x57, 0x20, 0x73, 0x65, 0x73, 0x6c, 0xd8, 0x95, 0x4d, - 0x12, 0xea, 0xcb, 0xda, 0xe3, 0x85, 0x5f, 0xd6, 0x86, 0x01, 0x17, 0xb5, 0x6f, 0x43, 0xd5, 0x8f, - 0xa9, 0x97, 0x3e, 0xe4, 0xbd, 0x5d, 0xfe, 0x80, 0xd8, 0x92, 0x62, 0x80, 0x86, 0x97, 0xfb, 0xd7, - 0x65, 0x38, 0xae, 0x5a, 0x44, 0x9d, 0xde, 0xb0, 0xe5, 0x4c, 0xc8, 0x35, 0xbe, 0xa8, 0x5e, 0xce, - 0x2e, 0x2b, 0x04, 0x1a, 0x1a, 0xe6, 0x3e, 0x75, 0x13, 0x7a, 0xa3, 0x43, 0xc3, 0xd5, 0x60, 0x33, - 0xe1, 0x2d, 0x6e, 0xa5, 0x80, 0xdd, 0x34, 0x28, 0xb4, 0xe9, 0x98, 0xef, 0x2c, 0xdc, 0xd8, 0x24, - 0x7f, 0x18, 0x2a, 0xdd, 0x63, 0x54, 0x78, 0xf2, 0x85, 0x81, 0xaf, 0x2e, 0x14, 0x93, 0x06, 0xd0, - 0x77, 0x68, 0x75, 0xc8, 0xe7, 0x16, 0x5e, 0x75, 0xe0, 0xd8, 0x76, 0x26, 0xff, 0x44, 0x99, 0xe4, - 0x23, 0x66, 0x35, 0x66, 0x93, 0x5a, 0xcc, 0x10, 0xce, 0xc2, 0x13, 0xcc, 0x4b, 0x77, 0xff, 0xcb, - 0x01, 0xdb, 0x3c, 0x1d, 0xcc, 0x11, 0xb2, 0xde, 0xd1, 0x29, 0xed, 0xf3, 0x8e, 0x8e, 0xf2, 0x99, - 0xca, 0x07, 0xf3, 0xd1, 0x47, 0x0e, 0xe1, 0xa3, 0x8f, 0x0e, 0x75, 0xb2, 0x5e, 0x0b, 0xe5, 0x6e, - 0x50, 0x97, 0x6e, 0xb6, 0x39, 0x90, 0x5a, 0x59, 0x46, 0x06, 0x77, 0xff, 0x68, 0xd4, 0x6c, 0xab, - 0xe5, 0xe9, 0xf5, 0x0f, 0x44, 0xb5, 0x1b, 0x3a, 0x49, 0x55, 0xd4, 0xfc, 0x7a, 0x5f, 0x92, 0xea, - 0xdb, 0x0e, 0x9f, 0x9c, 0x20, 0x1a, 0x68, 0x58, 0x8e, 0xea, 0xf8, 0x3e, 0x99, 0x09, 0x77, 0xa0, - 0xc2, 0x76, 0x22, 0x3c, 0x3e, 0x56, 0xc9, 0x28, 0x55, 0xb9, 0x2c, 0xe1, 0xf7, 0xf7, 0xe6, 0xde, - 0x7a, 0x78, 0xb5, 0x54, 0x69, 0xd4, 0xfc, 0x49, 0x02, 0x55, 0xf6, 0x9b, 0x27, 0x51, 0xc8, 0x3d, - 0xce, 0x4d, 0x6d, 0x8b, 0x14, 0xa2, 0x90, 0x0c, 0x0d, 0x23, 0x87, 0x84, 0x50, 0xe5, 0x2f, 0xbe, - 0x70, 0xa1, 0x62, 0x2b, 0xb4, 0xa6, 0x53, 0x19, 0x14, 0xe2, 0xfe, 0xde, 0xdc, 0x0b, 0x87, 0x17, - 0xaa, 0x8b, 0xa3, 0x11, 0xe1, 0x7e, 0xa7, 0x6c, 0xc6, 0xae, 0xcc, 0x4d, 0xfe, 0x81, 0x18, 0xbb, - 0xcf, 0xe7, 0xc6, 0xee, 0xb9, 0xbe, 0xb1, 0x3b, 0x6d, 0x5e, 0x45, 0xc9, 0x8c, 0xc6, 0xc7, 0xbd, - 0xc0, 0xee, 0xbf, 0xed, 0xe6, 0x9e, 0xc5, 0xcb, 0xdd, 0x20, 0xa6, 0xc9, 0x5a, 0xdc, 0x0d, 0x83, - 0xb0, 0xc9, 0x87, 0x63, 0xc5, 0xf6, 0x2c, 0x32, 0x68, 0xcc, 0xd3, 0xbb, 0x5f, 0xe2, 0x67, 0x8e, - 0x56, 0x3e, 0x16, 0xeb, 0xe5, 0x16, 0x7f, 0x34, 0x47, 0x64, 0x84, 0xea, 0x5e, 0x16, 0x2f, 0xe5, - 0x08, 0x1c, 0xb9, 0x0b, 0xe3, 0x9b, 0xe2, 0xe2, 0x7e, 0x31, 0x17, 0x84, 0xe4, 0x2b, 0x00, 0xfc, - 0x2a, 0xa6, 0x7a, 0x12, 0xe0, 0xbe, 0xf9, 0x89, 0x4a, 0x9a, 0xfb, 0x6b, 0x65, 0x38, 0x96, 0x7b, - 0xd2, 0x85, 0xed, 0xcf, 0xd5, 0xfb, 0x3d, 0xf9, 0x60, 0xba, 0x7e, 0xa7, 0x56, 0x53, 0x90, 0xf7, - 0x02, 0xd4, 0x69, 0xa7, 0x15, 0xf5, 0xb8, 0xe3, 0x32, 0x72, 0x68, 0xc7, 0x45, 0xfb, 0xba, 0xcb, - 0x9a, 0x0b, 0x5a, 0x1c, 0x65, 0x1a, 0xec, 0xa8, 0x78, 0x96, 0x20, 0x9b, 0x06, 0x6b, 0xdd, 0x93, - 0x1b, 0x7b, 0xbc, 0xf7, 0xe4, 0x02, 0x38, 0x26, 0x54, 0xd4, 0x59, 0x4f, 0x0f, 0x91, 0xdc, 0x74, - 0x82, 0x8d, 0xa8, 0xe5, 0x2c, 0x1b, 0xcc, 0xf3, 0x75, 0x3f, 0x55, 0x62, 0xee, 0x9b, 0x68, 0xec, - 0x6b, 0x2a, 0x96, 0xfd, 0x7a, 0x18, 0xf3, 0xba, 0xe9, 0x56, 0xd4, 0xf7, 0x90, 0xc2, 0x22, 0x87, - 0xa2, 0xc4, 0x92, 0x55, 0x18, 0xa9, 0x7b, 0xa9, 0x7a, 0x67, 0xfd, 0x30, 0xca, 0x99, 0xc0, 0x95, - 0x97, 0x52, 0xe4, 0x5c, 0xc8, 0x53, 0x30, 0x92, 0x7a, 0xcd, 0xcc, 0x0b, 0x8f, 0x1b, 0x5e, 0x33, - 0x41, 0x0e, 0xb5, 0x57, 0x97, 0x91, 0x7d, 0x56, 0x97, 0x17, 0xac, 0x7f, 0x00, 0xb0, 0x0e, 0x49, - 0xfa, 0x5f, 0xed, 0x17, 0x89, 0xf9, 0x19, 0x5a, 0xf7, 0xc7, 0x60, 0xd2, 0x7e, 0xd5, 0xff, 0x40, - 0xf7, 0x7a, 0xdc, 0x7f, 0x1d, 0x81, 0xa9, 0x4c, 0x66, 0x5c, 0x66, 0x94, 0x3b, 0xfb, 0x8e, 0x72, - 0x7e, 0xa6, 0xd5, 0x0d, 0xa9, 0xcc, 0x7b, 0xb4, 0xce, 0xb4, 0xba, 0x21, 0x45, 0x81, 0x63, 0xbd, - 0x52, 0x8f, 0x7b, 0xd8, 0x0d, 0x65, 0x10, 0x5d, 0xf7, 0xca, 0x32, 0x87, 0xa2, 0xc4, 0xb2, 0x0d, - 0xec, 0x64, 0xc2, 0x8d, 0xa2, 0xb0, 0x11, 0x72, 0xd6, 0x5c, 0x29, 0xe2, 0xf1, 0x29, 0x99, 0x05, - 0xca, 0x37, 0xf4, 0x36, 0x04, 0x33, 0x12, 0xc9, 0x47, 0x1d, 0xfb, 0xd9, 0xad, 0xb1, 0x22, 0x0e, - 0x7f, 0xf2, 0x89, 0x87, 0x62, 0x06, 0x3d, 0xf8, 0xf5, 0xad, 0x44, 0x4f, 0xe0, 0xf1, 0x47, 0x33, - 0x81, 0x61, 0xc0, 0xe4, 0x7d, 0x23, 0x54, 0xdb, 0x5e, 0x18, 0x34, 0x68, 0x92, 0x8a, 0x7f, 0xe4, - 0xa8, 0x8a, 0xdd, 0xd3, 0x35, 0x05, 0x44, 0x83, 0xe7, 0xff, 0x7b, 0xc3, 0x2b, 0x26, 0x36, 0x31, - 0x55, 0xeb, 0x7f, 0x6f, 0x0c, 0x18, 0x6d, 0x1a, 0xf7, 0xf7, 0x1d, 0x38, 0x35, 0xb0, 0x31, 0xbe, - 0x7f, 0xa3, 0x95, 0xee, 0x1f, 0x94, 0xe0, 0xc4, 0x80, 0xcc, 0x51, 0xd2, 0x7b, 0x64, 0xaf, 0xb3, - 0xc9, 0xd4, 0xd4, 0xa9, 0xa1, 0x63, 0xe3, 0x70, 0xcb, 0x90, 0x59, 0x0a, 0xca, 0x8f, 0x75, 0x29, - 0x70, 0xbf, 0x54, 0x02, 0xeb, 0x1d, 0x41, 0xf2, 0x41, 0x3b, 0x49, 0xda, 0x29, 0x2a, 0xa1, 0x57, - 0x30, 0xd7, 0x49, 0xd6, 0xa2, 0xd5, 0x06, 0xe5, 0x5c, 0xe7, 0xc7, 0x6b, 0x69, 0xff, 0xf1, 0x4a, - 0x5a, 0x2a, 0x1b, 0xbd, 0x5c, 0x7c, 0x36, 0x7a, 0xb5, 0x2f, 0x13, 0xfd, 0x57, 0x1c, 0x31, 0xd2, - 0x72, 0x55, 0x32, 0x16, 0xd6, 0x79, 0x80, 0x85, 0x7d, 0x13, 0x54, 0x12, 0xda, 0x6a, 0x30, 0xcf, - 0x4e, 0x5a, 0x62, 0x3d, 0x26, 0xd6, 0x25, 0x1c, 0x35, 0x05, 0xbf, 0xa7, 0xda, 0x6a, 0x45, 0x77, - 0x2f, 0xb4, 0x3b, 0x69, 0x4f, 0xda, 0x64, 0x73, 0x4f, 0x55, 0x63, 0xd0, 0xa2, 0x72, 0xff, 0xdb, - 0x11, 0xdd, 0x29, 0x7d, 0xf4, 0xe7, 0x73, 0xf7, 0x07, 0x0f, 0xee, 0xde, 0xfe, 0x3c, 0x80, 0xaf, - 0x6f, 0xf4, 0x17, 0xf3, 0xbc, 0xa0, 0x79, 0x21, 0xc0, 0x7e, 0xf3, 0x4e, 0xc1, 0xd0, 0x92, 0x97, - 0x99, 0x3c, 0xe5, 0xfd, 0x26, 0x8f, 0xfb, 0x1f, 0x0e, 0x64, 0x16, 0x0b, 0xd2, 0x81, 0x51, 0xa6, - 0x41, 0xaf, 0x98, 0xf7, 0x07, 0x6c, 0xd6, 0x6c, 0x62, 0xc9, 0x61, 0xc1, 0x7f, 0xa2, 0x10, 0x44, - 0x5a, 0xd2, 0x3b, 0x2f, 0x15, 0xf1, 0x46, 0x86, 0x2d, 0x90, 0xf9, 0xf7, 0xf2, 0x3f, 0x0e, 0xb4, - 0xa7, 0xef, 0x3e, 0x0f, 0x33, 0x7d, 0x4a, 0xf1, 0x1b, 0x45, 0x91, 0x7a, 0x74, 0xc1, 0x1a, 0x81, - 0xfc, 0x7e, 0x23, 0x0a, 0x1c, 0x73, 0xf0, 0x8f, 0xe7, 0xd9, 0x93, 0xcf, 0x3b, 0x30, 0x93, 0xe4, - 0xf9, 0x3d, 0xaa, 0xb6, 0xd3, 0x91, 0xab, 0x3e, 0x14, 0xf6, 0x2b, 0xe1, 0xfe, 0xa5, 0x34, 0x4f, - 0xe2, 0x3f, 0xa1, 0xf4, 0xe2, 0xe2, 0x0c, 0x5d, 0x5c, 0xd8, 0x14, 0xf3, 0xb7, 0x68, 0xbd, 0xdb, - 0xea, 0x4b, 0xa5, 0x59, 0x97, 0x70, 0xd4, 0x14, 0x99, 0x67, 0xc6, 0xca, 0xfb, 0x3e, 0x33, 0xf6, - 0x1c, 0x4c, 0xda, 0x0f, 0x8b, 0xf0, 0x10, 0x9a, 0x3c, 0x7c, 0xb0, 0xdf, 0x20, 0xc1, 0x0c, 0x55, - 0xee, 0x99, 0xaa, 0xd1, 0x7d, 0x9f, 0xa9, 0x7a, 0x06, 0x2a, 0xf2, 0x2f, 0x96, 0x54, 0x7c, 0x57, - 0xe4, 0xe9, 0x48, 0x18, 0x6a, 0x2c, 0x33, 0x10, 0x6d, 0x2f, 0xec, 0x7a, 0x2d, 0xd6, 0x42, 0x32, - 0x27, 0x4f, 0xcf, 0xac, 0x6b, 0x1a, 0x83, 0x16, 0x95, 0xfb, 0x2f, 0x0e, 0xe4, 0x1f, 0xfe, 0xc9, - 0x64, 0xf6, 0x39, 0xfb, 0x66, 0xf6, 0x65, 0x13, 0x9c, 0x4a, 0x07, 0x4a, 0x70, 0xb2, 0x73, 0x8f, - 0xca, 0x0f, 0xcc, 0x3d, 0x7a, 0x9d, 0xb9, 0x15, 0x2e, 0x92, 0x94, 0x26, 0x06, 0xdd, 0x08, 0x27, - 0x2e, 0x8c, 0xf9, 0x9e, 0x4e, 0x9c, 0x9e, 0x14, 0x8e, 0xd2, 0xd2, 0x22, 0x27, 0x92, 0x98, 0xda, - 0xfc, 0x57, 0xbe, 0x7d, 0xf6, 0x89, 0xaf, 0x7e, 0xfb, 0xec, 0x13, 0xdf, 0xf8, 0xf6, 0xd9, 0x27, - 0x3e, 0x7c, 0xef, 0xac, 0xf3, 0x95, 0x7b, 0x67, 0x9d, 0xaf, 0xde, 0x3b, 0xeb, 0x7c, 0xe3, 0xde, - 0x59, 0xe7, 0x5b, 0xf7, 0xce, 0x3a, 0x9f, 0xfe, 0xc7, 0xb3, 0x4f, 0xbc, 0xab, 0xa2, 0xc6, 0xea, - 0xff, 0x05, 0x00, 0x00, 0xff, 0xff, 0xf7, 0x6e, 0xec, 0x2c, 0x61, 0x74, 0x00, 0x00, + // 6678 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x7d, 0x6b, 0x70, 0x1c, 0xd9, + 0x55, 0xf0, 0xf6, 0x8c, 0x1e, 0x33, 0x47, 0x0f, 0x5b, 0xd7, 0x5e, 0xaf, 0xe2, 0x6f, 0x63, 0xb9, + 0x7a, 0x2b, 0xc9, 0x7e, 0x5f, 0x12, 0xe9, 0x5b, 0xb3, 0x84, 0x25, 0x1b, 0x12, 0x34, 0x92, 0x6c, + 0xcb, 0x96, 0x6d, 0xed, 0x91, 0xd6, 0x26, 0x0f, 0xc2, 0xb6, 0x7a, 0xee, 0x8c, 0xda, 0x9a, 0xe9, + 0x9e, 0xed, 0xee, 0x91, 0x35, 0x09, 0x79, 0x56, 0x20, 0x5b, 0xe4, 0xb1, 0xa9, 0x24, 0x3f, 0x92, + 0x82, 0x82, 0xf0, 0x28, 0xaa, 0xf8, 0x11, 0x1e, 0xbf, 0x80, 0x02, 0xfe, 0xe4, 0x57, 0x80, 0x2a, + 0x48, 0x15, 0x54, 0x12, 0x48, 0x21, 0x12, 0x03, 0xc5, 0xa3, 0x0a, 0x28, 0x20, 0x7f, 0xf0, 0x2f, + 0xea, 0xbe, 0x6f, 0xf7, 0xcc, 0x58, 0x92, 0xd5, 0x76, 0x52, 0x29, 0xfe, 0x69, 0xce, 0x39, 0x7d, + 0xce, 0xb9, 0xaf, 0x73, 0xcf, 0x3d, 0xe7, 0xdc, 0x2b, 0x58, 0x6b, 0x06, 0xe9, 0x76, 0x77, 0x6b, + 0xde, 0x8f, 0xda, 0x0b, 0x5e, 0xdc, 0x8c, 0x3a, 0x71, 0x74, 0x9b, 0xff, 0xf1, 0x66, 0xbf, 0xbe, + 0xb0, 0x7b, 0x61, 0xa1, 0xb3, 0xd3, 0x5c, 0xf0, 0x3a, 0x41, 0xb2, 0xe0, 0x75, 0x3a, 0xad, 0xc0, + 0xf7, 0xd2, 0x20, 0x0a, 0x17, 0x76, 0x9f, 0xf1, 0x5a, 0x9d, 0x6d, 0xef, 0x99, 0x85, 0x26, 0x0d, + 0x69, 0xec, 0xa5, 0xb4, 0x3e, 0xdf, 0x89, 0xa3, 0x34, 0x22, 0x6f, 0x33, 0xdc, 0xe6, 0x15, 0x37, + 0xfe, 0xc7, 0x4f, 0xf9, 0xf5, 0xf9, 0xdd, 0x0b, 0xf3, 0x9d, 0x9d, 0xe6, 0x3c, 0xe3, 0x36, 0x6f, + 0x71, 0x9b, 0x57, 0xdc, 0xce, 0xbe, 0xd9, 0xd2, 0xa5, 0x19, 0x35, 0xa3, 0x05, 0xce, 0x74, 0xab, + 0xdb, 0xe0, 0xbf, 0xf8, 0x0f, 0xfe, 0x97, 0x10, 0x76, 0xd6, 0xdd, 0x79, 0x2e, 0x99, 0x0f, 0x22, + 0xa6, 0xde, 0x82, 0x1f, 0xc5, 0x74, 0x61, 0xb7, 0x4f, 0xa1, 0xb3, 0xcf, 0x1a, 0x9a, 0xb6, 0xe7, + 0x6f, 0x07, 0x21, 0x8d, 0x7b, 0xa6, 0x4d, 0x6d, 0x9a, 0x7a, 0x83, 0xbe, 0x5a, 0x18, 0xf6, 0x55, + 0xdc, 0x0d, 0xd3, 0xa0, 0x4d, 0xfb, 0x3e, 0x78, 0xcb, 0x41, 0x1f, 0x24, 0xfe, 0x36, 0x6d, 0x7b, + 0xf9, 0xef, 0xdc, 0x97, 0x61, 0x6a, 0xf1, 0xd6, 0xc6, 0x62, 0x37, 0xdd, 0x5e, 0x8a, 0xc2, 0x46, + 0xd0, 0x24, 0x3f, 0x0c, 0x13, 0x7e, 0xab, 0x9b, 0xa4, 0x34, 0xbe, 0xee, 0xb5, 0xe9, 0xac, 0x73, + 0xde, 0x79, 0xba, 0x5a, 0x3b, 0xf5, 0xd5, 0xfd, 0xb9, 0xc7, 0xee, 0xee, 0xcf, 0x4d, 0x2c, 0x19, + 0x14, 0xda, 0x74, 0xe4, 0xff, 0xc2, 0x78, 0x1c, 0xb5, 0xe8, 0x22, 0x5e, 0x9f, 0x2d, 0xf1, 0x4f, + 0x4e, 0xc8, 0x4f, 0xc6, 0x51, 0x80, 0x51, 0xe1, 0xdd, 0xaf, 0x97, 0x00, 0x16, 0x3b, 0x9d, 0xf5, + 0x38, 0xba, 0x4d, 0xfd, 0x94, 0xbc, 0x04, 0x15, 0xd6, 0x0b, 0x75, 0x2f, 0xf5, 0xb8, 0xb4, 0x89, + 0x0b, 0xff, 0x7f, 0x5e, 0x34, 0x66, 0xde, 0x6e, 0x8c, 0x19, 0x39, 0x46, 0x3d, 0xbf, 0xfb, 0xcc, + 0xfc, 0x8d, 0x2d, 0xf6, 0xfd, 0x35, 0x9a, 0x7a, 0x35, 0x22, 0x85, 0x81, 0x81, 0xa1, 0xe6, 0x4a, + 0x42, 0x18, 0x49, 0x3a, 0xd4, 0xe7, 0x8a, 0x4d, 0x5c, 0x58, 0x9b, 0x3f, 0xce, 0x14, 0x99, 0x37, + 0x9a, 0x6f, 0x74, 0xa8, 0x5f, 0x9b, 0x94, 0x92, 0x47, 0xd8, 0x2f, 0xe4, 0x72, 0xc8, 0x2e, 0x8c, + 0x25, 0xa9, 0x97, 0x76, 0x93, 0xd9, 0x32, 0x97, 0x78, 0xbd, 0x30, 0x89, 0x9c, 0x6b, 0x6d, 0x5a, + 0xca, 0x1c, 0x13, 0xbf, 0x51, 0x4a, 0x73, 0xff, 0xc6, 0x81, 0x69, 0x43, 0xbc, 0x16, 0x24, 0x29, + 0x79, 0x4f, 0x5f, 0xe7, 0xce, 0x1f, 0xae, 0x73, 0xd9, 0xd7, 0xbc, 0x6b, 0x4f, 0x4a, 0x61, 0x15, + 0x05, 0xb1, 0x3a, 0xb6, 0x0d, 0xa3, 0x41, 0x4a, 0xdb, 0xc9, 0x6c, 0xe9, 0x7c, 0xf9, 0xe9, 0x89, + 0x0b, 0x97, 0x8b, 0x6a, 0x67, 0x6d, 0x4a, 0x0a, 0x1d, 0x5d, 0x65, 0xec, 0x51, 0x48, 0x71, 0xbf, + 0x0b, 0x76, 0xfb, 0x58, 0x87, 0x93, 0x67, 0x60, 0x22, 0x89, 0xba, 0xb1, 0x4f, 0x91, 0x76, 0xa2, + 0x64, 0xd6, 0x39, 0x5f, 0x66, 0x53, 0x8f, 0xcd, 0xd4, 0x0d, 0x03, 0x46, 0x9b, 0x86, 0x7c, 0xda, + 0x81, 0xc9, 0x3a, 0x4d, 0xd2, 0x20, 0xe4, 0xf2, 0x95, 0xf2, 0x9b, 0xc7, 0x56, 0x5e, 0x01, 0x97, + 0x0d, 0xf3, 0xda, 0x69, 0xd9, 0x90, 0x49, 0x0b, 0x98, 0x60, 0x46, 0x3e, 0x5b, 0x71, 0x75, 0x9a, + 0xf8, 0x71, 0xd0, 0x61, 0xbf, 0xf9, 0x9c, 0xb1, 0x56, 0xdc, 0xb2, 0x41, 0xa1, 0x4d, 0x47, 0x42, + 0x18, 0x65, 0x2b, 0x2a, 0x99, 0x1d, 0xe1, 0xfa, 0xaf, 0x1e, 0x4f, 0x7f, 0xd9, 0xa9, 0x6c, 0xb1, + 0x9a, 0xde, 0x67, 0xbf, 0x12, 0x14, 0x62, 0xc8, 0xa7, 0x1c, 0x98, 0x95, 0x2b, 0x1e, 0xa9, 0xe8, + 0xd0, 0x5b, 0xdb, 0x41, 0x4a, 0x5b, 0x41, 0x92, 0xce, 0x8e, 0x72, 0x1d, 0x16, 0x0e, 0x37, 0xb7, + 0x2e, 0xc5, 0x51, 0xb7, 0x73, 0x35, 0x08, 0xeb, 0xb5, 0xf3, 0x52, 0xd2, 0xec, 0xd2, 0x10, 0xc6, + 0x38, 0x54, 0x24, 0xf9, 0x9c, 0x03, 0x67, 0x43, 0xaf, 0x4d, 0x93, 0x8e, 0xc7, 0x86, 0x56, 0xa0, + 0x6b, 0x2d, 0xcf, 0xdf, 0xe1, 0x1a, 0x8d, 0x3d, 0x98, 0x46, 0xae, 0xd4, 0xe8, 0xec, 0xf5, 0xa1, + 0xac, 0xf1, 0x3e, 0x62, 0xc9, 0xaf, 0x3a, 0x30, 0x13, 0xc5, 0x9d, 0x6d, 0x2f, 0xa4, 0x75, 0x85, + 0x4d, 0x66, 0xc7, 0xf9, 0xd2, 0x7b, 0xef, 0xf1, 0x86, 0xe8, 0x46, 0x9e, 0xed, 0xb5, 0x28, 0x0c, + 0xd2, 0x28, 0xde, 0xa0, 0x69, 0x1a, 0x84, 0xcd, 0xa4, 0xf6, 0xf8, 0xdd, 0xfd, 0xb9, 0x99, 0x3e, + 0x2a, 0xec, 0xd7, 0x87, 0xbc, 0x1f, 0x26, 0x92, 0x5e, 0xe8, 0xdf, 0x0a, 0xc2, 0x7a, 0x74, 0x27, + 0x99, 0xad, 0x14, 0xb1, 0x7c, 0x37, 0x34, 0x43, 0xb9, 0x00, 0x8d, 0x00, 0xb4, 0xa5, 0x0d, 0x1e, + 0x38, 0x33, 0x95, 0xaa, 0x45, 0x0f, 0x9c, 0x99, 0x4c, 0xf7, 0x11, 0x4b, 0x3e, 0xee, 0xc0, 0x54, + 0x12, 0x34, 0x43, 0x2f, 0xed, 0xc6, 0xf4, 0x2a, 0xed, 0x25, 0xb3, 0xc0, 0x15, 0xb9, 0x72, 0xcc, + 0x5e, 0xb1, 0x58, 0xd6, 0x1e, 0x97, 0x3a, 0x4e, 0xd9, 0xd0, 0x04, 0xb3, 0x72, 0x07, 0x2d, 0x34, + 0x33, 0xad, 0x27, 0x8a, 0x5d, 0x68, 0x66, 0x52, 0x0f, 0x15, 0xe9, 0xfe, 0x71, 0x09, 0x4e, 0xe6, + 0xf7, 0x20, 0xf2, 0xeb, 0x0e, 0x9c, 0xb8, 0x7d, 0x27, 0xdd, 0x8c, 0x76, 0x68, 0x98, 0xd4, 0x7a, + 0xcc, 0x52, 0x70, 0xeb, 0x3b, 0x71, 0xc1, 0x2f, 0x76, 0xb7, 0x9b, 0xbf, 0x92, 0x95, 0xb2, 0x12, + 0xa6, 0x71, 0xaf, 0xf6, 0x84, 0x6c, 0xcf, 0x89, 0x2b, 0xb7, 0x36, 0x6d, 0x2c, 0xe6, 0x95, 0x3a, + 0xfb, 0x09, 0x07, 0x4e, 0x0f, 0x62, 0x41, 0x4e, 0x42, 0x79, 0x87, 0xf6, 0x84, 0x83, 0x83, 0xec, + 0x4f, 0xf2, 0x93, 0x30, 0xba, 0xeb, 0xb5, 0xba, 0x54, 0x3a, 0x0a, 0x97, 0x8e, 0xd7, 0x10, 0xad, + 0x19, 0x0a, 0xae, 0x6f, 0x2d, 0x3d, 0xe7, 0xb8, 0x7f, 0x5e, 0x86, 0x09, 0x6b, 0xab, 0x78, 0x04, + 0xce, 0x4f, 0x94, 0x71, 0x7e, 0xae, 0x15, 0xb6, 0xcb, 0x0d, 0xf5, 0x7e, 0xee, 0xe4, 0xbc, 0x9f, + 0x1b, 0xc5, 0x89, 0xbc, 0xaf, 0xfb, 0x43, 0x52, 0xa8, 0x46, 0x1d, 0xe6, 0xdc, 0xb2, 0x5d, 0x74, + 0xa4, 0x88, 0x21, 0xbc, 0xa1, 0xd8, 0xd5, 0xa6, 0xee, 0xee, 0xcf, 0x55, 0xf5, 0x4f, 0x34, 0x82, + 0xdc, 0x6f, 0x38, 0x70, 0xda, 0xd2, 0x71, 0x29, 0x0a, 0xeb, 0x01, 0x1f, 0xda, 0xf3, 0x30, 0x92, + 0xf6, 0x3a, 0xca, 0x83, 0xd6, 0x3d, 0xb5, 0xd9, 0xeb, 0x50, 0xe4, 0x18, 0xe6, 0x33, 0xb7, 0x69, + 0x92, 0x78, 0x4d, 0x9a, 0xf7, 0x99, 0xaf, 0x09, 0x30, 0x2a, 0x3c, 0x89, 0x81, 0xb4, 0xbc, 0x24, + 0xdd, 0x8c, 0xbd, 0x30, 0xe1, 0xec, 0x37, 0x83, 0x36, 0x95, 0x1d, 0xfc, 0xff, 0x0e, 0x37, 0x63, + 0xd8, 0x17, 0xb5, 0x33, 0x77, 0xf7, 0xe7, 0xc8, 0x5a, 0x1f, 0x27, 0x1c, 0xc0, 0xdd, 0xfd, 0x9c, + 0x03, 0x67, 0x06, 0xbb, 0x35, 0xe4, 0xf5, 0x30, 0x96, 0xd0, 0x78, 0x97, 0xc6, 0xb2, 0x75, 0x66, + 0x48, 0x38, 0x14, 0x25, 0x96, 0x2c, 0x40, 0x55, 0x9b, 0x5c, 0xd9, 0xc6, 0x19, 0x49, 0x5a, 0x35, + 0x76, 0xda, 0xd0, 0xb0, 0x4e, 0x63, 0x3f, 0xa4, 0x13, 0xa4, 0x3b, 0x8d, 0x9f, 0x37, 0x38, 0xc6, + 0xfd, 0x5b, 0x07, 0x4e, 0x58, 0x5a, 0x3d, 0x02, 0x2f, 0x37, 0xcc, 0x7a, 0xb9, 0xab, 0x85, 0xcd, + 0xe7, 0x21, 0x6e, 0xee, 0x57, 0xc6, 0x60, 0xc6, 0x9e, 0xf5, 0xdc, 0x1c, 0xf3, 0x03, 0x16, 0xed, + 0x44, 0x2f, 0xe2, 0x9a, 0xec, 0x73, 0x73, 0xc0, 0x12, 0x60, 0x54, 0x78, 0xd6, 0x89, 0x1d, 0x2f, + 0xdd, 0x96, 0x1d, 0xae, 0x3b, 0x71, 0xdd, 0x4b, 0xb7, 0x91, 0x63, 0xc8, 0xdb, 0x61, 0x3a, 0xf5, + 0xe2, 0x26, 0x4d, 0x91, 0xee, 0x06, 0x89, 0x5a, 0x2f, 0xd5, 0xda, 0x19, 0x49, 0x3b, 0xbd, 0x99, + 0xc1, 0x62, 0x8e, 0x9a, 0xbc, 0x0c, 0x23, 0xdb, 0xb4, 0xd5, 0x96, 0x7e, 0xcd, 0x46, 0x71, 0x2b, + 0x9c, 0xb7, 0xf5, 0x32, 0x6d, 0xb5, 0x6b, 0x15, 0xa6, 0x32, 0xfb, 0x0b, 0xb9, 0x28, 0xf2, 0x33, + 0x0e, 0x54, 0x77, 0xba, 0x49, 0x1a, 0xb5, 0x83, 0xf7, 0xd1, 0xd9, 0x0a, 0x17, 0xfc, 0x13, 0x05, + 0x0b, 0xbe, 0xaa, 0xf8, 0x8b, 0xf5, 0xae, 0x7f, 0xa2, 0x91, 0x4c, 0x3e, 0x00, 0xe3, 0x3b, 0x49, + 0x14, 0x86, 0x94, 0x79, 0x2a, 0x4c, 0x89, 0x9b, 0x45, 0x2b, 0x21, 0xb8, 0xd7, 0x26, 0xd8, 0xd8, + 0xca, 0x1f, 0xa8, 0x64, 0xf2, 0x6e, 0xa8, 0x07, 0x31, 0xf5, 0xd3, 0x28, 0xee, 0xcd, 0xc2, 0x43, + 0xe9, 0x86, 0x65, 0xc5, 0x5f, 0x74, 0x83, 0xfe, 0x89, 0x46, 0x32, 0xe9, 0xc1, 0x58, 0xa7, 0xd5, + 0x6d, 0x06, 0xe1, 0xec, 0x04, 0xd7, 0xe1, 0xc5, 0x82, 0x75, 0x58, 0xe7, 0xcc, 0x6b, 0xc0, 0x8c, + 0x8a, 0xf8, 0x1b, 0xa5, 0x40, 0xf2, 0x14, 0x8c, 0xfa, 0xdb, 0x5e, 0x9c, 0xce, 0x4e, 0xf2, 0x39, + 0xab, 0x17, 0xd1, 0x12, 0x03, 0xa2, 0xc0, 0xb9, 0xbf, 0x5c, 0x82, 0xb3, 0xc3, 0x1b, 0x26, 0x56, + 0x93, 0xdf, 0x8d, 0x13, 0x61, 0x9f, 0x2b, 0xf6, 0x6a, 0xe2, 0x60, 0x54, 0x78, 0xf2, 0x11, 0x07, + 0xc6, 0x6f, 0xcb, 0x11, 0x2f, 0x3d, 0x94, 0x11, 0xbf, 0x22, 0x47, 0x5c, 0xeb, 0x70, 0x45, 0x8d, + 0xba, 0x94, 0xcb, 0xd4, 0xa5, 0x7b, 0x7e, 0xab, 0x5b, 0x57, 0x96, 0x51, 0x93, 0xae, 0x08, 0x30, + 0x2a, 0x3c, 0x23, 0x0d, 0x42, 0x41, 0x3a, 0x92, 0x25, 0x5d, 0x0d, 0x25, 0xa9, 0xc4, 0xbb, 0x1f, + 0x1d, 0x85, 0xc7, 0x07, 0x2e, 0x3e, 0x32, 0x0f, 0xc0, 0x7d, 0x96, 0x8b, 0x01, 0x3b, 0x60, 0x8a, + 0x53, 0xf5, 0x34, 0x73, 0x31, 0x6e, 0x6a, 0x28, 0x5a, 0x14, 0xe4, 0x43, 0x00, 0x1d, 0x2f, 0xf6, + 0xda, 0x34, 0xa5, 0xb1, 0xb2, 0x93, 0x57, 0x8f, 0xd7, 0x4b, 0x4c, 0x8f, 0x75, 0xc5, 0xd3, 0xf8, + 0x38, 0x1a, 0x94, 0xa0, 0x25, 0x92, 0x9d, 0xa1, 0x63, 0xda, 0xa2, 0x5e, 0x42, 0xaf, 0x9b, 0xed, + 0x43, 0x9f, 0xa1, 0xd1, 0xa0, 0xd0, 0xa6, 0x63, 0xfb, 0x18, 0x6f, 0x45, 0x22, 0xfb, 0x4a, 0xef, + 0x63, 0xbc, 0x9d, 0x09, 0x4a, 0x2c, 0x79, 0xd5, 0x81, 0xe9, 0x46, 0xd0, 0xa2, 0x46, 0xba, 0x3c, + 0xf1, 0xde, 0x38, 0x7e, 0x23, 0x2f, 0xda, 0x7c, 0x8d, 0x05, 0xce, 0x80, 0x13, 0xcc, 0x89, 0x67, + 0xc3, 0xbc, 0x4b, 0x63, 0x6e, 0xba, 0xc7, 0xb2, 0xc3, 0x7c, 0x53, 0x80, 0x51, 0xe1, 0xc9, 0xcf, + 0x3b, 0x40, 0xe8, 0x5e, 0x4a, 0xe3, 0xd0, 0x6b, 0x99, 0xf1, 0x9b, 0x1d, 0x2f, 0xaa, 0x01, 0x2b, + 0x36, 0xef, 0xda, 0x59, 0xa9, 0x07, 0x59, 0xe9, 0x13, 0x89, 0x03, 0xd4, 0x70, 0xbf, 0x58, 0x82, + 0xd9, 0x61, 0x2b, 0x82, 0x24, 0x6c, 0xde, 0xa7, 0x37, 0xbd, 0x38, 0x91, 0x87, 0x8b, 0x63, 0x9e, + 0x51, 0x25, 0xdf, 0x9b, 0x5e, 0x6c, 0xaf, 0x20, 0x2e, 0x00, 0x95, 0x24, 0x72, 0x1b, 0x46, 0xd2, + 0x96, 0x57, 0x50, 0x50, 0xcb, 0x92, 0x68, 0x5c, 0xc0, 0xb5, 0xc5, 0x04, 0xb9, 0x0c, 0xf2, 0x24, + 0x8c, 0xb4, 0x82, 0x2d, 0xe6, 0x2a, 0xb3, 0x25, 0xc6, 0xf7, 0xbc, 0xb5, 0x60, 0x2b, 0x41, 0x0e, + 0x75, 0xbf, 0xee, 0x0c, 0xe8, 0x1b, 0xb9, 0x25, 0xb0, 0x29, 0x4f, 0xc3, 0xdd, 0x20, 0x8e, 0xc2, + 0x36, 0x0d, 0xd3, 0x7c, 0xa0, 0x76, 0xc5, 0xa0, 0xd0, 0xa6, 0x23, 0x1f, 0x75, 0x06, 0xac, 0xd5, + 0x63, 0x46, 0x28, 0xa5, 0x4a, 0x87, 0x5e, 0xae, 0xee, 0xbf, 0x8f, 0x0d, 0xb0, 0xce, 0x7a, 0xbb, + 0x25, 0x17, 0x00, 0x98, 0xaf, 0xb7, 0x1e, 0xd3, 0x46, 0xb0, 0x27, 0x5b, 0xa6, 0x59, 0x5e, 0xd7, + 0x18, 0xb4, 0xa8, 0xd4, 0x37, 0x1b, 0xdd, 0x06, 0xfb, 0xa6, 0xd4, 0xff, 0x8d, 0xc0, 0xa0, 0x45, + 0x45, 0x9e, 0x85, 0xb1, 0xa0, 0xed, 0x35, 0xa9, 0xea, 0xff, 0x27, 0xd9, 0xd2, 0x5f, 0xe5, 0x90, + 0x7b, 0xfb, 0x73, 0xd3, 0x5a, 0x21, 0x0e, 0x42, 0x49, 0x4b, 0x7e, 0xcd, 0x81, 0x49, 0x3f, 0x6a, + 0xb7, 0xa3, 0x70, 0xcd, 0xdb, 0xa2, 0x2d, 0x15, 0x80, 0xbb, 0xfd, 0xb0, 0x9c, 0x91, 0xf9, 0x25, + 0x4b, 0x98, 0x38, 0xfe, 0xea, 0xb0, 0xa2, 0x8d, 0xc2, 0x8c, 0x56, 0xb6, 0x85, 0x18, 0x3d, 0xc0, + 0x42, 0xfc, 0x9e, 0x03, 0x33, 0xe2, 0xdb, 0xc5, 0x30, 0x8c, 0x52, 0x19, 0x17, 0x15, 0x11, 0xb4, + 0xe8, 0x21, 0x37, 0xcb, 0x92, 0x28, 0xda, 0xf6, 0x1a, 0xa9, 0xe6, 0x4c, 0x1f, 0x1e, 0xfb, 0x95, + 0x24, 0x97, 0x60, 0xa6, 0x11, 0xc5, 0x3e, 0xb5, 0x3b, 0x82, 0xbb, 0xa5, 0x15, 0xc3, 0xe8, 0x62, + 0x9e, 0x00, 0xfb, 0xbf, 0x21, 0x37, 0xe1, 0x8c, 0x05, 0xb4, 0xfb, 0xa1, 0xc2, 0xb9, 0x9d, 0x93, + 0xdc, 0xce, 0x5c, 0x1c, 0x48, 0x85, 0x43, 0xbe, 0x3e, 0xfb, 0x0e, 0x98, 0xe9, 0x1b, 0xbf, 0x01, + 0xb1, 0x87, 0xd3, 0x76, 0xec, 0xa1, 0x6a, 0x85, 0x0c, 0xce, 0x2e, 0xc3, 0x99, 0xc1, 0x3d, 0x75, + 0x14, 0x2e, 0xee, 0x2f, 0x3a, 0xf0, 0xc4, 0x10, 0x27, 0x4b, 0x1f, 0xba, 0x9c, 0x61, 0x87, 0x2e, + 0xe2, 0x41, 0x99, 0x86, 0xbb, 0xd2, 0x58, 0x5c, 0x3c, 0xde, 0x8c, 0x58, 0x09, 0x77, 0xc5, 0x40, + 0x8f, 0xdf, 0xdd, 0x9f, 0x2b, 0xaf, 0x84, 0xbb, 0xc8, 0x78, 0xbb, 0x9f, 0x1f, 0xcb, 0x9c, 0xeb, + 0x36, 0x54, 0x28, 0x81, 0x2b, 0x2a, 0x4f, 0x75, 0x37, 0x0a, 0x9e, 0x8b, 0xd6, 0xb9, 0x55, 0x24, + 0x08, 0xa4, 0x38, 0xf2, 0x09, 0x87, 0xc7, 0xe4, 0xd5, 0x79, 0x57, 0xfa, 0x7d, 0x0f, 0x27, 0x45, + 0x60, 0x47, 0xfa, 0x15, 0x10, 0x6d, 0xe9, 0x6c, 0x25, 0x77, 0x44, 0x48, 0x2c, 0xef, 0xfd, 0xa9, + 0xa8, 0xbd, 0xc2, 0x93, 0x3d, 0x80, 0xa4, 0x17, 0xfa, 0xeb, 0x51, 0x2b, 0xf0, 0x7b, 0x32, 0x08, + 0x52, 0x40, 0x5c, 0x57, 0xf0, 0x13, 0x2e, 0xa0, 0xf9, 0x8d, 0x96, 0x2c, 0xf2, 0x25, 0x07, 0x66, + 0x82, 0x66, 0x18, 0xc5, 0x74, 0x39, 0x68, 0x34, 0x68, 0x4c, 0x43, 0x9f, 0x2a, 0x2f, 0xe9, 0xd6, + 0xf1, 0x34, 0x50, 0x21, 0xc9, 0xd5, 0x3c, 0x7b, 0xb3, 0xc4, 0xfb, 0x50, 0xd8, 0xaf, 0x0c, 0xa9, + 0xc3, 0x48, 0x10, 0x36, 0x22, 0x69, 0xd8, 0x6a, 0xc7, 0x53, 0x6a, 0x35, 0x6c, 0x44, 0x66, 0xad, + 0xb0, 0x5f, 0xc8, 0xb9, 0x93, 0x35, 0x38, 0x1d, 0xcb, 0x73, 0xf2, 0xe5, 0x20, 0x61, 0xa7, 0x8d, + 0xb5, 0xa0, 0x1d, 0xa4, 0xdc, 0x28, 0x95, 0x6b, 0xb3, 0x77, 0xf7, 0xe7, 0x4e, 0xe3, 0x00, 0x3c, + 0x0e, 0xfc, 0xca, 0x7d, 0xa5, 0x9a, 0x0d, 0x06, 0x88, 0x50, 0xd7, 0x07, 0xa0, 0x1a, 0xeb, 0xe4, + 0x82, 0xf0, 0x8c, 0xd6, 0x8a, 0xe9, 0x63, 0x19, 0x63, 0xd3, 0x51, 0x1a, 0x93, 0x46, 0x30, 0x12, + 0x99, 0x87, 0xc4, 0x46, 0x5e, 0x2e, 0x8b, 0x02, 0xe6, 0x97, 0x94, 0x6a, 0xc2, 0x89, 0xbd, 0xd0, + 0x47, 0x2e, 0x83, 0xc4, 0x30, 0xb6, 0x4d, 0xbd, 0x56, 0xba, 0x2d, 0xa3, 0x5d, 0x57, 0x8e, 0xeb, + 0xb0, 0x32, 0x5e, 0xf9, 0x48, 0xa2, 0x80, 0xa2, 0x94, 0x44, 0xf6, 0x60, 0x7c, 0x5b, 0x0c, 0x82, + 0xdc, 0xdb, 0xaf, 0x1d, 0xb7, 0x73, 0x33, 0x23, 0x6b, 0xd6, 0xaf, 0x04, 0xa0, 0x12, 0x47, 0x7e, + 0xd6, 0x01, 0xf0, 0x55, 0x08, 0x51, 0x2d, 0x1f, 0x2c, 0xcc, 0xee, 0xe8, 0xe8, 0xa4, 0x71, 0x8d, + 0x34, 0x28, 0x41, 0x4b, 0x32, 0x79, 0x09, 0x26, 0x63, 0xea, 0x47, 0xa1, 0x1f, 0xb4, 0x68, 0x7d, + 0x31, 0xe5, 0x87, 0x8c, 0xa3, 0x85, 0x1a, 0x4f, 0x32, 0xff, 0x04, 0x2d, 0x1e, 0x98, 0xe1, 0x48, + 0x5e, 0x71, 0x60, 0x5a, 0x87, 0x51, 0xd9, 0x80, 0x50, 0x19, 0x4e, 0x5a, 0x2b, 0x28, 0x68, 0xcb, + 0x79, 0xd6, 0x08, 0x3b, 0x4c, 0x65, 0x61, 0x98, 0x93, 0x4b, 0xde, 0x05, 0x10, 0x6d, 0xf1, 0x90, + 0x25, 0x6b, 0x6a, 0xe5, 0xc8, 0x4d, 0x9d, 0x16, 0xd1, 0x77, 0xc5, 0x01, 0x2d, 0x6e, 0xe4, 0x2a, + 0x80, 0x58, 0x36, 0x9b, 0xbd, 0x0e, 0xe5, 0x21, 0xa3, 0x6a, 0xed, 0x8d, 0xaa, 0xf3, 0x37, 0x34, + 0xe6, 0xde, 0xfe, 0x5c, 0xff, 0x59, 0x9c, 0xc7, 0x8a, 0xad, 0xcf, 0xc9, 0xfb, 0x61, 0x3c, 0xe9, + 0xb6, 0xdb, 0x9e, 0x0e, 0xfd, 0xac, 0x17, 0xb7, 0x23, 0x0a, 0xbe, 0x66, 0x6e, 0x4a, 0x00, 0x2a, + 0x89, 0x6e, 0x08, 0xa4, 0x9f, 0x9e, 0x3c, 0x0b, 0x93, 0xea, 0x54, 0xf7, 0x22, 0xae, 0xa9, 0x60, + 0x01, 0x1f, 0xfc, 0x15, 0x0b, 0x8e, 0x19, 0x2a, 0xe2, 0x6a, 0xcf, 0xbb, 0xc4, 0xe9, 0xc1, 0x78, + 0xde, 0xca, 0xcf, 0x76, 0xff, 0xbb, 0x94, 0xf1, 0x08, 0x36, 0x63, 0x4a, 0x49, 0x04, 0xa3, 0x61, + 0x54, 0xd7, 0x46, 0xef, 0x4a, 0x31, 0x46, 0xef, 0x7a, 0x54, 0xb7, 0xb2, 0xde, 0xec, 0x57, 0x82, + 0x42, 0x0e, 0x4f, 0x0b, 0xaa, 0xfc, 0x29, 0x47, 0x48, 0x27, 0xa8, 0x48, 0xc9, 0x3a, 0x2d, 0x78, + 0xc3, 0x16, 0x84, 0x59, 0xb9, 0x64, 0x07, 0x46, 0xb7, 0xa3, 0x24, 0x15, 0x67, 0x95, 0x63, 0x7b, + 0x61, 0x97, 0xa3, 0x24, 0xe5, 0x5b, 0x98, 0x6e, 0x36, 0x83, 0x24, 0x28, 0x64, 0xb8, 0xff, 0xe8, + 0x64, 0x42, 0x43, 0xb7, 0xbc, 0xd4, 0xdf, 0x5e, 0xd9, 0x65, 0xe7, 0xc7, 0xab, 0x99, 0xb4, 0xc6, + 0x8f, 0xd8, 0x69, 0x8d, 0x7b, 0xfb, 0x73, 0x6f, 0x18, 0x56, 0x86, 0x74, 0x87, 0x71, 0x98, 0xe7, + 0x2c, 0xac, 0x0c, 0xc8, 0x87, 0x1d, 0x98, 0xb0, 0xd4, 0x93, 0x1b, 0x4a, 0x81, 0x11, 0x76, 0xed, + 0x5c, 0x59, 0x40, 0xb4, 0x45, 0xba, 0x9f, 0x75, 0x60, 0xbc, 0xe6, 0xf9, 0x3b, 0x51, 0xa3, 0x41, + 0xde, 0x04, 0x95, 0x7a, 0x57, 0x26, 0x90, 0x44, 0xfb, 0x74, 0x5e, 0x60, 0x59, 0xc2, 0x51, 0x53, + 0xb0, 0x39, 0xdc, 0xf0, 0xfc, 0x34, 0x8a, 0xb9, 0xda, 0x65, 0x31, 0x87, 0x2f, 0x72, 0x08, 0x4a, + 0x0c, 0x3b, 0xa4, 0xb7, 0xbd, 0x3d, 0xf5, 0x71, 0x3e, 0x2e, 0x75, 0xcd, 0xa0, 0xd0, 0xa6, 0x73, + 0xff, 0x64, 0x14, 0xc6, 0x65, 0xa6, 0xf6, 0xd0, 0xb9, 0x16, 0xe5, 0xc5, 0x97, 0x86, 0x7a, 0xf1, + 0x09, 0x8c, 0xf9, 0xbc, 0xc8, 0x4b, 0x6e, 0xa5, 0xc7, 0x8c, 0xd0, 0x49, 0x05, 0x45, 0xdd, 0x98, + 0x51, 0x4b, 0xfc, 0x46, 0x29, 0x8a, 0x7c, 0xc6, 0x81, 0x13, 0x7e, 0x14, 0x86, 0xd4, 0x37, 0x76, + 0x7e, 0xa4, 0x88, 0x5c, 0xe4, 0x52, 0x96, 0xa9, 0x49, 0x09, 0xe7, 0x10, 0x98, 0x17, 0x4f, 0x9e, + 0x87, 0x29, 0xd1, 0x67, 0x37, 0x33, 0xe7, 0x63, 0x93, 0x9d, 0xb7, 0x91, 0x98, 0xa5, 0x25, 0xf3, + 0x22, 0xce, 0xc0, 0xd3, 0x55, 0xe2, 0x8c, 0x2c, 0x43, 0xa3, 0x3a, 0x9f, 0x95, 0xa0, 0x45, 0x41, + 0x62, 0x20, 0x31, 0x6d, 0xc4, 0x34, 0xd9, 0x46, 0xfa, 0x72, 0x97, 0x26, 0x29, 0xdf, 0x63, 0xc6, + 0x1f, 0x2c, 0x73, 0x87, 0x7d, 0x9c, 0x70, 0x00, 0x77, 0xb2, 0x23, 0x1d, 0xdd, 0x4a, 0x11, 0xcb, + 0x49, 0x0e, 0xf3, 0x50, 0x7f, 0x77, 0x0e, 0x46, 0x93, 0x6d, 0x2f, 0xae, 0xf3, 0xbd, 0xad, 0x5c, + 0xab, 0x32, 0x5b, 0xb2, 0xc1, 0x00, 0x28, 0xe0, 0xee, 0x77, 0x1d, 0x38, 0xa9, 0xe6, 0x8a, 0xe7, + 0x6f, 0x53, 0xf6, 0x2d, 0x79, 0x3b, 0x4c, 0x6b, 0x7f, 0x72, 0x29, 0xea, 0xca, 0x00, 0x56, 0xd9, + 0xc4, 0x3f, 0x31, 0x83, 0xc5, 0x1c, 0x35, 0x59, 0x80, 0x2a, 0x53, 0x59, 0x7c, 0x2a, 0xd6, 0x9f, + 0xf6, 0x59, 0x17, 0xd7, 0x57, 0xe5, 0x57, 0x86, 0x86, 0x44, 0x30, 0xd3, 0xf2, 0x92, 0x94, 0x6b, + 0xc0, 0xdc, 0xcb, 0x07, 0x4c, 0xa0, 0xf2, 0x1a, 0x9b, 0xb5, 0x3c, 0x23, 0xec, 0xe7, 0xed, 0x7e, + 0x63, 0x04, 0xa6, 0x32, 0x4b, 0x84, 0x99, 0x97, 0x6e, 0xc2, 0xf6, 0x40, 0x7d, 0xd6, 0xd6, 0xe6, + 0xe5, 0x45, 0x09, 0x47, 0x4d, 0xc1, 0xa8, 0x3b, 0x5e, 0x92, 0xdc, 0x89, 0xe2, 0xba, 0x5c, 0xd3, + 0x9a, 0x7a, 0x5d, 0xc2, 0x51, 0x53, 0x30, 0x43, 0xb3, 0x45, 0xbd, 0x98, 0xc6, 0xbc, 0xe6, 0x20, + 0x6f, 0x68, 0x6a, 0x06, 0x85, 0x36, 0x1d, 0x5f, 0x9d, 0x69, 0x2b, 0x59, 0x6a, 0x05, 0x34, 0x4c, + 0x85, 0x9a, 0xc5, 0xac, 0xce, 0xcd, 0xb5, 0x0d, 0x9b, 0xa9, 0x59, 0x9d, 0x39, 0x04, 0xe6, 0xc5, + 0x93, 0x8f, 0x39, 0x30, 0xe5, 0xdd, 0x49, 0x4c, 0x49, 0x2a, 0x5f, 0x9e, 0xc7, 0xb6, 0x56, 0x99, + 0x2a, 0xd7, 0xda, 0x0c, 0x5b, 0xe7, 0x19, 0x10, 0x66, 0x85, 0x92, 0x2f, 0xf0, 0xa8, 0x39, 0xf5, + 0xd7, 0xe3, 0x68, 0x37, 0xa8, 0xab, 0x31, 0x94, 0x7e, 0xf0, 0x31, 0xdd, 0xae, 0x95, 0x3e, 0xbe, + 0x62, 0x79, 0xf7, 0xc3, 0x71, 0x80, 0x0e, 0xee, 0x5f, 0x97, 0x61, 0xc2, 0x5a, 0x95, 0x03, 0x4d, + 0xac, 0xf3, 0x7d, 0x66, 0x62, 0x4b, 0x47, 0x30, 0xb1, 0x1f, 0x82, 0xaa, 0xaf, 0x0c, 0x45, 0x31, + 0x25, 0xb4, 0x79, 0xf3, 0x63, 0x6c, 0x85, 0x06, 0xa1, 0x91, 0x49, 0x2e, 0xc1, 0x8c, 0xc5, 0x46, + 0x1a, 0x99, 0x11, 0x6e, 0x64, 0x74, 0xc4, 0x61, 0x31, 0x4f, 0x80, 0xfd, 0xdf, 0x90, 0x67, 0x98, + 0x7b, 0x13, 0xc8, 0x76, 0x89, 0xe3, 0x9c, 0x2c, 0x4f, 0x5d, 0x5c, 0x5f, 0x55, 0x60, 0xb4, 0x69, + 0xdc, 0x6f, 0x38, 0x7a, 0x70, 0x1f, 0x41, 0x6d, 0xc3, 0xed, 0x6c, 0x6d, 0xc3, 0x4a, 0x21, 0xdd, + 0x3c, 0xa4, 0xae, 0xe1, 0x3a, 0x8c, 0x2f, 0x45, 0xed, 0xb6, 0x17, 0xd6, 0xc9, 0xeb, 0x60, 0xdc, + 0x17, 0x7f, 0xca, 0xf3, 0x02, 0x4f, 0x76, 0x4b, 0x2c, 0x2a, 0x1c, 0x79, 0x12, 0x46, 0xbc, 0xb8, + 0xa9, 0xce, 0x08, 0x3c, 0x3b, 0xb2, 0x18, 0x37, 0x13, 0xe4, 0x50, 0xf7, 0x73, 0x25, 0x80, 0xa5, + 0xa8, 0xdd, 0xf1, 0x62, 0x5a, 0xdf, 0x8c, 0xfe, 0x37, 0x58, 0x28, 0x5c, 0xc7, 0x4f, 0x3a, 0x40, + 0x58, 0xaf, 0x44, 0x21, 0x0d, 0x4d, 0x46, 0x86, 0xed, 0x97, 0xbe, 0x82, 0xca, 0xcd, 0xc7, 0xac, + 0x01, 0x85, 0x40, 0x43, 0x73, 0x08, 0x77, 0xf2, 0x29, 0x15, 0x6c, 0x2e, 0x67, 0xf3, 0xf0, 0x3c, + 0xb9, 0x27, 0x63, 0xcf, 0xee, 0xe7, 0x4b, 0x70, 0x46, 0x98, 0xad, 0x6b, 0x5e, 0xe8, 0x35, 0x69, + 0x9b, 0x69, 0x75, 0xd8, 0xb0, 0xb3, 0xcf, 0xfc, 0x98, 0x40, 0xa5, 0xdd, 0x8f, 0x3b, 0x39, 0xc5, + 0xa4, 0x12, 0xd3, 0x68, 0x35, 0x0c, 0x52, 0xe4, 0xcc, 0x49, 0x02, 0x15, 0x75, 0x29, 0x42, 0x1a, + 0x9b, 0x82, 0x04, 0xe9, 0x75, 0x77, 0x49, 0xb2, 0x47, 0x2d, 0xc8, 0xfd, 0x8a, 0x03, 0x79, 0x23, + 0xca, 0x1d, 0x7d, 0x51, 0x38, 0x97, 0x77, 0xf4, 0xb3, 0x75, 0x6e, 0x47, 0x28, 0x1b, 0x7b, 0x0f, + 0x4c, 0x78, 0x69, 0x4a, 0xdb, 0x1d, 0xe1, 0x75, 0x96, 0x1f, 0x2c, 0xb2, 0x71, 0x2d, 0xaa, 0x07, + 0x8d, 0x80, 0x7b, 0x9b, 0x36, 0x3b, 0xf7, 0x05, 0xa8, 0xa8, 0x60, 0xfe, 0x21, 0x06, 0xf3, 0xa9, + 0x4c, 0x6e, 0x62, 0xc8, 0x74, 0xb9, 0x57, 0x82, 0x01, 0xbb, 0x20, 0x6b, 0xb2, 0xb1, 0x17, 0x99, + 0x26, 0x1f, 0xcd, 0x66, 0x90, 0x3d, 0x91, 0xc8, 0x10, 0x47, 0xe8, 0x77, 0x16, 0xbd, 0x8b, 0x9b, + 0xdc, 0xc6, 0x84, 0xd4, 0x4f, 0xe7, 0x37, 0xc8, 0x05, 0x00, 0x63, 0xe6, 0x65, 0xb9, 0x81, 0x0e, + 0xc2, 0x99, 0xdd, 0x00, 0x2d, 0x2a, 0xe6, 0xd4, 0x05, 0x61, 0x92, 0x7a, 0xad, 0xd6, 0xe5, 0x20, + 0x4c, 0xe5, 0x31, 0x45, 0x9b, 0x80, 0x55, 0x83, 0x42, 0x9b, 0xee, 0xec, 0x5b, 0xac, 0x71, 0x39, + 0x4a, 0x8e, 0xe8, 0x93, 0x25, 0x98, 0xbe, 0x14, 0x76, 0xd7, 0x2f, 0xad, 0x77, 0xb7, 0x5a, 0x81, + 0x7f, 0x95, 0xf6, 0xd8, 0xa0, 0xed, 0xd0, 0xde, 0xea, 0xb2, 0xec, 0x76, 0x3d, 0x68, 0x57, 0x19, + 0x10, 0x05, 0x8e, 0xa9, 0xd9, 0x08, 0xc2, 0x26, 0x8d, 0x3b, 0x71, 0x20, 0xbd, 0x71, 0x4b, 0xcd, + 0x8b, 0x06, 0x85, 0x36, 0x1d, 0xe3, 0x1d, 0xdd, 0x09, 0x69, 0x9c, 0xb7, 0x1f, 0x37, 0x18, 0x10, + 0x05, 0x8e, 0x11, 0xa5, 0x71, 0x37, 0x49, 0x65, 0x8f, 0x69, 0xa2, 0x4d, 0x06, 0x44, 0x81, 0x63, + 0xd3, 0x23, 0xe9, 0x6e, 0xf1, 0x00, 0x5b, 0x2e, 0xd5, 0xb9, 0x21, 0xc0, 0xa8, 0xf0, 0x8c, 0x74, + 0x87, 0xf6, 0x96, 0xd9, 0x6e, 0x9a, 0xab, 0x9b, 0xb8, 0x2a, 0xc0, 0xa8, 0xf0, 0xee, 0x3f, 0x38, + 0x40, 0xb2, 0xdd, 0xf1, 0x08, 0x36, 0xe4, 0x97, 0xb3, 0x1b, 0xf2, 0x31, 0x63, 0xa1, 0x59, 0xf5, + 0x87, 0xec, 0xcb, 0xbf, 0xe2, 0xc0, 0xa4, 0x1d, 0x16, 0x27, 0xcd, 0x9c, 0x21, 0xba, 0x91, 0x35, + 0x44, 0xf7, 0xf6, 0xe7, 0x7e, 0x6c, 0xd0, 0x9d, 0xbd, 0x66, 0x90, 0x46, 0x9d, 0xe4, 0xcd, 0x34, + 0x6c, 0x06, 0x21, 0xe5, 0x41, 0x1f, 0x11, 0x4e, 0xcf, 0xc4, 0xdc, 0x97, 0xa2, 0x3a, 0x7d, 0x00, + 0x4b, 0xe6, 0xfe, 0xa6, 0x03, 0x33, 0x7d, 0xc5, 0x26, 0x47, 0x29, 0x8a, 0xec, 0x2f, 0x79, 0x2c, + 0x1d, 0xa9, 0xe4, 0x31, 0x5b, 0x12, 0x55, 0x3e, 0xa8, 0x24, 0xca, 0xbd, 0x25, 0xf4, 0xcd, 0x94, + 0xf1, 0x1c, 0xc2, 0x4a, 0x1e, 0x58, 0xbb, 0xe9, 0x7e, 0xca, 0x81, 0xa9, 0x4c, 0x71, 0x54, 0x41, + 0xb6, 0x97, 0x2f, 0xe3, 0x88, 0xa7, 0x80, 0xe2, 0x20, 0x14, 0x31, 0xa2, 0x8a, 0xb5, 0x8c, 0x0d, + 0x0a, 0x6d, 0x3a, 0xf7, 0xb3, 0x25, 0xa8, 0xa8, 0x68, 0xe2, 0x21, 0x54, 0xf9, 0x84, 0x03, 0x53, + 0xfa, 0x2c, 0xcf, 0x3d, 0xfc, 0x42, 0x4a, 0x50, 0x98, 0x06, 0x3a, 0x4f, 0xc8, 0x3c, 0x7c, 0x7d, + 0xd4, 0x40, 0x5b, 0x18, 0x66, 0x65, 0x93, 0x9b, 0x00, 0x49, 0x2f, 0x49, 0x69, 0xdb, 0x3a, 0x6b, + 0xb8, 0xd6, 0x72, 0x9e, 0xf7, 0xa3, 0x98, 0xb2, 0xc5, 0x7b, 0x3d, 0xaa, 0xd3, 0x0d, 0x4d, 0x69, + 0x2c, 0xb7, 0x81, 0xa1, 0xc5, 0xc9, 0xfd, 0xad, 0x12, 0x9c, 0xcc, 0xab, 0x44, 0xde, 0x0d, 0x93, + 0x4a, 0xba, 0x75, 0xb7, 0x52, 0x85, 0x50, 0x27, 0xd1, 0xc2, 0xdd, 0xdb, 0x9f, 0x9b, 0xeb, 0xbf, + 0x5c, 0x3a, 0x6f, 0x93, 0x60, 0x86, 0x99, 0x08, 0xa8, 0xc8, 0x10, 0x50, 0xad, 0xb7, 0xd8, 0xe9, + 0xc8, 0xa8, 0x88, 0x15, 0x50, 0xb1, 0xb1, 0x98, 0xa3, 0x26, 0xeb, 0x70, 0xda, 0x82, 0x5c, 0xa7, + 0x41, 0x73, 0x7b, 0x2b, 0x8a, 0x45, 0x11, 0x7f, 0xb9, 0xf6, 0xa4, 0xe4, 0x72, 0x1a, 0x07, 0xd0, + 0xe0, 0xc0, 0x2f, 0xc9, 0x9b, 0xa0, 0xe2, 0x7b, 0x1d, 0xcf, 0x0f, 0xd2, 0x9e, 0x3c, 0x3c, 0x69, + 0xc3, 0xb7, 0x24, 0xe1, 0xa8, 0x29, 0xdc, 0x6b, 0x30, 0x72, 0xc8, 0x19, 0x74, 0x28, 0x47, 0xe2, + 0x05, 0xa8, 0x30, 0x76, 0xcc, 0xd0, 0x15, 0xc5, 0x32, 0x82, 0x8a, 0xba, 0xd3, 0x41, 0x5c, 0x28, + 0x07, 0x9e, 0x8a, 0x59, 0xe9, 0x66, 0xad, 0x26, 0x49, 0x97, 0xbb, 0x49, 0x0c, 0x49, 0x9e, 0x82, + 0x32, 0xdd, 0xeb, 0xe4, 0x83, 0x53, 0x2b, 0x7b, 0x9d, 0x20, 0xa6, 0x09, 0x23, 0xa2, 0x7b, 0x1d, + 0x72, 0x16, 0x4a, 0x41, 0x5d, 0xee, 0x80, 0x20, 0x69, 0x4a, 0xab, 0xcb, 0x58, 0x0a, 0xea, 0xee, + 0x1e, 0x54, 0xf5, 0x25, 0x12, 0xb2, 0xa3, 0x36, 0x06, 0xa7, 0x88, 0xf0, 0xbf, 0xe2, 0x3b, 0x64, + 0x4b, 0xe8, 0x02, 0x98, 0xc2, 0xb5, 0xa2, 0xec, 0xcb, 0x79, 0x18, 0xf1, 0x23, 0x59, 0xc1, 0x5a, + 0x31, 0x6c, 0xf8, 0x8e, 0xc0, 0x31, 0xee, 0x2d, 0x98, 0xbe, 0x1a, 0x46, 0x77, 0x42, 0xb6, 0x53, + 0x5f, 0x0c, 0x68, 0xab, 0xce, 0x18, 0x37, 0xd8, 0x1f, 0x79, 0xff, 0x83, 0x63, 0x51, 0xe0, 0xf4, + 0x4d, 0x8b, 0xd2, 0xb0, 0x9b, 0x16, 0xee, 0xcf, 0x39, 0x70, 0x32, 0x5f, 0xa4, 0xf6, 0x3d, 0x3b, + 0x12, 0x7d, 0x98, 0x29, 0xa3, 0xaa, 0xa0, 0x6e, 0x74, 0x44, 0xbe, 0xf5, 0x39, 0x98, 0xdc, 0xea, + 0x06, 0xad, 0xba, 0xfc, 0x2d, 0xf5, 0xd1, 0x75, 0x5e, 0x35, 0x0b, 0x87, 0x19, 0x4a, 0xe6, 0x58, + 0x6e, 0x05, 0xa1, 0x17, 0xf7, 0xd6, 0xcd, 0xbe, 0xa1, 0xcd, 0x53, 0x4d, 0x63, 0xd0, 0xa2, 0x72, + 0xff, 0xb2, 0x0c, 0xe6, 0x36, 0x0b, 0x09, 0x64, 0x3a, 0xdf, 0x29, 0x22, 0xce, 0xb6, 0xd1, 0x0b, + 0x7d, 0x73, 0x6f, 0xa6, 0x92, 0xcb, 0xe6, 0x7f, 0xdc, 0x61, 0x2e, 0x6d, 0x90, 0x06, 0x1e, 0x37, + 0x16, 0xf2, 0x64, 0xb7, 0x5e, 0x50, 0xc6, 0x77, 0x55, 0x70, 0x8e, 0x62, 0xdb, 0x49, 0xd6, 0xc2, + 0xd0, 0x96, 0x4c, 0x5e, 0x92, 0x31, 0xf2, 0x72, 0x61, 0xc5, 0x20, 0x95, 0x5c, 0x60, 0xbc, 0x03, + 0xa3, 0x31, 0x4d, 0x63, 0x55, 0x86, 0x73, 0xf5, 0xb8, 0x19, 0xc3, 0x34, 0xee, 0x6d, 0xa4, 0xec, + 0xf4, 0xd8, 0xb4, 0x3c, 0x39, 0x0e, 0x46, 0x21, 0xc8, 0x4d, 0x80, 0xf4, 0xf7, 0xc5, 0x11, 0xc3, + 0xce, 0x0b, 0x50, 0xf5, 0xba, 0x69, 0xd4, 0x66, 0xdd, 0xc4, 0x87, 0xa7, 0x62, 0x05, 0xd6, 0x15, + 0x02, 0x0d, 0x8d, 0xfb, 0xea, 0x28, 0xe4, 0xf2, 0xeb, 0x64, 0xcf, 0xbe, 0x89, 0xe5, 0x14, 0x7b, + 0x13, 0x4b, 0x2b, 0x33, 0xe8, 0x36, 0x16, 0x69, 0xc2, 0x68, 0x67, 0xdb, 0x4b, 0xd4, 0x1a, 0x7d, + 0x41, 0x75, 0xd3, 0x3a, 0x03, 0xde, 0xdb, 0x9f, 0xfb, 0xf1, 0xc3, 0x39, 0xae, 0x6c, 0xae, 0x2e, + 0x88, 0x62, 0x43, 0x23, 0x9a, 0xf3, 0x40, 0xc1, 0xdf, 0x76, 0x5d, 0xcb, 0x07, 0x1c, 0xc2, 0x3f, + 0xe2, 0x88, 0xa2, 0x2c, 0xa4, 0x49, 0xb7, 0x95, 0xca, 0xd9, 0xf0, 0x42, 0x81, 0xab, 0x4c, 0x30, + 0x36, 0xd5, 0x59, 0xe2, 0x37, 0x5a, 0x42, 0xc9, 0xbb, 0xa1, 0x9a, 0xa4, 0x5e, 0x9c, 0x3e, 0x60, + 0x2d, 0x87, 0xee, 0xf4, 0x0d, 0xc5, 0x04, 0x0d, 0x3f, 0xf2, 0x2e, 0x80, 0x46, 0x10, 0x06, 0xc9, + 0xf6, 0x03, 0xa6, 0xb6, 0xb8, 0xe2, 0x17, 0x35, 0x07, 0xb4, 0xb8, 0x31, 0xeb, 0xc6, 0xe7, 0xb6, + 0x88, 0xc1, 0x56, 0xf8, 0x5e, 0xaa, 0xad, 0x1b, 0x6a, 0x0c, 0x5a, 0x54, 0xee, 0x07, 0xe1, 0x54, + 0xfe, 0x16, 0xb4, 0x3c, 0xcb, 0x36, 0xe3, 0xa8, 0xdb, 0xc9, 0xef, 0x25, 0xfc, 0x96, 0x2c, 0x0a, + 0x1c, 0xb3, 0xf1, 0x3b, 0x41, 0x58, 0xcf, 0xdb, 0xf8, 0xab, 0x41, 0x58, 0x47, 0x8e, 0x39, 0xc4, + 0x15, 0xb5, 0x3f, 0x70, 0xe0, 0xfc, 0x41, 0x97, 0xb5, 0xc9, 0x93, 0x30, 0x72, 0xc7, 0x8b, 0x43, + 0x79, 0xfd, 0x84, 0xdb, 0x8e, 0x5b, 0x5e, 0x1c, 0x22, 0x87, 0x92, 0x1e, 0x8c, 0x89, 0xfa, 0x35, + 0xe9, 0x1d, 0xbf, 0x50, 0xec, 0xd5, 0x71, 0x76, 0x18, 0xd4, 0xe1, 0x25, 0x51, 0x3b, 0x87, 0x52, + 0xa0, 0xfb, 0xaa, 0x03, 0xe4, 0xc6, 0x2e, 0x8d, 0xe3, 0xa0, 0x6e, 0x55, 0xdc, 0x91, 0x67, 0x61, + 0xf2, 0xf6, 0xc6, 0x8d, 0xeb, 0xeb, 0x51, 0x10, 0xf2, 0xc2, 0x71, 0xab, 0xce, 0xe3, 0x8a, 0x05, + 0xc7, 0x0c, 0x15, 0x59, 0x82, 0x99, 0xdb, 0x2f, 0xb3, 0x2d, 0x67, 0x65, 0xaf, 0x13, 0xd3, 0x24, + 0xd1, 0x0f, 0x2e, 0x54, 0x45, 0x26, 0xed, 0xca, 0x0b, 0x39, 0x24, 0xf6, 0xd3, 0xbb, 0x5f, 0x2e, + 0xc1, 0x84, 0xf5, 0x3e, 0xc1, 0x21, 0xfc, 0x91, 0xdc, 0x93, 0x0a, 0xa5, 0x43, 0x3e, 0xa9, 0xf0, + 0x34, 0x54, 0x3a, 0x51, 0x2b, 0xf0, 0x03, 0x7d, 0xc2, 0x9b, 0xe4, 0xe9, 0x36, 0x09, 0x43, 0x8d, + 0x25, 0x77, 0xa0, 0xaa, 0x2f, 0x1a, 0xcb, 0x1a, 0xb1, 0xa2, 0x3c, 0x32, 0xbd, 0xd6, 0xcc, 0x05, + 0x62, 0x23, 0x8b, 0xb8, 0x30, 0xc6, 0x27, 0xaa, 0x4a, 0x26, 0xf0, 0xa2, 0x03, 0x3e, 0x83, 0x13, + 0x94, 0x18, 0xf7, 0x5f, 0x46, 0xa1, 0xca, 0xce, 0xbf, 0x4b, 0x31, 0xad, 0x27, 0xe4, 0xb5, 0x50, + 0xee, 0xc6, 0x2d, 0xd9, 0x59, 0x3a, 0x2e, 0xc5, 0xce, 0xc6, 0x0c, 0x9e, 0xd9, 0x1d, 0x4a, 0x47, + 0x4a, 0x4a, 0x96, 0x0f, 0x4c, 0x4a, 0x3e, 0x0f, 0x53, 0x49, 0xb2, 0xbd, 0x1e, 0x07, 0xbb, 0x5e, + 0xca, 0xe6, 0x9c, 0x0c, 0xe2, 0x98, 0x2c, 0xd0, 0xc6, 0x65, 0x83, 0xc4, 0x2c, 0x2d, 0xb9, 0x04, + 0x33, 0x26, 0x35, 0x48, 0xe3, 0x94, 0xc7, 0x6c, 0x44, 0x78, 0x47, 0x27, 0x61, 0x4c, 0x32, 0x51, + 0x12, 0x60, 0xff, 0x37, 0x64, 0x19, 0x4e, 0x66, 0x80, 0x4c, 0x11, 0x11, 0xfb, 0x99, 0x95, 0x7c, + 0x4e, 0x66, 0xf8, 0x30, 0x5d, 0xfa, 0xbe, 0x20, 0xd7, 0xe0, 0x94, 0x18, 0x5f, 0x7e, 0x41, 0x5d, + 0xb7, 0x68, 0x9c, 0x33, 0xfa, 0x3f, 0x92, 0xd1, 0xa9, 0x4b, 0xfd, 0x24, 0x38, 0xe8, 0x3b, 0x36, + 0x43, 0x35, 0x78, 0x75, 0x59, 0x1a, 0x36, 0x3d, 0x43, 0x35, 0x9b, 0xd5, 0x3a, 0xda, 0x74, 0xe4, + 0x9d, 0xf0, 0x84, 0xf9, 0x29, 0x42, 0x7e, 0x62, 0xb7, 0x5f, 0x96, 0xe9, 0xf7, 0x39, 0xc9, 0xe2, + 0x89, 0x4b, 0x03, 0xc9, 0xea, 0x38, 0xec, 0x7b, 0xb2, 0x05, 0x67, 0x35, 0x6a, 0x85, 0xad, 0xde, + 0x4e, 0x1c, 0x24, 0xb4, 0xe6, 0x25, 0xf4, 0xc5, 0xb8, 0xc5, 0xcb, 0xcd, 0xaa, 0xe6, 0x91, 0x85, + 0x4b, 0x41, 0x7a, 0x79, 0x10, 0x25, 0xae, 0xe1, 0x7d, 0xb8, 0x30, 0xe7, 0x82, 0x86, 0xde, 0x56, + 0x8b, 0xde, 0x58, 0x5a, 0xe5, 0x17, 0x07, 0x2d, 0xe7, 0x62, 0x45, 0x21, 0xd0, 0xd0, 0x68, 0xd7, + 0x7e, 0x72, 0xa8, 0x6b, 0xff, 0x2d, 0x07, 0xa6, 0xf4, 0x64, 0x7f, 0x04, 0x01, 0xba, 0x56, 0x36, + 0x40, 0x77, 0xe9, 0xb8, 0x5e, 0x9d, 0xd4, 0x7c, 0xc8, 0x41, 0xec, 0x0f, 0xab, 0x00, 0xfc, 0xd9, + 0x9a, 0x80, 0x97, 0x87, 0x9e, 0x87, 0x91, 0x98, 0x76, 0xa2, 0xbc, 0xe5, 0x63, 0x14, 0xc8, 0x31, + 0xdf, 0xbf, 0xcb, 0x79, 0x50, 0x92, 0x7a, 0xf4, 0x7b, 0x9b, 0xa4, 0xde, 0x80, 0xc7, 0x83, 0x30, + 0xa1, 0x7e, 0x37, 0x96, 0x1b, 0xdd, 0xe5, 0x28, 0xd1, 0xd6, 0xa1, 0x52, 0x7b, 0xad, 0x64, 0xf4, + 0xf8, 0xea, 0x20, 0x22, 0x1c, 0xfc, 0x2d, 0xeb, 0x52, 0x85, 0x90, 0xf7, 0x50, 0x4c, 0x78, 0x40, + 0xc2, 0x51, 0x53, 0x98, 0x05, 0xb1, 0xd6, 0x50, 0x17, 0x4d, 0x72, 0x0b, 0x62, 0xed, 0xe2, 0x06, + 0x1a, 0x9a, 0xc1, 0x56, 0xb1, 0x5a, 0x90, 0x55, 0x84, 0x23, 0x5b, 0x45, 0xb5, 0x3e, 0x27, 0x86, + 0x3e, 0x72, 0xa0, 0x36, 0xeb, 0xc9, 0xa1, 0x9b, 0xf5, 0xdb, 0x61, 0x3a, 0x08, 0xb7, 0x69, 0x1c, + 0xa4, 0xb4, 0xce, 0xd7, 0xc2, 0xec, 0x14, 0xef, 0x08, 0x1d, 0xb9, 0x5a, 0xcd, 0x60, 0x31, 0x47, + 0x9d, 0x35, 0x2a, 0xd3, 0x87, 0x30, 0x2a, 0x43, 0x4c, 0xf9, 0x89, 0x62, 0x4c, 0xf9, 0xc9, 0xe3, + 0x9b, 0xf2, 0x99, 0x87, 0x6a, 0xca, 0x49, 0x21, 0xa6, 0xfc, 0x29, 0x18, 0xed, 0xc4, 0xd1, 0x5e, + 0x6f, 0xf6, 0x54, 0xd6, 0x9b, 0x5e, 0x67, 0x40, 0x14, 0x38, 0xf7, 0x95, 0x12, 0x3c, 0x6e, 0xcc, + 0x17, 0x9b, 0x34, 0x41, 0x83, 0x2d, 0x60, 0x7e, 0xc5, 0x4f, 0x14, 0x7d, 0x58, 0x91, 0x50, 0x13, + 0x54, 0xd5, 0x18, 0xb4, 0xa8, 0x78, 0x40, 0x91, 0xc6, 0xbc, 0x7e, 0x34, 0x6f, 0xdb, 0x96, 0x24, + 0x1c, 0x35, 0x05, 0x7f, 0xc8, 0x8e, 0xc6, 0xa9, 0xcc, 0x00, 0xe5, 0x2b, 0xa2, 0x96, 0x0c, 0x0a, + 0x6d, 0x3a, 0xe6, 0x03, 0xfa, 0x6a, 0x5d, 0x31, 0xfb, 0x36, 0x29, 0x7c, 0x40, 0xbd, 0x94, 0x34, + 0x56, 0xa9, 0xc3, 0x23, 0xc7, 0xa3, 0xfd, 0xea, 0xf0, 0x48, 0x80, 0xa6, 0x70, 0xff, 0xcb, 0x81, + 0xd7, 0x0c, 0xec, 0x8a, 0x47, 0xb0, 0x67, 0xed, 0x65, 0xf7, 0xac, 0x8d, 0xe3, 0xef, 0x59, 0x7d, + 0xad, 0x18, 0xb2, 0x7f, 0xfd, 0x95, 0x03, 0xd3, 0x86, 0xfe, 0x11, 0x34, 0x35, 0x28, 0xf4, 0x49, + 0x3a, 0xa3, 0xba, 0xa8, 0x6b, 0xcc, 0xb4, 0xed, 0x5b, 0xbc, 0x6d, 0xe2, 0x40, 0xb5, 0xe8, 0xab, + 0x37, 0x5f, 0x0e, 0x38, 0x99, 0xf4, 0x60, 0x8c, 0xdf, 0x83, 0x4d, 0x8a, 0x39, 0xd8, 0x65, 0xe5, + 0xf3, 0xd8, 0xa6, 0x39, 0xd8, 0xf1, 0x9f, 0x09, 0x4a, 0x81, 0xbc, 0xba, 0x39, 0x48, 0x98, 0x11, + 0xac, 0xcb, 0x18, 0xac, 0xa9, 0x6e, 0x96, 0x70, 0xd4, 0x14, 0x6e, 0x1b, 0x66, 0xb3, 0xcc, 0x97, + 0x69, 0x83, 0xc7, 0xcf, 0x0e, 0xd5, 0xcc, 0x05, 0xa8, 0x7a, 0xfc, 0xab, 0xb5, 0xae, 0x97, 0x7f, + 0xf8, 0x65, 0x51, 0x21, 0xd0, 0xd0, 0xb8, 0xbf, 0xe1, 0xc0, 0xa9, 0x01, 0x8d, 0x29, 0x30, 0xf6, + 0x9c, 0x1a, 0x2b, 0x30, 0xe4, 0x31, 0x9e, 0x3a, 0x6d, 0x78, 0x2a, 0x42, 0x63, 0x05, 0x74, 0x96, + 0x05, 0x18, 0x15, 0xde, 0xfd, 0x57, 0x07, 0x4e, 0x64, 0x75, 0x4d, 0xc8, 0x15, 0x20, 0xa2, 0x31, + 0xcb, 0x41, 0xe2, 0x47, 0xbb, 0x34, 0xee, 0xb1, 0x96, 0x0b, 0xad, 0xf5, 0x95, 0xf8, 0xc5, 0x3e, + 0x0a, 0x1c, 0xf0, 0x15, 0xf9, 0x14, 0x2f, 0x28, 0x52, 0xbd, 0xad, 0x66, 0xca, 0xcd, 0x22, 0x67, + 0x8a, 0x19, 0x4c, 0xfb, 0x58, 0xac, 0x45, 0xa2, 0x2d, 0xdf, 0xfd, 0xf6, 0x08, 0xe8, 0xe4, 0x14, + 0x8f, 0x05, 0x14, 0x14, 0x49, 0xc9, 0xbc, 0x0e, 0x54, 0x3e, 0xc2, 0xeb, 0x40, 0x23, 0xf7, 0x3b, + 0xf8, 0x8b, 0xbc, 0xad, 0x71, 0x30, 0x2d, 0xa3, 0xbf, 0x69, 0x50, 0x68, 0xd3, 0x31, 0x4d, 0x5a, + 0xc1, 0x2e, 0x15, 0x1f, 0x8d, 0x65, 0x35, 0x59, 0x53, 0x08, 0x34, 0x34, 0x4c, 0x93, 0x7a, 0xd0, + 0x68, 0xc8, 0xe3, 0x9f, 0xd6, 0x84, 0xf5, 0x0e, 0x72, 0x0c, 0xa3, 0xd8, 0x8e, 0xa2, 0x1d, 0xe9, + 0xd4, 0x69, 0x8a, 0xcb, 0x51, 0xb4, 0x83, 0x1c, 0xc3, 0xdc, 0x90, 0x30, 0x8a, 0xdb, 0x5e, 0x2b, + 0x78, 0x1f, 0xad, 0x6b, 0x29, 0xd2, 0x99, 0xd3, 0x6e, 0xc8, 0xf5, 0x7e, 0x12, 0x1c, 0xf4, 0x1d, + 0x9b, 0x81, 0x9d, 0x98, 0xd6, 0x03, 0x3f, 0xb5, 0xb9, 0x41, 0x76, 0x06, 0xae, 0xf7, 0x51, 0xe0, + 0x80, 0xaf, 0xc8, 0x22, 0x9c, 0x50, 0xc9, 0x45, 0x55, 0xb1, 0x22, 0x3c, 0x3c, 0xed, 0x5c, 0x63, + 0x16, 0x8d, 0x79, 0x7a, 0x66, 0x6d, 0xda, 0xb2, 0x6e, 0x88, 0xfb, 0x7e, 0x96, 0xb5, 0x51, 0xf5, + 0x44, 0xa8, 0x29, 0xdc, 0xdf, 0x2e, 0xb1, 0xdd, 0x71, 0xc8, 0x35, 0xcf, 0x47, 0x16, 0xb9, 0xcb, + 0xce, 0xc8, 0x91, 0x43, 0xcc, 0xc8, 0x67, 0x61, 0xf2, 0x76, 0x12, 0x85, 0x3a, 0x2a, 0x36, 0x3a, + 0x34, 0x2a, 0x66, 0x51, 0x0d, 0x8e, 0x8a, 0x8d, 0x1d, 0x31, 0x2a, 0xf6, 0xa7, 0xa3, 0x70, 0x46, + 0xe7, 0x83, 0x69, 0x7a, 0x27, 0x8a, 0x77, 0x82, 0xb0, 0xc9, 0x73, 0xa8, 0x5f, 0x72, 0x60, 0x52, + 0x4c, 0x6f, 0x79, 0x21, 0x5e, 0xe4, 0x0c, 0x1b, 0x05, 0xdd, 0x59, 0xca, 0x08, 0x9b, 0xdf, 0xb4, + 0x04, 0xe5, 0x5e, 0x27, 0xb0, 0x51, 0x98, 0xd1, 0x88, 0x7c, 0x00, 0x40, 0x15, 0x58, 0x34, 0x0a, + 0x7a, 0x59, 0x4b, 0xe9, 0x87, 0xb4, 0x61, 0x5c, 0xc9, 0x4d, 0x2d, 0x04, 0x2d, 0x81, 0xe4, 0x15, + 0x07, 0xc6, 0x5a, 0xa2, 0x6f, 0x44, 0x02, 0xe8, 0xa5, 0x87, 0xd2, 0x37, 0x76, 0xaf, 0xe8, 0x6d, + 0x59, 0xf6, 0x87, 0x94, 0x4f, 0x10, 0xc6, 0x83, 0xb0, 0xc9, 0x86, 0x55, 0x06, 0x12, 0xdf, 0x30, + 0xa8, 0xfe, 0x60, 0x2d, 0xf2, 0xea, 0x35, 0xaf, 0xe5, 0x85, 0x3e, 0x8d, 0x57, 0x05, 0xb9, 0xfd, + 0xb2, 0x0f, 0x07, 0xa0, 0x62, 0xd4, 0x77, 0x29, 0x6f, 0xf4, 0x30, 0x97, 0xf2, 0xce, 0xbe, 0x03, + 0x66, 0xfa, 0x06, 0xf3, 0x48, 0x4f, 0x15, 0xfc, 0x28, 0x4c, 0x3c, 0xe0, 0xa7, 0xee, 0x1f, 0x8d, + 0x99, 0x3d, 0xe6, 0x7a, 0x54, 0x17, 0x57, 0xc3, 0x62, 0x33, 0xa2, 0xd2, 0x55, 0x2c, 0x70, 0x8a, + 0x58, 0xaf, 0x03, 0x69, 0x20, 0xda, 0x22, 0xd9, 0x1c, 0xed, 0x78, 0x31, 0x0d, 0x1f, 0xf6, 0x1c, + 0x5d, 0xd7, 0x42, 0xd0, 0x12, 0x48, 0xb6, 0x33, 0x19, 0xca, 0x8b, 0xc7, 0xcf, 0x50, 0x32, 0xef, + 0x75, 0xe0, 0x15, 0x9e, 0xcf, 0x38, 0x30, 0x1d, 0x66, 0x66, 0xae, 0xcc, 0x52, 0x6d, 0x3e, 0x8c, + 0x55, 0x21, 0xae, 0xe4, 0x66, 0x61, 0x98, 0x93, 0x3f, 0x68, 0x07, 0x1a, 0x3d, 0xe2, 0x0e, 0x64, + 0xee, 0x98, 0x8e, 0x0d, 0xbb, 0x63, 0x4a, 0x42, 0x7d, 0xbb, 0x7c, 0xbc, 0xf0, 0xdb, 0xe5, 0x30, + 0xe0, 0x66, 0xf9, 0x2d, 0xa8, 0xfa, 0x31, 0xf5, 0xd2, 0x07, 0xbc, 0x68, 0xcc, 0xdf, 0x63, 0x5b, + 0x52, 0x0c, 0xd0, 0xf0, 0x72, 0xff, 0xa2, 0x0c, 0x27, 0x55, 0x8f, 0xa8, 0xec, 0x0d, 0xdb, 0xce, + 0x84, 0x5c, 0xe3, 0x8b, 0xea, 0xed, 0xec, 0xb2, 0x42, 0xa0, 0xa1, 0x61, 0xee, 0x53, 0x37, 0xa1, + 0x37, 0x3a, 0x34, 0x5c, 0x0b, 0xb6, 0x12, 0xde, 0xe3, 0x56, 0x09, 0xd8, 0x8b, 0x06, 0x85, 0x36, + 0x1d, 0xf3, 0x9d, 0x85, 0x1b, 0x9b, 0xe4, 0x93, 0xa1, 0xd2, 0x3d, 0x46, 0x85, 0x27, 0x5f, 0x1c, + 0xf8, 0x4c, 0x44, 0x31, 0x65, 0x00, 0x7d, 0x49, 0xab, 0x23, 0xbe, 0x0f, 0xf1, 0xaa, 0x03, 0x27, + 0x76, 0x32, 0xf5, 0x27, 0xca, 0x24, 0x1f, 0xb3, 0x0c, 0x33, 0x5b, 0xd4, 0x62, 0xa6, 0x70, 0x16, + 0x9e, 0x60, 0x5e, 0xba, 0xfb, 0x1f, 0x0e, 0xd8, 0xe6, 0xe9, 0x70, 0x8e, 0x90, 0xf5, 0xf0, 0x4f, + 0xe9, 0x80, 0x87, 0x7f, 0x94, 0xcf, 0x54, 0x3e, 0x9c, 0x8f, 0x3e, 0x72, 0x04, 0x1f, 0x7d, 0x74, + 0xa8, 0x93, 0xf5, 0x5a, 0x28, 0x77, 0x83, 0xba, 0x74, 0xb3, 0x4d, 0x42, 0x6a, 0x75, 0x19, 0x19, + 0xdc, 0xfd, 0xfd, 0x51, 0x73, 0xac, 0x96, 0xd9, 0xeb, 0x1f, 0x88, 0x66, 0x37, 0x74, 0x55, 0xad, + 0x68, 0xf9, 0xf5, 0xbe, 0xaa, 0xda, 0xb7, 0x1d, 0xbd, 0x38, 0x41, 0x74, 0xd0, 0xb0, 0xa2, 0xda, + 0xf1, 0x03, 0x2a, 0x13, 0x6e, 0x43, 0x85, 0x9d, 0x44, 0x78, 0x7c, 0xac, 0x92, 0x51, 0xaa, 0x72, + 0x59, 0xc2, 0xef, 0xed, 0xcf, 0xbd, 0xf5, 0xe8, 0x6a, 0xa9, 0xaf, 0x51, 0xf3, 0x27, 0x09, 0x54, + 0xd9, 0xdf, 0xbc, 0x88, 0x42, 0x9e, 0x71, 0x5e, 0xd4, 0xb6, 0x48, 0x21, 0x0a, 0xa9, 0xd0, 0x30, + 0x72, 0x48, 0x08, 0x55, 0xfe, 0x44, 0x0d, 0x17, 0x2a, 0x8e, 0x42, 0xeb, 0xba, 0x94, 0x41, 0x21, + 0xee, 0xed, 0xcf, 0x3d, 0x7f, 0x74, 0xa1, 0xfa, 0x73, 0x34, 0x22, 0xdc, 0xbf, 0x2f, 0x9b, 0xb9, + 0x2b, 0x8b, 0xa9, 0x7f, 0x20, 0xe6, 0xee, 0x73, 0xb9, 0xb9, 0x7b, 0xbe, 0x6f, 0xee, 0x4e, 0x9b, + 0x67, 0x5c, 0x32, 0xb3, 0xf1, 0x51, 0x6f, 0xb0, 0x07, 0x1f, 0xbb, 0xb9, 0x67, 0xf1, 0x72, 0x37, + 0x88, 0x69, 0xb2, 0x1e, 0x77, 0xc3, 0x20, 0x6c, 0xf2, 0xe9, 0x58, 0xb1, 0x3d, 0x8b, 0x0c, 0x1a, + 0xf3, 0xf4, 0xee, 0x97, 0x79, 0xce, 0xd1, 0xaa, 0xc7, 0x62, 0xa3, 0xdc, 0xe2, 0xaf, 0xfc, 0x88, + 0x8a, 0x50, 0x3d, 0xca, 0xe2, 0x69, 0x1f, 0x81, 0x23, 0x77, 0x60, 0x7c, 0x4b, 0xbc, 0x34, 0x50, + 0xcc, 0x8d, 0x26, 0xf9, 0x6c, 0x01, 0xbf, 0x3b, 0xaa, 0xde, 0x30, 0xb8, 0x67, 0xfe, 0x44, 0x25, + 0xcd, 0xfd, 0xa5, 0x32, 0x9c, 0xc8, 0xbd, 0x41, 0xc3, 0xce, 0xe7, 0x71, 0xb6, 0x12, 0x5e, 0x9f, + 0xcf, 0x75, 0x0d, 0xbc, 0xa6, 0x20, 0xef, 0x05, 0xa8, 0xd3, 0x4e, 0x2b, 0xea, 0x71, 0xc7, 0x65, + 0xe4, 0xc8, 0x8e, 0x8b, 0xf6, 0x75, 0x97, 0x35, 0x17, 0xb4, 0x38, 0xca, 0x32, 0xd8, 0x51, 0xf1, + 0x8e, 0x42, 0xb6, 0x0c, 0xd6, 0xba, 0xd8, 0x37, 0xf6, 0x68, 0x2f, 0xf6, 0x05, 0x70, 0x42, 0xa8, + 0xa8, 0xab, 0x9e, 0x1e, 0xa0, 0xb8, 0xe9, 0x14, 0x9b, 0x51, 0xcb, 0x59, 0x36, 0x98, 0xe7, 0xeb, + 0x7e, 0xba, 0xc4, 0xdc, 0x37, 0xd1, 0xd9, 0xd7, 0x54, 0x2c, 0xfb, 0xf5, 0x30, 0xe6, 0x75, 0xd3, + 0xed, 0xa8, 0xef, 0xe5, 0x87, 0x45, 0x0e, 0x45, 0x89, 0x25, 0x6b, 0x30, 0x52, 0xf7, 0x52, 0xf5, + 0x6c, 0xfd, 0x51, 0x94, 0x33, 0x81, 0x2b, 0x2f, 0xa5, 0xc8, 0xb9, 0x90, 0x27, 0x61, 0x24, 0xf5, + 0x9a, 0x99, 0x27, 0x29, 0x37, 0xbd, 0x66, 0x82, 0x1c, 0x6a, 0xef, 0x2e, 0x23, 0x07, 0xec, 0x2e, + 0xcf, 0x5b, 0xff, 0x50, 0xc1, 0x4a, 0x92, 0xf4, 0xff, 0x13, 0x04, 0x51, 0x98, 0x9f, 0xa1, 0x75, + 0x7f, 0x08, 0x26, 0xed, 0x7f, 0x92, 0x70, 0xa8, 0x8b, 0x48, 0xee, 0x3f, 0x8f, 0xc0, 0x54, 0xa6, + 0x32, 0x2e, 0x33, 0xcb, 0x9d, 0x03, 0x67, 0x39, 0xcf, 0x69, 0x75, 0x43, 0x2a, 0xeb, 0x1e, 0xad, + 0x9c, 0x56, 0x37, 0xa4, 0x28, 0x70, 0x6c, 0x54, 0xea, 0x71, 0x0f, 0xbb, 0xa1, 0x0c, 0xa2, 0xeb, + 0x51, 0x59, 0xe6, 0x50, 0x94, 0x58, 0x76, 0x80, 0x9d, 0x4c, 0xb8, 0x51, 0x14, 0x36, 0x42, 0xae, + 0x9a, 0x2b, 0x45, 0xbc, 0x96, 0x25, 0xab, 0x40, 0xf9, 0x81, 0xde, 0x86, 0x60, 0x46, 0x22, 0xf9, + 0x98, 0x63, 0xbf, 0x13, 0x36, 0x56, 0x44, 0xf2, 0x27, 0x5f, 0x78, 0x28, 0x56, 0xd0, 0xfd, 0x9f, + 0x0b, 0x4b, 0xf4, 0x02, 0x1e, 0x7f, 0x38, 0x0b, 0x18, 0x06, 0x2c, 0xde, 0x37, 0x42, 0xb5, 0xed, + 0x85, 0x41, 0x83, 0x26, 0xa9, 0xf8, 0x07, 0x27, 0x55, 0x71, 0x7a, 0xba, 0xa6, 0x80, 0x68, 0xf0, + 0xfc, 0xdf, 0x08, 0xf1, 0x86, 0x89, 0x43, 0x4c, 0xd5, 0xfa, 0x37, 0x42, 0x06, 0x8c, 0x36, 0x8d, + 0xfb, 0x3b, 0x0e, 0x3c, 0x3e, 0xb0, 0x33, 0xbe, 0x7f, 0xa3, 0x95, 0xee, 0xef, 0x96, 0xe0, 0xd4, + 0x80, 0xca, 0x51, 0xd2, 0x7b, 0x68, 0xcf, 0xc9, 0xc9, 0xd2, 0xd4, 0xa9, 0xa1, 0x73, 0xe3, 0x68, + 0xdb, 0x90, 0xd9, 0x0a, 0xca, 0x8f, 0x74, 0x2b, 0x70, 0xbf, 0x5c, 0x02, 0xeb, 0xe1, 0x43, 0xf2, + 0x41, 0xbb, 0x48, 0xda, 0x29, 0xaa, 0xa0, 0x57, 0x30, 0xd7, 0x45, 0xd6, 0xa2, 0xd7, 0x06, 0xd5, + 0x5c, 0xe7, 0xe7, 0x6b, 0xe9, 0xe0, 0xf9, 0x4a, 0x5a, 0xaa, 0x1a, 0xbd, 0x5c, 0x7c, 0x35, 0x7a, + 0xb5, 0xaf, 0x12, 0xfd, 0x17, 0x1c, 0x31, 0xd3, 0x72, 0x4d, 0x32, 0x16, 0xd6, 0xb9, 0x8f, 0x85, + 0x7d, 0x13, 0x54, 0x12, 0xda, 0x6a, 0x30, 0xcf, 0x4e, 0x5a, 0x62, 0x3d, 0x27, 0x36, 0x24, 0x1c, + 0x35, 0x05, 0xbf, 0x58, 0xdb, 0x6a, 0x45, 0x77, 0x56, 0xda, 0x9d, 0xb4, 0x27, 0x6d, 0xb2, 0xb9, + 0x58, 0xab, 0x31, 0x68, 0x51, 0xb9, 0xff, 0xe9, 0x88, 0xe1, 0x94, 0x3e, 0xfa, 0x73, 0xb9, 0x0b, + 0x8f, 0x87, 0x77, 0x6f, 0x7f, 0x1a, 0xc0, 0xd7, 0x4f, 0x10, 0x14, 0xf3, 0x1e, 0xa2, 0x79, 0xd2, + 0xc0, 0x7e, 0xa4, 0x4f, 0xc1, 0xd0, 0x92, 0x97, 0x59, 0x3c, 0xe5, 0x83, 0x16, 0x8f, 0xfb, 0x6f, + 0x0e, 0x64, 0x36, 0x0b, 0xd2, 0x81, 0x51, 0xa6, 0x41, 0xaf, 0x98, 0x07, 0x13, 0x6c, 0xd6, 0x6c, + 0x61, 0xc9, 0x69, 0xc1, 0xff, 0x44, 0x21, 0x88, 0xb4, 0xa4, 0x77, 0x5e, 0x2a, 0xe2, 0x51, 0x0f, + 0x5b, 0x20, 0xf3, 0xef, 0xe5, 0xbf, 0x8c, 0xd0, 0x9e, 0xbe, 0xfb, 0x1c, 0xcc, 0xf4, 0x29, 0xc5, + 0x6f, 0x14, 0x45, 0xea, 0x95, 0x08, 0x6b, 0x06, 0xf2, 0xfb, 0x8d, 0x28, 0x70, 0xcc, 0xc1, 0x3f, + 0x99, 0x67, 0x4f, 0xbe, 0xe0, 0xc0, 0x4c, 0x92, 0xe7, 0xf7, 0xb0, 0xfa, 0x4e, 0x47, 0xae, 0xfa, + 0x50, 0xd8, 0xaf, 0x84, 0xfb, 0x67, 0xd2, 0x3c, 0x89, 0x7f, 0xb1, 0xa5, 0x37, 0x17, 0x67, 0xe8, + 0xe6, 0xc2, 0x96, 0x98, 0xbf, 0x4d, 0xeb, 0xdd, 0x56, 0x5f, 0x29, 0xcd, 0x86, 0x84, 0xa3, 0xa6, + 0xc8, 0xbc, 0x8b, 0x56, 0x3e, 0xf0, 0x5d, 0xb4, 0x67, 0x61, 0xd2, 0x7e, 0x09, 0x85, 0x87, 0xd0, + 0x64, 0xf2, 0xc1, 0x7e, 0x34, 0x05, 0x33, 0x54, 0xb9, 0x77, 0xb5, 0x46, 0x0f, 0x7c, 0x57, 0xeb, + 0x69, 0xa8, 0xc8, 0xff, 0x58, 0xa5, 0xe2, 0xbb, 0xa2, 0x4e, 0x47, 0xc2, 0x50, 0x63, 0x99, 0x81, + 0x68, 0x7b, 0x61, 0xd7, 0x6b, 0xb1, 0x1e, 0x92, 0x35, 0x79, 0x7a, 0x65, 0x5d, 0xd3, 0x18, 0xb4, + 0xa8, 0xdc, 0x7f, 0x72, 0x20, 0xff, 0x52, 0x51, 0xa6, 0xb2, 0xcf, 0x39, 0xb0, 0xb2, 0x2f, 0x5b, + 0xe0, 0x54, 0x3a, 0x54, 0x81, 0x93, 0x5d, 0x7b, 0x54, 0xbe, 0x6f, 0xed, 0xd1, 0xeb, 0xcc, 0x35, + 0x76, 0x51, 0xa4, 0x34, 0x31, 0xe8, 0x0a, 0x3b, 0x71, 0x61, 0xcc, 0xf7, 0x74, 0xe1, 0xf4, 0xa4, + 0x70, 0x94, 0x96, 0x16, 0x39, 0x91, 0xc4, 0xd4, 0xe6, 0xbf, 0xfa, 0x9d, 0x73, 0x8f, 0x7d, 0xed, + 0x3b, 0xe7, 0x1e, 0xfb, 0xe6, 0x77, 0xce, 0x3d, 0xf6, 0xe1, 0xbb, 0xe7, 0x9c, 0xaf, 0xde, 0x3d, + 0xe7, 0x7c, 0xed, 0xee, 0x39, 0xe7, 0x9b, 0x77, 0xcf, 0x39, 0xdf, 0xbe, 0x7b, 0xce, 0xf9, 0xcc, + 0xdf, 0x9d, 0x7b, 0xec, 0x5d, 0x15, 0x35, 0x57, 0xff, 0x27, 0x00, 0x00, 0xff, 0xff, 0x21, 0xbe, + 0xad, 0xd2, 0xb0, 0x75, 0x00, 0x00, } func (m *AWSAuthConfig) Marshal() (dAtA []byte, err error) { From b92f0d879f22b9b9787a91004670362fb52e1748 Mon Sep 17 00:00:00 2001 From: Kai Reichart Date: Tue, 29 Jun 2021 15:28:56 +0200 Subject: [PATCH 19/25] sync with test versions Signed-off-by: Kai Reichart --- pkg/apiclient/version/version.pb.go | 14 +++++++------- pkg/apiclient/version/version.pb.gw.go | 7 ++++--- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/pkg/apiclient/version/version.pb.go b/pkg/apiclient/version/version.pb.go index 78a7be47ca2ff..3a6cf1bdbac8e 100644 --- a/pkg/apiclient/version/version.pb.go +++ b/pkg/apiclient/version/version.pb.go @@ -15,7 +15,7 @@ import ( grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" status "google.golang.org/grpc/status" - emptypb "google.golang.org/protobuf/types/known/emptypb" + empty "github.com/golang/protobuf/ptypes/empty" io "io" math "math" math_bits "math/bits" @@ -225,7 +225,7 @@ const _ = grpc.SupportPackageIsVersion4 // For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. type VersionServiceClient interface { // Version returns version information of the API server - Version(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*VersionMessage, error) + Version(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*VersionMessage, error) } type versionServiceClient struct { @@ -236,7 +236,7 @@ func NewVersionServiceClient(cc *grpc.ClientConn) VersionServiceClient { return &versionServiceClient{cc} } -func (c *versionServiceClient) Version(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*VersionMessage, error) { +func (c *versionServiceClient) Version(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*VersionMessage, error) { out := new(VersionMessage) err := c.cc.Invoke(ctx, "/version.VersionService/Version", in, out, opts...) if err != nil { @@ -248,14 +248,14 @@ func (c *versionServiceClient) Version(ctx context.Context, in *emptypb.Empty, o // VersionServiceServer is the server API for VersionService service. type VersionServiceServer interface { // Version returns version information of the API server - Version(context.Context, *emptypb.Empty) (*VersionMessage, error) + Version(context.Context, *empty.Empty) (*VersionMessage, error) } // UnimplementedVersionServiceServer can be embedded to have forward compatible implementations. type UnimplementedVersionServiceServer struct { } -func (*UnimplementedVersionServiceServer) Version(ctx context.Context, req *emptypb.Empty) (*VersionMessage, error) { +func (*UnimplementedVersionServiceServer) Version(ctx context.Context, req *empty.Empty) (*VersionMessage, error) { return nil, status.Errorf(codes.Unimplemented, "method Version not implemented") } @@ -264,7 +264,7 @@ func RegisterVersionServiceServer(s *grpc.Server, srv VersionServiceServer) { } func _VersionService_Version_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(emptypb.Empty) + in := new(empty.Empty) if err := dec(in); err != nil { return nil, err } @@ -276,7 +276,7 @@ func _VersionService_Version_Handler(srv interface{}, ctx context.Context, dec f FullMethod: "/version.VersionService/Version", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(VersionServiceServer).Version(ctx, req.(*emptypb.Empty)) + return srv.(VersionServiceServer).Version(ctx, req.(*empty.Empty)) } return interceptor(ctx, in, info, handler) } diff --git a/pkg/apiclient/version/version.pb.gw.go b/pkg/apiclient/version/version.pb.gw.go index e1fabc7541c3e..a3ec01af61084 100644 --- a/pkg/apiclient/version/version.pb.gw.go +++ b/pkg/apiclient/version/version.pb.gw.go @@ -10,11 +10,13 @@ package version import ( "context" + "google.golang.org/protobuf/types/known/emptypb" "io" "net/http" "github.com/golang/protobuf/descriptor" "github.com/golang/protobuf/proto" + "github.com/golang/protobuf/ptypes/empty" "github.com/grpc-ecosystem/grpc-gateway/runtime" "github.com/grpc-ecosystem/grpc-gateway/utilities" "google.golang.org/grpc" @@ -22,7 +24,6 @@ import ( "google.golang.org/grpc/grpclog" "google.golang.org/grpc/metadata" "google.golang.org/grpc/status" - "google.golang.org/protobuf/types/known/emptypb" ) // Suppress "imported and not used" errors @@ -35,7 +36,7 @@ var _ = descriptor.ForMessage var _ = metadata.Join func request_VersionService_Version_0(ctx context.Context, marshaler runtime.Marshaler, client VersionServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq emptypb.Empty + var protoReq empty.Empty var metadata runtime.ServerMetadata msg, err := client.Version(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) @@ -44,7 +45,7 @@ func request_VersionService_Version_0(ctx context.Context, marshaler runtime.Mar } func local_request_VersionService_Version_0(ctx context.Context, marshaler runtime.Marshaler, server VersionServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq emptypb.Empty + var protoReq empty.Empty var metadata runtime.ServerMetadata msg, err := server.Version(ctx, &protoReq) From a0a415d09a97deb8554ccaa6ed601dc81caaa8c9 Mon Sep 17 00:00:00 2001 From: Kai Reichart Date: Tue, 29 Jun 2021 15:54:33 +0200 Subject: [PATCH 20/25] clean up versions Signed-off-by: Kai Reichart --- pkg/apiclient/version/version.pb.go | 2 +- pkg/apiclient/version/version.pb.gw.go | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/pkg/apiclient/version/version.pb.go b/pkg/apiclient/version/version.pb.go index 3a6cf1bdbac8e..f52bf8e4bc8fc 100644 --- a/pkg/apiclient/version/version.pb.go +++ b/pkg/apiclient/version/version.pb.go @@ -11,11 +11,11 @@ import ( context "context" fmt "fmt" proto "github.com/gogo/protobuf/proto" + empty "github.com/golang/protobuf/ptypes/empty" _ "google.golang.org/genproto/googleapis/api/annotations" grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" status "google.golang.org/grpc/status" - empty "github.com/golang/protobuf/ptypes/empty" io "io" math "math" math_bits "math/bits" diff --git a/pkg/apiclient/version/version.pb.gw.go b/pkg/apiclient/version/version.pb.gw.go index a3ec01af61084..da205bd1116c4 100644 --- a/pkg/apiclient/version/version.pb.gw.go +++ b/pkg/apiclient/version/version.pb.gw.go @@ -10,7 +10,6 @@ package version import ( "context" - "google.golang.org/protobuf/types/known/emptypb" "io" "net/http" From 76955829fe02247d19b59a36627bcc662891b11d Mon Sep 17 00:00:00 2001 From: Kai Reichart Date: Tue, 29 Jun 2021 16:18:30 +0200 Subject: [PATCH 21/25] clean go.mod Signed-off-by: Kai Reichart --- go.mod | 1 - 1 file changed, 1 deletion(-) diff --git a/go.mod b/go.mod index 1a77a745facab..5755b4ea68789 100644 --- a/go.mod +++ b/go.mod @@ -68,7 +68,6 @@ require ( golang.org/x/term v0.0.0-20210220032956-6a3ed077a48d google.golang.org/genproto v0.0.0-20201110150050-8816d57aaa9a google.golang.org/grpc v1.33.1 - google.golang.org/protobuf v1.25.0 gopkg.in/go-playground/webhooks.v5 v5.11.0 gopkg.in/yaml.v2 v2.4.0 k8s.io/api v0.21.0 From 763b43c0b6bd6523da3eb6d3fa7a79fe0b211527 Mon Sep 17 00:00:00 2001 From: tinkerborg <15373049+tinkerborg@users.noreply.github.com> Date: Tue, 6 Jul 2021 14:25:29 -0400 Subject: [PATCH 22/25] normalize repo paths consistently w/ gitClient Signed-off-by: Kai Reichart --- reposerver/repository/repository.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/reposerver/repository/repository.go b/reposerver/repository/repository.go index a951987636fc1..229e45ad2baa4 100644 --- a/reposerver/repository/repository.go +++ b/reposerver/repository/repository.go @@ -655,7 +655,8 @@ func helmTemplate(appPath string, repoRoot string, env *v1alpha1.Env, q *apiclie if strings.HasPrefix(exVal.RepoURL, "file://") { repoFilePath = exVal.RepoURL[7:] } else { - repoFilePath = filepath.Join(os.TempDir(), strings.Replace(git.NormalizeGitURL(exVal.RepoURL), "/", "_", -1)) + r := regexp.MustCompile("(/|:)") + repoFilePath = filepath.Join(os.TempDir(), r.ReplaceAllString(git.NormalizeGitURL(exVal.RepoURL), "_")) } for _, file := range exVal.ValueFiles { From 333c40fd817f8e38e00e8c6db9db8e09a416c6a6 Mon Sep 17 00:00:00 2001 From: tinkerborg <15373049+tinkerborg@users.noreply.github.com> Date: Tue, 6 Jul 2021 14:25:34 -0400 Subject: [PATCH 23/25] support credentials for external values repos Signed-off-by: Kai Reichart --- controller/state.go | 43 ++-- reposerver/apiclient/repository.pb.go | 334 +++++++++++++++++-------- reposerver/repository/repository.go | 12 +- reposerver/repository/repository.proto | 2 + server/application/application.go | 64 +++-- 5 files changed, 315 insertions(+), 140 deletions(-) diff --git a/controller/state.go b/controller/state.go index a6819a88afb55..2ebc5678709e5 100644 --- a/controller/state.go +++ b/controller/state.go @@ -124,6 +124,18 @@ func (m *appStateManager) getRepoObjs(app *v1alpha1.Application, source v1alpha1 if err != nil { return nil, nil, err } + helmExternalValueCredentials := []*v1alpha1.RepoCreds{} + if app.Spec.Source.Helm != nil && app.Spec.Source.Helm.ExternalValueFiles != nil { + for _, helmExternalValueFile := range app.Spec.Source.Helm.ExternalValueFiles { + helmExternalValueCredential, err := m.db.GetRepositoryCredentials(context.Background(), helmExternalValueFile.RepoURL) + if err != nil { + return nil, nil, err + } + if helmExternalValueCredential != nil { + helmExternalValueCredentials = append(helmExternalValueCredentials, helmExternalValueCredential) + } + } + } conn, repoClient, err := m.repoClientset.NewRepoServerClient() if err != nil { return nil, nil, err @@ -159,21 +171,22 @@ func (m *appStateManager) getRepoObjs(app *v1alpha1.Application, source v1alpha1 } ts.AddCheckpoint("version_ms") manifestInfo, err := repoClient.GenerateManifest(context.Background(), &apiclient.ManifestRequest{ - Repo: repo, - Repos: permittedHelmRepos, - Revision: revision, - NoCache: noCache, - NoRevisionCache: noRevisionCache, - AppLabelKey: appLabelKey, - AppName: app.Name, - Namespace: app.Spec.Destination.Namespace, - ApplicationSource: &source, - Plugins: tools, - KustomizeOptions: kustomizeOptions, - KubeVersion: serverVersion, - ApiVersions: argo.APIGroupsToVersions(apiGroups), - VerifySignature: verifySignature, - HelmRepoCreds: permittedHelmCredentials, + Repo: repo, + Repos: permittedHelmRepos, + Revision: revision, + NoCache: noCache, + NoRevisionCache: noRevisionCache, + AppLabelKey: appLabelKey, + AppName: app.Name, + Namespace: app.Spec.Destination.Namespace, + ApplicationSource: &source, + Plugins: tools, + KustomizeOptions: kustomizeOptions, + KubeVersion: serverVersion, + ApiVersions: argo.APIGroupsToVersions(apiGroups), + VerifySignature: verifySignature, + HelmRepoCreds: permittedHelmCredentials, + HelmExternalValueRepoCreds: helmExternalValueCredentials, }) if err != nil { return nil, nil, err diff --git a/reposerver/apiclient/repository.pb.go b/reposerver/apiclient/repository.pb.go index 129e6f6d99b61..8ce652815b9e3 100644 --- a/reposerver/apiclient/repository.pb.go +++ b/reposerver/apiclient/repository.pb.go @@ -47,12 +47,13 @@ type ManifestRequest struct { KubeVersion string `protobuf:"bytes,14,opt,name=kubeVersion,proto3" json:"kubeVersion,omitempty"` ApiVersions []string `protobuf:"bytes,15,rep,name=apiVersions,proto3" json:"apiVersions,omitempty"` // Request to verify the signature when generating the manifests (only for Git repositories) - VerifySignature bool `protobuf:"varint,16,opt,name=verifySignature,proto3" json:"verifySignature,omitempty"` - HelmRepoCreds []*v1alpha1.RepoCreds `protobuf:"bytes,17,rep,name=helmRepoCreds,proto3" json:"helmRepoCreds,omitempty"` - NoRevisionCache bool `protobuf:"varint,18,opt,name=noRevisionCache,proto3" json:"noRevisionCache,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + VerifySignature bool `protobuf:"varint,16,opt,name=verifySignature,proto3" json:"verifySignature,omitempty"` + HelmRepoCreds []*v1alpha1.RepoCreds `protobuf:"bytes,17,rep,name=helmRepoCreds,proto3" json:"helmRepoCreds,omitempty"` + NoRevisionCache bool `protobuf:"varint,18,opt,name=noRevisionCache,proto3" json:"noRevisionCache,omitempty"` + HelmExternalValueRepoCreds []*v1alpha1.RepoCreds `protobuf:"bytes,19,rep,name=helmExternalValueRepoCreds,proto3" json:"helmExternalValueRepoCreds,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *ManifestRequest) Reset() { *m = ManifestRequest{} } @@ -193,6 +194,13 @@ func (m *ManifestRequest) GetNoRevisionCache() bool { return false } +func (m *ManifestRequest) GetHelmExternalValueRepoCreds() []*v1alpha1.RepoCreds { + if m != nil { + return m.HelmExternalValueRepoCreds + } + return nil +} + // TestRepositoryRequest is a query to test repository is valid or not and has valid access. type TestRepositoryRequest struct { Repo *v1alpha1.Repository `protobuf:"bytes,1,opt,name=repo,proto3" json:"repo,omitempty"` @@ -588,15 +596,16 @@ func (m *AppList) GetApps() map[string]string { // RepoServerAppDetailsQuery contains query information for app details request type RepoServerAppDetailsQuery struct { - Repo *v1alpha1.Repository `protobuf:"bytes,1,opt,name=repo,proto3" json:"repo,omitempty"` - Source *v1alpha1.ApplicationSource `protobuf:"bytes,2,opt,name=source,proto3" json:"source,omitempty"` - Repos []*v1alpha1.Repository `protobuf:"bytes,3,rep,name=repos,proto3" json:"repos,omitempty"` - KustomizeOptions *v1alpha1.KustomizeOptions `protobuf:"bytes,4,opt,name=kustomizeOptions,proto3" json:"kustomizeOptions,omitempty"` - AppName string `protobuf:"bytes,5,opt,name=appName,proto3" json:"appName,omitempty"` - NoCache bool `protobuf:"varint,6,opt,name=noCache,proto3" json:"noCache,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + Repo *v1alpha1.Repository `protobuf:"bytes,1,opt,name=repo,proto3" json:"repo,omitempty"` + Source *v1alpha1.ApplicationSource `protobuf:"bytes,2,opt,name=source,proto3" json:"source,omitempty"` + Repos []*v1alpha1.Repository `protobuf:"bytes,3,rep,name=repos,proto3" json:"repos,omitempty"` + KustomizeOptions *v1alpha1.KustomizeOptions `protobuf:"bytes,4,opt,name=kustomizeOptions,proto3" json:"kustomizeOptions,omitempty"` + AppName string `protobuf:"bytes,5,opt,name=appName,proto3" json:"appName,omitempty"` + NoCache bool `protobuf:"varint,6,opt,name=noCache,proto3" json:"noCache,omitempty"` + HelmExternalValueRepoCreds []*v1alpha1.RepoCreds `protobuf:"bytes,7,rep,name=helmExternalValueRepoCreds,proto3" json:"helmExternalValueRepoCreds,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *RepoServerAppDetailsQuery) Reset() { *m = RepoServerAppDetailsQuery{} } @@ -674,6 +683,13 @@ func (m *RepoServerAppDetailsQuery) GetNoCache() bool { return false } +func (m *RepoServerAppDetailsQuery) GetHelmExternalValueRepoCreds() []*v1alpha1.RepoCreds { + if m != nil { + return m.HelmExternalValueRepoCreds + } + return nil +} + // RepoAppDetailsResponse application details type RepoAppDetailsResponse struct { Type string `protobuf:"bytes,1,opt,name=type,proto3" json:"type,omitempty"` @@ -1359,94 +1375,96 @@ func init() { } var fileDescriptor_dd8723cfcc820480 = []byte{ - // 1392 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x18, 0xcb, 0x6e, 0xdb, 0xc6, - 0xd6, 0x94, 0xe4, 0x87, 0x8e, 0x12, 0x5b, 0x9e, 0x3c, 0x2e, 0xaf, 0xae, 0x23, 0x38, 0x04, 0x6e, - 0xe0, 0x36, 0x0d, 0x85, 0x28, 0x41, 0x1b, 0x24, 0x40, 0x01, 0xd5, 0x49, 0x1c, 0xc0, 0x49, 0xec, - 0xd2, 0x69, 0x81, 0x16, 0x41, 0x83, 0x31, 0x75, 0x4c, 0x4d, 0x25, 0x91, 0x13, 0x92, 0x52, 0xe1, - 0x00, 0x5d, 0x16, 0x5d, 0x74, 0xdd, 0xfe, 0x4e, 0x57, 0x7d, 0x2c, 0xdb, 0x3f, 0x28, 0xf2, 0x09, - 0xfd, 0x82, 0x62, 0x86, 0xaf, 0x21, 0x45, 0xbb, 0x0b, 0x25, 0xce, 0xc6, 0x9e, 0x39, 0xef, 0x73, - 0xe6, 0xbc, 0x28, 0xb8, 0xe6, 0x23, 0xf7, 0x02, 0xf4, 0xa7, 0xe8, 0x77, 0xe4, 0x91, 0x85, 0x9e, - 0x7f, 0xac, 0x1c, 0x4d, 0xee, 0x7b, 0xa1, 0x47, 0x20, 0x83, 0xb4, 0x2e, 0x3a, 0x9e, 0xe3, 0x49, - 0x70, 0x47, 0x9c, 0x22, 0x8a, 0xd6, 0x86, 0xe3, 0x79, 0xce, 0x08, 0x3b, 0x94, 0xb3, 0x0e, 0x75, - 0x5d, 0x2f, 0xa4, 0x21, 0xf3, 0xdc, 0x20, 0xc6, 0x1a, 0xc3, 0x3b, 0x81, 0xc9, 0x3c, 0x89, 0xb5, - 0x3d, 0x1f, 0x3b, 0xd3, 0x9b, 0x1d, 0x07, 0x5d, 0xf4, 0x69, 0x88, 0xfd, 0x98, 0xe6, 0xb1, 0xc3, - 0xc2, 0xc1, 0xe4, 0xd0, 0xb4, 0xbd, 0x71, 0x87, 0xfa, 0x52, 0xc5, 0xd7, 0xf2, 0x70, 0xc3, 0xee, - 0x77, 0xa6, 0xdd, 0x0e, 0x1f, 0x3a, 0x82, 0x3f, 0xe8, 0x50, 0xce, 0x47, 0xcc, 0x96, 0xf2, 0x3b, - 0xd3, 0x9b, 0x74, 0xc4, 0x07, 0x74, 0x46, 0x9a, 0xf1, 0xe7, 0x32, 0xac, 0x3d, 0xa1, 0x2e, 0x3b, - 0xc2, 0x20, 0xb4, 0xf0, 0xe5, 0x04, 0x83, 0x90, 0x3c, 0x87, 0x9a, 0xf0, 0x43, 0xd7, 0x36, 0xb5, - 0xad, 0x46, 0xf7, 0x91, 0x99, 0x29, 0x34, 0x13, 0x85, 0xf2, 0xf0, 0xc2, 0xee, 0x9b, 0xd3, 0xae, - 0xc9, 0x87, 0x8e, 0x29, 0x14, 0x9a, 0x8a, 0x42, 0x33, 0x51, 0x68, 0x5a, 0x69, 0x44, 0x2c, 0x29, - 0x95, 0xb4, 0x60, 0xc5, 0xc7, 0x29, 0x0b, 0x98, 0xe7, 0xea, 0x95, 0x4d, 0x6d, 0xab, 0x6e, 0xa5, - 0x77, 0xa2, 0xc3, 0xb2, 0xeb, 0x6d, 0x53, 0x7b, 0x80, 0x7a, 0x75, 0x53, 0xdb, 0x5a, 0xb1, 0x92, - 0x2b, 0xd9, 0x84, 0x06, 0xe5, 0xfc, 0x31, 0x3d, 0xc4, 0xd1, 0x2e, 0x1e, 0xeb, 0x35, 0xc9, 0xa8, - 0x82, 0x04, 0x2f, 0xe5, 0xfc, 0x29, 0x1d, 0xa3, 0xbe, 0x28, 0xb1, 0xc9, 0x95, 0x6c, 0x40, 0xdd, - 0xa5, 0x63, 0x0c, 0x38, 0xb5, 0x51, 0x5f, 0x91, 0xb8, 0x0c, 0x40, 0xbe, 0x85, 0x75, 0xc5, 0xf0, - 0x03, 0x6f, 0xe2, 0xdb, 0xa8, 0x83, 0x74, 0x7d, 0x6f, 0x3e, 0xd7, 0x7b, 0x45, 0xb1, 0xd6, 0xac, - 0x26, 0xf2, 0x15, 0x2c, 0xca, 0xa4, 0xd1, 0x1b, 0x9b, 0xd5, 0x37, 0x1a, 0xed, 0x48, 0x2c, 0x71, - 0x61, 0x99, 0x8f, 0x26, 0x0e, 0x73, 0x03, 0xfd, 0x9c, 0xd4, 0xf0, 0x6c, 0x3e, 0x0d, 0xdb, 0x9e, - 0x7b, 0xc4, 0x9c, 0x27, 0xd4, 0xa5, 0x0e, 0x8e, 0xd1, 0x0d, 0xf7, 0xa5, 0x70, 0x2b, 0x51, 0x42, - 0x5e, 0x41, 0x73, 0x38, 0x09, 0x42, 0x6f, 0xcc, 0x5e, 0xe1, 0x1e, 0x97, 0xc9, 0xad, 0x9f, 0x97, - 0xd1, 0x7c, 0x3a, 0x9f, 0xe2, 0xdd, 0x82, 0x54, 0x6b, 0x46, 0x8f, 0x48, 0x92, 0xe1, 0xe4, 0x10, - 0x3f, 0x47, 0x5f, 0x66, 0xd7, 0x6a, 0x94, 0x24, 0x0a, 0x28, 0x4a, 0x23, 0x16, 0xdf, 0x02, 0x7d, - 0x6d, 0xb3, 0x1a, 0xa5, 0x51, 0x0a, 0x22, 0x5b, 0xb0, 0x36, 0x45, 0x9f, 0x1d, 0x1d, 0x1f, 0x30, - 0xc7, 0xa5, 0xe1, 0xc4, 0x47, 0xbd, 0x29, 0x53, 0xb1, 0x08, 0x26, 0x63, 0x38, 0x3f, 0xc0, 0xd1, - 0x58, 0x84, 0x7c, 0xdb, 0xc7, 0x7e, 0xa0, 0xaf, 0xcb, 0xf8, 0xee, 0xcc, 0xff, 0x82, 0x52, 0x9c, - 0x95, 0x97, 0x2e, 0x0c, 0x73, 0x3d, 0x2b, 0xae, 0x94, 0xa8, 0x46, 0x48, 0x64, 0x58, 0x01, 0x6c, - 0x4c, 0xe0, 0xd2, 0x33, 0x59, 0xce, 0x69, 0x2e, 0x9c, 0x45, 0x61, 0x1b, 0x8f, 0xe0, 0x72, 0x51, - 0x6d, 0xc0, 0x3d, 0x37, 0x40, 0x62, 0x02, 0x91, 0xc1, 0x63, 0xd8, 0xcf, 0xb0, 0xd2, 0x8a, 0x15, - 0xab, 0x04, 0x63, 0xfc, 0xaa, 0x41, 0x33, 0x6b, 0x4a, 0xb1, 0x90, 0x0d, 0xa8, 0x8f, 0x63, 0x58, - 0xa0, 0x6b, 0xf2, 0xe1, 0x32, 0x40, 0xbe, 0xc6, 0x2b, 0xc5, 0x1a, 0xbf, 0x0c, 0x4b, 0x51, 0xf7, - 0x96, 0x6d, 0xa5, 0x6e, 0xc5, 0xb7, 0x5c, 0x2f, 0xaa, 0x15, 0x7a, 0x51, 0x1b, 0x20, 0x90, 0x25, - 0xfa, 0xec, 0x98, 0xa3, 0xbe, 0x24, 0xb1, 0x0a, 0x84, 0x18, 0x70, 0x2e, 0xca, 0x08, 0x0b, 0x83, - 0xc9, 0x28, 0xd4, 0x97, 0x25, 0x45, 0x0e, 0x66, 0x78, 0xb0, 0xf6, 0x98, 0x09, 0x1f, 0x8e, 0x82, - 0xb3, 0x79, 0x83, 0x0f, 0xa1, 0x26, 0x94, 0x09, 0xc7, 0x0e, 0x7d, 0xea, 0xda, 0x03, 0x4c, 0x62, - 0x95, 0xde, 0x09, 0x81, 0x5a, 0x48, 0x9d, 0x40, 0xaf, 0x48, 0xb8, 0x3c, 0x1b, 0x3f, 0x68, 0x91, - 0xa5, 0x3d, 0xce, 0x83, 0x77, 0x3e, 0x06, 0x8c, 0x09, 0x2c, 0xf7, 0x38, 0x17, 0xf6, 0x90, 0x9b, - 0x50, 0xa3, 0x9c, 0x47, 0x4e, 0x34, 0xba, 0x57, 0x4c, 0x65, 0xe4, 0xc6, 0x24, 0xe2, 0x7f, 0xf0, - 0xc0, 0x0d, 0x85, 0x64, 0x41, 0xda, 0xfa, 0x08, 0xea, 0x29, 0x88, 0x34, 0xa1, 0x3a, 0xc4, 0x28, - 0xd7, 0xea, 0x96, 0x38, 0x92, 0x8b, 0xb0, 0x38, 0xa5, 0xa3, 0x49, 0x92, 0x25, 0xd1, 0xe5, 0x6e, - 0xe5, 0x8e, 0x66, 0xfc, 0x5d, 0x85, 0xff, 0x0a, 0x3b, 0x0f, 0x64, 0x72, 0xf4, 0x38, 0xbf, 0x8f, - 0x21, 0x65, 0xa3, 0xe0, 0xd3, 0x09, 0xfa, 0xc7, 0x6f, 0x39, 0x1c, 0x0e, 0x2c, 0x45, 0xb9, 0x25, - 0xcd, 0x7a, 0x0b, 0xa3, 0x27, 0x16, 0x9f, 0xcd, 0x9b, 0xea, 0xdb, 0x99, 0x37, 0x65, 0xfd, 0xbf, - 0x76, 0x46, 0xfd, 0xff, 0xe4, 0x15, 0x40, 0x59, 0x2c, 0x96, 0x72, 0x8b, 0x85, 0xf1, 0x7d, 0x05, - 0x2e, 0x0b, 0x2f, 0xb2, 0xe7, 0x4e, 0x3b, 0x8e, 0x28, 0x14, 0x51, 0xfb, 0x51, 0xf2, 0xc8, 0x33, - 0xb9, 0x0d, 0xcb, 0xc3, 0xc0, 0x73, 0x5d, 0x0c, 0xe3, 0x87, 0x6a, 0xa9, 0x29, 0xb9, 0x1b, 0xa1, - 0x7a, 0x9c, 0x1f, 0x70, 0xb4, 0xad, 0x84, 0x94, 0x5c, 0x87, 0x9a, 0x68, 0xe6, 0xb2, 0xfb, 0x34, - 0xba, 0xff, 0x51, 0x59, 0x1e, 0xe1, 0x68, 0x9c, 0xd0, 0x4b, 0x22, 0x72, 0x17, 0xea, 0xa9, 0x67, - 0x71, 0xe8, 0x36, 0x72, 0x4a, 0x12, 0x64, 0xc2, 0x96, 0x91, 0x0b, 0xde, 0x3e, 0xf3, 0xd1, 0x96, - 0x0d, 0x76, 0x71, 0x96, 0xf7, 0x7e, 0x82, 0x4c, 0x79, 0x53, 0x72, 0xe3, 0x17, 0x0d, 0xae, 0x66, - 0xe9, 0x9f, 0x8c, 0x94, 0x27, 0x18, 0xd2, 0x3e, 0x0d, 0xe9, 0xbb, 0x5f, 0x0e, 0xaf, 0xc1, 0xaa, - 0x3d, 0x40, 0x7b, 0x98, 0x0d, 0xe6, 0x68, 0x47, 0x2c, 0x40, 0x8d, 0xdf, 0x2a, 0xb0, 0x9a, 0x7f, - 0x08, 0xf1, 0x92, 0x62, 0x18, 0x24, 0x2f, 0x29, 0xce, 0x64, 0x1f, 0xce, 0xa1, 0x3b, 0x65, 0xbe, - 0xe7, 0x8a, 0x35, 0x26, 0xa9, 0x87, 0x0f, 0x4e, 0x7e, 0x4e, 0xf3, 0x81, 0x42, 0x1e, 0x35, 0x9c, - 0x9c, 0x04, 0xe2, 0x02, 0x70, 0xea, 0xd3, 0x31, 0x86, 0xe8, 0x8b, 0xa4, 0xaf, 0xbe, 0x81, 0xa4, - 0x8f, 0x2c, 0xd8, 0x4f, 0xc4, 0x5a, 0x8a, 0x86, 0xd6, 0x0b, 0x58, 0x9f, 0x31, 0xa9, 0xa4, 0xe1, - 0xdd, 0x56, 0x1b, 0x5e, 0xa3, 0xdb, 0x2e, 0xf1, 0x50, 0x11, 0xa3, 0x36, 0xc4, 0x9f, 0x2b, 0xd0, - 0x50, 0xf2, 0xb3, 0x34, 0x8c, 0x6d, 0x00, 0xc9, 0xf0, 0x90, 0x8d, 0x30, 0x0a, 0x62, 0xdd, 0x52, - 0x20, 0x64, 0x58, 0x12, 0x94, 0xdd, 0xf9, 0x82, 0x22, 0x4c, 0x2a, 0x8d, 0x88, 0x98, 0xf3, 0x52, - 0x75, 0x10, 0xd7, 0x7f, 0x7c, 0x23, 0xdf, 0xc0, 0xea, 0x11, 0x1b, 0xe1, 0x7e, 0x66, 0xc8, 0x92, - 0x34, 0x64, 0x6f, 0x7e, 0x43, 0x1e, 0xaa, 0x72, 0xad, 0x82, 0x1a, 0xe3, 0x7d, 0x68, 0x16, 0xcb, - 0x55, 0x18, 0xc9, 0xc6, 0xd4, 0x49, 0xa3, 0x15, 0xdf, 0x8c, 0x1f, 0x35, 0x20, 0xb3, 0xef, 0x71, - 0x52, 0xd0, 0x87, 0x77, 0x82, 0x64, 0xcf, 0x8d, 0x0a, 0x45, 0x81, 0x90, 0x5d, 0x68, 0xf4, 0x31, - 0x08, 0x99, 0x2b, 0x0d, 0x8e, 0x9b, 0xc8, 0x7b, 0xa7, 0x3f, 0xfc, 0xfd, 0x8c, 0xc1, 0x52, 0xb9, - 0x8d, 0xcf, 0xe0, 0xca, 0xa9, 0xd4, 0xca, 0x76, 0xa5, 0xe5, 0xb6, 0xab, 0x53, 0x77, 0x32, 0x83, - 0x40, 0xb3, 0xd8, 0x8d, 0x8c, 0x97, 0xb0, 0x2e, 0x62, 0xba, 0x3d, 0xa0, 0x7e, 0x78, 0x46, 0x1b, - 0xd3, 0x3d, 0xa8, 0xa7, 0x2a, 0x4b, 0x63, 0xdd, 0x82, 0x95, 0x69, 0xf2, 0xbd, 0x10, 0xad, 0x4c, - 0xe9, 0xdd, 0xe8, 0x01, 0x51, 0xed, 0x8d, 0xe7, 0xc6, 0x75, 0x58, 0x64, 0x21, 0x8e, 0x93, 0xa5, - 0xe5, 0x52, 0xb1, 0xdd, 0x4b, 0x72, 0x2b, 0xa2, 0xe9, 0x7e, 0xb7, 0x08, 0xeb, 0x59, 0xd7, 0x15, - 0x7f, 0x99, 0x8d, 0x64, 0x0f, 0x9a, 0x3b, 0xf1, 0x97, 0x7a, 0xb2, 0x08, 0x93, 0xff, 0xa9, 0x72, - 0x0a, 0xdf, 0xec, 0xad, 0x8d, 0x72, 0x64, 0x64, 0x91, 0xb1, 0x40, 0xbe, 0x80, 0xd5, 0xfc, 0x72, - 0x4e, 0xae, 0xaa, 0x1c, 0xa5, 0xdf, 0x0b, 0x2d, 0xe3, 0x34, 0x92, 0x54, 0xf4, 0x3d, 0x58, 0x49, - 0x96, 0xdc, 0xbc, 0x8d, 0x85, 0xd5, 0xb7, 0xd5, 0x54, 0x91, 0x02, 0x61, 0x2c, 0x90, 0x8f, 0x23, - 0x66, 0xb1, 0xb0, 0xcd, 0x32, 0x2b, 0xdb, 0x68, 0xeb, 0x42, 0xc9, 0xea, 0x67, 0x2c, 0x90, 0xe7, - 0x70, 0x7e, 0x47, 0x76, 0xe8, 0x78, 0x78, 0x93, 0xff, 0xe7, 0x95, 0x9c, 0xb0, 0xcd, 0xe5, 0x5d, - 0x2b, 0x9f, 0xff, 0xc6, 0x02, 0xf9, 0x49, 0x83, 0x0b, 0x3b, 0x18, 0x16, 0x67, 0x21, 0xb9, 0x51, - 0xae, 0xe4, 0x84, 0x99, 0xd9, 0x7a, 0x3a, 0x6f, 0xce, 0xe6, 0xc5, 0x1a, 0x0b, 0x64, 0x5f, 0xba, - 0x9d, 0xe5, 0x1e, 0xb9, 0x52, 0x9a, 0x64, 0x69, 0xf4, 0xda, 0x27, 0xa1, 0x13, 0x57, 0x3f, 0xe9, - 0xfd, 0xfe, 0xba, 0xad, 0xfd, 0xf1, 0xba, 0xad, 0xfd, 0xf5, 0xba, 0xad, 0x7d, 0x79, 0xeb, 0x5f, - 0x7e, 0x64, 0x52, 0x7e, 0x0f, 0xa3, 0x9c, 0xd9, 0x23, 0x86, 0x6e, 0x78, 0xb8, 0x24, 0x7f, 0x52, - 0xba, 0xf5, 0x4f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xf6, 0x7e, 0x8e, 0xd3, 0x2e, 0x13, 0x00, 0x00, + // 1422 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x58, 0xcd, 0x6f, 0x13, 0x47, + 0x14, 0xcf, 0x3a, 0x4e, 0x62, 0x3f, 0x43, 0xe2, 0x0c, 0x1f, 0xdd, 0xba, 0xc1, 0x0a, 0x2b, 0x15, + 0xa5, 0xa5, 0xac, 0x85, 0x41, 0x2d, 0x02, 0xa9, 0x92, 0x1b, 0x20, 0x48, 0x01, 0x92, 0x6e, 0x28, + 0x52, 0x2b, 0x54, 0x34, 0x59, 0xbf, 0xac, 0xa7, 0x5e, 0xef, 0x0e, 0xbb, 0x6b, 0xb7, 0x41, 0xea, + 0xb1, 0xe2, 0xd0, 0x73, 0xfb, 0xef, 0xf4, 0xd4, 0x8f, 0x63, 0xef, 0xbd, 0x54, 0xfc, 0x1d, 0x3d, + 0x54, 0x33, 0xfb, 0xbd, 0xde, 0x84, 0x83, 0x49, 0xb8, 0x24, 0x33, 0xef, 0x7b, 0xde, 0xbc, 0xf9, + 0xbd, 0xe7, 0x85, 0x2b, 0x1e, 0x72, 0xd7, 0x47, 0x6f, 0x82, 0x5e, 0x47, 0x2e, 0x59, 0xe0, 0x7a, + 0x87, 0x99, 0xa5, 0xce, 0x3d, 0x37, 0x70, 0x09, 0xa4, 0x94, 0xd6, 0x79, 0xcb, 0xb5, 0x5c, 0x49, + 0xee, 0x88, 0x55, 0x28, 0xd1, 0x5a, 0xb3, 0x5c, 0xd7, 0xb2, 0xb1, 0x43, 0x39, 0xeb, 0x50, 0xc7, + 0x71, 0x03, 0x1a, 0x30, 0xd7, 0xf1, 0x23, 0xae, 0x36, 0xbc, 0xe5, 0xeb, 0xcc, 0x95, 0x5c, 0xd3, + 0xf5, 0xb0, 0x33, 0xb9, 0xde, 0xb1, 0xd0, 0x41, 0x8f, 0x06, 0xd8, 0x8f, 0x64, 0x1e, 0x5a, 0x2c, + 0x18, 0x8c, 0xf7, 0x75, 0xd3, 0x1d, 0x75, 0xa8, 0x27, 0x5d, 0x7c, 0x27, 0x17, 0xd7, 0xcc, 0x7e, + 0x67, 0xd2, 0xed, 0xf0, 0xa1, 0x25, 0xf4, 0xfd, 0x0e, 0xe5, 0xdc, 0x66, 0xa6, 0xb4, 0xdf, 0x99, + 0x5c, 0xa7, 0x36, 0x1f, 0xd0, 0x29, 0x6b, 0xda, 0x3f, 0x35, 0x58, 0x79, 0x44, 0x1d, 0x76, 0x80, + 0x7e, 0x60, 0xe0, 0x8b, 0x31, 0xfa, 0x01, 0x79, 0x06, 0x55, 0x71, 0x0e, 0x55, 0x59, 0x57, 0x36, + 0x1a, 0xdd, 0x07, 0x7a, 0xea, 0x50, 0x8f, 0x1d, 0xca, 0xc5, 0x73, 0xb3, 0xaf, 0x4f, 0xba, 0x3a, + 0x1f, 0x5a, 0xba, 0x70, 0xa8, 0x67, 0x1c, 0xea, 0xb1, 0x43, 0xdd, 0x48, 0x32, 0x62, 0x48, 0xab, + 0xa4, 0x05, 0x35, 0x0f, 0x27, 0xcc, 0x67, 0xae, 0xa3, 0x56, 0xd6, 0x95, 0x8d, 0xba, 0x91, 0xec, + 0x89, 0x0a, 0x4b, 0x8e, 0xbb, 0x49, 0xcd, 0x01, 0xaa, 0xf3, 0xeb, 0xca, 0x46, 0xcd, 0x88, 0xb7, + 0x64, 0x1d, 0x1a, 0x94, 0xf3, 0x87, 0x74, 0x1f, 0xed, 0x6d, 0x3c, 0x54, 0xab, 0x52, 0x31, 0x4b, + 0x12, 0xba, 0x94, 0xf3, 0xc7, 0x74, 0x84, 0xea, 0x82, 0xe4, 0xc6, 0x5b, 0xb2, 0x06, 0x75, 0x87, + 0x8e, 0xd0, 0xe7, 0xd4, 0x44, 0xb5, 0x26, 0x79, 0x29, 0x81, 0xfc, 0x08, 0xab, 0x99, 0xc0, 0xf7, + 0xdc, 0xb1, 0x67, 0xa2, 0x0a, 0xf2, 0xe8, 0x3b, 0xb3, 0x1d, 0xbd, 0x57, 0x34, 0x6b, 0x4c, 0x7b, + 0x22, 0xdf, 0xc2, 0x82, 0x2c, 0x1a, 0xb5, 0xb1, 0x3e, 0xff, 0x56, 0xb3, 0x1d, 0x9a, 0x25, 0x0e, + 0x2c, 0x71, 0x7b, 0x6c, 0x31, 0xc7, 0x57, 0xcf, 0x48, 0x0f, 0x4f, 0x66, 0xf3, 0xb0, 0xe9, 0x3a, + 0x07, 0xcc, 0x7a, 0x44, 0x1d, 0x6a, 0xe1, 0x08, 0x9d, 0x60, 0x57, 0x1a, 0x37, 0x62, 0x27, 0xe4, + 0x25, 0x34, 0x87, 0x63, 0x3f, 0x70, 0x47, 0xec, 0x25, 0xee, 0x70, 0x59, 0xdc, 0xea, 0x59, 0x99, + 0xcd, 0xc7, 0xb3, 0x39, 0xde, 0x2e, 0x58, 0x35, 0xa6, 0xfc, 0x88, 0x22, 0x19, 0x8e, 0xf7, 0xf1, + 0x29, 0x7a, 0xb2, 0xba, 0x96, 0xc3, 0x22, 0xc9, 0x90, 0xc2, 0x32, 0x62, 0xd1, 0xce, 0x57, 0x57, + 0xd6, 0xe7, 0xc3, 0x32, 0x4a, 0x48, 0x64, 0x03, 0x56, 0x26, 0xe8, 0xb1, 0x83, 0xc3, 0x3d, 0x66, + 0x39, 0x34, 0x18, 0x7b, 0xa8, 0x36, 0x65, 0x29, 0x16, 0xc9, 0x64, 0x04, 0x67, 0x07, 0x68, 0x8f, + 0x44, 0xca, 0x37, 0x3d, 0xec, 0xfb, 0xea, 0xaa, 0xcc, 0xef, 0xd6, 0xec, 0x37, 0x28, 0xcd, 0x19, + 0x79, 0xeb, 0x22, 0x30, 0xc7, 0x35, 0xa2, 0x97, 0x12, 0xbe, 0x11, 0x12, 0x06, 0x56, 0x20, 0x93, + 0x57, 0x0a, 0xb4, 0x84, 0xee, 0xbd, 0x1f, 0x02, 0xf4, 0x1c, 0x6a, 0x3f, 0xa5, 0xf6, 0x18, 0xd3, + 0x30, 0xcf, 0xbd, 0xdd, 0x30, 0x8f, 0x71, 0xa5, 0x8d, 0xe1, 0xc2, 0x13, 0x09, 0x2c, 0x49, 0x55, + 0x9e, 0x06, 0xc4, 0x68, 0x0f, 0xe0, 0x62, 0xd1, 0xad, 0xcf, 0x5d, 0xc7, 0x47, 0xa2, 0x03, 0x91, + 0xd7, 0xc8, 0xb0, 0x9f, 0x72, 0x65, 0x14, 0x35, 0xa3, 0x84, 0xa3, 0xfd, 0xa1, 0x40, 0x33, 0x85, + 0xc7, 0xc8, 0xc8, 0x1a, 0xd4, 0x47, 0x11, 0xcd, 0x57, 0x15, 0x59, 0x42, 0x29, 0x21, 0x8f, 0x36, + 0x95, 0x22, 0xda, 0x5c, 0x84, 0xc5, 0xb0, 0x8f, 0x48, 0x80, 0xab, 0x1b, 0xd1, 0x2e, 0x87, 0x8a, + 0xd5, 0x02, 0x2a, 0xb6, 0x01, 0x7c, 0x09, 0x16, 0x4f, 0x0e, 0x39, 0xaa, 0x8b, 0x92, 0x9b, 0xa1, + 0x10, 0x0d, 0xce, 0x84, 0xb5, 0x69, 0xa0, 0x3f, 0xb6, 0x03, 0x75, 0x49, 0x4a, 0xe4, 0x68, 0x9a, + 0x0b, 0x2b, 0x0f, 0x99, 0x38, 0xc3, 0x81, 0x7f, 0x3a, 0x77, 0xf0, 0x29, 0x54, 0x85, 0x33, 0x71, + 0xb0, 0x7d, 0x8f, 0x3a, 0xe6, 0x00, 0xe3, 0x5c, 0x25, 0x7b, 0x42, 0xa0, 0x1a, 0x50, 0xcb, 0x57, + 0x2b, 0x92, 0x2e, 0xd7, 0xda, 0xcf, 0x4a, 0x18, 0x69, 0x8f, 0x73, 0xff, 0x9d, 0x37, 0x24, 0x6d, + 0x0c, 0x4b, 0x3d, 0xce, 0x45, 0x3c, 0xe4, 0x3a, 0x54, 0x29, 0xe7, 0xe1, 0x21, 0x1a, 0xdd, 0x4b, + 0x7a, 0xa6, 0xf9, 0x47, 0x22, 0xe2, 0xbf, 0x7f, 0xcf, 0x09, 0x84, 0x65, 0x21, 0xda, 0xfa, 0x0c, + 0xea, 0x09, 0x89, 0x34, 0x61, 0x7e, 0x88, 0x61, 0xad, 0xd5, 0x0d, 0xb1, 0x24, 0xe7, 0x61, 0x61, + 0x22, 0xde, 0x4b, 0xe4, 0x35, 0xdc, 0xdc, 0xae, 0xdc, 0x52, 0xb4, 0xff, 0xaa, 0xf0, 0xbe, 0x88, + 0x73, 0x4f, 0x16, 0x47, 0x8f, 0xf3, 0xbb, 0x18, 0x50, 0x66, 0xfb, 0x5f, 0x8e, 0xd1, 0x3b, 0x3c, + 0xe1, 0x74, 0x58, 0xb0, 0x18, 0xd6, 0x96, 0x0c, 0xeb, 0x04, 0x9a, 0x60, 0x64, 0x3e, 0xed, 0x7c, + 0xf3, 0x27, 0xd3, 0xf9, 0xca, 0x3a, 0x51, 0xf5, 0x94, 0x3a, 0xd1, 0xd1, 0xc3, 0x48, 0x66, 0xc4, + 0x59, 0xcc, 0x8f, 0x38, 0x6f, 0x80, 0xed, 0xa5, 0xd3, 0x83, 0xed, 0x57, 0x15, 0xb8, 0x28, 0x76, + 0x69, 0xe1, 0x25, 0xd8, 0x27, 0x9e, 0xac, 0x40, 0xa1, 0xb0, 0x8c, 0xe5, 0x9a, 0xdc, 0x84, 0xa5, + 0xa1, 0xef, 0x3a, 0x0e, 0x06, 0x51, 0xc9, 0xb4, 0xb2, 0x8f, 0x63, 0x3b, 0x64, 0xf5, 0x38, 0xdf, + 0xe3, 0x68, 0x1a, 0xb1, 0x28, 0xb9, 0x0a, 0x55, 0x11, 0x82, 0xc4, 0xc1, 0x46, 0xf7, 0xbd, 0xac, + 0xca, 0x03, 0xb4, 0x47, 0xb1, 0xbc, 0x14, 0x22, 0xb7, 0xa1, 0x9e, 0xe4, 0x38, 0xba, 0xc4, 0xb5, + 0x9c, 0x93, 0x98, 0x19, 0xab, 0xa5, 0xe2, 0x42, 0xb7, 0xcf, 0x3c, 0x34, 0x25, 0xd4, 0x2f, 0x4c, + 0xeb, 0xde, 0x8d, 0x99, 0x89, 0x6e, 0x22, 0xae, 0xfd, 0xae, 0xc0, 0xe5, 0xf4, 0x21, 0xc6, 0x6d, + 0xf6, 0x11, 0x06, 0xb4, 0x4f, 0x03, 0xfa, 0xee, 0x07, 0xe6, 0x2b, 0xb0, 0x6c, 0x0e, 0xd0, 0x1c, + 0xa6, 0xc3, 0x4a, 0x38, 0x37, 0x17, 0xa8, 0xda, 0x9f, 0x15, 0x58, 0xce, 0x5f, 0x84, 0xb8, 0x49, + 0xd1, 0x96, 0xe2, 0x9b, 0x14, 0x6b, 0xb2, 0x0b, 0x67, 0xd0, 0x99, 0x30, 0xcf, 0x75, 0xc4, 0x68, + 0x17, 0xbf, 0xcc, 0x4f, 0x8e, 0xbe, 0x4e, 0xfd, 0x5e, 0x46, 0x3c, 0x84, 0xbe, 0x9c, 0x05, 0xe2, + 0x00, 0x70, 0xea, 0xd1, 0x11, 0x06, 0xe8, 0x89, 0xe7, 0x37, 0xff, 0x16, 0x9e, 0x5f, 0x18, 0xc1, + 0x6e, 0x6c, 0xd6, 0xc8, 0x78, 0x68, 0x3d, 0x87, 0xd5, 0xa9, 0x90, 0x4a, 0xa0, 0xf7, 0x66, 0x16, + 0x7a, 0x1b, 0xdd, 0x76, 0xc9, 0x09, 0x33, 0x66, 0xb2, 0xd0, 0xfc, 0x5b, 0x05, 0x1a, 0x99, 0xfa, + 0x2c, 0x4d, 0x63, 0x1b, 0x40, 0x2a, 0xdc, 0x67, 0x36, 0x86, 0x49, 0xac, 0x1b, 0x19, 0x0a, 0x19, + 0x96, 0x24, 0x65, 0x7b, 0xb6, 0xa4, 0x88, 0x90, 0x4a, 0x33, 0x22, 0x26, 0x0e, 0xe9, 0xda, 0x8f, + 0x90, 0x28, 0xda, 0x91, 0xef, 0x61, 0xf9, 0x80, 0xd9, 0xb8, 0x9b, 0x06, 0xb2, 0x28, 0x03, 0xd9, + 0x99, 0x3d, 0x90, 0xfb, 0x59, 0xbb, 0x46, 0xc1, 0x8d, 0xf6, 0x31, 0x34, 0x8b, 0xcf, 0x55, 0x04, + 0xc9, 0x46, 0xd4, 0x4a, 0xb2, 0x15, 0xed, 0xb4, 0x5f, 0x14, 0x20, 0xd3, 0xf7, 0x71, 0x54, 0xd2, + 0x87, 0xb7, 0xfc, 0x78, 0xf6, 0x0f, 0x1f, 0x4a, 0x86, 0x42, 0xb6, 0xa1, 0xd1, 0x47, 0x3f, 0x60, + 0x8e, 0x0c, 0x38, 0x02, 0x91, 0x8f, 0x8e, 0xbf, 0xf8, 0xbb, 0xa9, 0x82, 0x91, 0xd5, 0xd6, 0xbe, + 0x82, 0x4b, 0xc7, 0x4a, 0x67, 0xe6, 0x3c, 0x25, 0x37, 0xe7, 0x1d, 0x3b, 0x1d, 0x6a, 0x04, 0x9a, + 0x45, 0x34, 0xd2, 0x5e, 0xc0, 0xaa, 0xc8, 0xe9, 0xe6, 0x80, 0x7a, 0xc1, 0x29, 0xcd, 0x6e, 0x77, + 0xa0, 0x9e, 0xb8, 0x2c, 0xcd, 0x75, 0x0b, 0x6a, 0x93, 0xf8, 0x37, 0x54, 0x38, 0xbc, 0x25, 0x7b, + 0xad, 0x07, 0x24, 0x1b, 0x6f, 0xd4, 0x37, 0xae, 0xc2, 0x02, 0x0b, 0x70, 0x14, 0x8f, 0x4f, 0x17, + 0x8a, 0x70, 0x2f, 0xc5, 0x8d, 0x50, 0xa6, 0xfb, 0xd3, 0x02, 0xac, 0xa6, 0xa8, 0x2b, 0xfe, 0x32, + 0x13, 0xc9, 0x0e, 0x34, 0xb7, 0xa2, 0xaf, 0x17, 0xf1, 0x48, 0x4e, 0x3e, 0xc8, 0xda, 0x29, 0x7c, + 0xc7, 0x68, 0xad, 0x95, 0x33, 0xc3, 0x88, 0xb4, 0x39, 0xf2, 0x35, 0x2c, 0xe7, 0x7f, 0x26, 0x90, + 0xcb, 0x59, 0x8d, 0xd2, 0x5f, 0x2e, 0x2d, 0xed, 0x38, 0x91, 0xc4, 0xf4, 0x1d, 0xa8, 0xc5, 0xe3, + 0x76, 0x3e, 0xc6, 0xc2, 0x10, 0xde, 0x6a, 0x66, 0x99, 0x82, 0xa1, 0xcd, 0x91, 0xcf, 0x43, 0x65, + 0x31, 0x3a, 0x4e, 0x2b, 0x67, 0xe6, 0xe2, 0xd6, 0xb9, 0x92, 0x21, 0x54, 0x9b, 0x23, 0xcf, 0xe0, + 0xec, 0x96, 0x44, 0xe8, 0xa8, 0x79, 0x93, 0x0f, 0xf3, 0x4e, 0x8e, 0x98, 0x2b, 0xf3, 0x47, 0x2b, + 0xef, 0xff, 0xda, 0x1c, 0xf9, 0x55, 0x81, 0x73, 0x5b, 0x18, 0x14, 0x7b, 0x21, 0xb9, 0x56, 0xee, + 0xe4, 0x88, 0x9e, 0xd9, 0x7a, 0x3c, 0x6b, 0xcd, 0xe6, 0xcd, 0x6a, 0x73, 0x64, 0x57, 0x1e, 0x3b, + 0xad, 0x3d, 0x72, 0xa9, 0xb4, 0xc8, 0x92, 0xec, 0xb5, 0x8f, 0x62, 0xc7, 0x47, 0xfd, 0xa2, 0xf7, + 0xd7, 0xeb, 0xb6, 0xf2, 0xf7, 0xeb, 0xb6, 0xf2, 0xef, 0xeb, 0xb6, 0xf2, 0xcd, 0x8d, 0x37, 0x7c, + 0x78, 0xcb, 0x7c, 0x23, 0xa4, 0x9c, 0x99, 0x36, 0x43, 0x27, 0xd8, 0x5f, 0x94, 0x9f, 0xd9, 0x6e, + 0xfc, 0x1f, 0x00, 0x00, 0xff, 0xff, 0x1c, 0x99, 0x14, 0xda, 0x42, 0x14, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -1783,6 +1801,22 @@ func (m *ManifestRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { i -= len(m.XXX_unrecognized) copy(dAtA[i:], m.XXX_unrecognized) } + if len(m.HelmExternalValueRepoCreds) > 0 { + for iNdEx := len(m.HelmExternalValueRepoCreds) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.HelmExternalValueRepoCreds[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintRepository(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0x9a + } + } if m.NoRevisionCache { i-- if m.NoRevisionCache { @@ -2291,6 +2325,20 @@ func (m *RepoServerAppDetailsQuery) MarshalToSizedBuffer(dAtA []byte) (int, erro i -= len(m.XXX_unrecognized) copy(dAtA[i:], m.XXX_unrecognized) } + if len(m.HelmExternalValueRepoCreds) > 0 { + for iNdEx := len(m.HelmExternalValueRepoCreds) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.HelmExternalValueRepoCreds[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintRepository(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x3a + } + } if m.NoCache { i-- if m.NoCache { @@ -3013,6 +3061,12 @@ func (m *ManifestRequest) Size() (n int) { if m.NoRevisionCache { n += 3 } + if len(m.HelmExternalValueRepoCreds) > 0 { + for _, e := range m.HelmExternalValueRepoCreds { + l = e.Size() + n += 2 + l + sovRepository(uint64(l)) + } + } if m.XXX_unrecognized != nil { n += len(m.XXX_unrecognized) } @@ -3199,6 +3253,12 @@ func (m *RepoServerAppDetailsQuery) Size() (n int) { if m.NoCache { n += 2 } + if len(m.HelmExternalValueRepoCreds) > 0 { + for _, e := range m.HelmExternalValueRepoCreds { + l = e.Size() + n += 1 + l + sovRepository(uint64(l)) + } + } if m.XXX_unrecognized != nil { n += len(m.XXX_unrecognized) } @@ -3960,6 +4020,40 @@ func (m *ManifestRequest) Unmarshal(dAtA []byte) error { } } m.NoRevisionCache = bool(v != 0) + case 19: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field HelmExternalValueRepoCreds", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRepository + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthRepository + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthRepository + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.HelmExternalValueRepoCreds = append(m.HelmExternalValueRepoCreds, &v1alpha1.RepoCreds{}) + if err := m.HelmExternalValueRepoCreds[len(m.HelmExternalValueRepoCreds)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipRepository(dAtA[iNdEx:]) @@ -5105,6 +5199,40 @@ func (m *RepoServerAppDetailsQuery) Unmarshal(dAtA []byte) error { } } m.NoCache = bool(v != 0) + case 7: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field HelmExternalValueRepoCreds", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRepository + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthRepository + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthRepository + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.HelmExternalValueRepoCreds = append(m.HelmExternalValueRepoCreds, &v1alpha1.RepoCreds{}) + if err := m.HelmExternalValueRepoCreds[len(m.HelmExternalValueRepoCreds)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipRepository(dAtA[iNdEx:]) diff --git a/reposerver/repository/repository.go b/reposerver/repository/repository.go index 229e45ad2baa4..4d23f65f0c317 100644 --- a/reposerver/repository/repository.go +++ b/reposerver/repository/repository.go @@ -193,6 +193,7 @@ func (s *Service) runRepoOperation( ctx context.Context, revision string, repo *v1alpha1.Repository, + helmExternalValueCreds []*v1alpha1.RepoCreds, source *v1alpha1.ApplicationSource, verifyCommit bool, cacheFn func(cacheKey string, firstInvocation bool) (bool, error), @@ -249,6 +250,13 @@ func (s *Service) runRepoOperation( // load values files from external git repo for _, exVal := range source.Helm.ExternalValueFiles { exRepo := v1alpha1.Repository{Repo: exVal.RepoURL} + if helmExternalValueCreds != nil { + creds := getRepoCredential(helmExternalValueCreds, exVal.RepoURL) + if creds != nil { + exRepo.CopyCredentialsFrom(creds) + } + } + exGitClient, exRevision, err := s.newClientResolveRevision(&exRepo, exVal.TargetRevision, git.WithCache(s.cache, !settings.noRevisionCache && !settings.noCache)) if err != nil { return err @@ -357,7 +365,7 @@ func (s *Service) GenerateManifest(ctx context.Context, q *apiclient.ManifestReq settings := operationSettings{sem: s.parallelismLimitSemaphore, noCache: q.NoCache, noRevisionCache: q.NoRevisionCache, allowConcurrent: q.ApplicationSource.AllowsConcurrentProcessing()} - err = s.runRepoOperation(ctx, q.Revision, q.Repo, q.ApplicationSource, q.VerifySignature, cacheFn, operation, settings) + err = s.runRepoOperation(ctx, q.Revision, q.Repo, q.HelmExternalValueRepoCreds, q.ApplicationSource, q.VerifySignature, cacheFn, operation, settings) return res, err } @@ -1248,7 +1256,7 @@ func (s *Service) GetAppDetails(ctx context.Context, q *apiclient.RepoServerAppD } settings := operationSettings{allowConcurrent: q.Source.AllowsConcurrentProcessing(), noCache: q.NoCache, noRevisionCache: q.NoCache} - err := s.runRepoOperation(ctx, q.Source.TargetRevision, q.Repo, q.Source, false, cacheFn, operation, settings) + err := s.runRepoOperation(ctx, q.Source.TargetRevision, q.Repo, q.HelmExternalValueRepoCreds, q.Source, false, cacheFn, operation, settings) return res, err } diff --git a/reposerver/repository/repository.proto b/reposerver/repository/repository.proto index a8db80e5ce856..3e44818f24441 100644 --- a/reposerver/repository/repository.proto +++ b/reposerver/repository/repository.proto @@ -28,6 +28,7 @@ message ManifestRequest { bool verifySignature = 16; repeated github.com.argoproj.argo_cd.v2.pkg.apis.application.v1alpha1.RepoCreds helmRepoCreds = 17; bool noRevisionCache = 18; + repeated github.com.argoproj.argo_cd.v2.pkg.apis.application.v1alpha1.RepoCreds helmExternalValueRepoCreds = 19; } // TestRepositoryRequest is a query to test repository is valid or not and has valid access. @@ -81,6 +82,7 @@ message RepoServerAppDetailsQuery { github.com.argoproj.argo_cd.v2.pkg.apis.application.v1alpha1.KustomizeOptions kustomizeOptions = 4; string appName = 5; bool noCache = 6; + repeated github.com.argoproj.argo_cd.v2.pkg.apis.application.v1alpha1.RepoCreds helmExternalValueRepoCreds = 7; } // RepoAppDetailsResponse application details diff --git a/server/application/application.go b/server/application/application.go index 80a7f15816fc3..638e2510c1a18 100644 --- a/server/application/application.go +++ b/server/application/application.go @@ -229,6 +229,7 @@ func (s *Server) queryRepoServer(ctx context.Context, a *v1alpha1.Application, a repo *appv1.Repository, helmRepos []*appv1.Repository, helmCreds []*v1alpha1.RepoCreds, + helmExternaValueCreds []*v1alpha1.RepoCreds, kustomizeOptions *v1alpha1.KustomizeOptions, ) error) error { @@ -270,11 +271,31 @@ func (s *Server) queryRepoServer(ctx context.Context, a *v1alpha1.Application, a if err != nil { return err } + permittedHelmCredentials, err := argo.GetPermittedReposCredentials(proj, helmRepositoryCredentials) if err != nil { return err } - return action(client, repo, permittedHelmRepos, permittedHelmCredentials, kustomizeOptions) + + helmExternalValueCredentials := []*v1alpha1.RepoCreds{} + if a.Spec.Source.Helm != nil && a.Spec.Source.Helm.ExternalValueFiles != nil { + for _, helmExternalValueFile := range a.Spec.Source.Helm.ExternalValueFiles { + helmExternalValueCredential, err := s.db.GetRepositoryCredentials(ctx, helmExternalValueFile.RepoURL) + if err != nil { + return err + } + if helmExternalValueCredential != nil { + helmExternalValueCredentials = append(helmExternalValueCredentials, helmExternalValueCredential) + } + } + } + permittedHelmExternalValueCredentials, err := argo.GetPermittedReposCredentials(proj, helmExternalValueCredentials) + + if err != nil { + return err + } + + return action(client, repo, permittedHelmRepos, permittedHelmCredentials, permittedHelmExternalValueCredentials, kustomizeOptions) } // GetManifests returns application manifests @@ -289,7 +310,7 @@ func (s *Server) GetManifests(ctx context.Context, q *application.ApplicationMan var manifestInfo *apiclient.ManifestResponse err = s.queryRepoServer(ctx, a, func( - client apiclient.RepoServerServiceClient, repo *appv1.Repository, helmRepos []*appv1.Repository, helmCreds []*appv1.RepoCreds, kustomizeOptions *appv1.KustomizeOptions) error { + client apiclient.RepoServerServiceClient, repo *appv1.Repository, helmRepos []*appv1.Repository, helmCreds []*appv1.RepoCreds, helmExternalValueCreds []*appv1.RepoCreds, kustomizeOptions *appv1.KustomizeOptions) error { revision := a.Spec.Source.TargetRevision if q.Revision != "" { revision = q.Revision @@ -319,18 +340,19 @@ func (s *Server) GetManifests(ctx context.Context, q *application.ApplicationMan } manifestInfo, err = client.GenerateManifest(ctx, &apiclient.ManifestRequest{ - Repo: repo, - Revision: revision, - AppLabelKey: appInstanceLabelKey, - AppName: a.Name, - Namespace: a.Spec.Destination.Namespace, - ApplicationSource: &a.Spec.Source, - Repos: helmRepos, - Plugins: plugins, - KustomizeOptions: kustomizeOptions, - KubeVersion: serverVersion, - ApiVersions: argo.APIGroupsToVersions(apiGroups), - HelmRepoCreds: helmCreds, + Repo: repo, + Revision: revision, + AppLabelKey: appInstanceLabelKey, + AppName: a.Name, + Namespace: a.Spec.Destination.Namespace, + ApplicationSource: &a.Spec.Source, + Repos: helmRepos, + Plugins: plugins, + KustomizeOptions: kustomizeOptions, + KubeVersion: serverVersion, + ApiVersions: argo.APIGroupsToVersions(apiGroups), + HelmRepoCreds: helmCreds, + HelmExternalValueRepoCreds: helmExternalValueCreds, }) return err }) @@ -405,15 +427,17 @@ func (s *Server) Get(ctx context.Context, q *application.ApplicationQuery) (*app repo *appv1.Repository, helmRepos []*appv1.Repository, _ []*appv1.RepoCreds, + helmExternalValueCreds []*appv1.RepoCreds, kustomizeOptions *appv1.KustomizeOptions, ) error { _, err := client.GetAppDetails(ctx, &apiclient.RepoServerAppDetailsQuery{ - Repo: repo, - Source: &app.Spec.Source, - AppName: app.Name, - KustomizeOptions: kustomizeOptions, - Repos: helmRepos, - NoCache: true, + Repo: repo, + Source: &app.Spec.Source, + AppName: app.Name, + KustomizeOptions: kustomizeOptions, + Repos: helmRepos, + HelmExternalValueRepoCreds: helmExternalValueCreds, + NoCache: true, }) return err }); err != nil { From 2a7eab7c462941d39f4d832334e7108aed20aa35 Mon Sep 17 00:00:00 2001 From: Ilya Nemakov Date: Thu, 29 Jul 2021 11:46:00 +0300 Subject: [PATCH 24/25] fix extra values when chart located in git repo --- reposerver/repository/repository.go | 64 ++++++++++++++--------------- 1 file changed, 32 insertions(+), 32 deletions(-) diff --git a/reposerver/repository/repository.go b/reposerver/repository/repository.go index 4d23f65f0c317..b547a9c20cc84 100644 --- a/reposerver/repository/repository.go +++ b/reposerver/repository/repository.go @@ -233,6 +233,38 @@ func (s *Service) runRepoOperation( defer settings.sem.Release(1) } + if source.Helm != nil && source.Helm.ExternalValueFiles != nil { + // load values files from external git repo + for _, exVal := range source.Helm.ExternalValueFiles { + exRepo := v1alpha1.Repository{Repo: exVal.RepoURL} + if helmExternalValueCreds != nil { + creds := getRepoCredential(helmExternalValueCreds, exVal.RepoURL) + if creds != nil { + exRepo.CopyCredentialsFrom(creds) + } + } + + exGitClient, exRevision, err := s.newClientResolveRevision(&exRepo, exVal.TargetRevision, git.WithCache(s.cache, !settings.noRevisionCache && !settings.noCache)) + if err != nil { + return err + } + + err = DoGitCheckoutOperationForRepoOperation( + s, + exGitClient, + exRevision, + settings, + cacheFn, + nil, + verifyCommit, + "", + ) + if err != nil { + return err + } + } + } + if source.IsHelm() { if settings.noCache { err = helmClient.CleanChartCache(source.Chart, revision) @@ -246,38 +278,6 @@ func (s *Service) runRepoOperation( } defer io.Close(closer) - if source.Helm != nil && source.Helm.ExternalValueFiles != nil { - // load values files from external git repo - for _, exVal := range source.Helm.ExternalValueFiles { - exRepo := v1alpha1.Repository{Repo: exVal.RepoURL} - if helmExternalValueCreds != nil { - creds := getRepoCredential(helmExternalValueCreds, exVal.RepoURL) - if creds != nil { - exRepo.CopyCredentialsFrom(creds) - } - } - - exGitClient, exRevision, err := s.newClientResolveRevision(&exRepo, exVal.TargetRevision, git.WithCache(s.cache, !settings.noRevisionCache && !settings.noCache)) - if err != nil { - return err - } - - err = DoGitCheckoutOperationForRepoOperation( - s, - exGitClient, - exRevision, - settings, - cacheFn, - nil, - verifyCommit, - "", - ) - if err != nil { - return err - } - } - } - return operation(chartPath, revision, revision, func() (*operationContext, error) { return &operationContext{chartPath, ""}, nil }) From ca03f00325d691fa60986173f3961fb9e06cc8b5 Mon Sep 17 00:00:00 2001 From: Kai Reichart Date: Sat, 31 Jul 2021 12:09:12 +0200 Subject: [PATCH 25/25] merge master into branch Signed-off-by: Kai Reichart --- .github/workflows/ci-build.yaml | 20 +- .github/workflows/gh-pages.yaml | 9 +- .github/workflows/image.yaml | 7 +- .github/workflows/release.yaml | 40 +- .gitignore | 7 +- CHANGELOG.md | 112 +- Dockerfile | 9 +- Dockerfile.dev | 5 - Makefile | 26 +- Procfile | 2 +- README.md | 1 + SECURITY.md | 23 +- USERS.md | 9 + VERSION | 2 +- assets/swagger.json | 8 +- cmd/argocd-server/commands/argocd_server.go | 4 +- cmd/argocd/commands/account.go | 4 +- .../commands/admin/admin.go} | 16 +- .../commands => argocd/commands/admin}/app.go | 31 +- .../commands/admin}/app_test.go | 2 +- .../commands/admin}/backup.go | 2 +- .../commands/admin}/cluster.go | 273 +- cmd/argocd/commands/admin/dashboard.go | 30 + .../commands/admin/generatespec_utils.go | 108 + .../commands/admin/generatespec_utils_test.go | 58 + .../commands/admin}/project.go | 19 +- .../commands/admin}/project_allowlist.go | 2 +- .../commands/admin}/project_allowlist_test.go | 8 +- .../commands/admin}/project_test.go | 2 +- .../commands/admin}/repo.go | 29 +- .../commands/admin}/secrets_redactor_test.go | 2 +- .../commands/admin}/settings.go | 14 +- .../commands/admin}/settings_rbac.go | 10 +- .../commands/admin}/settings_rbac_test.go | 2 +- .../commands/admin}/settings_test.go | 2 +- .../admin}/testdata/rbac/argocd-rbac-cm.yaml | 0 .../commands/admin}/testdata/rbac/policy.csv | 0 .../admin}/testdata/test_clusterrole.yaml | 0 cmd/argocd/commands/app.go | 14 +- cmd/argocd/commands/cluster.go | 2 +- cmd/argocd/commands/headless/forward.go | 97 + cmd/argocd/commands/headless/headless.go | 152 + cmd/argocd/commands/login.go | 58 +- cmd/argocd/commands/project_role.go | 2 +- cmd/argocd/commands/root.go | 23 +- cmd/main.go | 19 +- cmd/util/app.go | 18 +- cmd/util/app_test.go | 18 + cmd/util/cluster.go | 11 +- cmd/util/cluster_test.go | 6 +- cmd/util/common.go | 79 - common/common.go | 2 +- controller/OWNERS | 2 + controller/appcontroller.go | 131 +- controller/appcontroller_test.go | 43 +- controller/cache/cache.go | 4 + controller/metrics/metrics.go | 4 +- docs/assets/versions.css | 7 +- docs/assets/versions.js | 14 + docs/cli_installation.md | 2 +- docs/developer-guide/ci.md | 4 +- .../release-process-and-cadence.md | 48 + docs/faq.md | 2 +- docs/getting_started.md | 14 +- docs/operator-manual/application.yaml | 2 +- docs/operator-manual/cluster-bootstrapping.md | 2 +- docs/operator-manual/disaster_recovery.md | 8 +- docs/operator-manual/health.md | 8 + docs/operator-manual/high_availability.md | 2 +- docs/operator-manual/ingress.md | 10 +- docs/operator-manual/installation.md | 83 + docs/operator-manual/rbac.md | 30 +- docs/operator-manual/secret-management.md | 2 +- docs/operator-manual/security.md | 4 +- .../argocd-application-controller.md | 5 + .../server-commands/argocd-repo-server.md | 5 + .../server-commands/argocd-server.md | 6 +- .../server-commands/argocd-util.md | 31 - .../server-commands/argocd-util_app.md | 21 - .../argocd-util_app_diff-reconcile-results.md | 18 - .../server-commands/argocd-util_apps.md | 20 - ...argocd-util_apps_diff-reconcile-results.md | 18 - .../argocd-util_apps_get-reconcile-results.md | 39 - .../server-commands/argocd-util_cluster.md | 22 - .../argocd-util_cluster_kubeconfig.md | 35 - .../server-commands/argocd-util_config.md | 22 - .../server-commands/argocd-util_config_app.md | 89 - .../argocd-util_config_cluster.md | 32 - .../argocd-util_config_proj.md | 25 - .../argocd-util_config_repo.md | 61 - .../server-commands/argocd-util_gendexcfg.md | 36 - .../server-commands/argocd-util_kubeconfig.md | 35 - .../server-commands/argocd-util_proj.md | 21 - .../argocd-util_proj_generate-allow-list.md | 36 - .../argocd-util_proj_generate-spec.md | 30 - .../server-commands/argocd-util_projects.md | 20 - ...argocd-util_projects_update-role-policy.md | 51 - .../server-commands/argocd-util_repo.md | 19 - .../argocd-util_repo_generate-spec.md | 62 - .../server-commands/argocd-util_rundex.md | 35 - .../server-commands/argocd-util_settings.md | 41 - .../argocd-util_settings_rbac.md | 45 - .../argocd-util_settings_rbac_can.md | 78 - .../argocd-util_settings_rbac_validate.md | 51 - ...argocd-util_settings_resource-overrides.md | 47 - ...util_settings_resource-overrides_health.md | 54 - ...s_resource-overrides_ignore-differences.md | 54 - ...ettings_resource-overrides_list-actions.md | 54 - ..._settings_resource-overrides_run-action.md | 54 - .../argocd-util_settings_validate.md | 59 - .../server-commands/argocd-util_version.md | 19 - docs/operator-manual/troubleshooting.md | 48 +- docs/operator-manual/upgrading/1.7-1.8.md | 6 +- docs/operator-manual/upgrading/2.0-2.1.md | 6 +- .../operator-manual/user-management/google.md | 6 +- docs/operator-manual/user-management/index.md | 58 +- .../user-management/microsoft.md | 4 +- docs/operator-manual/webhook.md | 2 +- docs/proposals/headless-argocd.md | 132 + docs/roadmap.md | 10 +- docs/user-guide/best_practices.md | 2 +- docs/user-guide/commands/argocd.md | 3 + docs/user-guide/commands/argocd_account.md | 20 +- .../commands/argocd_account_can-i.md | 19 +- .../commands/argocd_account_delete-token.md | 21 +- .../commands/argocd_account_generate-token.md | 21 +- .../commands/argocd_account_get-user-info.md | 19 +- .../user-guide/commands/argocd_account_get.md | 19 +- .../commands/argocd_account_list.md | 19 +- .../argocd_account_update-password.md | 19 +- docs/user-guide/commands/argocd_admin.md | 48 + docs/user-guide/commands/argocd_admin_app.md | 43 + ...argocd_admin_app_diff-reconcile-results.md | 40 + .../argocd_admin_app_generate-spec.md} | 42 +- ...argocd_admin_app_get-reconcile-results.md} | 29 +- .../commands/argocd_admin_cluster.md | 45 + .../argocd_admin_cluster_generate-spec.md} | 29 +- .../argocd_admin_cluster_kubeconfig.md | 56 + .../argocd_admin_cluster_namespaces.md | 58 + ...ster_namespaces_disable-namespaced-mode.md | 57 + ...uster_namespaces_enable-namespaced-mode.md | 59 + .../commands/argocd_admin_cluster_shards.md} | 34 +- .../commands/argocd_admin_cluster_stats.md} | 34 +- .../commands/argocd_admin_dashboard.md | 57 + .../commands/argocd_admin_export.md} | 29 +- .../commands/argocd_admin_import.md} | 29 +- docs/user-guide/commands/argocd_admin_proj.md | 43 + .../argocd_admin_proj_generate-allow-list.md} | 29 +- .../argocd_admin_proj_generate-spec.md | 53 + .../argocd_admin_proj_update-role-policy.md} | 33 +- docs/user-guide/commands/argocd_admin_repo.md | 41 + .../argocd_admin_repo_generate-spec.md | 84 + .../commands/argocd_admin_settings.md | 62 + .../commands/argocd_admin_settings_rbac.md | 61 + .../argocd_admin_settings_rbac_can.md | 94 + .../argocd_admin_settings_rbac_validate.md | 67 + ...rgocd_admin_settings_resource-overrides.md | 63 + ...dmin_settings_resource-overrides_health.md | 70 + ...s_resource-overrides_ignore-differences.md | 70 + ...ettings_resource-overrides_list-actions.md | 70 + ..._settings_resource-overrides_run-action.md | 70 + .../argocd_admin_settings_validate.md | 75 + docs/user-guide/commands/argocd_app.md | 20 +- .../user-guide/commands/argocd_app_actions.md | 19 +- .../commands/argocd_app_actions_list.md | 20 +- .../commands/argocd_app_actions_run.md | 20 +- docs/user-guide/commands/argocd_app_create.md | 20 +- docs/user-guide/commands/argocd_app_delete.md | 19 +- docs/user-guide/commands/argocd_app_diff.md | 19 +- docs/user-guide/commands/argocd_app_edit.md | 19 +- docs/user-guide/commands/argocd_app_get.md | 19 +- .../user-guide/commands/argocd_app_history.md | 19 +- docs/user-guide/commands/argocd_app_list.md | 19 +- docs/user-guide/commands/argocd_app_logs.md | 20 +- .../commands/argocd_app_manifests.md | 19 +- .../commands/argocd_app_patch-resource.md | 20 +- docs/user-guide/commands/argocd_app_patch.md | 19 +- .../commands/argocd_app_resources.md | 19 +- .../commands/argocd_app_rollback.md | 19 +- docs/user-guide/commands/argocd_app_set.md | 19 +- docs/user-guide/commands/argocd_app_sync.md | 19 +- .../commands/argocd_app_terminate-op.md | 19 +- docs/user-guide/commands/argocd_app_unset.md | 19 +- docs/user-guide/commands/argocd_app_wait.md | 19 +- docs/user-guide/commands/argocd_cert.md | 20 +- .../commands/argocd_cert_add-ssh.md | 19 +- .../commands/argocd_cert_add-tls.md | 19 +- docs/user-guide/commands/argocd_cert_list.md | 19 +- docs/user-guide/commands/argocd_cert_rm.md | 19 +- docs/user-guide/commands/argocd_cluster.md | 20 +- .../user-guide/commands/argocd_cluster_add.md | 21 +- .../user-guide/commands/argocd_cluster_get.md | 19 +- .../commands/argocd_cluster_list.md | 19 +- docs/user-guide/commands/argocd_cluster_rm.md | 19 +- .../commands/argocd_cluster_rotate-auth.md | 19 +- docs/user-guide/commands/argocd_completion.md | 2 + docs/user-guide/commands/argocd_context.md | 2 + docs/user-guide/commands/argocd_gpg.md | 20 +- docs/user-guide/commands/argocd_gpg_add.md | 19 +- docs/user-guide/commands/argocd_gpg_get.md | 19 +- docs/user-guide/commands/argocd_gpg_list.md | 19 +- docs/user-guide/commands/argocd_gpg_rm.md | 19 +- docs/user-guide/commands/argocd_login.md | 15 + docs/user-guide/commands/argocd_logout.md | 2 + docs/user-guide/commands/argocd_proj.md | 20 +- .../commands/argocd_proj_add-destination.md | 19 +- .../argocd_proj_add-orphaned-ignore.md | 19 +- .../commands/argocd_proj_add-signature-key.md | 19 +- .../commands/argocd_proj_add-source.md | 19 +- .../argocd_proj_allow-cluster-resource.md | 19 +- .../argocd_proj_allow-namespace-resource.md | 19 +- .../user-guide/commands/argocd_proj_create.md | 19 +- .../user-guide/commands/argocd_proj_delete.md | 19 +- .../argocd_proj_deny-cluster-resource.md | 19 +- .../argocd_proj_deny-namespace-resource.md | 19 +- docs/user-guide/commands/argocd_proj_edit.md | 19 +- docs/user-guide/commands/argocd_proj_get.md | 19 +- docs/user-guide/commands/argocd_proj_list.md | 19 +- .../argocd_proj_remove-destination.md | 19 +- .../argocd_proj_remove-orphaned-ignore.md | 19 +- .../argocd_proj_remove-signature-key.md | 19 +- .../commands/argocd_proj_remove-source.md | 19 +- docs/user-guide/commands/argocd_proj_role.md | 19 +- .../commands/argocd_proj_role_add-group.md | 19 +- .../commands/argocd_proj_role_add-policy.md | 19 +- .../commands/argocd_proj_role_create-token.md | 21 +- .../commands/argocd_proj_role_create.md | 19 +- .../commands/argocd_proj_role_delete-token.md | 19 +- .../commands/argocd_proj_role_delete.md | 19 +- .../commands/argocd_proj_role_get.md | 19 +- .../commands/argocd_proj_role_list-tokens.md | 19 +- .../commands/argocd_proj_role_list.md | 19 +- .../commands/argocd_proj_role_remove-group.md | 19 +- .../argocd_proj_role_remove-policy.md | 19 +- docs/user-guide/commands/argocd_proj_set.md | 19 +- .../commands/argocd_proj_windows.md | 19 +- .../commands/argocd_proj_windows_add.md | 19 +- .../commands/argocd_proj_windows_delete.md | 19 +- ...argocd_proj_windows_disable-manual-sync.md | 19 +- .../argocd_proj_windows_enable-manual-sync.md | 19 +- .../commands/argocd_proj_windows_list.md | 19 +- .../commands/argocd_proj_windows_update.md | 19 +- docs/user-guide/commands/argocd_relogin.md | 2 + docs/user-guide/commands/argocd_repo.md | 20 +- docs/user-guide/commands/argocd_repo_add.md | 21 +- docs/user-guide/commands/argocd_repo_get.md | 19 +- docs/user-guide/commands/argocd_repo_list.md | 19 +- docs/user-guide/commands/argocd_repo_rm.md | 19 +- docs/user-guide/commands/argocd_repocreds.md | 20 +- .../commands/argocd_repocreds_add.md | 21 +- .../commands/argocd_repocreds_list.md | 19 +- .../commands/argocd_repocreds_rm.md | 19 +- docs/user-guide/commands/argocd_version.md | 26 +- docs/user-guide/gpg-verification.md | 2 +- docs/user-guide/kustomize.md | 8 +- docs/user-guide/parameters.md | 2 +- docs/user-guide/private-repositories.md | 4 +- go.mod | 13 +- go.sum | 97 +- hack/update-manifests.sh | 2 + .../argocd-repo-server-network-policy.yaml | 3 + .../base/server/argocd-server-deployment.yaml | 5 +- manifests/core-install.yaml | 3292 ++++++++++++ manifests/core-install/kustomization.yaml | 10 + manifests/crds/appproject-crd.yaml | 2 +- .../overlays/argocd-server-deployment.yaml | 2 - manifests/ha/install.yaml | 7 +- manifests/ha/namespace-install.yaml | 5 +- manifests/install.yaml | 7 +- manifests/namespace-install.yaml | 5 +- mkdocs.yml | 3 +- pkg/apiclient/apiclient.go | 24 +- pkg/apiclient/repository/repository.pb.go | 4 +- .../application/v1alpha1/app_project_types.go | 2 +- pkg/apis/application/v1alpha1/generated.pb.go | 866 +-- pkg/apis/application/v1alpha1/generated.proto | 5 +- .../application/v1alpha1/openapi_generated.go | 9 +- pkg/apis/application/v1alpha1/types.go | 18 +- reposerver/OWNERS | 3 + reposerver/apiclient/repository.pb.go | 4 +- reposerver/cache/cache.go | 4 +- reposerver/repository/repository.go | 12 +- reposerver/repository/repository.proto | 2 +- .../argoproj.io/Rollout/health.lua | 23 +- .../argoproj.io/Rollout/health_test.yaml | 16 + .../testdata/degraded_statusPhaseMessage.yaml | 50 + ...thy_legacy_v1.0_newWorkloadGeneration.yaml | 58 + .../healthy_newWorkloadGeneration.yaml | 60 + .../progressing_newWorkloadGeneration.yaml | 60 + .../minio.min.io/Tenant/health.lua | 46 + .../minio.min.io/Tenant/health_test.yaml | 37 + .../testdata/another_tenant_exists.yaml | 13 + .../Tenant/testdata/initialized.yaml | 13 + .../Tenant/testdata/no_status.yaml | 12 + .../Tenant/testdata/out_of_control.yaml | 13 + .../Tenant/testdata/provisioning.yaml | 13 + .../testdata/unknown_status_message.yaml | 13 + .../Tenant/testdata/updating.yaml | 13 + .../Tenant/testdata/versions_mismatch.yaml | 13 + .../minio.min.io/Tenant/testdata/waiting.yaml | 13 + .../TridentBackendConfig/health.lua | 16 + .../TridentBackendConfig/health_test.yaml | 13 + .../testdata/degraded.yaml | 95 + .../testdata/healthy.yaml | 94 + .../testdata/progressing.yaml | 91 + .../TridentOrchestrator/health.lua | 16 + .../TridentOrchestrator/health_test.yaml | 13 + .../testdata/degraded.yaml | 91 + .../TridentOrchestrator/testdata/healthy.yaml | 91 + .../testdata/progressing.yaml | 91 + server/application/application.go | 4 +- server/application/application_test.go | 57 +- server/cluster/cluster.go | 3 + server/metrics/metrics.go | 4 +- server/rbacpolicy/rbacpolicy.go | 24 +- server/repository/repository.proto | 2 +- server/server.go | 150 +- server/server_test.go | 34 +- test/container/Dockerfile | 4 +- test/container/Procfile | 2 +- test/e2e/app_management_test.go | 2 +- test/e2e/cluster_test.go | 4 + test/e2e/fixture/fixture.go | 2 +- .../always-outofsync/always-outofsync.yaml | 2 +- test/remote/Dockerfile | 4 +- tools/cmd-docs/main.go | 5 - ui-test/.env | 40 + ui-test/.gitignore | 6 + ui-test/.prettierrc | 9 + ui-test/package.json | 32 + ui-test/src/Configuration.ts | 15 + ui-test/src/Constants.ts | 4 + ui-test/src/UiTestUtilities.ts | 134 + .../application-create-panel.ts | 205 + .../applications-list/applications-list.ts | 199 + .../applications-sync-panel.ts | 35 + ui-test/src/base.ts | 9 + ui-test/src/navigation.ts | 93 + ui-test/src/popup/popup-manager.ts | 35 + ui-test/src/test001.ts | 55 + ui-test/src/test002.ts | 27 + ui-test/tsconfig.json | 74 + ui-test/tslint.json | 17 + ui-test/yarn.lock | 1529 ++++++ ui/.gitignore | 3 +- ui/.prettierrc | 3 +- ui/OWNERS | 3 + ui/dist/app/gitkeep | 0 ui/embed.go | 7 + ui/package.json | 15 +- .../revision-metadata-rows.tsx | 2 +- .../application-details.scss | 14 + .../application-details.tsx | 179 +- .../application-resource-filter.tsx | 118 + .../application-pod-view/pod-view.scss | 2 +- .../application-pod-view/pod-view.tsx | 15 +- .../application-resource-tree.tsx | 6 +- .../revision-metadata-panel.tsx | 2 +- .../application-sync-panel.tsx | 22 +- .../components/application-urls.tsx | 4 +- .../applications-list/applications-filter.tsx | 417 +- .../applications-list/applications-list.scss | 95 +- .../applications-list/applications-list.tsx | 42 +- .../applications-status-bar.scss | 32 + .../applications-status-bar.tsx | 94 + .../applications-list/flex-top-bar.scss | 2 +- .../components/filter/filter.scss | 112 + .../applications/components/filter/filter.tsx | 142 + ui/src/app/applications/components/utils.tsx | 24 +- .../components/events-list/events-list.tsx | 20 +- .../shared/components/paginate/paginate.scss | 4 + .../shared/components/paginate/paginate.tsx | 5 +- ui/src/app/shared/components/urls.test.ts | 4 +- ui/src/app/shared/components/urls.ts | 12 +- .../shared/services/applications-service.ts | 2 +- .../services/view-preferences-service.ts | 8 +- ui/src/app/webpack.config.js | 2 +- ui/tslint.json | 3 +- ui/yarn.lock | 4698 +++++++---------- util/argo/argo.go | 14 +- util/argo/argo_test.go | 86 + util/cache/cache.go | 44 +- util/cli/cli.go | 6 +- util/db/OWNERS | 2 + util/db/cluster.go | 4 + util/git/OWNERS | 3 + util/git/git_test.go | 2 +- util/gpg/OWNERS | 2 + util/helm/OWNERS | 3 + util/helm/client_test.go | 10 + util/helm/cmd.go | 3 + util/jwt/jwt.go | 3 + util/kube/portforwarder.go | 39 +- util/localconfig/localconfig.go | 2 + util/lua/lua.go | 4 +- util/lua/oslib_safe.go | 4 +- util/oidc/oidc.go | 2 +- util/rbac/rbac.go | 13 + util/settings/settings.go | 36 +- util/settings/settings_test.go | 53 + util/webhook/webhook.go | 44 +- util/webhook/webhook_test.go | 12 + 402 files changed, 15937 insertions(+), 5854 deletions(-) rename cmd/{argocd-util/commands/argocd_util.go => argocd/commands/admin/admin.go} (95%) rename cmd/{argocd-util/commands => argocd/commands/admin}/app.go (85%) rename cmd/{argocd-util/commands => argocd/commands/admin}/app_test.go (99%) rename cmd/{argocd-util/commands => argocd/commands/admin}/backup.go (99%) rename cmd/{argocd-util/commands => argocd/commands/admin}/cluster.go (58%) create mode 100644 cmd/argocd/commands/admin/dashboard.go create mode 100644 cmd/argocd/commands/admin/generatespec_utils.go create mode 100644 cmd/argocd/commands/admin/generatespec_utils_test.go rename cmd/{argocd-util/commands => argocd/commands/admin}/project.go (90%) rename cmd/{argocd-util/commands => argocd/commands/admin}/project_allowlist.go (99%) rename cmd/{argocd-util/commands => argocd/commands/admin}/project_allowlist_test.go (84%) rename cmd/{argocd-util/commands => argocd/commands/admin}/project_test.go (99%) rename cmd/{argocd-util/commands => argocd/commands/admin}/repo.go (80%) rename cmd/{argocd-util/commands => argocd/commands/admin}/secrets_redactor_test.go (99%) rename cmd/{argocd-util/commands => argocd/commands/admin}/settings.go (96%) rename cmd/{argocd-util/commands => argocd/commands/admin}/settings_rbac.go (96%) rename cmd/{argocd-util/commands => argocd/commands/admin}/settings_rbac_test.go (99%) rename cmd/{argocd-util/commands => argocd/commands/admin}/settings_test.go (99%) rename cmd/{argocd-util/commands => argocd/commands/admin}/testdata/rbac/argocd-rbac-cm.yaml (100%) rename cmd/{argocd-util/commands => argocd/commands/admin}/testdata/rbac/policy.csv (100%) rename cmd/{argocd-util/commands => argocd/commands/admin}/testdata/test_clusterrole.yaml (100%) create mode 100644 cmd/argocd/commands/headless/forward.go create mode 100644 cmd/argocd/commands/headless/headless.go create mode 100644 controller/OWNERS create mode 100644 docs/developer-guide/release-process-and-cadence.md create mode 100644 docs/operator-manual/installation.md delete mode 100644 docs/operator-manual/server-commands/argocd-util.md delete mode 100644 docs/operator-manual/server-commands/argocd-util_app.md delete mode 100644 docs/operator-manual/server-commands/argocd-util_app_diff-reconcile-results.md delete mode 100644 docs/operator-manual/server-commands/argocd-util_apps.md delete mode 100644 docs/operator-manual/server-commands/argocd-util_apps_diff-reconcile-results.md delete mode 100644 docs/operator-manual/server-commands/argocd-util_apps_get-reconcile-results.md delete mode 100644 docs/operator-manual/server-commands/argocd-util_cluster.md delete mode 100644 docs/operator-manual/server-commands/argocd-util_cluster_kubeconfig.md delete mode 100644 docs/operator-manual/server-commands/argocd-util_config.md delete mode 100644 docs/operator-manual/server-commands/argocd-util_config_app.md delete mode 100644 docs/operator-manual/server-commands/argocd-util_config_cluster.md delete mode 100644 docs/operator-manual/server-commands/argocd-util_config_proj.md delete mode 100644 docs/operator-manual/server-commands/argocd-util_config_repo.md delete mode 100644 docs/operator-manual/server-commands/argocd-util_gendexcfg.md delete mode 100644 docs/operator-manual/server-commands/argocd-util_kubeconfig.md delete mode 100644 docs/operator-manual/server-commands/argocd-util_proj.md delete mode 100644 docs/operator-manual/server-commands/argocd-util_proj_generate-allow-list.md delete mode 100644 docs/operator-manual/server-commands/argocd-util_proj_generate-spec.md delete mode 100644 docs/operator-manual/server-commands/argocd-util_projects.md delete mode 100644 docs/operator-manual/server-commands/argocd-util_projects_update-role-policy.md delete mode 100644 docs/operator-manual/server-commands/argocd-util_repo.md delete mode 100644 docs/operator-manual/server-commands/argocd-util_repo_generate-spec.md delete mode 100644 docs/operator-manual/server-commands/argocd-util_rundex.md delete mode 100644 docs/operator-manual/server-commands/argocd-util_settings.md delete mode 100644 docs/operator-manual/server-commands/argocd-util_settings_rbac.md delete mode 100644 docs/operator-manual/server-commands/argocd-util_settings_rbac_can.md delete mode 100644 docs/operator-manual/server-commands/argocd-util_settings_rbac_validate.md delete mode 100644 docs/operator-manual/server-commands/argocd-util_settings_resource-overrides.md delete mode 100644 docs/operator-manual/server-commands/argocd-util_settings_resource-overrides_health.md delete mode 100644 docs/operator-manual/server-commands/argocd-util_settings_resource-overrides_ignore-differences.md delete mode 100644 docs/operator-manual/server-commands/argocd-util_settings_resource-overrides_list-actions.md delete mode 100644 docs/operator-manual/server-commands/argocd-util_settings_resource-overrides_run-action.md delete mode 100644 docs/operator-manual/server-commands/argocd-util_settings_validate.md delete mode 100644 docs/operator-manual/server-commands/argocd-util_version.md create mode 100644 docs/proposals/headless-argocd.md create mode 100644 docs/user-guide/commands/argocd_admin.md create mode 100644 docs/user-guide/commands/argocd_admin_app.md create mode 100644 docs/user-guide/commands/argocd_admin_app_diff-reconcile-results.md rename docs/{operator-manual/server-commands/argocd-util_app_generate-spec.md => user-guide/commands/argocd_admin_app_generate-spec.md} (62%) rename docs/{operator-manual/server-commands/argocd-util_app_get-reconcile-results.md => user-guide/commands/argocd_admin_app_get-reconcile-results.md} (53%) create mode 100644 docs/user-guide/commands/argocd_admin_cluster.md rename docs/{operator-manual/server-commands/argocd-util_cluster_generate-spec.md => user-guide/commands/argocd_admin_cluster_generate-spec.md} (52%) create mode 100644 docs/user-guide/commands/argocd_admin_cluster_kubeconfig.md create mode 100644 docs/user-guide/commands/argocd_admin_cluster_namespaces.md create mode 100644 docs/user-guide/commands/argocd_admin_cluster_namespaces_disable-namespaced-mode.md create mode 100644 docs/user-guide/commands/argocd_admin_cluster_namespaces_enable-namespaced-mode.md rename docs/{operator-manual/server-commands/argocd-util_cluster_shards.md => user-guide/commands/argocd_admin_cluster_shards.md} (54%) rename docs/{operator-manual/server-commands/argocd-util_cluster_stats.md => user-guide/commands/argocd_admin_cluster_stats.md} (54%) create mode 100644 docs/user-guide/commands/argocd_admin_dashboard.md rename docs/{operator-manual/server-commands/argocd-util_export.md => user-guide/commands/argocd_admin_export.md} (50%) rename docs/{operator-manual/server-commands/argocd-util_import.md => user-guide/commands/argocd_admin_import.md} (52%) create mode 100644 docs/user-guide/commands/argocd_admin_proj.md rename docs/{operator-manual/server-commands/argocd-util_projects_generate-allow-list.md => user-guide/commands/argocd_admin_proj_generate-allow-list.md} (50%) create mode 100644 docs/user-guide/commands/argocd_admin_proj_generate-spec.md rename docs/{operator-manual/server-commands/argocd-util_proj_update-role-policy.md => user-guide/commands/argocd_admin_proj_update-role-policy.md} (54%) create mode 100644 docs/user-guide/commands/argocd_admin_repo.md create mode 100644 docs/user-guide/commands/argocd_admin_repo_generate-spec.md create mode 100644 docs/user-guide/commands/argocd_admin_settings.md create mode 100644 docs/user-guide/commands/argocd_admin_settings_rbac.md create mode 100644 docs/user-guide/commands/argocd_admin_settings_rbac_can.md create mode 100644 docs/user-guide/commands/argocd_admin_settings_rbac_validate.md create mode 100644 docs/user-guide/commands/argocd_admin_settings_resource-overrides.md create mode 100644 docs/user-guide/commands/argocd_admin_settings_resource-overrides_health.md create mode 100644 docs/user-guide/commands/argocd_admin_settings_resource-overrides_ignore-differences.md create mode 100644 docs/user-guide/commands/argocd_admin_settings_resource-overrides_list-actions.md create mode 100644 docs/user-guide/commands/argocd_admin_settings_resource-overrides_run-action.md create mode 100644 docs/user-guide/commands/argocd_admin_settings_validate.md create mode 100644 manifests/core-install.yaml create mode 100644 manifests/core-install/kustomization.yaml create mode 100644 reposerver/OWNERS create mode 100644 resource_customizations/argoproj.io/Rollout/testdata/degraded_statusPhaseMessage.yaml create mode 100644 resource_customizations/argoproj.io/Rollout/testdata/healthy_legacy_v1.0_newWorkloadGeneration.yaml create mode 100644 resource_customizations/argoproj.io/Rollout/testdata/healthy_newWorkloadGeneration.yaml create mode 100644 resource_customizations/argoproj.io/Rollout/testdata/progressing_newWorkloadGeneration.yaml create mode 100644 resource_customizations/minio.min.io/Tenant/health.lua create mode 100644 resource_customizations/minio.min.io/Tenant/health_test.yaml create mode 100644 resource_customizations/minio.min.io/Tenant/testdata/another_tenant_exists.yaml create mode 100644 resource_customizations/minio.min.io/Tenant/testdata/initialized.yaml create mode 100644 resource_customizations/minio.min.io/Tenant/testdata/no_status.yaml create mode 100644 resource_customizations/minio.min.io/Tenant/testdata/out_of_control.yaml create mode 100644 resource_customizations/minio.min.io/Tenant/testdata/provisioning.yaml create mode 100644 resource_customizations/minio.min.io/Tenant/testdata/unknown_status_message.yaml create mode 100644 resource_customizations/minio.min.io/Tenant/testdata/updating.yaml create mode 100644 resource_customizations/minio.min.io/Tenant/testdata/versions_mismatch.yaml create mode 100644 resource_customizations/minio.min.io/Tenant/testdata/waiting.yaml create mode 100644 resource_customizations/trident.netapp.io/TridentBackendConfig/health.lua create mode 100644 resource_customizations/trident.netapp.io/TridentBackendConfig/health_test.yaml create mode 100644 resource_customizations/trident.netapp.io/TridentBackendConfig/testdata/degraded.yaml create mode 100644 resource_customizations/trident.netapp.io/TridentBackendConfig/testdata/healthy.yaml create mode 100644 resource_customizations/trident.netapp.io/TridentBackendConfig/testdata/progressing.yaml create mode 100644 resource_customizations/trident.netapp.io/TridentOrchestrator/health.lua create mode 100644 resource_customizations/trident.netapp.io/TridentOrchestrator/health_test.yaml create mode 100644 resource_customizations/trident.netapp.io/TridentOrchestrator/testdata/degraded.yaml create mode 100644 resource_customizations/trident.netapp.io/TridentOrchestrator/testdata/healthy.yaml create mode 100644 resource_customizations/trident.netapp.io/TridentOrchestrator/testdata/progressing.yaml create mode 100644 ui-test/.env create mode 100644 ui-test/.gitignore create mode 100644 ui-test/.prettierrc create mode 100644 ui-test/package.json create mode 100644 ui-test/src/Configuration.ts create mode 100644 ui-test/src/Constants.ts create mode 100644 ui-test/src/UiTestUtilities.ts create mode 100644 ui-test/src/application-create-panel/application-create-panel.ts create mode 100644 ui-test/src/applications-list/applications-list.ts create mode 100644 ui-test/src/applications-sync-panel/applications-sync-panel.ts create mode 100644 ui-test/src/base.ts create mode 100644 ui-test/src/navigation.ts create mode 100644 ui-test/src/popup/popup-manager.ts create mode 100644 ui-test/src/test001.ts create mode 100644 ui-test/src/test002.ts create mode 100644 ui-test/tsconfig.json create mode 100644 ui-test/tslint.json create mode 100644 ui-test/yarn.lock create mode 100644 ui/OWNERS create mode 100644 ui/dist/app/gitkeep create mode 100644 ui/embed.go create mode 100644 ui/src/app/applications/components/application-details/application-resource-filter.tsx create mode 100644 ui/src/app/applications/components/applications-list/applications-status-bar.scss create mode 100644 ui/src/app/applications/components/applications-list/applications-status-bar.tsx create mode 100644 ui/src/app/applications/components/filter/filter.scss create mode 100644 ui/src/app/applications/components/filter/filter.tsx create mode 100644 util/db/OWNERS create mode 100644 util/git/OWNERS create mode 100644 util/gpg/OWNERS create mode 100644 util/helm/OWNERS diff --git a/.github/workflows/ci-build.yaml b/.github/workflows/ci-build.yaml index 512421364774b..6a9745c5891db 100644 --- a/.github/workflows/ci-build.yaml +++ b/.github/workflows/ci-build.yaml @@ -10,6 +10,10 @@ on: branches: - 'master' +env: + # Golang version to use across CI steps + GOLANG_VERSION: '1.16.5' + jobs: build-docker: name: Build Docker image @@ -30,7 +34,7 @@ jobs: - name: Setup Golang uses: actions/setup-go@v1 with: - go-version: '1.16.2' + go-version: ${{ env.GOLANG_VERSION }} - name: Download all Go modules run: | go mod download @@ -48,7 +52,7 @@ jobs: - name: Setup Golang uses: actions/setup-go@v1 with: - go-version: '1.16.2' + go-version: ${{ env.GOLANG_VERSION }} - name: Restore go build cache uses: actions/cache@v1 with: @@ -70,7 +74,7 @@ jobs: uses: golangci/golangci-lint-action@v2 with: version: v1.38.0 - args: --timeout 5m --exclude SA5011 + args: --timeout 10m --exclude SA5011 test-go: name: Run unit tests for Go packages @@ -87,7 +91,7 @@ jobs: - name: Setup Golang uses: actions/setup-go@v1 with: - go-version: '1.16.2' + go-version: ${{ env.GOLANG_VERSION }} - name: Install required packages run: | sudo apt-get install git -y @@ -147,7 +151,7 @@ jobs: - name: Setup Golang uses: actions/setup-go@v1 with: - go-version: '1.16.2' + go-version: ${{ env.GOLANG_VERSION }} - name: Install required packages run: | sudo apt-get install git -y @@ -196,7 +200,7 @@ jobs: - name: Setup Golang uses: actions/setup-go@v1 with: - go-version: '1.16.2' + go-version: ${{ env.GOLANG_VERSION }} - name: Create symlink in GOPATH run: | mkdir -p ~/go/src/github.com/argoproj @@ -336,7 +340,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - k3s-version: [v1.20.2, v1.19.2, v1.18.9, v1.17.11, v1.16.15] + k3s-version: [v1.21.2, v1.20.2, v1.19.2, v1.18.9, v1.17.11] needs: - build-go env: @@ -355,7 +359,7 @@ jobs: - name: Setup Golang uses: actions/setup-go@v1 with: - go-version: '1.16.2' + go-version: ${{ env.GOLANG_VERSION }} - name: GH actions workaround - Kill XSP4 process run: | sudo pkill mono || true diff --git a/.github/workflows/gh-pages.yaml b/.github/workflows/gh-pages.yaml index 41d775ab6a0ce..bc4357d8257e1 100644 --- a/.github/workflows/gh-pages.yaml +++ b/.github/workflows/gh-pages.yaml @@ -20,11 +20,4 @@ jobs: - name: build run: | pip install -r docs/requirements.txt - mkdocs build - - name: deploy - if: ${{ github.event_name == 'push' }} - uses: peaceiris/actions-gh-pages@v2.5.0 - env: - PERSONAL_TOKEN: ${{ secrets.PERSONAL_TOKEN }} - PUBLISH_BRANCH: gh-pages - PUBLISH_DIR: ./site \ No newline at end of file + mkdocs build \ No newline at end of file diff --git a/.github/workflows/image.yaml b/.github/workflows/image.yaml index 4ec272fcebf63..076550ac6f4a8 100644 --- a/.github/workflows/image.yaml +++ b/.github/workflows/image.yaml @@ -5,6 +5,9 @@ on: branches: - master +env: + GOLANG_VERSION: '1.16.5' + jobs: publish: runs-on: ubuntu-latest @@ -13,7 +16,7 @@ jobs: steps: - uses: actions/setup-go@v1 with: - go-version: '1.16.4' + go-version: ${{ env.GOLANG_VERSION }} - uses: actions/checkout@master with: path: src/github.com/argoproj/argo-cd @@ -53,4 +56,4 @@ jobs: git config --global user.name 'CI' git diff --exit-code && echo 'Already deployed' || (git commit -am 'Upgrade argocd to ${{ steps.image.outputs.tag }}' && git push) working-directory: argoproj-deployments/argocd - # TODO: clean up old images once github supports it: https://github.community/t5/How-to-use-Git-and-GitHub/Deleting-images-from-Github-Package-Registry/m-p/41202/thread-id/9811 + # TODO: clean up old images once github supports it: https://github.community/t5/How-to-use-Git-and-GitHub/Deleting-images-from-GitHub-Package-Registry/m-p/41202/thread-id/9811 diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index 42a88b65e6233..e3a9891a39012 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -10,6 +10,10 @@ on: - '!release-v1.1*' - '!release-v1.0*' - '!release-v0*' + +env: + GOLANG_VERSION: '1.16.5' + jobs: prepare-release: name: Perform automatic release on trigger ${{ github.ref }} @@ -139,7 +143,7 @@ jobs: - name: Setup Golang uses: actions/setup-go@v1 with: - go-version: '1.16.4' + go-version: ${{ env.GOLANG_VERSION }} - name: Setup Git author information run: | @@ -262,40 +266,6 @@ jobs: asset_content_type: application/octet-stream if: ${{ env.DRY_RUN != 'true' }} - # include argocd-util as part of release artifacts (argoproj/argo-cd#5174) - - name: Upload argocd-util-linux-amd64 binary to release assets - uses: actions/upload-release-asset@v1 - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - with: - upload_url: ${{ steps.create_release.outputs.upload_url }} - asset_path: ./dist/argocd-linux-amd64 - asset_name: argocd-util-linux-amd64 - asset_content_type: application/octet-stream - if: ${{ env.DRY_RUN != 'true' }} - - - name: Upload argocd-util-darwin-amd64 binary to release assets - uses: actions/upload-release-asset@v1 - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - with: - upload_url: ${{ steps.create_release.outputs.upload_url }} - asset_path: ./dist/argocd-darwin-amd64 - asset_name: argocd-util-darwin-amd64 - asset_content_type: application/octet-stream - if: ${{ env.DRY_RUN != 'true' }} - - - name: Upload argocd-util-windows-amd64 binary to release assets - uses: actions/upload-release-asset@v1 - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - with: - upload_url: ${{ steps.create_release.outputs.upload_url }} - asset_path: ./dist/argocd-windows-amd64.exe - asset_name: argocd-util-windows-amd64.exe - asset_content_type: application/octet-stream - if: ${{ env.DRY_RUN != 'true' }} - - name: Update homebrew formula env: HOMEBREW_TOKEN: ${{ secrets.RELEASE_HOMEBREW_TOKEN }} diff --git a/.gitignore b/.gitignore index aed35e25f6d1e..b639ffa2c9c86 100644 --- a/.gitignore +++ b/.gitignore @@ -2,7 +2,9 @@ .idea/ .DS_Store vendor/ -dist/ +dist/* +ui/dist/app/* +!ui/dist/app/gitkeep site/ *.iml # delve debug binaries @@ -19,5 +21,4 @@ node_modules/ cmd/argocd/argocd cmd/argocd-application-controller/argocd-application-controller cmd/argocd-repo-server/argocd-repo-server -cmd/argocd-server/argocd-server -cmd/argocd-util/argocd-util \ No newline at end of file +cmd/argocd-server/argocd-server \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index be4ab11294851..df281a322d2d5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,91 @@ # Changelog +## v2.1.0 (Unreleased) + +> [Upgrade instructions](./docs/operator-manual/upgrading/2.0-2.1.md) + +### Argo CD Core + +Argo CD Core - lightweight Argo CD distribution that packages only core GitOps features and relies +on Kubernetes API/RBAC to power UI and CLI. + +### Core Features + +* The synchronization process became much much faster and requires significantly less memory. +* An additional caching that ensures that each repository's target revisions are queried only once per + reconciliation cycle. This dramatically reduces the number of Git requests. +* Improved Diffing Customizations: use JQ path expressions to exclude required fields from the diffing. +* Health assessment support for new CRDs: introduced health assessment of CRDs from trident.netapp.io, + elasticsearch.k8s.elastic.co, cluster.x-k8s.io, and minio.min.io API groups. + +### Improved Settings + +A set of changes had been implemented to simplify configuring Argo CD. + +* Simplified Repository Registration: you no longer need to modify the argocd-cm ConfigMap to register a + new Git or Helm repository. +* Enhanced Resource Customizations: the resource.customizations key has been deprecated in favor of + a separate ConfigMap key per resource. +* Reference secret values from any Kubernetes secret: starting v2.1 you can use sensitive data stored in + any Kubernetes secret to configure Argo CD. +* Simplify parametrization of Argo CD server processes: an additional optional ConfigMap argocd-cmd-params-cm + has been introduced. + +### Refreshed User Interface + +* Enhanced and more consistent filters on Applications List and Applications Details pages. +* Status bar on the Application List page. +* The redesigned search box on the Application List page and more. + +### The argocd-util CLI deprecation + +The argocd CLI and now available under argocd admin subcommand. + +## v2.0.5 (2021-07-22) + +* fix: allow argocd-notification ingress to repo-server (#6746) +* fix: argocd-server crashes due to nil pointer dereference (#6757) +* fix: WebUI failure when loading pod view 't.parentRefs is undefined' (#6490) (#6535) +* fix: prevent 'cannot read property "filter" of undefined' during nodes filtering (#6453) +* fix: download Pod Logs button not honouring argocd-server rootpath (#6548) (#6627) +* fix: Version warning banner in docs (#6682) +* fix: upgrade gitops engine to fix workflow health check + +## v2.0.4 (2021-06-22) + +* fix: typo in networkPolicy definition in manifests (#6532) +* fix: Update redis to 6.2.4 (#6475) +* fix: allows access to dex metrics from any pod (#6420) +* fix: add client side retry to prevent 'transport is closing' errors (#6402) +* fix: Update documentation Argocd app CRD health with app of apps (#6281) +* fix(ui): Crash on application pod view (#6384) +* chore: pin mkdocs version to fix docs build (#6421) +* chore: regenerate manifests using codegen (#6422) +* refactor: use RLock and RUnlock for project to improve performance (#6225) +* chore: Update Golang to v1.16.4 (#6358) + +## v2.0.3 (2021-05-27) + +### Bug Fixes + +* fix: add missing --container flag to 'argocd app logs' command (#6320) +* fix: grpc web proxy must ensure to read full header (#6319) +* fix: controller should refresh app before running sync operation (#6294) + +## v2.0.2 (2021-05-20) + +### Bug Fixes + +* fix: enable access to metrics port in embedded network policies (#6277) +* fix: display log streaming error in logs viewer (#6100) (#6273) +* fix: Don't count errored or completed neighbor pods toward resource consumption (#6259) +* fix: Enable kex algo diffie-hellman-group-exchange-sha256 for go-git ssh (#6256) +* fix: copy github app key from repocreds (#6140, #6197) +* fix(ui): UI crashes after reinstalling ArgoCD (#6218) +* fix: add network policies to restrict traffic flow between argocd components (#6156) +* fix: Revert "feat: Add health checks for kubernetes-external-secrets (#5435)" +* chore: Allow ingress traffic to argocd-server by default (#6179) + ## v2.0.1 (2021-04-15) ### Bug Fixes @@ -206,7 +292,7 @@ In addition to new features and enhancements, we’ve fixed more than 50 bugs an ## v1.7.5 (2020-09-15) - fix: app create with -f should not ignore other options (#4322) -- fix: limit concurrent list requests accross all clusters (#4328) +- fix: limit concurrent list requests across all clusters (#4328) - fix: fix possible deadlock in /v1/api/stream/applications and /v1/api/application APIs (#4315) - fix: WatchResourceTree does not enforce RBAC (#4311) - fix: app refresh API should use app resource version (#4303) @@ -340,7 +426,7 @@ use cases, such as bootstrapping a Kubernetes cluster, or decentralized manageme #### Other -- refactoring: Gitops engine (#3066) +- refactoring: GitOps engine (#3066) ## v1.5.8 (2020-06-16) @@ -403,7 +489,7 @@ customizations, custom resource health checks, and more. ### Other * New Project and Application CRD settings ([#2900](https://github.com/argoproj/argo-cd/issues/2900), [#2873](https://github.com/argoproj/argo-cd/issues/2873)) that allows customizing Argo CD behavior. -* Upgraded Dex (v2.22.0) enables seamless [SSO integration](https://www.openshift.com/blog/openshift-authentication-integration-with-argocd) with Openshift. +* Upgraded Dex (v2.22.0) enables seamless [SSO integration](https://www.openshift.com/blog/openshift-authentication-integration-with-argocd) with OpenShift. #### Enhancements @@ -435,7 +521,7 @@ customizations, custom resource health checks, and more. * fix for helm repo add with flag --insecure-skip-server-verification (#3420) * fix: app diff --local support for helm repo. #3151 (#3407) * fix: Syncing apps incorrectly states "app synced", but this is not true (#3286) -* fix: for jsonnet when it is localed in nested subdirectory and uses import (#3372) +* fix: for jsonnet when it is located in nested subdirectory and uses import (#3372) * fix: Update 4.5.3 redis-ha helm manifest (#3370) * fix: return 401 error code if username does not exist (#3369) * fix: Do not panic while running hooks with short revision (#3368) @@ -551,7 +637,7 @@ Last-minute bugs that will be addressed in 1.5.1 shortly: - fix: argocd-util backup produced truncated backups. import app status (#3096) - fix: upgrade redis-ha chart and enable haproxy (#3147) - fix: make dex server deployment init container resilient to restarts (#3136) -- fix: reduct secret values of manifests stored in git (#3088) +- fix: redact secret values of manifests stored in git (#3088) - fix: labels not being deleted via UI (#3081) - fix: HTTP|HTTPS|NO_PROXY env variable reading #3055 (#3063) - fix: Correct usage text for repo add command regarding insecure repos (#3068) @@ -661,7 +747,7 @@ an in-flight state for all Kubernetes resources including `Deployment`, `PVC`, ` [Sync Waves](https://argoproj.github.io/argo-cd/user-guide/sync-waves/) instead. #### Enhancements -* feat: Add custom healthchecks for cert-manager v0.11.0 (#2689) +* feat: Add custom health checks for cert-manager v0.11.0 (#2689) * feat: add git submodule support (#2495) * feat: Add repository credential management API and CLI (addresses #2136) (#2207) * feat: add support for --additional-headers cli flag (#2467) @@ -846,7 +932,7 @@ There may be instances when you want to control the times during which an Argo C #### Bug Fixes - failed parsing on parameters with comma (#1660) -- Statefulset with OnDelete Update Strategy stuck progressing (#1881) +- StatefulSet with OnDelete Update Strategy stuck progressing (#1881) - Warning during secret diffing (#1923) - Error message "Unable to load data: key is missing" is confusing (#1944) - OIDC group bindings are truncated (#2006) @@ -928,7 +1014,7 @@ There may be instances when you want to control the times during which an Argo C ## v1.2.3 (2019-10-1) * Make argo-cd docker images openshift friendly (#2362) (@duboisf) * Add dest-server and dest-namespace field to reconciliation logs (#2354) -- Stop loggin /repository.RepositoryService/ValidateAccess parameters (#2386) +- Stop logging /repository.RepositoryService/ValidateAccess parameters (#2386) ## v1.2.2 (2019-09-26) + Resource action equivalent to `kubectl rollout restart` (#2177) @@ -1013,7 +1099,7 @@ Support for Git LFS enabled repositories - now you can store Helm charts as tar - Wait for CRD creation during sync process (#1940) - Added a button to select out of sync items in the sync panel (#1902) - Proper handling of an excluded resource in an application (#1621) -- Stop repeating logs on stoped container (#1614) +- Stop repeating logs on stopped container (#1614) - Fix git repo url parsing on application list view (#2174) - Fix nil pointer dereference error during app reconciliation (#2146) - Fix history api fallback implementation to support app names with dots (#2114) @@ -1069,7 +1155,7 @@ optimized which significantly reduced the number of Git requests. With v1.1 rele #### User Defined Application Metadata User-defined Application metadata enables the user to define a list of useful URLs for their specific application and expose those links on the UI -(e.g. reference tp a CI pipeline or an application-specific management tool). These links should provide helpful shortcuts that make easier to integrate Argo CD into existing +(e.g. reference to a CI pipeline or an application-specific management tool). These links should provide helpful shortcuts that make easier to integrate Argo CD into existing systems by making it easier to find other components inside and outside Argo CD. ### Deprecation Notice @@ -1433,7 +1519,7 @@ has a minimum client version of v0.12.0. Older CLI clients will be rejected. * Deprecate componentParameterOverrides in favor of source specific config (#1207) * Support talking to Dex using local cluster address instead of public address (#1211) * Use Recreate deployment strategy for controller (#1315) -* Honor os environment variables for helm commands (#1306) (@1337andre) +* Honor OS environment variables for helm commands (#1306) (@1337andre) * Disable CGO_ENABLED for server/controller binaries (#1286) * Documentation fixes and improvements (@twz123, @yann-soubeyrand, @OmerKahani, @dulltz) - Fix CRD creation/deletion handling (#1249) @@ -1925,8 +2011,8 @@ RBAC policy rules, need to be rewritten to include one extra column with the eff + Override parameters ## v0.1.0 (2018-03-12) -+ Define app in Github with dev and preprod environment using KSonnet ++ Define app in GitHub with dev and preprod environment using KSonnet + Add cluster Diff App with a cluster Deploy app in a cluster + Deploy a new version of the app in the cluster -+ App sync based on Github app config change - polling only ++ App sync based on GitHub app config change - polling only + Basic UI: App diff between Git and k8s cluster for all environments Basic GUI diff --git a/Dockerfile b/Dockerfile index 33df8e45d2424..8a6972f5562df 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,10 +1,10 @@ -ARG BASE_IMAGE=docker.io/library/ubuntu:20.10 +ARG BASE_IMAGE=docker.io/library/ubuntu:21.04 #################################################################################################### # Builder image # Initial stage which pulls prepares build dependencies and CLI tooling we need for our final image # Also used as the image in CI jobs so needs all dependencies #################################################################################################### -FROM docker.io/library/golang:1.16.4 as builder +FROM docker.io/library/golang:1.16.5 as builder RUN echo 'deb http://deb.debian.org/debian buster-backports main' >> /etc/apt/sources.list @@ -102,7 +102,7 @@ RUN NODE_ENV='production' NODE_ONLINE_ENV='online' yarn build #################################################################################################### # Argo CD Build stage which performs the actual build of Argo CD binaries #################################################################################################### -FROM golang:1.16.0 as argocd-build +FROM golang:1.16.5 as argocd-build WORKDIR /go/src/github.com/argoproj/argo-cd @@ -113,6 +113,7 @@ RUN go mod download # Perform the build COPY . . +COPY --from=argocd-ui /src/dist/app /go/src/github.com/argoproj/argo-cd/ui/dist/app RUN make argocd-all ARG BUILD_ALL_CLIS=true @@ -126,10 +127,8 @@ RUN if [ "$BUILD_ALL_CLIS" = "true" ] ; then \ #################################################################################################### FROM argocd-base COPY --from=argocd-build /go/src/github.com/argoproj/argo-cd/dist/argocd* /usr/local/bin/ -COPY --from=argocd-ui ./src/dist/app /shared/app USER root -RUN ln -s /usr/local/bin/argocd /usr/local/bin/argocd-util RUN ln -s /usr/local/bin/argocd /usr/local/bin/argocd-server RUN ln -s /usr/local/bin/argocd /usr/local/bin/argocd-repo-server RUN ln -s /usr/local/bin/argocd /usr/local/bin/argocd-application-controller diff --git a/Dockerfile.dev b/Dockerfile.dev index df7cc471d4670..671460816caa5 100644 --- a/Dockerfile.dev +++ b/Dockerfile.dev @@ -11,9 +11,4 @@ RUN ln -s /usr/local/bin/argocd /usr/local/bin/argocd-server RUN ln -s /usr/local/bin/argocd /usr/local/bin/argocd-repo-server RUN ln -s /usr/local/bin/argocd /usr/local/bin/argocd-application-controller RUN ln -s /usr/local/bin/argocd /usr/local/bin/argocd-dex -RUN ln -s /usr/local/bin/argocd /usr/local/bin/argocd-util -RUN ln -s /usr/local/bin/argocd-darwin-amd64 /usr/local/bin/argocd-util-darwin-amd64 -RUN ln -s /usr/local/bin/argocd-windows-amd64.exe /usr/local/bin/argocd-util-windows-amd64.exe USER 999 - -COPY --from=argocd-ui ./src/dist/app /shared/app diff --git a/Makefile b/Makefile index 13f39574c577e..760152eb21fd2 100644 --- a/Makefile +++ b/Makefile @@ -2,7 +2,6 @@ PACKAGE=github.com/argoproj/argo-cd/v2/common CURRENT_DIR=$(shell pwd) DIST_DIR=${CURRENT_DIR}/dist CLI_NAME=argocd -UTIL_CLI_NAME=argocd-util BIN_NAME=argocd HOST_OS:=$(shell go env GOOS) @@ -159,7 +158,7 @@ IMAGE_PREFIX=${IMAGE_NAMESPACE}/ endif .PHONY: all -all: cli image argocd-util +all: cli image # We have some legacy requirements for being checked out within $GOPATH. # The ensure-gopath target can be used as dependency to ensure we are running @@ -212,10 +211,6 @@ cli: test-tools-image cli-local: clean-debug CGO_ENABLED=0 go build -v -ldflags '${LDFLAGS}' -o ${DIST_DIR}/${CLI_NAME} ./cmd -.PHONY: cli-argocd -cli-argocd: - go build -v -ldflags '${LDFLAGS}' -o ${DIST_DIR}/${CLI_NAME} ./cmd - .PHONY: release-cli release-cli: clean-debug image docker create --name tmp-argocd-linux $(IMAGE_PREFIX)argocd:$(IMAGE_TAG) @@ -224,16 +219,6 @@ release-cli: clean-debug image docker cp tmp-argocd-linux:/usr/local/bin/argocd-windows-amd64.exe ${DIST_DIR}/argocd-windows-amd64.exe docker rm tmp-argocd-linux -.PHONY: argocd-util -argocd-util: clean-debug - # Build argocd-util as a statically linked binary, so it could run within the alpine-based dex container (argoproj/argo-cd#844) - CGO_ENABLED=0 go build -v -ldflags '${LDFLAGS}' -o ${DIST_DIR}/${UTIL_CLI_NAME} ./cmd - -# .PHONY: dev-tools-image -# dev-tools-image: -# docker build -t $(DEV_TOOLS_PREFIX)$(DEV_TOOLS_IMAGE) . -f hack/Dockerfile.dev-tools -# docker tag $(DEV_TOOLS_PREFIX)$(DEV_TOOLS_IMAGE) $(DEV_TOOLS_PREFIX)$(DEV_TOOLS_IMAGE):$(DEV_TOOLS_VERSION) - .PHONY: test-tools-image test-tools-image: docker build --build-arg UID=$(shell id -u) -t $(TEST_TOOLS_PREFIX)$(TEST_TOOLS_IMAGE) -f test/container/Dockerfile . @@ -273,6 +258,8 @@ IMAGE_TAG="dev-$(shell git describe --always --dirty)" image: docker build -t argocd-base --target argocd-base . docker build -t argocd-ui --target argocd-ui . + find ./ui/dist -type f -not -name gitkeep -delete + docker run -v ${CURRENT_DIR}/ui/dist/app:/tmp/app --rm -t argocd-ui sh -c 'cp -r ./dist/app/* /tmp/app/' CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -v -ldflags '${LDFLAGS}' -o ${DIST_DIR}/argocd ./cmd CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build -v -ldflags '${LDFLAGS}' -o ${DIST_DIR}/argocd-darwin-amd64 ./cmd CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build -v -ldflags '${LDFLAGS}' -o ${DIST_DIR}/argocd-windows-amd64.exe ./cmd @@ -280,9 +267,6 @@ image: ln -sfn ${DIST_DIR}/argocd ${DIST_DIR}/argocd-application-controller ln -sfn ${DIST_DIR}/argocd ${DIST_DIR}/argocd-repo-server ln -sfn ${DIST_DIR}/argocd ${DIST_DIR}/argocd-dex - ln -sfn ${DIST_DIR}/argocd ${DIST_DIR}/argocd-util - ln -sfn ${DIST_DIR}/argocd-darwin-amd64 ${DIST_DIR}/argocd-util-darwin-amd64 - ln -sfn ${DIST_DIR}/argocd-windows-amd64.exe ${DIST_DIR}/argocd-util-windows-amd64.exe cp Dockerfile.dev dist docker build -t $(IMAGE_PREFIX)argocd:$(IMAGE_TAG) -f dist/Dockerfile.dev dist else @@ -430,7 +414,7 @@ start-e2e-local: ARGOCD_TLS_DATA_PATH=/tmp/argo-e2e/app/config/tls \ ARGOCD_GPG_DATA_PATH=/tmp/argo-e2e/app/config/gpg/source \ ARGOCD_GNUPGHOME=/tmp/argo-e2e/app/config/gpg/keys \ - ARGOCD_GPG_ENABLED=true \ + ARGOCD_GPG_ENABLED=$(ARGOCD_GPG_ENABLED) \ ARGOCD_E2E_DISABLE_AUTH=false \ ARGOCD_ZJWT_FEATURE_FLAG=always \ ARGOCD_IN_CI=$(ARGOCD_IN_CI) \ @@ -463,7 +447,7 @@ start-local: mod-vendor-local dep-ui-local mkdir -p /tmp/argocd-local/gpg/source ARGOCD_ZJWT_FEATURE_FLAG=always \ ARGOCD_IN_CI=false \ - ARGOCD_GPG_ENABLED=true \ + ARGOCD_GPG_ENABLED=$(ARGOCD_GPG_ENABLED) \ ARGOCD_E2E_TEST=false \ goreman -f $(ARGOCD_PROCFILE) start ${ARGOCD_START} diff --git a/Procfile b/Procfile index 3f108a1686f35..9121d9d77c999 100644 --- a/Procfile +++ b/Procfile @@ -1,5 +1,5 @@ controller: sh -c "FORCE_LOG_COLORS=1 ARGOCD_FAKE_IN_CLUSTER=true ARGOCD_TLS_DATA_PATH=${ARGOCD_TLS_DATA_PATH:-/tmp/argocd-local/tls} ARGOCD_SSH_DATA_PATH=${ARGOCD_SSH_DATA_PATH:-/tmp/argocd-local/ssh} ARGOCD_BINARY_NAME=argocd-application-controller go run ./cmd/main.go --loglevel debug --redis localhost:${ARGOCD_E2E_REDIS_PORT:-6379} --repo-server localhost:${ARGOCD_E2E_REPOSERVER_PORT:-8081}" -api-server: sh -c "FORCE_LOG_COLORS=1 ARGOCD_FAKE_IN_CLUSTER=true ARGOCD_TLS_DATA_PATH=${ARGOCD_TLS_DATA_PATH:-/tmp/argocd-local/tls} ARGOCD_SSH_DATA_PATH=${ARGOCD_SSH_DATA_PATH:-/tmp/argocd-local/ssh} ARGOCD_BINARY_NAME=argocd-server go run ./cmd/main.go --loglevel debug --redis localhost:${ARGOCD_E2E_REDIS_PORT:-6379} --disable-auth=${ARGOCD_E2E_DISABLE_AUTH:-'true'} --insecure --dex-server http://localhost:${ARGOCD_E2E_DEX_PORT:-5556} --repo-server localhost:${ARGOCD_E2E_REPOSERVER_PORT:-8081} --port ${ARGOCD_E2E_APISERVER_PORT:-8080} --staticassets ui/dist/app" +api-server: sh -c "FORCE_LOG_COLORS=1 ARGOCD_FAKE_IN_CLUSTER=true ARGOCD_TLS_DATA_PATH=${ARGOCD_TLS_DATA_PATH:-/tmp/argocd-local/tls} ARGOCD_SSH_DATA_PATH=${ARGOCD_SSH_DATA_PATH:-/tmp/argocd-local/ssh} ARGOCD_BINARY_NAME=argocd-server go run ./cmd/main.go --loglevel debug --redis localhost:${ARGOCD_E2E_REDIS_PORT:-6379} --disable-auth=${ARGOCD_E2E_DISABLE_AUTH:-'true'} --insecure --dex-server http://localhost:${ARGOCD_E2E_DEX_PORT:-5556} --repo-server localhost:${ARGOCD_E2E_REPOSERVER_PORT:-8081} --port ${ARGOCD_E2E_APISERVER_PORT:-8080} " dex: sh -c "ARGOCD_BINARY_NAME=argocd-dex go run github.com/argoproj/argo-cd/v2/cmd gendexcfg -o `pwd`/dist/dex.yaml && docker run --rm -p ${ARGOCD_E2E_DEX_PORT:-5556}:${ARGOCD_E2E_DEX_PORT:-5556} -v `pwd`/dist/dex.yaml:/dex.yaml ghcr.io/dexidp/dex:v2.27.0 serve /dex.yaml" redis: bash -c "if [ $ARGOCD_REDIS_LOCAL == 'true' ]; then redis-server --save '' --appendonly no --port ${ARGOCD_E2E_REDIS_PORT:-6379}; else docker run --rm --name argocd-redis -i -p ${ARGOCD_E2E_REDIS_PORT:-6379}:${ARGOCD_E2E_REDIS_PORT:-6379} redis:6.2.4-alpine --save '' --appendonly no --port ${ARGOCD_E2E_REDIS_PORT:-6379}; fi" repo-server: sh -c "FORCE_LOG_COLORS=1 ARGOCD_FAKE_IN_CLUSTER=true ARGOCD_GNUPGHOME=${ARGOCD_GNUPGHOME:-/tmp/argocd-local/gpg/keys} ARGOCD_GPG_DATA_PATH=${ARGOCD_GPG_DATA_PATH:-/tmp/argocd-local/gpg/source} ARGOCD_TLS_DATA_PATH=${ARGOCD_TLS_DATA_PATH:-/tmp/argocd-local/tls} ARGOCD_SSH_DATA_PATH=${ARGOCD_SSH_DATA_PATH:-/tmp/argocd-local/ssh} ARGOCD_BINARY_NAME=argocd-repo-server go run ./cmd/main.go --loglevel debug --port ${ARGOCD_E2E_REPOSERVER_PORT:-8081} --redis localhost:${ARGOCD_E2E_REDIS_PORT:-6379}" diff --git a/README.md b/README.md index 881e6233370ec..17826ab7a36cf 100644 --- a/README.md +++ b/README.md @@ -45,6 +45,7 @@ Participation in the Argo CD project is governed by the [CNCF Code of Conduct](h ### Blogs and Presentations +1. [Combining Argo CD (GitOps), Crossplane (Control Plane), And KubeVela (OAM)](https://youtu.be/eEcgn_gU3SM) 1. [How to Apply GitOps to Everything - Combining Argo CD and Crossplane](https://youtu.be/yrj4lmScKHQ) 1. [Couchbase - How To Run a Database Cluster in Kubernetes Using Argo CD](https://youtu.be/nkPoPaVzExY) 1. [Automation of Everything - How To Combine Argo Events, Workflows & Pipelines, CD, and Rollouts](https://youtu.be/XNXJtxkUKeY) diff --git a/SECURITY.md b/SECURITY.md index 1181cf58d469e..9e810916a19c8 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -1,6 +1,6 @@ # Security Policy for Argo CD -Version: **v1.0 (2020-02-26)** +Version: **v1.1 (2020-06-29)** ## Preface @@ -8,6 +8,27 @@ As a deployment tool, Argo CD needs to have production access which makes security a very important topic. The Argoproj team takes security very seriously and is continuously working on improving it. +## A word about security scanners + +Many organisations these days employ security scanners to validate their +container images before letting them on their clusters, and that is a good +thing. However, the quality and results of these scanners vary greatly, +many of them produce false positives and require people to look at the +issues reported and validate them for correctness. A great example of that +is, that some scanners report kernel vulnerabilities for container images +just because they are derived from some distribution. + +We kindly ask you to not raise issues or contact us regarding any issues +that are found by your security scanner. Many of those produce a lot of false +positives, and many of these issues don't affect Argo CD. We do have scanners +in place for our code, dependencies and container images that we publish. We +are well aware of the issues that may affect Argo CD and are constantly +working on the remediation of those that affect Argo CD and our users. + +If you believe that we might have missed an issue that we should take a look +at (that can happen), then please discuss it with us. But please, do validate +that assumption before at least roughly. + ## Supported Versions We currently support the most recent release (`N`, e.g. `1.8`) and the release diff --git a/USERS.md b/USERS.md index ad33df56088c7..373568d7c1a81 100644 --- a/USERS.md +++ b/USERS.md @@ -9,12 +9,14 @@ Currently, the following organizations are **officially** using Argo CD: 1. [7shifts](https://www.7shifts.com/) 1. [Adevinta](https://www.adevinta.com/) 1. [Adventure](https://jp.adventurekk.com/) +1. [Alibaba Group](https://www.alibabagroup.com/) 1. [Ambassador Labs](https://www.getambassador.io/) 1. [Ant Group](https://www.antgroup.com/) 1. [ANSTO - Australian Synchrotron](https://www.synchrotron.org.au/) 1. [AppDirect](https://www.appdirect.com) 1. [Arctiq Inc.](https://www.arctiq.ca) 1. [ARZ Allgemeines Rechenzentrum GmbH ](https://www.arz.at/) +1. [Axual B.V.](https://axual.com) 1. [Baloise](https://www.baloise.com) 1. [BCDevExchange DevOps Platform](https://bcdevexchange.org/DevOpsPlatform) 1. [Beat](https://thebeat.co/en/) @@ -24,6 +26,7 @@ Currently, the following organizations are **officially** using Argo CD: 1. [Camptocamp](https://camptocamp.com) 1. [CARFAX](https://www.carfax.com) 1. [Celonis](https://www.celonis.com/) +1. [Chime](https://www.chime.com) 1. [Codefresh](https://www.codefresh.io/) 1. [Codility](https://www.codility.com/) 1. [Commonbond](https://commonbond.co/) @@ -43,6 +46,7 @@ Currently, the following organizations are **officially** using Argo CD: 1. [Fave](https://myfave.com) 1. [Future PLC](https://www.futureplc.com/) 1. [Garner](https://www.garnercorp.com) +1. [G DATA CyberDefense AG](https://www.gdata-software.com/) 1. [Generali Deutschland AG](https://www.generali.de/) 1. [Glovo](https://www.glovoapp.com) 1. [GMETRI](https://gmetri.com/) @@ -57,6 +61,7 @@ Currently, the following organizations are **officially** using Argo CD: 1. [Index Exchange](https://www.indexexchange.com/) 1. [InsideBoard](https://www.insideboard.com) 1. [Intuit](https://www.intuit.com/) +1. [Joblift](https://joblift.com/) 1. [JovianX](https://www.jovianx.com/) 1. [Karrot](https://www.daangn.com/) 1. [Kasa](https://kasa.co.kr/) @@ -134,6 +139,8 @@ Currently, the following organizations are **officially** using Argo CD: 1. [Webstores](https://www.webstores.nl) 1. [Whitehat Berlin](https://whitehat.berlin) by Guido Maria Serra +Fenaroli 1. [Witick](https://witick.io/) +1. [WooliesX](https://wooliesx.com.au/) +1. [Woolworths Group](https://www.woolworthsgroup.com.au/) 1. [WSpot](https://www.wspot.com.br/) 1. [Yieldlab](https://www.yieldlab.de/) 1. [Zimpler](https://www.zimpler.com/) @@ -145,3 +152,5 @@ Currently, the following organizations are **officially** using Argo CD: 1. [Kaltura](https://corp.kaltura.com/) 1. [Boticario](https://www.boticario.com.br/) 1. [Beleza Na Web](https://www.belezanaweb.com.br/) +1. [MariaDB](https://mariadb.com) +1. [Lightricks](https://www.lightricks.com/) diff --git a/VERSION b/VERSION index 227cea215648b..7ec1d6db40877 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -2.0.0 +2.1.0 diff --git a/assets/swagger.json b/assets/swagger.json index 8c52ded2fb579..f14080a199611 100644 --- a/assets/swagger.json +++ b/assets/swagger.json @@ -2648,7 +2648,7 @@ "tags": [ "RepositoryService" ], - "summary": "ListApps returns list of apps in the repe", + "summary": "ListApps returns list of apps in the repo", "operationId": "RepositoryService_ListApps", "parameters": [ { @@ -5113,6 +5113,10 @@ "type": "object", "title": "Cluster is the definition of a cluster resource", "properties": { + "clusterResources": { + "description": "Indicates if cluster level resources should be managed. This setting is used only if cluster is connected in a namespaced mode.", + "type": "boolean" + }, "config": { "$ref": "#/definitions/v1alpha1ClusterConfig" }, @@ -5739,7 +5743,7 @@ }, "policies": { "type": "array", - "title": "Policies Stores a list of casbin formated strings that define access policies for the role in the project", + "title": "Policies Stores a list of casbin formatted strings that define access policies for the role in the project", "items": { "type": "string" } diff --git a/cmd/argocd-server/commands/argocd_server.go b/cmd/argocd-server/commands/argocd_server.go index f627788fa72de..5583a4fefd0a4 100644 --- a/cmd/argocd-server/commands/argocd_server.go +++ b/cmd/argocd-server/commands/argocd_server.go @@ -52,7 +52,6 @@ func NewCommand() *cobra.Command { glogLevel int clientConfig clientcmd.ClientConfig repoServerTimeoutSeconds int - staticAssetsDir string baseHRef string rootPath string repoServerAddress string @@ -128,7 +127,6 @@ func NewCommand() *cobra.Command { ListenPort: listenPort, MetricsPort: metricsPort, Namespace: namespace, - StaticAssetsDir: staticAssetsDir, BaseHRef: baseHRef, RootPath: rootPath, KubeClientset: kubeclientset, @@ -159,7 +157,9 @@ func NewCommand() *cobra.Command { clientConfig = cli.AddKubectlFlagsToCmd(command) command.Flags().BoolVar(&insecure, "insecure", env.ParseBoolFromEnv("ARGOCD_SERVER_INSECURE", false), "Run server without TLS") + var staticAssetsDir string command.Flags().StringVar(&staticAssetsDir, "staticassets", "", "Static assets directory path") + _ = command.Flags().MarkDeprecated("staticassets", "The --staticassets flag is not longer supported. Static assets are embedded into binary.") command.Flags().StringVar(&baseHRef, "basehref", env.StringFromEnv("ARGOCD_SERVER_BASEHREF", "/"), "Value for base href in index.html. Used if Argo CD is running behind reverse proxy under subpath different from /") command.Flags().StringVar(&rootPath, "rootpath", env.StringFromEnv("ARGOCD_SERVER_ROOTPATH", ""), "Used if Argo CD is running behind reverse proxy under subpath different from /") command.Flags().StringVar(&cmdutil.LogFormat, "logformat", env.StringFromEnv("ARGOCD_SERVER_LOGFORMAT", "text"), "Set the logging format. One of: text|json") diff --git a/cmd/argocd/commands/account.go b/cmd/argocd/commands/account.go index 31bb69245b352..9a79e1ab06221 100644 --- a/cmd/argocd/commands/account.go +++ b/cmd/argocd/commands/account.go @@ -362,7 +362,7 @@ argocd account generate-token --account `, } cmd.Flags().StringVarP(&account, "account", "a", "", "Account name. Defaults to the current account.") cmd.Flags().StringVarP(&expiresIn, "expires-in", "e", "0s", "Duration before the token will expire. (Default: No expiration)") - cmd.Flags().StringVar(&id, "id", "", "Optional token id. Fallback to uuid if not value specified.") + cmd.Flags().StringVar(&id, "id", "", "Optional token id. Fall back to uuid if not value specified.") return cmd } @@ -377,7 +377,7 @@ func NewAccountDeleteTokenCommand(clientOpts *argocdclient.ClientOptions) *cobra argocd account delete-token ID # Delete token of the account with the specified name -argocd account generate-token --account `, +argocd account delete-token --account ID`, Run: func(c *cobra.Command, args []string) { if len(args) != 1 { c.HelpFunc()(c, args) diff --git a/cmd/argocd-util/commands/argocd_util.go b/cmd/argocd/commands/admin/admin.go similarity index 95% rename from cmd/argocd-util/commands/argocd_util.go rename to cmd/argocd/commands/admin/admin.go index 7cc8a1ffcb5e6..6ad1dad6af998 100644 --- a/cmd/argocd-util/commands/argocd_util.go +++ b/cmd/argocd/commands/admin/admin.go @@ -1,4 +1,4 @@ -package commands +package admin import ( "reflect" @@ -15,14 +15,11 @@ import ( cmdutil "github.com/argoproj/argo-cd/v2/cmd/util" "github.com/argoproj/argo-cd/v2/common" - "github.com/argoproj/argo-cd/v2/util/cli" "github.com/argoproj/argo-cd/v2/util/errors" "github.com/argoproj/argo-cd/v2/util/settings" ) const ( - // CLIName is the name of the CLI - cliName = "argocd-util" // YamlSeparator separates sections of a YAML file yamlSeparator = "---\n" ) @@ -35,23 +32,21 @@ var ( appplicationSetResource = schema.GroupVersionResource{Group: "argoproj.io", Version: "v1alpha1", Resource: "applicationsets"} ) -// NewCommand returns a new instance of an argocd command -func NewCommand() *cobra.Command { +// NewAdminCommand returns a new instance of an argocd command +func NewAdminCommand() *cobra.Command { var ( pathOpts = clientcmd.NewDefaultPathOptions() ) var command = &cobra.Command{ - Use: cliName, - Short: "argocd-util tools used by Argo CD", - Long: "argocd-util has internal utility tools used by Argo CD", + Use: "admin", + Short: "Contains a set of commands useful for Argo CD administrators and requires direct Kubernetes access", DisableAutoGenTag: true, Run: func(c *cobra.Command, args []string) { c.HelpFunc()(c, args) }, } - command.AddCommand(cli.NewVersionCmd(cliName)) command.AddCommand(NewClusterCommand(pathOpts)) command.AddCommand(NewProjectsCommand()) command.AddCommand(NewSettingsCommand()) @@ -59,6 +54,7 @@ func NewCommand() *cobra.Command { command.AddCommand(NewRepoCommand()) command.AddCommand(NewImportCommand()) command.AddCommand(NewExportCommand()) + command.AddCommand(NewDashboardCommand()) command.Flags().StringVar(&cmdutil.LogFormat, "logformat", "text", "Set the logging format. One of: text|json") command.Flags().StringVar(&cmdutil.LogLevel, "loglevel", "info", "Set the logging level. One of: debug|info|warn|error") diff --git a/cmd/argocd-util/commands/app.go b/cmd/argocd/commands/admin/app.go similarity index 85% rename from cmd/argocd-util/commands/app.go rename to cmd/argocd/commands/admin/app.go index 2a9ff5fe9994d..172502a52debc 100644 --- a/cmd/argocd-util/commands/app.go +++ b/cmd/argocd/commands/admin/app.go @@ -1,4 +1,4 @@ -package commands +package admin import ( "context" @@ -34,6 +34,7 @@ import ( "github.com/argoproj/argo-cd/v2/util/config" "github.com/argoproj/argo-cd/v2/util/db" "github.com/argoproj/argo-cd/v2/util/errors" + "github.com/argoproj/argo-cd/v2/util/io" kubeutil "github.com/argoproj/argo-cd/v2/util/kube" "github.com/argoproj/argo-cd/v2/util/settings" ) @@ -61,31 +62,33 @@ func NewGenAppSpecCommand() *cobra.Command { appName string labels []string outputFormat string + annotations []string + inline bool ) var command = &cobra.Command{ Use: "generate-spec APPNAME", Short: "Generate declarative config for an application", Example: ` # Generate declarative config for a directory app - argocd-util app generate-spec guestbook --repo https://github.com/argoproj/argocd-example-apps.git --path guestbook --dest-namespace default --dest-server https://kubernetes.default.svc --directory-recurse + argocd admin app generate-spec guestbook --repo https://github.com/argoproj/argocd-example-apps.git --path guestbook --dest-namespace default --dest-server https://kubernetes.default.svc --directory-recurse # Generate declarative config for a Jsonnet app - argocd-util app generate-spec jsonnet-guestbook --repo https://github.com/argoproj/argocd-example-apps.git --path jsonnet-guestbook --dest-namespace default --dest-server https://kubernetes.default.svc --jsonnet-ext-str replicas=2 + argocd admin app generate-spec jsonnet-guestbook --repo https://github.com/argoproj/argocd-example-apps.git --path jsonnet-guestbook --dest-namespace default --dest-server https://kubernetes.default.svc --jsonnet-ext-str replicas=2 # Generate declarative config for a Helm app - argocd-util app generate-spec helm-guestbook --repo https://github.com/argoproj/argocd-example-apps.git --path helm-guestbook --dest-namespace default --dest-server https://kubernetes.default.svc --helm-set replicaCount=2 + argocd admin app generate-spec helm-guestbook --repo https://github.com/argoproj/argocd-example-apps.git --path helm-guestbook --dest-namespace default --dest-server https://kubernetes.default.svc --helm-set replicaCount=2 # Generate declarative config for a Helm app from a Helm repo - argocd-util app generate-spec nginx-ingress --repo https://charts.helm.sh/stable --helm-chart nginx-ingress --revision 1.24.3 --dest-namespace default --dest-server https://kubernetes.default.svc + argocd admin app generate-spec nginx-ingress --repo https://charts.helm.sh/stable --helm-chart nginx-ingress --revision 1.24.3 --dest-namespace default --dest-server https://kubernetes.default.svc # Generate declarative config for a Kustomize app - argocd-util app generate-spec kustomize-guestbook --repo https://github.com/argoproj/argocd-example-apps.git --path kustomize-guestbook --dest-namespace default --dest-server https://kubernetes.default.svc --kustomize-image gcr.io/heptio-images/ks-guestbook-demo:0.1 + argocd admin app generate-spec kustomize-guestbook --repo https://github.com/argoproj/argocd-example-apps.git --path kustomize-guestbook --dest-namespace default --dest-server https://kubernetes.default.svc --kustomize-image gcr.io/heptio-images/ks-guestbook-demo:0.1 # Generate declarative config for a app using a custom tool: - argocd-util app generate-spec ksane --repo https://github.com/argoproj/argocd-example-apps.git --path plugins/kasane --dest-namespace default --dest-server https://kubernetes.default.svc --config-management-plugin kasane + argocd admin app generate-spec ksane --repo https://github.com/argoproj/argocd-example-apps.git --path plugins/kasane --dest-namespace default --dest-server https://kubernetes.default.svc --config-management-plugin kasane `, Run: func(c *cobra.Command, args []string) { - app, err := cmdutil.ConstructApp(fileURL, appName, labels, args, appOpts, c.Flags()) + app, err := cmdutil.ConstructApp(fileURL, appName, labels, annotations, args, appOpts, c.Flags()) errors.CheckError(err) if app.Name == "" { @@ -93,15 +96,19 @@ func NewGenAppSpecCommand() *cobra.Command { os.Exit(1) } - var printResources []interface{} - printResources = append(printResources, app) - errors.CheckError(cmdutil.PrintResources(printResources, outputFormat)) + out, closer, err := getOutWriter(inline, fileURL) + errors.CheckError(err) + defer io.Close(closer) + + errors.CheckError(PrintResources(outputFormat, out, app)) }, } command.Flags().StringVar(&appName, "name", "", "A name for the app, ignored if a file is set (DEPRECATED)") command.Flags().StringVarP(&fileURL, "file", "f", "", "Filename or URL to Kubernetes manifests for the app") command.Flags().StringArrayVarP(&labels, "label", "l", []string{}, "Labels to apply to the app") + command.Flags().StringArrayVarP(&annotations, "annotations", "", []string{}, "Set metadata annotations (e.g. example=value)") command.Flags().StringVarP(&outputFormat, "output", "o", "yaml", "Output format. One of: json|yaml") + command.Flags().BoolVarP(&inline, "inline", "i", false, "If set then generated resource is written back to the file specified in --file flag") // Only complete files with appropriate extension. err := command.Flags().SetAnnotation("file", cobra.BashCompFilenameExt, []string{"json", "yaml", "yml"}) @@ -247,7 +254,7 @@ func NewReconcileCommand() *cobra.Command { if repoServerAddress == "" { printLine("Repo server is not provided, trying to port-forward to argocd-repo-server pod.") overrides := clientcmd.ConfigOverrides{} - repoServerPort, err := kubeutil.PortForward("app.kubernetes.io/name=argocd-repo-server", 8081, namespace, &overrides) + repoServerPort, err := kubeutil.PortForward(8081, namespace, &overrides, "app.kubernetes.io/name=argocd-repo-server") errors.CheckError(err) repoServerAddress = fmt.Sprintf("localhost:%d", repoServerPort) } diff --git a/cmd/argocd-util/commands/app_test.go b/cmd/argocd/commands/admin/app_test.go similarity index 99% rename from cmd/argocd-util/commands/app_test.go rename to cmd/argocd/commands/admin/app_test.go index e14c1e4eecfb5..bddedc4aad080 100644 --- a/cmd/argocd-util/commands/app_test.go +++ b/cmd/argocd/commands/admin/app_test.go @@ -1,4 +1,4 @@ -package commands +package admin import ( "testing" diff --git a/cmd/argocd-util/commands/backup.go b/cmd/argocd/commands/admin/backup.go similarity index 99% rename from cmd/argocd-util/commands/backup.go rename to cmd/argocd/commands/admin/backup.go index ec4885beb2162..f53261f3bdb5b 100644 --- a/cmd/argocd-util/commands/backup.go +++ b/cmd/argocd/commands/admin/backup.go @@ -1,4 +1,4 @@ -package commands +package admin import ( "bufio" diff --git a/cmd/argocd-util/commands/cluster.go b/cmd/argocd/commands/admin/cluster.go similarity index 58% rename from cmd/argocd-util/commands/cluster.go rename to cmd/argocd/commands/admin/cluster.go index f168967609372..3cbec9dc0bc06 100644 --- a/cmd/argocd-util/commands/cluster.go +++ b/cmd/argocd/commands/admin/cluster.go @@ -1,10 +1,12 @@ -package commands +package admin import ( "context" "fmt" "math" "os" + "sort" + "strings" "text/tabwriter" "time" @@ -22,12 +24,15 @@ import ( "github.com/argoproj/argo-cd/v2/common" "github.com/argoproj/argo-cd/v2/controller/sharding" argoappv1 "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1" + "github.com/argoproj/argo-cd/v2/pkg/client/clientset/versioned" + "github.com/argoproj/argo-cd/v2/util/argo" cacheutil "github.com/argoproj/argo-cd/v2/util/cache" appstatecache "github.com/argoproj/argo-cd/v2/util/cache/appstate" "github.com/argoproj/argo-cd/v2/util/cli" "github.com/argoproj/argo-cd/v2/util/clusterauth" "github.com/argoproj/argo-cd/v2/util/db" "github.com/argoproj/argo-cd/v2/util/errors" + "github.com/argoproj/argo-cd/v2/util/glob" kubeutil "github.com/argoproj/argo-cd/v2/util/kube" "github.com/argoproj/argo-cd/v2/util/settings" ) @@ -45,16 +50,23 @@ func NewClusterCommand(pathOpts *clientcmd.PathOptions) *cobra.Command { command.AddCommand(NewGenClusterConfigCommand(pathOpts)) command.AddCommand(NewClusterStatsCommand()) command.AddCommand(NewClusterShardsCommand()) + namespacesCommand := NewClusterNamespacesCommand() + namespacesCommand.AddCommand(NewClusterEnableNamespacedMode()) + namespacesCommand.AddCommand(NewClusterDisableNamespacedMode()) + command.AddCommand(namespacesCommand) return command } type ClusterWithInfo struct { argoappv1.Cluster + // Shard holds controller shard number that handles the cluster Shard int + // Namespaces holds list of namespaces managed by Argo CD in the cluster + Namespaces []string } -func loadClusters(kubeClient *kubernetes.Clientset, replicas int, namespace string, portForwardRedis bool, cacheSrc func() (*appstatecache.Cache, error), shard int) ([]ClusterWithInfo, error) { +func loadClusters(kubeClient *kubernetes.Clientset, appClient *versioned.Clientset, replicas int, namespace string, portForwardRedis bool, cacheSrc func() (*appstatecache.Cache, error), shard int) ([]ClusterWithInfo, error) { settingsMgr := settings.NewSettingsManager(context.Background(), kubeClient, namespace) argoDB := db.NewDB(namespace, settingsMgr, kubeClient) @@ -65,7 +77,8 @@ func loadClusters(kubeClient *kubernetes.Clientset, replicas int, namespace stri var cache *appstatecache.Cache if portForwardRedis { overrides := clientcmd.ConfigOverrides{} - port, err := kubeutil.PortForward("app.kubernetes.io/name=argocd-redis-ha-haproxy", 6379, namespace, &overrides) + port, err := kubeutil.PortForward(6379, namespace, &overrides, + "app.kubernetes.io/name=argocd-redis-ha-haproxy", "app.kubernetes.io/name=argocd-redis") if err != nil { return nil, err } @@ -78,6 +91,18 @@ func loadClusters(kubeClient *kubernetes.Clientset, replicas int, namespace stri } } + appItems, err := appClient.ArgoprojV1alpha1().Applications(namespace).List(context.Background(), v1.ListOptions{}) + if err != nil { + return nil, err + } + apps := appItems.Items + for i, app := range apps { + err := argo.ValidateDestination(context.Background(), &app.Spec.Destination, argoDB) + if err != nil { + return nil, err + } + apps[i] = app + } clusters := make([]ClusterWithInfo, len(clustersList.Items)) batchSize := 10 batchesCount := int(math.Ceil(float64(len(clusters)) / float64(batchSize))) @@ -98,9 +123,18 @@ func loadClusters(kubeClient *kubernetes.Clientset, replicas int, namespace stri if shard != -1 && clusterShard != shard { return nil } - + nsSet := map[string]bool{} + for _, app := range apps { + if app.Spec.Destination.Server == cluster.Server { + nsSet[app.Spec.Destination.Namespace] = true + } + } + var namespaces []string + for ns := range nsSet { + namespaces = append(namespaces, ns) + } _ = cache.GetClusterInfo(cluster.Server, &cluster.Info) - clusters[batchStart+i] = ClusterWithInfo{cluster, clusterShard} + clusters[batchStart+i] = ClusterWithInfo{cluster, clusterShard, namespaces} return nil }) } @@ -135,6 +169,7 @@ func NewClusterShardsCommand() *cobra.Command { namespace, _, err := clientConfig.Namespace() errors.CheckError(err) kubeClient := kubernetes.NewForConfigOrDie(clientCfg) + appClient := versioned.NewForConfigOrDie(clientCfg) if replicas == 0 { replicas, err = getControllerReplicas(kubeClient, namespace) @@ -144,7 +179,7 @@ func NewClusterShardsCommand() *cobra.Command { return } - clusters, err := loadClusters(kubeClient, replicas, namespace, portForwardRedis, cacheSrc, shard) + clusters, err := loadClusters(kubeClient, appClient, replicas, namespace, portForwardRedis, cacheSrc, shard) errors.CheckError(err) if len(clusters) == 0 { return @@ -180,6 +215,216 @@ func printStatsSummary(clusters []ClusterWithInfo) { _ = w.Flush() } +func runClusterNamespacesCommand(clientConfig clientcmd.ClientConfig, action func(appClient *versioned.Clientset, argoDB db.ArgoDB, clusters map[string][]string) error) error { + clientCfg, err := clientConfig.ClientConfig() + if err != nil { + return err + } + namespace, _, err := clientConfig.Namespace() + if err != nil { + return err + } + + kubeClient := kubernetes.NewForConfigOrDie(clientCfg) + appClient := versioned.NewForConfigOrDie(clientCfg) + + settingsMgr := settings.NewSettingsManager(context.Background(), kubeClient, namespace) + argoDB := db.NewDB(namespace, settingsMgr, kubeClient) + clustersList, err := argoDB.ListClusters(context.Background()) + if err != nil { + return err + } + appItems, err := appClient.ArgoprojV1alpha1().Applications(namespace).List(context.Background(), v1.ListOptions{}) + if err != nil { + return err + } + apps := appItems.Items + for i, app := range apps { + err := argo.ValidateDestination(context.Background(), &app.Spec.Destination, argoDB) + if err != nil { + return err + } + apps[i] = app + } + + clusters := map[string][]string{} + for _, cluster := range clustersList.Items { + nsSet := map[string]bool{} + for _, app := range apps { + if app.Spec.Destination.Server != cluster.Server { + continue + } + // Use namespaces of actually deployed resources, since some application use dummy target namespace + // If resources list is empty then use target namespace + if len(app.Status.Resources) != 0 { + for _, res := range app.Status.Resources { + if res.Namespace != "" { + nsSet[res.Namespace] = true + } + } + } else { + if app.Spec.Destination.Server == cluster.Server { + nsSet[app.Spec.Destination.Namespace] = true + } + } + } + var namespaces []string + for ns := range nsSet { + namespaces = append(namespaces, ns) + } + clusters[cluster.Server] = namespaces + } + return action(appClient, argoDB, clusters) +} + +func NewClusterNamespacesCommand() *cobra.Command { + var ( + clientConfig clientcmd.ClientConfig + ) + var command = cobra.Command{ + Use: "namespaces", + Short: "Print information namespaces which Argo CD manages in each cluster.", + Run: func(cmd *cobra.Command, args []string) { + log.SetLevel(log.WarnLevel) + + err := runClusterNamespacesCommand(clientConfig, func(appClient *versioned.Clientset, _ db.ArgoDB, clusters map[string][]string) error { + w := tabwriter.NewWriter(os.Stdout, 0, 0, 2, ' ', 0) + _, _ = fmt.Fprintf(w, "CLUSTER\tNAMESPACES\n") + + for cluster, namespaces := range clusters { + // print shortest namespace names first + sort.Slice(namespaces, func(i, j int) bool { + return len(namespaces[j]) > len(namespaces[i]) + }) + namespacesStr := "" + if len(namespaces) > 4 { + namespacesStr = fmt.Sprintf("%s (total %d)", strings.Join(namespaces[:4], ","), len(namespaces)) + } else { + namespacesStr = strings.Join(namespaces, ",") + } + + _, _ = fmt.Fprintf(w, "%s\t%s\n", cluster, namespacesStr) + } + _ = w.Flush() + return nil + }) + errors.CheckError(err) + }, + } + clientConfig = cli.AddKubectlFlagsToCmd(&command) + return &command +} + +func NewClusterEnableNamespacedMode() *cobra.Command { + var ( + clientConfig clientcmd.ClientConfig + dryRun bool + clusterResources bool + namespacesCount int + ) + var command = cobra.Command{ + Use: "enable-namespaced-mode PATTERN", + Short: "Enable namespaced mode for clusters which name matches to the specified pattern.", + Run: func(cmd *cobra.Command, args []string) { + log.SetLevel(log.WarnLevel) + + if len(args) == 0 { + cmd.HelpFunc()(cmd, args) + os.Exit(1) + } + pattern := args[0] + + errors.CheckError(runClusterNamespacesCommand(clientConfig, func(_ *versioned.Clientset, argoDB db.ArgoDB, clusters map[string][]string) error { + for server, namespaces := range clusters { + if len(namespaces) == 0 || len(namespaces) > namespacesCount || !glob.Match(pattern, server) { + continue + } + + cluster, err := argoDB.GetCluster(context.Background(), server) + if err != nil { + return err + } + cluster.Namespaces = namespaces + cluster.ClusterResources = clusterResources + fmt.Printf("Setting cluster %s namespaces to %v...", server, namespaces) + if !dryRun { + _, err = argoDB.UpdateCluster(context.Background(), cluster) + if err != nil { + return err + } + fmt.Println("done") + } else { + fmt.Println("done (dry run)") + } + + } + return nil + })) + }, + } + clientConfig = cli.AddKubectlFlagsToCmd(&command) + command.Flags().BoolVar(&dryRun, "dry-run", true, "Print what will be performed") + command.Flags().BoolVar(&clusterResources, "cluster-resources", false, "Indicates if cluster level resources should be managed.") + command.Flags().IntVar(&namespacesCount, "max-namespace-count", 0, "Max number of namespaces that cluster should managed managed namespaces is less or equal to specified count") + + return &command +} + +func NewClusterDisableNamespacedMode() *cobra.Command { + var ( + clientConfig clientcmd.ClientConfig + dryRun bool + ) + var command = cobra.Command{ + Use: "disable-namespaced-mode PATTERN", + Short: "Disable namespaced mode for clusters which name matches to the specified pattern.", + Run: func(cmd *cobra.Command, args []string) { + log.SetLevel(log.WarnLevel) + + if len(args) == 0 { + cmd.HelpFunc()(cmd, args) + os.Exit(1) + } + + pattern := args[0] + + errors.CheckError(runClusterNamespacesCommand(clientConfig, func(_ *versioned.Clientset, argoDB db.ArgoDB, clusters map[string][]string) error { + for server := range clusters { + if !glob.Match(pattern, server) { + continue + } + + cluster, err := argoDB.GetCluster(context.Background(), server) + if err != nil { + return err + } + + if len(cluster.Namespaces) == 0 { + continue + } + + cluster.Namespaces = nil + fmt.Printf("Disabling namespaced mode for cluster %s...", server) + if !dryRun { + _, err = argoDB.UpdateCluster(context.Background(), cluster) + if err != nil { + return err + } + fmt.Println("done") + } else { + fmt.Println("done (dry run)") + } + + } + return nil + })) + }, + } + clientConfig = cli.AddKubectlFlagsToCmd(&command) + command.Flags().BoolVar(&dryRun, "dry-run", true, "Print what will be performed") + return &command +} + func NewClusterStatsCommand() *cobra.Command { var ( shard int @@ -200,17 +445,18 @@ func NewClusterStatsCommand() *cobra.Command { errors.CheckError(err) kubeClient := kubernetes.NewForConfigOrDie(clientCfg) + appClient := versioned.NewForConfigOrDie(clientCfg) if replicas == 0 { replicas, err = getControllerReplicas(kubeClient, namespace) errors.CheckError(err) } - clusters, err := loadClusters(kubeClient, replicas, namespace, portForwardRedis, cacheSrc, shard) + clusters, err := loadClusters(kubeClient, appClient, replicas, namespace, portForwardRedis, cacheSrc, shard) errors.CheckError(err) w := tabwriter.NewWriter(os.Stdout, 0, 0, 2, ' ', 0) - _, _ = fmt.Fprintf(w, "SERVER\tSHARD\tCONNECTION\tAPPS COUNT\tRESOURCES COUNT\n") + _, _ = fmt.Fprintf(w, "SERVER\tSHARD\tCONNECTION\tNAMESPACES COUNT\tAPPS COUNT\tRESOURCES COUNT\n") for _, cluster := range clusters { - _, _ = fmt.Fprintf(w, "%s\t%d\t%s\t%d\t%d\n", cluster.Server, cluster.Shard, cluster.Info.ConnectionState.Status, cluster.Info.ApplicationsCount, cluster.Info.CacheInfo.ResourcesCount) + _, _ = fmt.Fprintf(w, "%s\t%d\t%s\t%d\t%d\t%d\n", cluster.Server, cluster.Shard, cluster.Info.ConnectionState.Status, len(cluster.Namespaces), cluster.Info.ApplicationsCount, cluster.Info.CacheInfo.ResourcesCount) } _ = w.Flush() }, @@ -223,7 +469,7 @@ func NewClusterStatsCommand() *cobra.Command { return &command } -// NewClusterConfig returns a new instance of `argocd-util kubeconfig` command +// NewClusterConfig returns a new instance of `argocd admin kubeconfig` command func NewClusterConfig() *cobra.Command { var ( clientConfig clientcmd.ClientConfig @@ -315,7 +561,7 @@ func NewGenClusterConfigCommand(pathOpts *clientcmd.PathOptions) *cobra.Command if clusterOpts.Name != "" { contextName = clusterOpts.Name } - clst := cmdutil.NewCluster(contextName, clusterOpts.Namespaces, conf, bearerToken, awsAuthConf, execProviderConf) + clst := cmdutil.NewCluster(contextName, clusterOpts.Namespaces, clusterOpts.ClusterResources, conf, bearerToken, awsAuthConf, execProviderConf) if clusterOpts.InCluster { clst.Server = argoappv1.KubernetesInternalAPIServerAddr } @@ -335,10 +581,7 @@ func NewGenClusterConfigCommand(pathOpts *clientcmd.PathOptions) *cobra.Command secret, err := kubeClientset.CoreV1().Secrets(ArgoCDNamespace).Get(context.Background(), secName, v1.GetOptions{}) errors.CheckError(err) - cmdutil.ConvertSecretData(secret) - var printResources []interface{} - printResources = append(printResources, secret) - errors.CheckError(cmdutil.PrintResources(printResources, outputFormat)) + errors.CheckError(PrintResources(outputFormat, os.Stdout, secret)) }, } command.PersistentFlags().StringVar(&pathOpts.LoadingRules.ExplicitPath, pathOpts.ExplicitFileFlag, pathOpts.LoadingRules.ExplicitPath, "use a particular kubeconfig file") diff --git a/cmd/argocd/commands/admin/dashboard.go b/cmd/argocd/commands/admin/dashboard.go new file mode 100644 index 0000000000000..9da3582453856 --- /dev/null +++ b/cmd/argocd/commands/admin/dashboard.go @@ -0,0 +1,30 @@ +package admin + +import ( + "context" + "fmt" + + "github.com/spf13/cobra" + + "github.com/argoproj/argo-cd/v2/cmd/argocd/commands/headless" + "github.com/argoproj/argo-cd/v2/common" + "github.com/argoproj/argo-cd/v2/pkg/apiclient" +) + +func NewDashboardCommand() *cobra.Command { + var ( + port int + ) + cmd := &cobra.Command{ + Use: "dashboard", + Short: "Starts Argo CD Web UI locally", + Run: func(cmd *cobra.Command, args []string) { + println(fmt.Sprintf("Argo CD UI is available at http://localhost:%d", port)) + <-context.Background().Done() + }, + } + clientOpts := &apiclient.ClientOptions{Core: true} + headless.InitCommand(cmd, clientOpts, &port) + cmd.Flags().IntVar(&port, "port", common.DefaultPortAPIServer, "Listen on given port") + return cmd +} diff --git a/cmd/argocd/commands/admin/generatespec_utils.go b/cmd/argocd/commands/admin/generatespec_utils.go new file mode 100644 index 0000000000000..d5d8b7c8444c2 --- /dev/null +++ b/cmd/argocd/commands/admin/generatespec_utils.go @@ -0,0 +1,108 @@ +package admin + +import ( + "encoding/json" + "errors" + "fmt" + "io" + "os" + + "github.com/argoproj/gitops-engine/pkg/utils/kube" + "github.com/ghodss/yaml" + v1 "k8s.io/api/core/v1" + + ioutil "github.com/argoproj/argo-cd/v2/util/io" +) + +func getOutWriter(inline bool, filePath string) (io.Writer, io.Closer, error) { + if !inline { + return os.Stdout, ioutil.NopCloser, nil + } + + if filePath == "" { + return nil, nil, errors.New("The file path must be specified using flag '--file'") + } + + err := os.Rename(filePath, fmt.Sprintf("%s.back", filePath)) + if err != nil { + return nil, nil, err + } + + fileOut, err := os.Create(filePath) + if err != nil { + return nil, nil, err + } + return fileOut, fileOut, nil +} + +// PrintResources prints a single resource in YAML or JSON format to stdout according to the output format +func PrintResources(output string, out io.Writer, resources ...interface{}) error { + for i, resource := range resources { + if secret, ok := resource.(*v1.Secret); ok { + convertSecretData(secret) + } + filteredResource, err := omitFields(resource) + if err != nil { + return err + } + resources[i] = filteredResource + } + var obj interface{} = resources + if len(resources) == 1 { + obj = resources[0] + } + + switch output { + case "json": + jsonBytes, err := json.MarshalIndent(obj, "", " ") + if err != nil { + return err + } + + _, _ = fmt.Fprintln(out, string(jsonBytes)) + case "yaml": + yamlBytes, err := yaml.Marshal(obj) + if err != nil { + return err + } + // marshaled YAML already ends with the new line character + _, _ = fmt.Fprint(out, string(yamlBytes)) + default: + return fmt.Errorf("unknown output format: %s", output) + } + return nil +} + +// omit fields such as status, creationTimestamp and metadata.namespace in k8s objects +func omitFields(resource interface{}) (interface{}, error) { + jsonBytes, err := json.Marshal(resource) + if err != nil { + return nil, err + } + + toMap := make(map[string]interface{}) + err = json.Unmarshal(jsonBytes, &toMap) + if err != nil { + return nil, err + } + + delete(toMap, "status") + if v, ok := toMap["metadata"]; ok { + if metadata, ok := v.(map[string]interface{}); ok { + delete(metadata, "creationTimestamp") + delete(metadata, "namespace") + } + } + return toMap, nil +} + +// convertSecretData converts kubernetes secret's data to stringData +func convertSecretData(secret *v1.Secret) { + secret.Kind = kube.SecretKind + secret.APIVersion = "v1" + secret.StringData = map[string]string{} + for k, v := range secret.Data { + secret.StringData[k] = string(v) + } + secret.Data = map[string][]byte{} +} diff --git a/cmd/argocd/commands/admin/generatespec_utils_test.go b/cmd/argocd/commands/admin/generatespec_utils_test.go new file mode 100644 index 0000000000000..4352ce331b333 --- /dev/null +++ b/cmd/argocd/commands/admin/generatespec_utils_test.go @@ -0,0 +1,58 @@ +package admin + +import ( + "bytes" + "fmt" + "io/ioutil" + "os" + "testing" + + "github.com/argoproj/argo-cd/v2/util/io" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + v1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" +) + +func TestGetOutWriter_InlineOff(t *testing.T) { + out, closer, err := getOutWriter(false, "") + require.NoError(t, err) + defer io.Close(closer) + + assert.Equal(t, os.Stdout, out) +} + +func TestGetOutWriter_InlineOn(t *testing.T) { + tmpFile, err := ioutil.TempFile("", "") + require.NoError(t, err) + defer func() { + _ = os.Remove(tmpFile.Name()) + _ = os.Remove(fmt.Sprintf("%s.back", tmpFile.Name())) + }() + + out, closer, err := getOutWriter(true, tmpFile.Name()) + require.NoError(t, err) + defer io.Close(closer) + + assert.Equal(t, tmpFile.Name(), out.(*os.File).Name()) + _, err = os.Stat(fmt.Sprintf("%s.back", tmpFile.Name())) + assert.NoError(t, err, "Back file must be created") +} + +func TestPrintResources_Secret_YAML(t *testing.T) { + out := bytes.Buffer{} + err := PrintResources("yaml", &out, &v1.Secret{ + ObjectMeta: metav1.ObjectMeta{Name: "my-secret"}, + Data: map[string][]byte{"my-secret-key": []byte("my-secret-data")}, + }) + assert.NoError(t, err) + + assert.Equal(t, `apiVersion: v1 +kind: Secret +metadata: + name: my-secret +stringData: + my-secret-key: my-secret-data +`, out.String()) +} diff --git a/cmd/argocd-util/commands/project.go b/cmd/argocd/commands/admin/project.go similarity index 90% rename from cmd/argocd-util/commands/project.go rename to cmd/argocd/commands/admin/project.go index e4f484c610528..e2478460a98da 100644 --- a/cmd/argocd-util/commands/project.go +++ b/cmd/argocd/commands/admin/project.go @@ -1,4 +1,4 @@ -package commands +package admin import ( "context" @@ -13,6 +13,7 @@ import ( appclient "github.com/argoproj/argo-cd/v2/pkg/client/clientset/versioned/typed/application/v1alpha1" "github.com/argoproj/argo-cd/v2/util/cli" "github.com/argoproj/argo-cd/v2/util/errors" + "github.com/argoproj/argo-cd/v2/util/io" "github.com/argoproj/gitops-engine/pkg/utils/kube" "github.com/spf13/cobra" @@ -35,12 +36,13 @@ func NewProjectsCommand() *cobra.Command { return command } -// NewGenProjectConfigCommand generates declarative configuration file for given project +// NewGenProjectSpecCommand generates declarative configuration file for given project func NewGenProjectSpecCommand() *cobra.Command { var ( opts cmdutil.ProjectOpts fileURL string outputFormat string + inline bool ) var command = &cobra.Command{ Use: "generate-spec PROJECT", @@ -49,13 +51,16 @@ func NewGenProjectSpecCommand() *cobra.Command { proj, err := cmdutil.ConstructAppProj(fileURL, args, opts, c) errors.CheckError(err) - var printResources []interface{} - printResources = append(printResources, proj) - errors.CheckError(cmdutil.PrintResources(printResources, outputFormat)) + out, closer, err := getOutWriter(inline, fileURL) + errors.CheckError(err) + defer io.Close(closer) + + errors.CheckError(PrintResources(outputFormat, out, proj)) }, } command.Flags().StringVarP(&outputFormat, "output", "o", "yaml", "Output format. One of: json|yaml") command.Flags().StringVarP(&fileURL, "file", "f", "", "Filename or URL to Kubernetes manifests for the project") + command.Flags().BoolVarP(&inline, "inline", "i", false, "If set then generated resource is written back to the file specified in --file flag") // Only complete files with appropriate extension. err := command.Flags().SetAnnotation("file", cobra.BashCompFilenameExt, []string{"json", "yaml", "yml"}) @@ -138,10 +143,10 @@ func NewUpdatePolicyRuleCommand() *cobra.Command { Use: "update-role-policy PROJECT_GLOB MODIFICATION ACTION", Short: "Implement bulk project role update. Useful to back-fill existing project policies or remove obsolete actions.", Example: ` # Add policy that allows executing any action (action/*) to roles which name matches to *deployer* in all projects - argocd-util projects update-role-policy '*' set 'action/*' --role '*deployer*' --resource applications --scope '*' --permission allow + argocd admin projects update-role-policy '*' set 'action/*' --role '*deployer*' --resource applications --scope '*' --permission allow # Remove policy that which manages running (action/*) from all roles which name matches *deployer* in all projects - argocd-util projects update-role-policy '*' remove override --role '*deployer*' + argocd admin projects update-role-policy '*' remove override --role '*deployer*' `, Run: func(c *cobra.Command, args []string) { if len(args) != 3 { diff --git a/cmd/argocd-util/commands/project_allowlist.go b/cmd/argocd/commands/admin/project_allowlist.go similarity index 99% rename from cmd/argocd-util/commands/project_allowlist.go rename to cmd/argocd/commands/admin/project_allowlist.go index 96d52e15573fb..2d9dd85b363fe 100644 --- a/cmd/argocd-util/commands/project_allowlist.go +++ b/cmd/argocd/commands/admin/project_allowlist.go @@ -1,4 +1,4 @@ -package commands +package admin import ( "bufio" diff --git a/cmd/argocd-util/commands/project_allowlist_test.go b/cmd/argocd/commands/admin/project_allowlist_test.go similarity index 84% rename from cmd/argocd-util/commands/project_allowlist_test.go rename to cmd/argocd/commands/admin/project_allowlist_test.go index ab81f8e61d7e9..dea4d29297b96 100644 --- a/cmd/argocd-util/commands/project_allowlist_test.go +++ b/cmd/argocd/commands/admin/project_allowlist_test.go @@ -1,4 +1,4 @@ -package commands +package admin import ( "reflect" @@ -30,9 +30,9 @@ func TestProjectAllowListGen(t *testing.T) { }) assert.NoError(t, err) - var patchSeverPreferedResources *mpatch.Patch + var patchSeverPreferredResources *mpatch.Patch discoClient := &discovery.DiscoveryClient{} - patchSeverPreferedResources, err = mpatch.PatchInstanceMethodByName(reflect.TypeOf(discoClient), "ServerPreferredResources", func(*discovery.DiscoveryClient) ([]*metav1.APIResourceList, error) { + patchSeverPreferredResources, err = mpatch.PatchInstanceMethodByName(reflect.TypeOf(discoClient), "ServerPreferredResources", func(*discovery.DiscoveryClient) ([]*metav1.APIResourceList, error) { res := metav1.APIResource{ Name: "services", Kind: "Service", @@ -47,7 +47,7 @@ func TestProjectAllowListGen(t *testing.T) { assert.NoError(t, err) err = patch.Unpatch() assert.NoError(t, err) - err = patchSeverPreferedResources.Unpatch() + err = patchSeverPreferredResources.Unpatch() err = patch.Unpatch() }() } diff --git a/cmd/argocd-util/commands/project_test.go b/cmd/argocd/commands/admin/project_test.go similarity index 99% rename from cmd/argocd-util/commands/project_test.go rename to cmd/argocd/commands/admin/project_test.go index 8447b755af31f..f01ebb5c9acf0 100644 --- a/cmd/argocd-util/commands/project_test.go +++ b/cmd/argocd/commands/admin/project_test.go @@ -1,4 +1,4 @@ -package commands +package admin import ( "context" diff --git a/cmd/argocd-util/commands/repo.go b/cmd/argocd/commands/admin/repo.go similarity index 80% rename from cmd/argocd-util/commands/repo.go rename to cmd/argocd/commands/admin/repo.go index 5b9855ef05273..d6e3ae9339e30 100644 --- a/cmd/argocd-util/commands/repo.go +++ b/cmd/argocd/commands/admin/repo.go @@ -1,4 +1,4 @@ -package commands +package admin import ( "context" @@ -9,7 +9,6 @@ import ( log "github.com/sirupsen/logrus" "github.com/spf13/cobra" apiv1 "k8s.io/api/core/v1" - apierr "k8s.io/apimachinery/pkg/api/errors" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/client-go/kubernetes/fake" @@ -49,25 +48,25 @@ func NewGenRepoSpecCommand() *cobra.Command { // For better readability and easier formatting var repoAddExamples = ` # Add a Git repository via SSH using a private key for authentication, ignoring the server's host key: - argocd-util repo generate-spec git@git.example.com:repos/repo --insecure-ignore-host-key --ssh-private-key-path ~/id_rsa + argocd admin repo generate-spec git@git.example.com:repos/repo --insecure-ignore-host-key --ssh-private-key-path ~/id_rsa # Add a Git repository via SSH on a non-default port - need to use ssh:// style URLs here - argocd-util repo generate-spec ssh://git@git.example.com:2222/repos/repo --ssh-private-key-path ~/id_rsa + argocd admin repo generate-spec ssh://git@git.example.com:2222/repos/repo --ssh-private-key-path ~/id_rsa # Add a private Git repository via HTTPS using username/password and TLS client certificates: - argocd-util repo generate-spec https://git.example.com/repos/repo --username git --password secret --tls-client-cert-path ~/mycert.crt --tls-client-cert-key-path ~/mycert.key + argocd admin repo generate-spec https://git.example.com/repos/repo --username git --password secret --tls-client-cert-path ~/mycert.crt --tls-client-cert-key-path ~/mycert.key # Add a private Git repository via HTTPS using username/password without verifying the server's TLS certificate - argocd-util repo generate-spec https://git.example.com/repos/repo --username git --password secret --insecure-skip-server-verification + argocd admin repo generate-spec https://git.example.com/repos/repo --username git --password secret --insecure-skip-server-verification # Add a public Helm repository named 'stable' via HTTPS - argocd-util repo generate-spec https://charts.helm.sh/stable --type helm --name stable + argocd admin repo generate-spec https://charts.helm.sh/stable --type helm --name stable # Add a private Helm repository named 'stable' via HTTPS - argocd-util repo generate-spec https://charts.helm.sh/stable --type helm --name stable --username test --password test + argocd admin repo generate-spec https://charts.helm.sh/stable --type helm --name stable --username test --password test # Add a private Helm OCI-based repository named 'stable' via HTTPS - argocd-util repo generate-spec helm-oci-registry.cn-zhangjiakou.cr.aliyuncs.com --type helm --name stable --enable-oci --username test --password test + argocd admin repo generate-spec helm-oci-registry.cn-zhangjiakou.cr.aliyuncs.com --type helm --name stable --enable-oci --username test --password test ` var command = &cobra.Command{ @@ -155,21 +154,13 @@ func NewGenRepoSpecCommand() *cobra.Command { settingsMgr := settings.NewSettingsManager(context.Background(), kubeClientset, ArgoCDNamespace) argoDB := db.NewDB(ArgoCDNamespace, settingsMgr, kubeClientset) - var printResources []interface{} _, err := argoDB.CreateRepository(context.Background(), &repoOpts.Repo) errors.CheckError(err) secret, err := kubeClientset.CoreV1().Secrets(ArgoCDNamespace).Get(context.Background(), db.RepoURLToSecretName(repoSecretPrefix, repoOpts.Repo.Repo), v1.GetOptions{}) - if err != nil { - if !apierr.IsNotFound(err) { - errors.CheckError(err) - } - } else { - cmdutil.ConvertSecretData(secret) - printResources = append(printResources, secret) - } + errors.CheckError(err) - errors.CheckError(cmdutil.PrintResources(printResources, outputFormat)) + errors.CheckError(PrintResources(outputFormat, os.Stdout, secret)) }, } command.Flags().StringVarP(&outputFormat, "output", "o", "yaml", "Output format. One of: json|yaml") diff --git a/cmd/argocd-util/commands/secrets_redactor_test.go b/cmd/argocd/commands/admin/secrets_redactor_test.go similarity index 99% rename from cmd/argocd-util/commands/secrets_redactor_test.go rename to cmd/argocd/commands/admin/secrets_redactor_test.go index b8cc43135ac33..cb1b3e78dbfea 100644 --- a/cmd/argocd-util/commands/secrets_redactor_test.go +++ b/cmd/argocd/commands/admin/secrets_redactor_test.go @@ -1,4 +1,4 @@ -package commands +package admin import ( "testing" diff --git a/cmd/argocd-util/commands/settings.go b/cmd/argocd/commands/admin/settings.go similarity index 96% rename from cmd/argocd-util/commands/settings.go rename to cmd/argocd/commands/admin/settings.go index e6b8e276f9815..78bf8da0839d0 100644 --- a/cmd/argocd-util/commands/settings.go +++ b/cmd/argocd/commands/admin/settings.go @@ -1,4 +1,4 @@ -package commands +package admin import ( "bytes" @@ -303,10 +303,10 @@ func NewValidateSettingsCommand(cmdCtx commandContext) *cobra.Command { Long: "Validates settings specified in 'argocd-cm' ConfigMap and 'argocd-secret' Secret", Example: ` #Validates all settings in the specified YAML file -argocd-util settings validate --argocd-cm-path ./argocd-cm.yaml +argocd admin settings validate --argocd-cm-path ./argocd-cm.yaml #Validates accounts and plugins settings in Kubernetes cluster of current kubeconfig context -argocd-util settings validate --group accounts --group plugins --load-cluster-settings`, +argocd admin settings validate --group accounts --group plugins --load-cluster-settings`, Run: func(c *cobra.Command, args []string) { settingsManager, err := cmdCtx.createSettingsManager() errors.CheckError(err) @@ -392,7 +392,7 @@ func NewResourceIgnoreDifferencesCommand(cmdCtx commandContext) *cobra.Command { Short: "Renders fields excluded from diffing", Long: "Renders ignored fields using the 'ignoreDifferences' setting specified in the 'resource.customizations' field of 'argocd-cm' ConfigMap", Example: ` -argocd-util settings resource-overrides ignore-differences ./deploy.yaml --argocd-cm-path ./argocd-cm.yaml`, +argocd admin settings resource-overrides ignore-differences ./deploy.yaml --argocd-cm-path ./argocd-cm.yaml`, Run: func(c *cobra.Command, args []string) { if len(args) < 1 { c.HelpFunc()(c, args) @@ -436,7 +436,7 @@ func NewResourceHealthCommand(cmdCtx commandContext) *cobra.Command { Short: "Assess resource health", Long: "Assess resource health using the lua script configured in the 'resource.customizations' field of 'argocd-cm' ConfigMap", Example: ` -argocd-util settings resource-overrides health ./deploy.yaml --argocd-cm-path ./argocd-cm.yaml`, +argocd admin settings resource-overrides health ./deploy.yaml --argocd-cm-path ./argocd-cm.yaml`, Run: func(c *cobra.Command, args []string) { if len(args) < 1 { c.HelpFunc()(c, args) @@ -467,7 +467,7 @@ func NewResourceActionListCommand(cmdCtx commandContext) *cobra.Command { Short: "List available resource actions", Long: "List actions available for given resource action using the lua scripts configured in the 'resource.customizations' field of 'argocd-cm' ConfigMap and outputs updated fields", Example: ` -argocd-util settings resource-overrides action list /tmp/deploy.yaml --argocd-cm-path ./argocd-cm.yaml`, +argocd admin settings resource-overrides action list /tmp/deploy.yaml --argocd-cm-path ./argocd-cm.yaml`, Run: func(c *cobra.Command, args []string) { if len(args) < 1 { c.HelpFunc()(c, args) @@ -510,7 +510,7 @@ func NewResourceActionRunCommand(cmdCtx commandContext) *cobra.Command { Short: "Executes resource action", Long: "Executes resource action using the lua script configured in the 'resource.customizations' field of 'argocd-cm' ConfigMap and outputs updated fields", Example: ` -argocd-util settings resource-overrides action run /tmp/deploy.yaml restart --argocd-cm-path ./argocd-cm.yaml`, +argocd admin settings resource-overrides action run /tmp/deploy.yaml restart --argocd-cm-path ./argocd-cm.yaml`, Run: func(c *cobra.Command, args []string) { if len(args) < 2 { c.HelpFunc()(c, args) diff --git a/cmd/argocd-util/commands/settings_rbac.go b/cmd/argocd/commands/admin/settings_rbac.go similarity index 96% rename from cmd/argocd-util/commands/settings_rbac.go rename to cmd/argocd/commands/admin/settings_rbac.go index 50113d99845f8..8aaf0e13c9a5d 100644 --- a/cmd/argocd-util/commands/settings_rbac.go +++ b/cmd/argocd/commands/admin/settings_rbac.go @@ -1,4 +1,4 @@ -package commands +package admin import ( "context" @@ -101,19 +101,19 @@ something. Example: ` # Check whether role some:role has permissions to create an application in the # 'default' project, using a local policy.csv file -argocd-util settings rbac can some:role create application 'default/app' --policy-file policy.csv +argocd admin settings rbac can some:role create application 'default/app' --policy-file policy.csv # Policy file can also be K8s config map with data keys like argocd-rbac-cm, # i.e. 'policy.csv' and (optionally) 'policy.default' -argocd-util settings rbac can some:role create application 'default/app' --policy-file argocd-rbac-cm.yaml +argocd admin settings rbac can some:role create application 'default/app' --policy-file argocd-rbac-cm.yaml # If --policy-file is not given, the ConfigMap 'argocd-rbac-cm' from K8s is # used. You need to specify the argocd namespace, and make sure that your # current Kubernetes context is pointing to the cluster Argo CD is running in -argocd-util settings rbac can some:role create application 'default/app' --namespace argocd +argocd admin settings rbac can some:role create application 'default/app' --namespace argocd # You can override a possibly configured default role -argocd-util settings rbac can someuser create application 'default/app' --default-role role:readonly +argocd admin settings rbac can someuser create application 'default/app' --default-role role:readonly `, Run: func(c *cobra.Command, args []string) { diff --git a/cmd/argocd-util/commands/settings_rbac_test.go b/cmd/argocd/commands/admin/settings_rbac_test.go similarity index 99% rename from cmd/argocd-util/commands/settings_rbac_test.go rename to cmd/argocd/commands/admin/settings_rbac_test.go index 6cae85b89a9e7..0574f409e4c25 100644 --- a/cmd/argocd-util/commands/settings_rbac_test.go +++ b/cmd/argocd/commands/admin/settings_rbac_test.go @@ -1,4 +1,4 @@ -package commands +package admin import ( "io/ioutil" diff --git a/cmd/argocd-util/commands/settings_test.go b/cmd/argocd/commands/admin/settings_test.go similarity index 99% rename from cmd/argocd-util/commands/settings_test.go rename to cmd/argocd/commands/admin/settings_test.go index 6145b979b8b8e..9f5da58a42725 100644 --- a/cmd/argocd-util/commands/settings_test.go +++ b/cmd/argocd/commands/admin/settings_test.go @@ -1,4 +1,4 @@ -package commands +package admin import ( "bytes" diff --git a/cmd/argocd-util/commands/testdata/rbac/argocd-rbac-cm.yaml b/cmd/argocd/commands/admin/testdata/rbac/argocd-rbac-cm.yaml similarity index 100% rename from cmd/argocd-util/commands/testdata/rbac/argocd-rbac-cm.yaml rename to cmd/argocd/commands/admin/testdata/rbac/argocd-rbac-cm.yaml diff --git a/cmd/argocd-util/commands/testdata/rbac/policy.csv b/cmd/argocd/commands/admin/testdata/rbac/policy.csv similarity index 100% rename from cmd/argocd-util/commands/testdata/rbac/policy.csv rename to cmd/argocd/commands/admin/testdata/rbac/policy.csv diff --git a/cmd/argocd-util/commands/testdata/test_clusterrole.yaml b/cmd/argocd/commands/admin/testdata/test_clusterrole.yaml similarity index 100% rename from cmd/argocd-util/commands/testdata/test_clusterrole.yaml rename to cmd/argocd/commands/admin/testdata/test_clusterrole.yaml diff --git a/cmd/argocd/commands/app.go b/cmd/argocd/commands/app.go index 6d0a33189c5f5..002a48b292e7e 100644 --- a/cmd/argocd/commands/app.go +++ b/cmd/argocd/commands/app.go @@ -101,11 +101,12 @@ func NewApplicationCommand(clientOpts *argocdclient.ClientOptions) *cobra.Comman // NewApplicationCreateCommand returns a new instance of an `argocd app create` command func NewApplicationCreateCommand(clientOpts *argocdclient.ClientOptions) *cobra.Command { var ( - appOpts cmdutil.AppOptions - fileURL string - appName string - upsert bool - labels []string + appOpts cmdutil.AppOptions + fileURL string + appName string + upsert bool + labels []string + annotations []string ) var command = &cobra.Command{ Use: "create APPNAME", @@ -132,7 +133,7 @@ func NewApplicationCreateCommand(clientOpts *argocdclient.ClientOptions) *cobra. Run: func(c *cobra.Command, args []string) { argocdClient := argocdclient.NewClientOrDie(clientOpts) - app, err := cmdutil.ConstructApp(fileURL, appName, labels, args, appOpts, c.Flags()) + app, err := cmdutil.ConstructApp(fileURL, appName, labels, annotations, args, appOpts, c.Flags()) errors.CheckError(err) if app.Name == "" { @@ -156,6 +157,7 @@ func NewApplicationCreateCommand(clientOpts *argocdclient.ClientOptions) *cobra. command.Flags().BoolVar(&upsert, "upsert", false, "Allows to override application with the same name even if supplied application spec is different from existing spec") command.Flags().StringVarP(&fileURL, "file", "f", "", "Filename or URL to Kubernetes manifests for the app") command.Flags().StringArrayVarP(&labels, "label", "l", []string{}, "Labels to apply to the app") + command.Flags().StringArrayVarP(&annotations, "annotations", "", []string{}, "Set metadata annotations (e.g. example=value)") // Only complete files with appropriate extension. err := command.Flags().SetAnnotation("file", cobra.BashCompFilenameExt, []string{"json", "yaml", "yml"}) if err != nil { diff --git a/cmd/argocd/commands/cluster.go b/cmd/argocd/commands/cluster.go index 6f05638120782..44d631865dc7b 100644 --- a/cmd/argocd/commands/cluster.go +++ b/cmd/argocd/commands/cluster.go @@ -127,7 +127,7 @@ func NewClusterAddCommand(clientOpts *argocdclient.ClientOptions, pathOpts *clie if clusterOpts.Name != "" { contextName = clusterOpts.Name } - clst := cmdutil.NewCluster(contextName, clusterOpts.Namespaces, conf, managerBearerToken, awsAuthConf, execProviderConf) + clst := cmdutil.NewCluster(contextName, clusterOpts.Namespaces, clusterOpts.ClusterResources, conf, managerBearerToken, awsAuthConf, execProviderConf) if clusterOpts.InCluster { clst.Server = argoappv1.KubernetesInternalAPIServerAddr } diff --git a/cmd/argocd/commands/headless/forward.go b/cmd/argocd/commands/headless/forward.go new file mode 100644 index 0000000000000..c5384be85bd99 --- /dev/null +++ b/cmd/argocd/commands/headless/forward.go @@ -0,0 +1,97 @@ +package headless + +import ( + "context" + "fmt" + "sync" + "time" + + "github.com/go-redis/redis/v8" + "k8s.io/client-go/tools/clientcmd" + + "github.com/argoproj/argo-cd/v2/reposerver/apiclient" + repoapiclient "github.com/argoproj/argo-cd/v2/reposerver/apiclient" + "github.com/argoproj/argo-cd/v2/util/cache" + "github.com/argoproj/argo-cd/v2/util/io" + kubeutil "github.com/argoproj/argo-cd/v2/util/kube" +) + +type forwardCacheClient struct { + namespace string + init sync.Once + client cache.CacheClient + err error +} + +func (c *forwardCacheClient) doLazy(action func(client cache.CacheClient) error) error { + c.init.Do(func() { + overrides := clientcmd.ConfigOverrides{} + redisPort, err := kubeutil.PortForward(6379, c.namespace, &overrides, + "app.kubernetes.io/name=argocd-redis-ha-haproxy", "app.kubernetes.io/name=argocd-redis") + if err != nil { + c.err = err + return + } + + redisClient := redis.NewClient(&redis.Options{Addr: fmt.Sprintf("localhost:%d", redisPort)}) + c.client = cache.NewRedisCache(redisClient, time.Hour) + }) + if c.err != nil { + return c.err + } + return action(c.client) +} + +func (c *forwardCacheClient) Set(item *cache.Item) error { + return c.doLazy(func(client cache.CacheClient) error { + return client.Set(item) + }) +} + +func (c *forwardCacheClient) Get(key string, obj interface{}) error { + return c.doLazy(func(client cache.CacheClient) error { + return client.Get(key, obj) + }) +} + +func (c *forwardCacheClient) Delete(key string) error { + return c.doLazy(func(client cache.CacheClient) error { + return client.Delete(key) + }) +} + +func (c *forwardCacheClient) OnUpdated(ctx context.Context, key string, callback func() error) error { + return c.doLazy(func(client cache.CacheClient) error { + return client.OnUpdated(ctx, key, callback) + }) +} + +func (c *forwardCacheClient) NotifyUpdated(key string) error { + return c.doLazy(func(client cache.CacheClient) error { + return client.NotifyUpdated(key) + }) +} + +type forwardRepoClientset struct { + namespace string + init sync.Once + repoClientset repoapiclient.Clientset + err error +} + +func (c *forwardRepoClientset) NewRepoServerClient() (io.Closer, repoapiclient.RepoServerServiceClient, error) { + c.init.Do(func() { + overrides := clientcmd.ConfigOverrides{} + repoServerPort, err := kubeutil.PortForward(8081, c.namespace, &overrides, "app.kubernetes.io/name=argocd-repo-server") + if err != nil { + c.err = err + return + } + c.repoClientset = apiclient.NewRepoServerClientset(fmt.Sprintf("localhost:%d", repoServerPort), 60, apiclient.TLSConfiguration{ + DisableTLS: false, StrictValidation: false}) + }) + if c.err != nil { + return nil, nil, c.err + } + return c.repoClientset.NewRepoServerClient() +} diff --git a/cmd/argocd/commands/headless/headless.go b/cmd/argocd/commands/headless/headless.go new file mode 100644 index 0000000000000..23813142c23e5 --- /dev/null +++ b/cmd/argocd/commands/headless/headless.go @@ -0,0 +1,152 @@ +package headless + +import ( + "context" + "fmt" + "net" + "os" + "time" + + "github.com/alicebob/miniredis/v2" + "github.com/go-redis/redis/v8" + "github.com/golang/protobuf/ptypes/empty" + log "github.com/sirupsen/logrus" + "github.com/spf13/cobra" + "k8s.io/apimachinery/pkg/util/runtime" + "k8s.io/client-go/kubernetes" + "k8s.io/client-go/tools/cache" + "k8s.io/client-go/tools/clientcmd" + + argoapi "github.com/argoproj/argo-cd/v2/pkg/apiclient" + "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1" + appclientset "github.com/argoproj/argo-cd/v2/pkg/client/clientset/versioned" + "github.com/argoproj/argo-cd/v2/server" + servercache "github.com/argoproj/argo-cd/v2/server/cache" + cacheutil "github.com/argoproj/argo-cd/v2/util/cache" + appstatecache "github.com/argoproj/argo-cd/v2/util/cache/appstate" + "github.com/argoproj/argo-cd/v2/util/cli" + "github.com/argoproj/argo-cd/v2/util/io" + "github.com/argoproj/argo-cd/v2/util/localconfig" +) + +func testAPI(clientOpts *argoapi.ClientOptions) error { + apiClient, err := argoapi.NewClient(clientOpts) + if err != nil { + return err + } + closer, versionClient, err := apiClient.NewVersionClient() + if err != nil { + return err + } + defer io.Close(closer) + _, err = versionClient.Version(context.Background(), &empty.Empty{}) + return err +} + +func addKubectlFlagsToCmd(cmd *cobra.Command) clientcmd.ClientConfig { + loadingRules := clientcmd.NewDefaultClientConfigLoadingRules() + loadingRules.DefaultClientConfig = &clientcmd.DefaultClientConfig + overrides := clientcmd.ConfigOverrides{} + kflags := clientcmd.RecommendedConfigOverrideFlags("") + cmd.Flags().StringVar(&loadingRules.ExplicitPath, "kubeconfig", "", "Path to a kube config. Only required if out-of-cluster") + clientcmd.BindOverrideFlags(&overrides, cmd.PersistentFlags(), kflags) + return clientcmd.NewInteractiveDeferredLoadingClientConfig(loadingRules, &overrides, os.Stdin) +} + +// InitCommand allows executing command in a headless mode: on the fly starts Argo CD API server and +// changes provided client options to use started API server port +func InitCommand(cmd *cobra.Command, clientOpts *argoapi.ClientOptions, port *int) *cobra.Command { + ctx, cancel := context.WithCancel(context.Background()) + clientConfig := addKubectlFlagsToCmd(cmd) + cmd.PersistentPreRunE = func(cmd *cobra.Command, args []string) error { + startInProcessAPI := clientOpts.Core + if !startInProcessAPI { + localCfg, err := localconfig.ReadLocalConfig(clientOpts.ConfigPath) + if err != nil { + return err + } + if localCfg != nil { + configCtx, err := localCfg.ResolveContext(clientOpts.Context) + if err != nil { + return err + } + startInProcessAPI = configCtx.Server.Core + } + } + if !startInProcessAPI { + return nil + } + + // get rid of logging error handler + runtime.ErrorHandlers = runtime.ErrorHandlers[1:] + cli.SetLogLevel(log.ErrorLevel.String()) + log.SetLevel(log.ErrorLevel) + os.Setenv(v1alpha1.EnvVarFakeInClusterConfig, "true") + if port == nil || *port == 0 { + ln, err := net.Listen("tcp", "localhost:0") + if err != nil { + return err + } + port = &ln.Addr().(*net.TCPAddr).Port + io.Close(ln) + } + + restConfig, err := clientConfig.ClientConfig() + if err != nil { + return err + } + appClientset, err := appclientset.NewForConfig(restConfig) + if err != nil { + return err + } + kubeClientset, err := kubernetes.NewForConfig(restConfig) + if err != nil { + return err + } + + namespace, _, err := clientConfig.Namespace() + if err != nil { + return err + } + + mr, err := miniredis.Run() + if err != nil { + return err + } + + appstateCache := appstatecache.NewCache(cacheutil.NewCache(&forwardCacheClient{namespace: namespace}), time.Hour) + srv := server.NewServer(ctx, server.ArgoCDServerOpts{ + EnableGZip: false, + Namespace: namespace, + ListenPort: *port, + AppClientset: appClientset, + DisableAuth: true, + RedisClient: redis.NewClient(&redis.Options{Addr: mr.Addr()}), + Cache: servercache.NewCache(appstateCache, 0, 0, 0), + KubeClientset: kubeClientset, + Insecure: true, + ListenHost: "localhost", + RepoClientset: &forwardRepoClientset{namespace: namespace}, + }) + + go srv.Run(ctx, *port, 0) + clientOpts.ServerAddr = fmt.Sprintf("localhost:%d", *port) + clientOpts.PlainText = true + if !cache.WaitForCacheSync(ctx.Done(), srv.Initialized) { + log.Fatal("Timed out waiting for project cache to sync") + } + tries := 5 + for i := 0; i < tries; i++ { + err = testAPI(clientOpts) + if err == nil { + break + } + time.Sleep(time.Second) + } + return err + } + cmd.PostRun = func(cmd *cobra.Command, args []string) { + cancel() + } + return cmd +} diff --git a/cmd/argocd/commands/login.go b/cmd/argocd/commands/login.go index 8aa5e314be6af..8d8f1a861edad 100644 --- a/cmd/argocd/commands/login.go +++ b/cmd/argocd/commands/login.go @@ -45,16 +45,26 @@ func NewLoginCommand(globalClientOpts *argocdclient.ClientOptions) *cobra.Comman Use: "login SERVER", Short: "Log in to Argo CD", Long: "Log in to Argo CD", + Example: `# Login to Argo CD using a username and password +argocd login cd.argoproj.io + +# Login to Argo CD using SSO +argocd login cd.argoproj.io --sso + +# Configure direct access using Kubernetes API server +argocd login cd.argoproj.io --core`, Run: func(c *cobra.Command, args []string) { var server string - if len(args) != 1 && !globalClientOpts.PortForward { + if len(args) != 1 && !globalClientOpts.PortForward && !globalClientOpts.Core { c.HelpFunc()(c, args) os.Exit(1) } if globalClientOpts.PortForward { server = "port-forward" + } else if globalClientOpts.Core { + server = "kubernetes" } else { server = args[0] tlsTestResult, err := grpc_util.TestTLS(server) @@ -86,9 +96,6 @@ func NewLoginCommand(globalClientOpts *argocdclient.ClientOptions) *cobra.Comman PortForwardNamespace: globalClientOpts.PortForwardNamespace, Headers: globalClientOpts.Headers, } - acdClient := argocdclient.NewClientOrDie(&clientOpts) - setConn, setIf := acdClient.NewSettingsClientOrDie() - defer io.Close(setConn) if ctxName == "" { ctxName = server @@ -101,28 +108,32 @@ func NewLoginCommand(globalClientOpts *argocdclient.ClientOptions) *cobra.Comman // Perform the login var tokenString string var refreshToken string - if !sso { - tokenString = passwordLogin(acdClient, username, password) - } else { - ctx := context.Background() - httpClient, err := acdClient.HTTPClient() - errors.CheckError(err) - ctx = oidc.ClientContext(ctx, httpClient) - acdSet, err := setIf.Get(ctx, &settingspkg.SettingsQuery{}) - errors.CheckError(err) - oauth2conf, provider, err := acdClient.OIDCConfig(ctx, acdSet) + if !globalClientOpts.Core { + acdClient := argocdclient.NewClientOrDie(&clientOpts) + setConn, setIf := acdClient.NewSettingsClientOrDie() + defer io.Close(setConn) + if !sso { + tokenString = passwordLogin(acdClient, username, password) + } else { + ctx := context.Background() + httpClient, err := acdClient.HTTPClient() + errors.CheckError(err) + ctx = oidc.ClientContext(ctx, httpClient) + acdSet, err := setIf.Get(ctx, &settingspkg.SettingsQuery{}) + errors.CheckError(err) + oauth2conf, provider, err := acdClient.OIDCConfig(ctx, acdSet) + errors.CheckError(err) + tokenString, refreshToken = oauth2Login(ctx, ssoPort, acdSet.GetOIDCConfig(), oauth2conf, provider) + } + parser := &jwt.Parser{ + ValidationHelper: jwt.NewValidationHelper(jwt.WithoutClaimsValidation(), jwt.WithoutAudienceValidation()), + } + claims := jwt.MapClaims{} + _, _, err := parser.ParseUnverified(tokenString, &claims) errors.CheckError(err) - tokenString, refreshToken = oauth2Login(ctx, ssoPort, acdSet.GetOIDCConfig(), oauth2conf, provider) + fmt.Printf("'%s' logged in successfully\n", userDisplayName(claims)) } - parser := &jwt.Parser{ - ValidationHelper: jwt.NewValidationHelper(jwt.WithoutClaimsValidation(), jwt.WithoutAudienceValidation()), - } - claims := jwt.MapClaims{} - _, _, err := parser.ParseUnverified(tokenString, &claims) - errors.CheckError(err) - - fmt.Printf("'%s' logged in successfully\n", userDisplayName(claims)) // login successful. Persist the config localCfg, err := localconfig.ReadLocalConfig(globalClientOpts.ConfigPath) errors.CheckError(err) @@ -135,6 +146,7 @@ func NewLoginCommand(globalClientOpts *argocdclient.ClientOptions) *cobra.Comman Insecure: globalClientOpts.Insecure, GRPCWeb: globalClientOpts.GRPCWeb, GRPCWebRootPath: globalClientOpts.GRPCWebRootPath, + Core: globalClientOpts.Core, }) localCfg.UpsertUser(localconfig.User{ Name: ctxName, diff --git a/cmd/argocd/commands/project_role.go b/cmd/argocd/commands/project_role.go index 5442c0d8833d8..efaa60032e40e 100644 --- a/cmd/argocd/commands/project_role.go +++ b/cmd/argocd/commands/project_role.go @@ -265,7 +265,7 @@ func NewProjectRoleCreateTokenCommand(clientOpts *argocdclient.ClientOptions) *c }, } command.Flags().StringVarP(&expiresIn, "expires-in", "e", "", - "Duration before the token will expire, eg \"12h\", \"7d\". (Default: No expiration)", + "Duration before the token will expire, e.g. \"12h\", \"7d\". (Default: No expiration)", ) command.Flags().StringVarP(&tokenID, "id", "i", "", "Token unique identifier. (Default: Random UUID)") command.Flags().BoolVarP(&outputTokenOnly, "token-only", "t", false, "Output token only - for use in scripts.") diff --git a/cmd/argocd/commands/root.go b/cmd/argocd/commands/root.go index 42c274090bbd1..f5289948caf34 100644 --- a/cmd/argocd/commands/root.go +++ b/cmd/argocd/commands/root.go @@ -4,6 +4,8 @@ import ( "github.com/spf13/cobra" "k8s.io/client-go/tools/clientcmd" + "github.com/argoproj/argo-cd/v2/cmd/argocd/commands/admin" + "github.com/argoproj/argo-cd/v2/cmd/argocd/commands/headless" cmdutil "github.com/argoproj/argo-cd/v2/cmd/util" argocdclient "github.com/argoproj/argo-cd/v2/pkg/apiclient" "github.com/argoproj/argo-cd/v2/util/cli" @@ -38,19 +40,20 @@ func NewCommand() *cobra.Command { } command.AddCommand(NewCompletionCommand()) - command.AddCommand(NewVersionCmd(&clientOpts)) - command.AddCommand(NewClusterCommand(&clientOpts, pathOpts)) - command.AddCommand(NewApplicationCommand(&clientOpts)) + command.AddCommand(headless.InitCommand(NewVersionCmd(&clientOpts), &clientOpts, nil)) + command.AddCommand(headless.InitCommand(NewClusterCommand(&clientOpts, pathOpts), &clientOpts, nil)) + command.AddCommand(headless.InitCommand(NewApplicationCommand(&clientOpts), &clientOpts, nil)) command.AddCommand(NewLoginCommand(&clientOpts)) command.AddCommand(NewReloginCommand(&clientOpts)) - command.AddCommand(NewRepoCommand(&clientOpts)) - command.AddCommand(NewRepoCredsCommand(&clientOpts)) + command.AddCommand(headless.InitCommand(NewRepoCommand(&clientOpts), &clientOpts, nil)) + command.AddCommand(headless.InitCommand(NewRepoCredsCommand(&clientOpts), &clientOpts, nil)) command.AddCommand(NewContextCommand(&clientOpts)) - command.AddCommand(NewProjectCommand(&clientOpts)) - command.AddCommand(NewAccountCommand(&clientOpts)) + command.AddCommand(headless.InitCommand(NewProjectCommand(&clientOpts), &clientOpts, nil)) + command.AddCommand(headless.InitCommand(NewAccountCommand(&clientOpts), &clientOpts, nil)) command.AddCommand(NewLogoutCommand(&clientOpts)) - command.AddCommand(NewCertCommand(&clientOpts)) - command.AddCommand(NewGPGCommand(&clientOpts)) + command.AddCommand(headless.InitCommand(NewCertCommand(&clientOpts), &clientOpts, nil)) + command.AddCommand(headless.InitCommand(NewGPGCommand(&clientOpts), &clientOpts, nil)) + command.AddCommand(admin.NewAdminCommand()) defaultLocalConfigPath, err := localconfig.DefaultLocalConfigPath() errors.CheckError(err) @@ -69,5 +72,7 @@ func NewCommand() *cobra.Command { command.PersistentFlags().StringSliceVarP(&clientOpts.Headers, "header", "H", []string{}, "Sets additional header to all requests made by Argo CD CLI. (Can be repeated multiple times to add multiple headers, also supports comma separated headers)") command.PersistentFlags().BoolVar(&clientOpts.PortForward, "port-forward", config.GetBoolFlag("port-forward"), "Connect to a random argocd-server port using port forwarding") command.PersistentFlags().StringVar(&clientOpts.PortForwardNamespace, "port-forward-namespace", config.GetFlag("port-forward-namespace", ""), "Namespace name which should be used for port forwarding") + command.PersistentFlags().IntVar(&clientOpts.HttpRetryMax, "http-retry-max", 0, "Maximum number of retries to establish http connection to Argo CD server") + command.PersistentFlags().BoolVar(&clientOpts.Core, "core", false, "If set to true then CLI talks directly to Kubernetes instead of talking to Argo CD API server") return command } diff --git a/cmd/main.go b/cmd/main.go index 842715c6c8a80..21bcacb672477 100644 --- a/cmd/main.go +++ b/cmd/main.go @@ -11,7 +11,6 @@ import ( dex "github.com/argoproj/argo-cd/v2/cmd/argocd-dex/commands" reposerver "github.com/argoproj/argo-cd/v2/cmd/argocd-repo-server/commands" apiserver "github.com/argoproj/argo-cd/v2/cmd/argocd-server/commands" - util "github.com/argoproj/argo-cd/v2/cmd/argocd-util/commands" cli "github.com/argoproj/argo-cd/v2/cmd/argocd/commands" ) @@ -29,8 +28,6 @@ func main() { switch binaryName { case "argocd", "argocd-linux-amd64", "argocd-darwin-amd64", "argocd-windows-amd64.exe": command = cli.NewCommand() - case "argocd-util", "argocd-util-linux-amd64", "argocd-util-darwin-amd64", "argocd-util-windows-amd64.exe": - command = util.NewCommand() case "argocd-server": command = apiserver.NewCommand() case "argocd-application-controller": @@ -40,21 +37,7 @@ func main() { case "argocd-dex": command = dex.NewCommand() default: - if len(os.Args[1:]) > 0 { - // trying to guess between argocd and argocd-util by matching sub command - for _, cmd := range []*cobra.Command{cli.NewCommand(), util.NewCommand()} { - if _, _, err := cmd.Find(os.Args[1:]); err == nil { - command = cmd - break - } - } - } - - if command == nil { - fmt.Printf("Unknown binary name '%s'.Use '%s' environment variable to specify required binary name "+ - "(possible values 'argocd' or 'argocd-util').\n", binaryName, binaryNameEnv) - os.Exit(1) - } + command = cli.NewCommand() } if err := command.Execute(); err != nil { diff --git a/cmd/util/app.go b/cmd/util/app.go index 505cf2176f72e..dbf99d49e57d3 100644 --- a/cmd/util/app.go +++ b/cmd/util/app.go @@ -537,7 +537,7 @@ func readAppFromURI(fileURL string, app *argoappv1.Application) error { return err } -func ConstructApp(fileURL, appName string, labels, args []string, appOpts AppOptions, flags *pflag.FlagSet) (*argoappv1.Application, error) { +func ConstructApp(fileURL, appName string, labels, annotations, args []string, appOpts AppOptions, flags *pflag.FlagSet) (*argoappv1.Application, error) { var app argoappv1.Application if fileURL == "-" { // read stdin @@ -563,6 +563,7 @@ func ConstructApp(fileURL, appName string, labels, args []string, appOpts AppOpt SetAppSpecOptions(flags, &app.Spec, &appOpts) SetParameterOverrides(&app, appOpts.Parameters) mergeLabels(&app, labels) + setAnnotations(&app, annotations) } else { // read arguments if len(args) == 1 { @@ -583,6 +584,7 @@ func ConstructApp(fileURL, appName string, labels, args []string, appOpts AppOpt SetAppSpecOptions(flags, &app.Spec, &appOpts) SetParameterOverrides(&app, appOpts.Parameters) mergeLabels(&app, labels) + setAnnotations(&app, annotations) } return &app, nil } @@ -603,3 +605,17 @@ func mergeLabels(app *argoappv1.Application, labels []string) { app.SetLabels(mergedLabels) } + +func setAnnotations(app *argoappv1.Application, annotations []string) { + if len(annotations) > 0 && app.Annotations == nil { + app.Annotations = map[string]string{} + } + for _, a := range annotations { + annotation := strings.SplitN(a, "=", 2) + if len(annotation) == 2 { + app.Annotations[annotation[0]] = annotation[1] + } else { + app.Annotations[annotation[0]] = "" + } + } +} diff --git a/cmd/util/app_test.go b/cmd/util/app_test.go index 211e836d2c3e5..3bdc839e14409 100644 --- a/cmd/util/app_test.go +++ b/cmd/util/app_test.go @@ -172,3 +172,21 @@ func Test_setAppSpecOptions(t *testing.T) { assert.Nil(t, f.spec.SyncPolicy.Retry) }) } + +func Test_setAnnotations(t *testing.T) { + t.Run("Annotations", func(t *testing.T) { + app := v1alpha1.Application{} + setAnnotations(&app, []string{"hoge=foo", "huga=bar"}) + assert.Equal(t, map[string]string{"hoge": "foo", "huga": "bar"}, app.Annotations) + }) + t.Run("Annotations value contains equal", func(t *testing.T) { + app := v1alpha1.Application{} + setAnnotations(&app, []string{"hoge=foo=bar"}) + assert.Equal(t, map[string]string{"hoge": "foo=bar"}, app.Annotations) + }) + t.Run("Annotations empty value", func(t *testing.T) { + app := v1alpha1.Application{} + setAnnotations(&app, []string{"hoge"}) + assert.Equal(t, map[string]string{"hoge": ""}, app.Annotations) + }) +} diff --git a/cmd/util/cluster.go b/cmd/util/cluster.go index 4b2687cf4f4bd..196e6a07debdd 100644 --- a/cmd/util/cluster.go +++ b/cmd/util/cluster.go @@ -55,7 +55,7 @@ func PrintKubeContexts(ca clientcmd.ConfigAccess) { } } -func NewCluster(name string, namespaces []string, conf *rest.Config, managerBearerToken string, awsAuthConf *argoappv1.AWSAuthConfig, execProviderConf *argoappv1.ExecProviderConfig) *argoappv1.Cluster { +func NewCluster(name string, namespaces []string, clusterResources bool, conf *rest.Config, managerBearerToken string, awsAuthConf *argoappv1.AWSAuthConfig, execProviderConf *argoappv1.ExecProviderConfig) *argoappv1.Cluster { tlsClientConfig := argoappv1.TLSClientConfig{ Insecure: conf.TLSClientConfig.Insecure, ServerName: conf.TLSClientConfig.ServerName, @@ -80,9 +80,10 @@ func NewCluster(name string, namespaces []string, conf *rest.Config, managerBear } clst := argoappv1.Cluster{ - Server: conf.Host, - Name: name, - Namespaces: namespaces, + Server: conf.Host, + Name: name, + Namespaces: namespaces, + ClusterResources: clusterResources, Config: argoappv1.ClusterConfig{ TLSClientConfig: tlsClientConfig, AWSAuthConfig: awsAuthConf, @@ -108,6 +109,7 @@ type ClusterOptions struct { AwsClusterName string SystemNamespace string Namespaces []string + ClusterResources bool Name string Shard int64 ExecProviderCommand string @@ -122,6 +124,7 @@ func AddClusterFlags(command *cobra.Command, opts *ClusterOptions) { command.Flags().StringVar(&opts.AwsClusterName, "aws-cluster-name", "", "AWS Cluster name if set then aws cli eks token command will be used to access cluster") command.Flags().StringVar(&opts.AwsRoleArn, "aws-role-arn", "", "Optional AWS role arn. If set then AWS IAM Authenticator assumes a role to perform cluster operations instead of the default AWS credential provider chain.") command.Flags().StringArrayVar(&opts.Namespaces, "namespace", nil, "List of namespaces which are allowed to manage") + command.Flags().BoolVar(&opts.ClusterResources, "cluster-resources", false, "Indicates if cluster level resources should be managed. The setting is used only if list of managed namespaces is not empty.") command.Flags().StringVar(&opts.Name, "name", "", "Overwrite the cluster name") command.Flags().Int64Var(&opts.Shard, "shard", -1, "Cluster shard number; inferred from hostname if not set") command.Flags().StringVar(&opts.ExecProviderCommand, "exec-command", "", "Command to run to provide client credentials to the cluster. You may need to build a custom ArgoCD image to ensure the command is available at runtime.") diff --git a/cmd/util/cluster_test.go b/cmd/util/cluster_test.go index 80cbbe60c2948..865ea74967450 100644 --- a/cmd/util/cluster_test.go +++ b/cmd/util/cluster_test.go @@ -11,7 +11,7 @@ import ( ) func Test_newCluster(t *testing.T) { - clusterWithData := NewCluster("test-cluster", []string{"test-namespace"}, &rest.Config{ + clusterWithData := NewCluster("test-cluster", []string{"test-namespace"}, false, &rest.Config{ TLSClientConfig: rest.TLSClientConfig{ Insecure: false, ServerName: "test-endpoint.example.com", @@ -29,7 +29,7 @@ func Test_newCluster(t *testing.T) { assert.Equal(t, "test-key-data", string(clusterWithData.Config.KeyData)) assert.Equal(t, "", clusterWithData.Config.BearerToken) - clusterWithFiles := NewCluster("test-cluster", []string{"test-namespace"}, &rest.Config{ + clusterWithFiles := NewCluster("test-cluster", []string{"test-namespace"}, false, &rest.Config{ TLSClientConfig: rest.TLSClientConfig{ Insecure: false, ServerName: "test-endpoint.example.com", @@ -47,7 +47,7 @@ func Test_newCluster(t *testing.T) { assert.True(t, strings.Contains(string(clusterWithFiles.Config.KeyData), "test-key-data")) assert.Equal(t, "", clusterWithFiles.Config.BearerToken) - clusterWithBearerToken := NewCluster("test-cluster", []string{"test-namespace"}, &rest.Config{ + clusterWithBearerToken := NewCluster("test-cluster", []string{"test-namespace"}, false, &rest.Config{ TLSClientConfig: rest.TLSClientConfig{ Insecure: false, ServerName: "test-endpoint.example.com", diff --git a/cmd/util/common.go b/cmd/util/common.go index 1210b0ad9c1ec..7c7b629ab4c98 100644 --- a/cmd/util/common.go +++ b/cmd/util/common.go @@ -1,85 +1,6 @@ package util -import ( - "encoding/json" - "fmt" - - "github.com/ghodss/yaml" - v1 "k8s.io/api/core/v1" - - "github.com/argoproj/gitops-engine/pkg/utils/kube" -) - var ( LogFormat string LogLevel string ) - -// PrintResource prints a single resource in YAML or JSON format to stdout according to the output format -func PrintResources(resources []interface{}, output string) error { - for i, resource := range resources { - filteredResource, err := omitFields(resource) - if err != nil { - return err - } - resources[i] = filteredResource - } - var obj interface{} = resources - if len(resources) == 1 { - obj = resources[0] - } - - switch output { - case "json": - jsonBytes, err := json.MarshalIndent(obj, "", " ") - if err != nil { - return err - } - - fmt.Println(string(jsonBytes)) - case "yaml": - yamlBytes, err := yaml.Marshal(obj) - if err != nil { - return err - } - // marshaled YAML already ends with the new line character - fmt.Print(string(yamlBytes)) - default: - return fmt.Errorf("unknown output format: %s", output) - } - return nil -} - -// omit fields such as status, creationTimestamp and metadata.namespace in k8s objects -func omitFields(resource interface{}) (interface{}, error) { - jsonBytes, err := json.Marshal(resource) - if err != nil { - return nil, err - } - - toMap := make(map[string]interface{}) - err = json.Unmarshal([]byte(string(jsonBytes)), &toMap) - if err != nil { - return nil, err - } - - delete(toMap, "status") - if v, ok := toMap["metadata"]; ok { - if metadata, ok := v.(map[string]interface{}); ok { - delete(metadata, "creationTimestamp") - delete(metadata, "namespace") - } - } - return toMap, nil -} - -// ConvertSecretData converts kubernetes secret's data to stringData -func ConvertSecretData(secret *v1.Secret) { - secret.Kind = kube.SecretKind - secret.APIVersion = "v1" - secret.StringData = map[string]string{} - for k, v := range secret.Data { - secret.StringData[k] = string(v) - } - secret.Data = map[string][]byte{} -} diff --git a/common/common.go b/common/common.go index 60d755b4c233c..8cfa93a65326b 100644 --- a/common/common.go +++ b/common/common.go @@ -99,7 +99,7 @@ const ( // LabelKeyAppInstance is the label key to use to uniquely identify the instance of an application // The Argo CD application name is used as the instance name LabelKeyAppInstance = "app.kubernetes.io/instance" - // LabelKeyLegacyApplicationName is the legacy label (v0.10 and below) and is superceded by 'app.kubernetes.io/instance' + // LabelKeyLegacyApplicationName is the legacy label (v0.10 and below) and is superseded by 'app.kubernetes.io/instance' LabelKeyLegacyApplicationName = "applications.argoproj.io/app-name" // LabelKeySecretType contains the type of argocd secret (currently: 'cluster', 'repository', 'repo-config' or 'repo-creds') LabelKeySecretType = "argocd.argoproj.io/secret-type" diff --git a/controller/OWNERS b/controller/OWNERS new file mode 100644 index 0000000000000..03538861101ae --- /dev/null +++ b/controller/OWNERS @@ -0,0 +1,2 @@ +owners: +- alexmt diff --git a/controller/appcontroller.go b/controller/appcontroller.go index 7c0248977c590..a7eaf0a4c5624 100644 --- a/controller/appcontroller.go +++ b/controller/appcontroller.go @@ -812,79 +812,100 @@ func (ctrl *ApplicationController) finalizeApplicationDeletion(app *appv1.Applic return nil, err } - err = argo.ValidateDestination(context.Background(), &app.Spec.Destination, ctrl.db) - if err != nil { - return nil, err - } + // validDestination is true if the Application destination points to a cluster that is managed by Argo CD + // (and thus either a cluster secret exists for it, or it's local); validDestination is false otherwise. + validDestination := true - objsMap, err := ctrl.getPermittedAppLiveObjects(app, proj) - if err != nil { - return nil, err + // Validate the cluster using the Application destination's `name` field, if applicable, + // and set the Server field, if needed. + if err := argo.ValidateDestination(context.Background(), &app.Spec.Destination, ctrl.db); err != nil { + log.Warnf("Unable to validate destination of the Application being deleted: %v", err) + validDestination = false } objs := make([]*unstructured.Unstructured, 0) - for k := range objsMap { - // Wait for objects pending deletion to complete before proceeding with next sync wave - if objsMap[k].GetDeletionTimestamp() != nil { - logCtx.Infof("%d objects remaining for deletion", len(objsMap)) - return objs, nil - } - if ctrl.shouldBeDeleted(app, objsMap[k]) { - objs = append(objs, objsMap[k]) + var cluster *appv1.Cluster + + // Attempt to validate the destination via its URL + if validDestination { + if cluster, err = ctrl.db.GetCluster(context.Background(), app.Spec.Destination.Server); err != nil { + log.Warnf("Unable to locate cluster URL for Application being deleted: %v", err) + validDestination = false } } - cluster, err := ctrl.db.GetCluster(context.Background(), app.Spec.Destination.Server) - if err != nil { - return nil, err - } - config := metrics.AddMetricsTransportWrapper(ctrl.metricsServer, app, cluster.RESTConfig()) + if validDestination { + // ApplicationDestination points to a valid cluster, so we may clean up the live objects - filteredObjs := FilterObjectsForDeletion(objs) + objsMap, err := ctrl.getPermittedAppLiveObjects(app, proj) + if err != nil { + return nil, err + } - propagationPolicy := metav1.DeletePropagationForeground - if app.GetPropagationPolicy() == appv1.BackgroundPropagationPolicyFinalizer { - propagationPolicy = metav1.DeletePropagationBackground - } - logCtx.Infof("Deleting application's resources with %s propagation policy", propagationPolicy) + for k := range objsMap { + // Wait for objects pending deletion to complete before proceeding with next sync wave + if objsMap[k].GetDeletionTimestamp() != nil { + logCtx.Infof("%d objects remaining for deletion", len(objsMap)) + return objs, nil + } - err = kube.RunAllAsync(len(filteredObjs), func(i int) error { - obj := filteredObjs[i] - return ctrl.kubectl.DeleteResource(context.Background(), config, obj.GroupVersionKind(), obj.GetName(), obj.GetNamespace(), metav1.DeleteOptions{PropagationPolicy: &propagationPolicy}) - }) - if err != nil { - return objs, err - } + if ctrl.shouldBeDeleted(app, objsMap[k]) { + objs = append(objs, objsMap[k]) + } + } - objsMap, err = ctrl.getPermittedAppLiveObjects(app, proj) - if err != nil { - return nil, err - } + config := metrics.AddMetricsTransportWrapper(ctrl.metricsServer, app, cluster.RESTConfig()) - for k, obj := range objsMap { - if !ctrl.shouldBeDeleted(app, obj) { - delete(objsMap, k) + filteredObjs := FilterObjectsForDeletion(objs) + + propagationPolicy := metav1.DeletePropagationForeground + if app.GetPropagationPolicy() == appv1.BackgroundPropagationPolicyFinalizer { + propagationPolicy = metav1.DeletePropagationBackground + } + logCtx.Infof("Deleting application's resources with %s propagation policy", propagationPolicy) + + err = kube.RunAllAsync(len(filteredObjs), func(i int) error { + obj := filteredObjs[i] + return ctrl.kubectl.DeleteResource(context.Background(), config, obj.GroupVersionKind(), obj.GetName(), obj.GetNamespace(), metav1.DeleteOptions{PropagationPolicy: &propagationPolicy}) + }) + if err != nil { + return objs, err + } + + objsMap, err = ctrl.getPermittedAppLiveObjects(app, proj) + if err != nil { + return nil, err + } + + for k, obj := range objsMap { + if !ctrl.shouldBeDeleted(app, obj) { + delete(objsMap, k) + } + } + if len(objsMap) > 0 { + logCtx.Infof("%d objects remaining for deletion", len(objsMap)) + return objs, nil } } - if len(objsMap) > 0 { - logCtx.Infof("%d objects remaining for deletion", len(objsMap)) - return objs, nil - } - err = ctrl.cache.SetAppManagedResources(app.Name, nil) - if err != nil { + + if err := ctrl.cache.SetAppManagedResources(app.Name, nil); err != nil { return objs, err } - err = ctrl.cache.SetAppResourcesTree(app.Name, nil) - if err != nil { + + if err := ctrl.cache.SetAppResourcesTree(app.Name, nil); err != nil { return objs, err } - err = ctrl.removeCascadeFinalizer(app) - if err != nil { + if err := ctrl.removeCascadeFinalizer(app); err != nil { return objs, err } - logCtx.Infof("Successfully deleted %d resources", len(objs)) + if validDestination { + logCtx.Infof("Successfully deleted %d resources", len(objs)) + } else { + logCtx.Infof("Resource entries removed from undefined cluster") + } + ctrl.projectRefreshQueue.Add(fmt.Sprintf("%s/%s", app.Namespace, app.Spec.GetProject())) return objs, nil } @@ -1154,7 +1175,7 @@ func (ctrl *ApplicationController) processAppRefreshQueueItem() (processNext boo if comparisonLevel == ComparisonWithNothing { managedResources := make([]*appv1.ResourceDiff, 0) if err := ctrl.cache.GetAppManagedResources(app.Name, &managedResources); err != nil { - logCtx.Warnf("Failed to get cached managed resources for tree reconciliation, fallback to full reconciliation") + logCtx.Warnf("Failed to get cached managed resources for tree reconciliation, fall back to full reconciliation") } else { var tree *appv1.ApplicationTree if tree, err = ctrl.getResourceTree(app, managedResources); err == nil { @@ -1545,6 +1566,12 @@ func (ctrl *ApplicationController) newApplicationInformerAndLister() (cache.Shar cache.NamespaceIndex: func(obj interface{}) ([]string, error) { app, ok := obj.(*appv1.Application) if ok { + // This call to 'ValidateDestination' ensures that the .spec.destination field of all Applications + // returned by the informer/lister will have server field set (if not already set) based on the name. + // (or, if not found, an error app condition) + + // If the server field is not set, set it based on the cluster name; if the cluster name can't be found, + // log an error as an App Condition. if err := argo.ValidateDestination(context.Background(), &app.Spec.Destination, ctrl.db); err != nil { ctrl.setAppCondition(app, appv1.ApplicationCondition{Type: appv1.ApplicationConditionInvalidSpecError, Message: err.Error()}) } diff --git a/controller/appcontroller_test.go b/controller/appcontroller_test.go index c7abb22c3d289..55b5b34c0d097 100644 --- a/controller/appcontroller_test.go +++ b/controller/appcontroller_test.go @@ -634,26 +634,43 @@ func TestFinalizeAppDeletion(t *testing.T) { assert.True(t, patched) }) - t.Run("ErrorOnBothDestNameAndServer", func(t *testing.T) { - app := newFakeAppWithDestMismatch() - appObj := kube.MustToUnstructured(&app) - ctrl := newFakeController(&fakeData{apps: []runtime.Object{app, &defaultProj}, managedLiveObjs: map[kube.ResourceKey]*unstructured.Unstructured{ - kube.GetResourceKey(appObj): appObj, - }}) - fakeAppCs := ctrl.applicationClientset.(*appclientset.Clientset) - func() { - fakeAppCs.Lock() - defer fakeAppCs.Unlock() + // Create an Application with a cluster that doesn't exist + // Ensure it can be deleted. + t.Run("DeleteWithInvalidClusterName", func(t *testing.T) { + + appTemplate := newFakeAppWithDestName() + testShouldDelete := func(app *argoappv1.Application) { + appObj := kube.MustToUnstructured(&app) + ctrl := newFakeController(&fakeData{apps: []runtime.Object{app, &defaultProj}, managedLiveObjs: map[kube.ResourceKey]*unstructured.Unstructured{ + kube.GetResourceKey(appObj): appObj, + }}) + + fakeAppCs := ctrl.applicationClientset.(*appclientset.Clientset) defaultReactor := fakeAppCs.ReactionChain[0] fakeAppCs.ReactionChain = nil fakeAppCs.AddReactor("get", "*", func(action kubetesting.Action) (handled bool, ret runtime.Object, err error) { return defaultReactor.React(action) }) - }() - _, err := ctrl.finalizeApplicationDeletion(app) - assert.EqualError(t, err, "application destination can't have both name and server defined: another-cluster https://localhost:6443") + _, err := ctrl.finalizeApplicationDeletion(app) + assert.NoError(t, err) + } + + app1 := appTemplate.DeepCopy() + app1.Spec.Destination.Server = "https://invalid" + testShouldDelete(app1) + + app2 := appTemplate.DeepCopy() + app2.Spec.Destination.Name = "invalid" + testShouldDelete(app2) + + app3 := appTemplate.DeepCopy() + app3.Spec.Destination.Name = "invalid" + app3.Spec.Destination.Server = "https://invalid" + testShouldDelete(app3) + }) + } // TestNormalizeApplication verifies we normalize an application during reconciliation diff --git a/controller/cache/cache.go b/controller/cache/cache.go index 1650d163fb8fd..781eaea7c1d7a 100644 --- a/controller/cache/cache.go +++ b/controller/cache/cache.go @@ -290,6 +290,7 @@ func (c *liveStateCache) getCluster(server string) (clustercache.ClusterCache, e clustercache.SetResyncTimeout(K8SClusterResyncDuration), clustercache.SetSettings(cacheSettings.clusterSettings), clustercache.SetNamespaces(cluster.Namespaces), + clustercache.SetClusterResources(cluster.ClusterResources), clustercache.SetPopulateResourceInfoHandler(func(un *unstructured.Unstructured, isRoot bool) (interface{}, bool) { res := &ResourceInfo{} populateNodeInfo(un, res) @@ -544,6 +545,9 @@ func (c *liveStateCache) handleModEvent(oldCluster *appv1.Cluster, newCluster *a if !reflect.DeepEqual(oldCluster.Namespaces, newCluster.Namespaces) { updateSettings = append(updateSettings, clustercache.SetNamespaces(newCluster.Namespaces)) } + if !reflect.DeepEqual(oldCluster.ClusterResources, newCluster.ClusterResources) { + updateSettings = append(updateSettings, clustercache.SetClusterResources(newCluster.ClusterResources)) + } forceInvalidate := false if newCluster.RefreshRequestedAt != nil && cluster.GetClusterInfo().LastCacheSyncTime != nil && diff --git a/controller/metrics/metrics.go b/controller/metrics/metrics.go index d6d95de5bed0d..f5ae0d60f2dfb 100644 --- a/controller/metrics/metrics.go +++ b/controller/metrics/metrics.go @@ -62,14 +62,14 @@ var ( descAppDefaultLabels, nil, ) - // DEPRECATED: superceded by sync_status label in argocd_app_info + // DEPRECATED: superseded by sync_status label in argocd_app_info descAppSyncStatusCode = prometheus.NewDesc( "argocd_app_sync_status", "The application current sync status.", append(descAppDefaultLabels, "sync_status"), nil, ) - // DEPRECATED: superceded by health_status label in argocd_app_info + // DEPRECATED: superseded by health_status label in argocd_app_info descAppHealthStatus = prometheus.NewDesc( "argocd_app_health_status", "The application current health status.", diff --git a/docs/assets/versions.css b/docs/assets/versions.css index 49c3d830695d7..b8bb066929dd0 100644 --- a/docs/assets/versions.css +++ b/docs/assets/versions.css @@ -36,10 +36,13 @@ /* Version Warning */ div[data-md-component=announce] { - background-color: rgba(255,145,0,.1); + background-color: rgb(248, 243, 236); + position: sticky; + top: 0; + z-index: 2; } div[data-md-component=announce]>div#announce-msg{ - color: var(--md-admonition-fg-color); + color: var(--md-code-hl-number-color); font-size: .8rem; text-align: center; margin: 15px; diff --git a/docs/assets/versions.js b/docs/assets/versions.js index d67a39e72247c..d3befc5f91dea 100644 --- a/docs/assets/versions.js +++ b/docs/assets/versions.js @@ -35,10 +35,24 @@ setTimeout(function() { // VERSION WARNINGS window.addEventListener("DOMContentLoaded", function() { var rtdData = window['READTHEDOCS_DATA'] || { version: 'latest' }; + var margin = 30; + var headerHeight = document.getElementsByClassName("md-header")[0].offsetHeight; if (rtdData.version === "latest") { document.querySelector("div[data-md-component=announce]").innerHTML = "
You are viewing the docs for an unreleased version of Argo CD, click here to go to the latest stable version.
" + var bannerHeight = document.getElementById('announce-msg').offsetHeight + margin + document.querySelector("header.md-header").style.top = bannerHeight +"px"; + document.querySelector('style').textContent += + "@media screen and (min-width: 76.25em){ .md-sidebar { height: 0; top:"+ (bannerHeight+headerHeight)+"px !important; }}" + document.querySelector('style').textContent += + "@media screen and (min-width: 60em){ .md-sidebar--secondary { height: 0; top:"+ (bannerHeight+headerHeight)+"px !important; }}" } else if (rtdData.version !== "stable") { document.querySelector("div[data-md-component=announce]").innerHTML = "
You are viewing the docs for a previous version of Argo CD, click here to go to the latest stable version.
" + var bannerHeight = document.getElementById('announce-msg').offsetHeight + margin + document.querySelector("header.md-header").style.top = bannerHeight +"px"; + document.querySelector('style').textContent += + "@media screen and (min-width: 76.25em){ .md-sidebar { height: 0; top:"+ (bannerHeight+headerHeight)+"px !important; }}" + document.querySelector('style').textContent += + "@media screen and (min-width: 60em){ .md-sidebar--secondary { height: 0; top:"+ (bannerHeight+headerHeight)+"px !important; }}" } }); diff --git a/docs/cli_installation.md b/docs/cli_installation.md index a3a56a8801ad8..e47f296c1bb63 100644 --- a/docs/cli_installation.md +++ b/docs/cli_installation.md @@ -64,7 +64,7 @@ After finishing either of the instructions above, you should now be able to run ## Windows -### Download With Powershell: Invoke-WebRequest +### Download With PowerShell: Invoke-WebRequest You can view the latest version of Argo CD at the link above or run the following command to grab the version: diff --git a/docs/developer-guide/ci.md b/docs/developer-guide/ci.md index 4d830332a911d..e7a0e6a242935 100644 --- a/docs/developer-guide/ci.md +++ b/docs/developer-guide/ci.md @@ -12,7 +12,7 @@ To read more about The GitHub actions are configured in [`ci-build.yaml`](https: Since the CI pipeline is triggered on Git commits, there is currently no (known) way on how to retrigger the CI checks without pushing a new commit to your branch. -If you are absolutely sure that the failure was due to a failure in the pipeline, and not an error within the changes you commited, you can push an empty commit to your branch, thus retriggering the pipeline without any code changes. To do so, issue +If you are absolutely sure that the failure was due to a failure in the pipeline, and not an error within the changes you committed, you can push an empty commit to your branch, thus retriggering the pipeline without any code changes. To do so, issue ```bash git commit --allow-empty -m "Retrigger CI pipeline" @@ -67,7 +67,7 @@ Every commit to master is built and published to `ghcr.io/argoproj/argocd: bash # ssh into any argocd server pod -argocd-util cluster kubeconfig https:// /tmp/config --namespace argocd # generate your cluster config +argocd admin cluster kubeconfig https:// /tmp/config --namespace argocd # generate your cluster config KUBECONFIG=/tmp/config kubectl get pods # test connection manually ``` diff --git a/docs/getting_started.md b/docs/getting_started.md index ae64f14874cc0..4ba6acffe89c3 100644 --- a/docs/getting_started.md +++ b/docs/getting_started.md @@ -21,12 +21,14 @@ This will create a new namespace, `argocd`, where Argo CD services and applicati The installation manifests include `ClusterRoleBinding` resources that reference `argocd` namespace. If you installing Argo CD into a different namespace then make sure to update the namespace reference. -!!! note - If you are not interested in UI, SSO, multi-cluster management and just want to pull changes into the cluster then you can disable - authentication using `--disable-auth` flag and access Argo CD via CLI using `--port-forward` or `--port-forward-namespace` flags - and proceed to step [#6](#6-create-an-application-from-a-git-repository): - - `kubectl patch deploy argocd-server -n argocd -p '[{"op": "add", "path": "/spec/template/spec/containers/0/command/-", "value": "--disable-auth"}]' --type json` +If you are not interested in UI, SSO, multi-cluster features then you can install [core](operator-manual/installation.md#core) Argo CD components only: + +```bash +kubectl create namespace argocd +kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/core-install.yaml +``` + +Use `argocd login --core` to [configure](./user-guide/commands/argocd_login.md) CLI access and skip steps 3-5. ## 2. Download Argo CD CLI diff --git a/docs/operator-manual/application.yaml b/docs/operator-manual/application.yaml index 3c0498e756617..9c0460fd99600 100644 --- a/docs/operator-manual/application.yaml +++ b/docs/operator-manual/application.yaml @@ -58,7 +58,7 @@ spec: hosts: - mydomain.example.com - # Optional Helm version to template with. If omitted it will fallback to look at the 'apiVersion' in Chart.yaml + # Optional Helm version to template with. If omitted it will fall back to look at the 'apiVersion' in Chart.yaml # and decide which Helm binary to use automatically. This field can be either 'v2' or 'v3'. version: v2 diff --git a/docs/operator-manual/cluster-bootstrapping.md b/docs/operator-manual/cluster-bootstrapping.md index 3d9fe5e939c01..98c0c10138c29 100644 --- a/docs/operator-manual/cluster-bootstrapping.md +++ b/docs/operator-manual/cluster-bootstrapping.md @@ -92,4 +92,4 @@ Or, via the CLI: argocd app sync -l app.kubernetes.io/instance=apps ``` -View [the example on Github](https://github.com/argoproj/argocd-example-apps/tree/master/apps). +View [the example on GitHub](https://github.com/argoproj/argocd-example-apps/tree/master/apps). diff --git a/docs/operator-manual/disaster_recovery.md b/docs/operator-manual/disaster_recovery.md index b6a17885b2345..6bb52847d978a 100644 --- a/docs/operator-manual/disaster_recovery.md +++ b/docs/operator-manual/disaster_recovery.md @@ -1,6 +1,6 @@ # Disaster Recovery -You can use `argocd-util` to import and export all Argo CD data. +You can use `argocd admin` to import and export all Argo CD data. Make sure you have `~/.kube/config` pointing to your Argo CD cluster. @@ -15,14 +15,14 @@ export VERSION=v1.0.1 Export to a backup: ```bash -docker run -v ~/.kube:/home/argocd/.kube --rm argoproj/argocd:$VERSION argocd-util export > backup.yaml +docker run -v ~/.kube:/home/argocd/.kube --rm argoproj/argocd:$VERSION argocd admin export > backup.yaml ``` Import from a backup: ```bash -docker run -i -v ~/.kube:/home/argocd/.kube --rm argoproj/argocd:$VERSION argocd-util import - < backup.yaml +docker run -i -v ~/.kube:/home/argocd/.kube --rm argoproj/argocd:$VERSION argocd admin import - < backup.yaml ``` !!! note - If you are running Argo CD on a namespace different than default remember to pass the namespace parameter (-n ). 'argocd-util export' will not fail if you run it in the wrong namespace. + If you are running Argo CD on a namespace different than default remember to pass the namespace parameter (-n ). 'argocd admin export' will not fail if you run it in the wrong namespace. diff --git a/docs/operator-manual/health.md b/docs/operator-manual/health.md index b16208bf41ef6..fcc4e34730856 100644 --- a/docs/operator-manual/health.md +++ b/docs/operator-manual/health.md @@ -93,6 +93,14 @@ data: ``` The `obj` is a global variable which contains the resource. The script must return an object with status and optional message field. +The custom health check might return one of the following health statuses: + + * `Healthy` - the resource is healthy + * `Progressing` - the resource is not healthy yet but still making progress and might be healthy soon + * `Degraded` - the resource is degraded + * `Suspended` - the resource is suspended and waiting for some external event to resume (e.g. suspended CronJob or paused Deployment) + +By default health typically returns `Progressing` status. NOTE: As a security measure, access to the standard Lua libraries will be disabled by default. Admins can control access by setting `resource.customizations.useOpenLibs.`. In the following example, standard libraries are enabled for health check of `cert-manager.io/Certificate`. diff --git a/docs/operator-manual/high_availability.md b/docs/operator-manual/high_availability.md index f3c6c4f72a525..b3e06a7377846 100644 --- a/docs/operator-manual/high_availability.md +++ b/docs/operator-manual/high_availability.md @@ -60,7 +60,7 @@ number of allowed concurrent kubectl fork/execs. * The controller uses Kubernetes watch APIs to maintain lightweight Kubernetes cluster cache. This allows to avoid querying Kubernetes during app reconciliation and significantly improve performance. For performance reasons controller monitors and caches only preferred the version of a resource. During reconciliation, the controller might have to convert cached resource from -preferred version into a version of the resource stored in Git. If `kubectl convert` fails because conversion is not supported than controller fallback to Kubernetes API query which slows down +preferred version into a version of the resource stored in Git. If `kubectl convert` fails because conversion is not supported then controller falls back to Kubernetes API query which slows down reconciliation. In this case advice user-preferred resource version in Git. * The controller polls Git every 3m by default. You can increase this duration using `timeout.reconciliation` setting in the `argocd-cm` ConfigMap. diff --git a/docs/operator-manual/ingress.md b/docs/operator-manual/ingress.md index 8cc6a3ccb7d9c..0a14bdc5c8fd3 100644 --- a/docs/operator-manual/ingress.md +++ b/docs/operator-manual/ingress.md @@ -159,8 +159,6 @@ spec: - name: argocd-server command: - /argocd-server - - --staticassets - - /shared/app - --repo-server - argocd-repo-server:8081 - --insecure @@ -304,8 +302,6 @@ spec: - name: argocd-server command: - argocd-server - - --staticassets - - /shared/app - --repo-server - argocd-repo-server:8081 - --insecure @@ -377,7 +373,7 @@ spec: selector: app.kubernetes.io/name: argocd-server sessionAffinity: None - type: ClusterIP + type: NodePort ``` Once we create this service, we can configure the Ingress to conditionally route all `application/grpc` traffic to the new HTTP2 backend, using the `alb.ingress.kubernetes.io/conditions` annotation, as seen below. Note: The value after the . in the condition annotation _must_ be the same name as the service that you want traffic to route to - and will be applied on any path with a matching serviceName. @@ -433,8 +429,6 @@ spec: containers: - command: - /argocd-server - - --staticassets - - /shared/app - --repo-server - argocd-repo-server:8081 - --rootpath @@ -487,8 +481,6 @@ spec: containers: - command: - /argocd-server - - --staticassets - - /shared/app - --repo-server - argocd-repo-server:8081 - --basehref diff --git a/docs/operator-manual/installation.md b/docs/operator-manual/installation.md new file mode 100644 index 0000000000000..6cb657e309460 --- /dev/null +++ b/docs/operator-manual/installation.md @@ -0,0 +1,83 @@ +# Installation + +Argo CD has two type of installations: multi-tenant and core. + +## Multi-Tenant + +The multi-tenant installation is the most common way to install Argo CD. This type of installation is typically used to service multiple application developer teams +in the organization and maintained by a platform team. + +The end-users can access Argo CD via the API server using the Web UI or `argocd` CLI. The `argocd` CLI has to be configured using `argocd login ` command +(learn more [here](../user-guide/commands/argocd_login.md)). + +Two types of installation manifests are provided: + +### Non High Availability: + +Not recommended for production use. This type of installation is typically used during evaluation period for demonstrations and testing. + +* [install.yaml](https://github.com/argoproj/argo-cd/blob/master/manifests/install.yaml) - Standard Argo CD installation with cluster-admin access. Use this + manifest set if you plan to use Argo CD to deploy applications in the same cluster that Argo CD runs + in (i.e. kubernetes.svc.default). It will still be able to deploy to external clusters with inputted + credentials. + +* [namespace-install.yaml](https://github.com/argoproj/argo-cd/blob/master/manifests/namespace-install.yaml) - Installation of Argo CD which requires only + namespace level privileges (does not need cluster roles). Use this manifest set if you do not + need Argo CD to deploy applications in the same cluster that Argo CD runs in, and will rely solely + on inputted cluster credentials. An example of using this set of manifests is if you run several + Argo CD instances for different teams, where each instance will be deploying applications to + external clusters. It will still be possible to deploy to the same cluster (kubernetes.svc.default) + with inputted credentials (i.e. `argocd cluster add --in-cluster --namespace `). + + > Note: Argo CD CRDs are not included into [namespace-install.yaml](https://github.com/argoproj/argo-cd/blob/master/manifests/namespace-install.yaml). + > and have to be installed separately. The CRD manifests are located in the [manifests/crds](https://github.com/argoproj/argo-cd/blob/master/manifests/crds) directory. + > Use the following command to install them: + > ```bash + > kubectl apply -k https://github.com/argoproj/argo-cd/manifests/crds\?ref\=stable + > ``` + +### High Availability: + +High Availability installation is recommended for production use. This bundle includes the same components but tuned for high availability and resiliency. + +* [ha/install.yaml](https://github.com/argoproj/argo-cd/blob/master/manifests/ha/install.yaml) - the same as install.yaml but with multiple replicas for + supported components. + +* [ha/namespace-install.yaml](https://github.com/argoproj/argo-cd/blob/master/manifests/ha/namespace-install.yaml) - the same as namespace-install.yaml but + with multiple replicas for supported components. + +## Core + +The core installation is most suitable for cluster administrators who indepently use Argo CD and don't need multi-tenancy features. This installation +includes fewer components and is easier to setup. The bundle does not include the API server or UI, and installs the lightweight (non-HA) version of each component. + +The end-users need Kubernetes access to manage Argo CD. The `argocd` CLI has to be configured using the following commands: + +```bash +kubectl config set-context --current --namespace=argocd # change current kube context to argocd namespace +argocd login --core +``` + +The Web UI is also available and can be started using the `argocd admin dashboard` command. + +Installation manifests are available at [core-install.yaml](https://github.com/argoproj/argo-cd/blob/master/manifests/core-install.yaml). + +## Kustomize + +The Argo CD manifests can also be installed using Kustomize. It is recommended to include the manifest as a remote resource and apply additional customizations +using Kustomize patches. + + +```yaml +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization + +namespace: argocd +resources: +- https://raw.githubusercontent.com/argoproj/argo-cd/v2.0.4/manifests/ha/install.yaml +``` + +## Helm + +The Argo CD can be installed using [Helm](https://helm.sh/). The Helm chart is currently community maintained and available at +[argo-helm/charts/argo-cd](https://github.com/argoproj/argo-helm/tree/master/charts/argo-cd). diff --git a/docs/operator-manual/rbac.md b/docs/operator-manual/rbac.md index 886a60b489b6a..b6a18f810b00d 100644 --- a/docs/operator-manual/rbac.md +++ b/docs/operator-manual/rbac.md @@ -84,27 +84,27 @@ The anonymous users get default role permissions specified by `policy.default` i ## Validating and testing your RBAC policies If you want to ensure that your RBAC policies are working as expected, you can -use the `argocd-util settings rbac` command to validate them. This tool allows you to +use the `argocd admin settings rbac` command to validate them. This tool allows you to test whether a certain role or subject can perform the requested action with a policy that's not live yet in the system, i.e. from a local file or config map. Additionally, it can be used against the live policy in the cluster your Argo CD is running in. To check whether your new policy is valid and understood by Argo CD's RBAC -implementation, you can use the `argocd-util settings rbac validate` command. +implementation, you can use the `argocd admin settings rbac validate` command. ### Validating a policy To validate a policy stored in a local text file: ```shell -argocd-util settings rbac validate --policy-file somepolicy.csv +argocd admin settings rbac validate --policy-file somepolicy.csv ``` To validate a policy stored in a local K8s ConfigMap definition in a YAML file: ```shell -argocd-util settings rbac validate --policy-file argocd-rbac-cm.yaml +argocd admin settings rbac validate --policy-file argocd-rbac-cm.yaml ``` To validate a policy stored in K8s, used by Argo CD in namespace `argocd`, @@ -112,17 +112,17 @@ ensure that your current context in `~/.kube/config` is pointing to your Argo CD cluster and give appropriate namespace: ```shell -argocd-util settings rbac validate --namespace argocd +argocd admin settings rbac validate --namespace argocd ``` ### Testing a policy To test whether a role or subject (group or local user) has sufficient permissions to execute certain actions on certain resources, you can -use the `argocd-util settings rbac can` command. Its general syntax is +use the `argocd admin settings rbac can` command. Its general syntax is ```shell -argocd-util settings rbac can SOMEROLE ACTION RESOURCE SUBRESOURCE [flags] +argocd admin settings rbac can SOMEROLE ACTION RESOURCE SUBRESOURCE [flags] ``` Given the example from the above ConfigMap, which defines the role @@ -130,13 +130,13 @@ Given the example from the above ConfigMap, which defines the role you can test whether that role can do something like follows: ```shell -$ argocd-util settings rbac can role:org-admin get applications --policy-file argocd-rbac-cm.yaml +$ argocd admin settings rbac can role:org-admin get applications --policy-file argocd-rbac-cm.yaml Yes -$ argocd-util settings rbac can role:org-admin get clusters --policy-file argocd-rbac-cm.yaml +$ argocd admin settings rbac can role:org-admin get clusters --policy-file argocd-rbac-cm.yaml Yes -$ argocd-util settings rbac can role:org-admin create clusters 'somecluster' --policy-file argocd-rbac-cm.yaml +$ argocd admin settings rbac can role:org-admin create clusters 'somecluster' --policy-file argocd-rbac-cm.yaml No -$ argocd-util settings rbac can role:org-admin create applications 'someproj/someapp' --policy-file argocd-rbac-cm.yaml +$ argocd admin settings rbac can role:org-admin create applications 'someproj/someapp' --policy-file argocd-rbac-cm.yaml Yes ``` @@ -148,19 +148,19 @@ You can test against the role: ```shell # Plain policy, without a default role defined -$ argocd-util settings rbac can role:stagin-db-admins get applications --policy-file policy.csv +$ argocd admin settings rbac can role:staging-db-admins get applications --policy-file policy.csv No -$ argocd-util settings rbac can role:staging-db-admins get applications 'staging-db-admins/*' --policy-file policy.csv +$ argocd admin settings rbac can role:staging-db-admins get applications 'staging-db-admins/*' --policy-file policy.csv Yes # Argo CD augments a builtin policy with two roles defined, the default role # being 'role:readonly' - You can include a named default role to use: -$ argocd-util settings rbac can role:stagin-db-admins get applications --policy-file policy.csv --default-role role:readonly +$ argocd admin settings rbac can role:staging-db-admins get applications --policy-file policy.csv --default-role role:readonly Yes ``` Or against the group defined: ```shell -$ argocd-util settings rbac can db-admins get applications 'staging-db-admins/*' --policy-file policy.csv +$ argocd admin settings rbac can db-admins get applications 'staging-db-admins/*' --policy-file policy.csv Yes ``` diff --git a/docs/operator-manual/secret-management.md b/docs/operator-manual/secret-management.md index fcd0b3443b9d4..8372af69f32e9 100644 --- a/docs/operator-manual/secret-management.md +++ b/docs/operator-manual/secret-management.md @@ -7,7 +7,7 @@ Argo CD is un-opinionated about how secrets are managed. There's many ways to do * [External Secrets Operator](https://github.com/ContainerSolutions/externalsecret-operator) * [Hashicorp Vault](https://www.vaultproject.io) * [Banzai Cloud Bank-Vaults](https://github.com/banzaicloud/bank-vaults) -* [Helm Secrets](https://github.com/futuresimple/helm-secrets) +* [Helm Secrets](https://github.com/jkroepke/helm-secrets) * [Kustomize secret generator plugins](https://github.com/kubernetes-sigs/kustomize/blob/fd7a353df6cece4629b8e8ad56b71e30636f38fc/examples/kvSourceGoPlugin.md#secret-values-from-anywhere) * [aws-secret-operator](https://github.com/mumoshu/aws-secret-operator) * [KSOPS](https://github.com/viaduct-ai/kustomize-sops#argo-cd-integration) diff --git a/docs/operator-manual/security.md b/docs/operator-manual/security.md index cdea22223e713..76a0f362cbaeb 100644 --- a/docs/operator-manual/security.md +++ b/docs/operator-manual/security.md @@ -11,7 +11,8 @@ Authentication to Argo CD API server is performed exclusively using [JSON Web To in one of the following ways: 1. For the local `admin` user, a username/password is exchanged for a JWT using the `/api/v1/session` - endpoint. This token is signed & issued by the Argo CD API server itself, and has no expiration. + endpoint. This token is signed & issued by the Argo CD API server itself and it expires after 24 hours + (this token used not to expire, see [CVE-2021-26921](https://github.com/argoproj/argo-cd/security/advisories/GHSA-9h6w-j7w4-jr52)). When the admin password is updated, all existing admin JWT tokens are immediately revoked. The password is stored as a bcrypt hash in the [`argocd-secret`](https://github.com/argoproj/argo-cd/blob/master/manifests/base/config/argocd-secret.yaml) Secret. @@ -37,6 +38,7 @@ permits access to the API request. All network communication is performed over TLS including service-to-service communication between the three components (argocd-server, argocd-repo-server, argocd-application-controller). The Argo CD API server can enforce the use of TLS 1.2 using the flag: `--tlsminversion 1.2`. +Communication with Redis is performed over plain HTTP by default. TLS can be setup with command line arguments. ## Sensitive Information diff --git a/docs/operator-manual/server-commands/argocd-application-controller.md b/docs/operator-manual/server-commands/argocd-application-controller.md index 02a4cab25deb3..6a21f76848175 100644 --- a/docs/operator-manual/server-commands/argocd-application-controller.md +++ b/docs/operator-manual/server-commands/argocd-application-controller.md @@ -36,6 +36,11 @@ argocd-application-controller [flags] --operation-processors int Number of application operation processors (default 10) --password string Password for basic authentication to the API server --redis string Redis server hostname and port (e.g. argocd-redis:6379). + --redis-ca-certificate string Path to Redis server CA certificate (e.g. /etc/certs/redis/ca.crt). If not specified, system trusted CAs will be used for server certificate validation. + --redis-client-certificate string Path to Redis client certificate (e.g. /etc/certs/redis/client.crt). + --redis-client-key string Path to Redis client key (e.g. /etc/certs/redis/client.crt). + --redis-insecure-skip-tls-verify Skip Redis server certificate validation. + --redis-use-tls Use TLS when connecting to Redis. --redisdb int Redis database. --repo-server string Repo server address. (default "argocd-repo-server:8081") --repo-server-plaintext Disable TLS on connections to repo server diff --git a/docs/operator-manual/server-commands/argocd-repo-server.md b/docs/operator-manual/server-commands/argocd-repo-server.md index 15b381d55a334..a72b89d46b5a4 100644 --- a/docs/operator-manual/server-commands/argocd-repo-server.md +++ b/docs/operator-manual/server-commands/argocd-repo-server.md @@ -22,6 +22,11 @@ argocd-repo-server [flags] --parallelismlimit int Limit on number of concurrent manifests generate requests. Any value less the 1 means no limit. --port int Listen on given port for incoming connections (default 8081) --redis string Redis server hostname and port (e.g. argocd-redis:6379). + --redis-ca-certificate string Path to Redis server CA certificate (e.g. /etc/certs/redis/ca.crt). If not specified, system trusted CAs will be used for server certificate validation. + --redis-client-certificate string Path to Redis client certificate (e.g. /etc/certs/redis/client.crt). + --redis-client-key string Path to Redis client key (e.g. /etc/certs/redis/client.crt). + --redis-insecure-skip-tls-verify Skip Redis server certificate validation. + --redis-use-tls Use TLS when connecting to Redis. --redisdb int Redis database. --repo-cache-expiration duration Cache expiration for repo state, incl. app lists, app details, manifest generation, revision meta-data (default 24h0m0s) --revision-cache-expiration duration Cache expiration for cached revision (default 3m0s) diff --git a/docs/operator-manual/server-commands/argocd-server.md b/docs/operator-manual/server-commands/argocd-server.md index ac294d1705bbf..e39857919100d 100644 --- a/docs/operator-manual/server-commands/argocd-server.md +++ b/docs/operator-manual/server-commands/argocd-server.md @@ -41,6 +41,11 @@ argocd-server [flags] --password string Password for basic authentication to the API server --port int Listen on given port (default 8080) --redis string Redis server hostname and port (e.g. argocd-redis:6379). + --redis-ca-certificate string Path to Redis server CA certificate (e.g. /etc/certs/redis/ca.crt). If not specified, system trusted CAs will be used for server certificate validation. + --redis-client-certificate string Path to Redis client certificate (e.g. /etc/certs/redis/client.crt). + --redis-client-key string Path to Redis client key (e.g. /etc/certs/redis/client.crt). + --redis-insecure-skip-tls-verify Skip Redis server certificate validation. + --redis-use-tls Use TLS when connecting to Redis. --redisdb int Redis database. --repo-server string Repo server address (default "argocd-repo-server:8081") --repo-server-plaintext Use a plaintext client (non-TLS) to connect to repository server @@ -51,7 +56,6 @@ argocd-server [flags] --sentinel stringArray Redis sentinel hostname and port (e.g. argocd-redis-ha-announce-0:6379). --sentinelmaster string Redis sentinel master group name. (default "master") --server string The address and port of the Kubernetes API server - --staticassets string Static assets directory path --tls-server-name string If provided, this name will be used to validate server certificate. If this is not provided, hostname used to contact the server is used. --tlsciphers string The list of acceptable ciphers to be used when establishing TLS connections. Use 'list' to list available ciphers. (default "TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384:TLS_RSA_WITH_AES_256_GCM_SHA384") --tlsmaxversion string The maximum SSL/TLS version that is acceptable (one of: 1.0|1.1|1.2|1.3) (default "1.3") diff --git a/docs/operator-manual/server-commands/argocd-util.md b/docs/operator-manual/server-commands/argocd-util.md deleted file mode 100644 index 9a4e9d8e0e732..0000000000000 --- a/docs/operator-manual/server-commands/argocd-util.md +++ /dev/null @@ -1,31 +0,0 @@ -## argocd-util - -argocd-util tools used by Argo CD - -### Synopsis - -argocd-util has internal utility tools used by Argo CD - -``` -argocd-util [flags] -``` - -### Options - -``` - -h, --help help for argocd-util - --logformat string Set the logging format. One of: text|json (default "text") - --loglevel string Set the logging level. One of: debug|info|warn|error (default "info") -``` - -### SEE ALSO - -* [argocd-util app](argocd-util_app.md) - Manage applications configuration -* [argocd-util cluster](argocd-util_cluster.md) - Manage clusters configuration -* [argocd-util export](argocd-util_export.md) - Export all Argo CD data to stdout (default) or a file -* [argocd-util import](argocd-util_import.md) - Import Argo CD data from stdin (specify `-') or a file -* [argocd-util proj](argocd-util_proj.md) - Manage projects configuration -* [argocd-util repo](argocd-util_repo.md) - Manage repositories configuration -* [argocd-util settings](argocd-util_settings.md) - Provides set of commands for settings validation and troubleshooting -* [argocd-util version](argocd-util_version.md) - Print version information - diff --git a/docs/operator-manual/server-commands/argocd-util_app.md b/docs/operator-manual/server-commands/argocd-util_app.md deleted file mode 100644 index a26c078cd7aa7..0000000000000 --- a/docs/operator-manual/server-commands/argocd-util_app.md +++ /dev/null @@ -1,21 +0,0 @@ -## argocd-util app - -Manage applications configuration - -``` -argocd-util app [flags] -``` - -### Options - -``` - -h, --help help for app -``` - -### SEE ALSO - -* [argocd-util](argocd-util.md) - argocd-util tools used by Argo CD -* [argocd-util app diff-reconcile-results](argocd-util_app_diff-reconcile-results.md) - Compare results of two reconciliations and print diff. -* [argocd-util app generate-spec](argocd-util_app_generate-spec.md) - Generate declarative config for an application -* [argocd-util app get-reconcile-results](argocd-util_app_get-reconcile-results.md) - Reconcile all applications and stores reconciliation summary in the specified file. - diff --git a/docs/operator-manual/server-commands/argocd-util_app_diff-reconcile-results.md b/docs/operator-manual/server-commands/argocd-util_app_diff-reconcile-results.md deleted file mode 100644 index 105fe09fe5693..0000000000000 --- a/docs/operator-manual/server-commands/argocd-util_app_diff-reconcile-results.md +++ /dev/null @@ -1,18 +0,0 @@ -## argocd-util app diff-reconcile-results - -Compare results of two reconciliations and print diff. - -``` -argocd-util app diff-reconcile-results PATH1 PATH2 [flags] -``` - -### Options - -``` - -h, --help help for diff-reconcile-results -``` - -### SEE ALSO - -* [argocd-util app](argocd-util_app.md) - Manage applications configuration - diff --git a/docs/operator-manual/server-commands/argocd-util_apps.md b/docs/operator-manual/server-commands/argocd-util_apps.md deleted file mode 100644 index 92a27b27860be..0000000000000 --- a/docs/operator-manual/server-commands/argocd-util_apps.md +++ /dev/null @@ -1,20 +0,0 @@ -## argocd-util apps - -Utility commands operate on ArgoCD applications - -``` -argocd-util apps [flags] -``` - -### Options - -``` - -h, --help help for apps -``` - -### SEE ALSO - -* [argocd-util](argocd-util.md) - argocd-util tools used by Argo CD -* [argocd-util apps diff-reconcile-results](argocd-util_apps_diff-reconcile-results.md) - Compare results of two reconciliations and print diff. -* [argocd-util apps get-reconcile-results](argocd-util_apps_get-reconcile-results.md) - Reconcile all applications and stores reconciliation summary in the specified file. - diff --git a/docs/operator-manual/server-commands/argocd-util_apps_diff-reconcile-results.md b/docs/operator-manual/server-commands/argocd-util_apps_diff-reconcile-results.md deleted file mode 100644 index 290a25190b7a4..0000000000000 --- a/docs/operator-manual/server-commands/argocd-util_apps_diff-reconcile-results.md +++ /dev/null @@ -1,18 +0,0 @@ -## argocd-util apps diff-reconcile-results - -Compare results of two reconciliations and print diff. - -``` -argocd-util apps diff-reconcile-results PATH1 PATH2 [flags] -``` - -### Options - -``` - -h, --help help for diff-reconcile-results -``` - -### SEE ALSO - -* [argocd-util apps](argocd-util_apps.md) - Utility commands operate on ArgoCD applications - diff --git a/docs/operator-manual/server-commands/argocd-util_apps_get-reconcile-results.md b/docs/operator-manual/server-commands/argocd-util_apps_get-reconcile-results.md deleted file mode 100644 index f8aaac48a5fd5..0000000000000 --- a/docs/operator-manual/server-commands/argocd-util_apps_get-reconcile-results.md +++ /dev/null @@ -1,39 +0,0 @@ -## argocd-util apps get-reconcile-results - -Reconcile all applications and stores reconciliation summary in the specified file. - -``` -argocd-util apps get-reconcile-results PATH [flags] -``` - -### Options - -``` - --as string Username to impersonate for the operation - --as-group stringArray Group to impersonate for the operation, this flag can be repeated to specify multiple groups. - --certificate-authority string Path to a cert file for the certificate authority - --client-certificate string Path to a client certificate file for TLS - --client-key string Path to a client key file for TLS - --cluster string The name of the kubeconfig cluster to use - --context string The name of the kubeconfig context to use - -h, --help help for get-reconcile-results - --insecure-skip-tls-verify If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure - --kubeconfig string Path to a kube config. Only required if out-of-cluster - --l string Label selector - -n, --namespace string If present, the namespace scope for this CLI request - --o string Output format (yaml|json) (default "yaml") - --password string Password for basic authentication to the API server - --refresh If set to true then recalculates apps reconciliation - --repo-server string Repo server address. - --request-timeout string The length of time to wait before giving up on a single server request. Non-zero values should contain a corresponding time unit (e.g. 1s, 2m, 3h). A value of zero means don't timeout requests. (default "0") - --server string The address and port of the Kubernetes API server - --tls-server-name string If provided, this name will be used to validate server certificate. If this is not provided, hostname used to contact the server is used. - --token string Bearer token for authentication to the API server - --user string The name of the kubeconfig user to use - --username string Username for basic authentication to the API server -``` - -### SEE ALSO - -* [argocd-util apps](argocd-util_apps.md) - Utility commands operate on ArgoCD applications - diff --git a/docs/operator-manual/server-commands/argocd-util_cluster.md b/docs/operator-manual/server-commands/argocd-util_cluster.md deleted file mode 100644 index 2d39ebae9e1f2..0000000000000 --- a/docs/operator-manual/server-commands/argocd-util_cluster.md +++ /dev/null @@ -1,22 +0,0 @@ -## argocd-util cluster - -Manage clusters configuration - -``` -argocd-util cluster [flags] -``` - -### Options - -``` - -h, --help help for cluster -``` - -### SEE ALSO - -* [argocd-util](argocd-util.md) - argocd-util tools used by Argo CD -* [argocd-util cluster generate-spec](argocd-util_cluster_generate-spec.md) - Generate declarative config for a cluster -* [argocd-util cluster kubeconfig](argocd-util_cluster_kubeconfig.md) - Generates kubeconfig for the specified cluster -* [argocd-util cluster shards](argocd-util_cluster_shards.md) - Print information about each controller shard and portion of Kubernetes resources it is responsible for. -* [argocd-util cluster stats](argocd-util_cluster_stats.md) - Prints information cluster statistics and inferred shard number - diff --git a/docs/operator-manual/server-commands/argocd-util_cluster_kubeconfig.md b/docs/operator-manual/server-commands/argocd-util_cluster_kubeconfig.md deleted file mode 100644 index 302be65813470..0000000000000 --- a/docs/operator-manual/server-commands/argocd-util_cluster_kubeconfig.md +++ /dev/null @@ -1,35 +0,0 @@ -## argocd-util cluster kubeconfig - -Generates kubeconfig for the specified cluster - -``` -argocd-util cluster kubeconfig CLUSTER_URL OUTPUT_PATH [flags] -``` - -### Options - -``` - --as string Username to impersonate for the operation - --as-group stringArray Group to impersonate for the operation, this flag can be repeated to specify multiple groups. - --certificate-authority string Path to a cert file for the certificate authority - --client-certificate string Path to a client certificate file for TLS - --client-key string Path to a client key file for TLS - --cluster string The name of the kubeconfig cluster to use - --context string The name of the kubeconfig context to use - -h, --help help for kubeconfig - --insecure-skip-tls-verify If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure - --kubeconfig string Path to a kube config. Only required if out-of-cluster - -n, --namespace string If present, the namespace scope for this CLI request - --password string Password for basic authentication to the API server - --request-timeout string The length of time to wait before giving up on a single server request. Non-zero values should contain a corresponding time unit (e.g. 1s, 2m, 3h). A value of zero means don't timeout requests. (default "0") - --server string The address and port of the Kubernetes API server - --tls-server-name string If provided, this name will be used to validate server certificate. If this is not provided, hostname used to contact the server is used. - --token string Bearer token for authentication to the API server - --user string The name of the kubeconfig user to use - --username string Username for basic authentication to the API server -``` - -### SEE ALSO - -* [argocd-util cluster](argocd-util_cluster.md) - Manage clusters configuration - diff --git a/docs/operator-manual/server-commands/argocd-util_config.md b/docs/operator-manual/server-commands/argocd-util_config.md deleted file mode 100644 index b7e711501dcaa..0000000000000 --- a/docs/operator-manual/server-commands/argocd-util_config.md +++ /dev/null @@ -1,22 +0,0 @@ -## argocd-util config - -Generate declarative configuration files - -``` -argocd-util config [flags] -``` - -### Options - -``` - -h, --help help for config -``` - -### SEE ALSO - -* [argocd-util](argocd-util.md) - argocd-util tools used by Argo CD -* [argocd-util config app](argocd-util_config_app.md) - Generate declarative config for an application -* [argocd-util config cluster](argocd-util_config_cluster.md) - Generate declarative config for a cluster -* [argocd-util config proj](argocd-util_config_proj.md) - Generate declarative config for a project -* [argocd-util config repo](argocd-util_config_repo.md) - Generate declarative config for a repo - diff --git a/docs/operator-manual/server-commands/argocd-util_config_app.md b/docs/operator-manual/server-commands/argocd-util_config_app.md deleted file mode 100644 index 1908198c9a612..0000000000000 --- a/docs/operator-manual/server-commands/argocd-util_config_app.md +++ /dev/null @@ -1,89 +0,0 @@ -## argocd-util config app - -Generate declarative config for an application - -``` -argocd-util config app APPNAME [flags] -``` - -### Examples - -``` - - # Generate declarative config for a directory app - argocd-util config app guestbook --repo https://github.com/argoproj/argocd-example-apps.git --path guestbook --dest-namespace default --dest-server https://kubernetes.default.svc --directory-recurse - - # Generate declarative config for a Jsonnet app - argocd-util config app jsonnet-guestbook --repo https://github.com/argoproj/argocd-example-apps.git --path jsonnet-guestbook --dest-namespace default --dest-server https://kubernetes.default.svc --jsonnet-ext-str replicas=2 - - # Generate declarative config for a Helm app - argocd-util config app helm-guestbook --repo https://github.com/argoproj/argocd-example-apps.git --path helm-guestbook --dest-namespace default --dest-server https://kubernetes.default.svc --helm-set replicaCount=2 - - # Generate declarative config for a Helm app from a Helm repo - argocd-util config app nginx-ingress --repo https://kubernetes-charts.storage.googleapis.com --helm-chart nginx-ingress --revision 1.24.3 --dest-namespace default --dest-server https://kubernetes.default.svc - - # Generate declarative config for a Kustomize app - argocd-util config app kustomize-guestbook --repo https://github.com/argoproj/argocd-example-apps.git --path kustomize-guestbook --dest-namespace default --dest-server https://kubernetes.default.svc --kustomize-image gcr.io/heptio-images/ks-guestbook-demo:0.1 - - # Generate declarative config for a app using a custom tool: - argocd-util config app ksane --repo https://github.com/argoproj/argocd-example-apps.git --path plugins/kasane --dest-namespace default --dest-server https://kubernetes.default.svc --config-management-plugin kasane - -``` - -### Options - -``` - --allow-empty Set allow zero live resources when sync is automated - --auto-prune Set automatic pruning when sync is automated - --config-management-plugin string Config management plugin name - --dest-name string K8s cluster Name (e.g. minikube) - --dest-namespace string K8s target namespace (overrides the namespace specified in the ksonnet app.yaml) - --dest-server string K8s cluster URL (e.g. https://kubernetes.default.svc) - --directory-exclude string Set glob expression used to exclude files from application source path - --directory-include string Set glob expression used to include files from application source path - --directory-recurse Recurse directory - --env string Application environment to monitor - --helm-chart string Helm Chart name - --helm-set stringArray Helm set values on the command line (can be repeated to set several values: --helm-set key1=val1 --helm-set key2=val2) - --helm-set-file stringArray Helm set values from respective files specified via the command line (can be repeated to set several values: --helm-set-file key1=path1 --helm-set-file key2=path2) - --helm-set-string stringArray Helm set STRING values on the command line (can be repeated to set several values: --helm-set-string key1=val1 --helm-set-string key2=val2) - --helm-version string Helm version - -h, --help help for app - --jsonnet-ext-var-code stringArray Jsonnet ext var - --jsonnet-ext-var-str stringArray Jsonnet string ext var - --jsonnet-libs stringArray Additional jsonnet libs (prefixed by repoRoot) - --jsonnet-tla-code stringArray Jsonnet top level code arguments - --jsonnet-tla-str stringArray Jsonnet top level string arguments - --kustomize-common-annotation stringArray Set common labels in Kustomize - --kustomize-common-label stringArray Set common labels in Kustomize - --kustomize-image stringArray Kustomize images (e.g. --kustomize-image node:8.15.0 --kustomize-image mysql=mariadb,alpine@sha256:24a0c4b4a4c0eb97a1aabb8e29f18e917d05abfe1b7a7c07857230879ce7d3d) - --kustomize-version string Kustomize version - -l, --label stringArray Labels to apply to the app - --name string A name for the app, ignored if a file is set (DEPRECATED) - --nameprefix string Kustomize nameprefix - --namesuffix string Kustomize namesuffix - -o, --output string Output format. One of: json|yaml (default "yaml") - -p, --parameter stringArray set a parameter override (e.g. -p guestbook=image=example/guestbook:latest) - --path string Path in repository to the app directory, ignored if a file is set - --plugin-env stringArray Additional plugin envs - --project string Application project name - --release-name string Helm release-name - --repo string Repository URL, ignored if a file is set - --retry-backoff-duration duration Retry backoff base duration. Input needs to be a duration (e.g. 2m, 1h) (default 5s) - --retry-backoff-factor int Factor multiplies the base duration after each failed retry (default 2) - --retry-backoff-max-duration duration Max retry backoff duration. Input needs to be a duration (e.g. 2m, 1h) (default 3m0s) - --retry-limit int Max number of allowed sync retries - --revision string The tracking source branch, tag, commit or Helm chart version the application will sync to - --revision-history-limit int How many items to keep in revision history (default 10) - --self-heal Set self healing when sync is automated - --sync-option Prune=false Add or remove a sync option, e.g add Prune=false. Remove using `!` prefix, e.g. `!Prune=false` - --sync-policy string Set the sync policy (one of: none, automated (aliases of automated: auto, automatic)) - --validate Validation of repo and cluster (default true) - --values stringArray Helm values file(s) to use - --values-literal-file string Filename or URL to import as a literal Helm values block -``` - -### SEE ALSO - -* [argocd-util config](argocd-util_config.md) - Generate declarative configuration files - diff --git a/docs/operator-manual/server-commands/argocd-util_config_cluster.md b/docs/operator-manual/server-commands/argocd-util_config_cluster.md deleted file mode 100644 index 8bd02356d6402..0000000000000 --- a/docs/operator-manual/server-commands/argocd-util_config_cluster.md +++ /dev/null @@ -1,32 +0,0 @@ -## argocd-util config cluster - -Generate declarative config for a cluster - -``` -argocd-util config cluster CONTEXT [flags] -``` - -### Options - -``` - --aws-cluster-name string AWS Cluster name if set then aws cli eks token command will be used to access cluster - --aws-role-arn string Optional AWS role arn. If set then AWS IAM Authenticator assumes a role to perform cluster operations instead of the default AWS credential provider chain. - --bearer-token string Authentication token that should be used to access K8S API server - --exec-command string Command to run to provide client credentials to the cluster. You may need to build a custom ArgoCD image to ensure the command is available at runtime. - --exec-command-api-version string Preferred input version of the ExecInfo for the --exec-command executable - --exec-command-args stringArray Arguments to supply to the --exec-command executable - --exec-command-env stringToString Environment vars to set when running the --exec-command executable (default []) - --exec-command-install-hint string Text shown to the user when the --exec-command executable doesn't seem to be present - -h, --help help for cluster - --in-cluster Indicates Argo CD resides inside this cluster and should connect using the internal k8s hostname (kubernetes.default.svc) - --kubeconfig string use a particular kubeconfig file - --name string Overwrite the cluster name - --namespace stringArray List of namespaces which are allowed to manage - -o, --output string Output format. One of: json|yaml (default "yaml") - --shard int Cluster shard number; inferred from hostname if not set (default -1) -``` - -### SEE ALSO - -* [argocd-util config](argocd-util_config.md) - Generate declarative configuration files - diff --git a/docs/operator-manual/server-commands/argocd-util_config_proj.md b/docs/operator-manual/server-commands/argocd-util_config_proj.md deleted file mode 100644 index b43963cc877d2..0000000000000 --- a/docs/operator-manual/server-commands/argocd-util_config_proj.md +++ /dev/null @@ -1,25 +0,0 @@ -## argocd-util config proj - -Generate declarative config for a project - -``` -argocd-util config proj PROJECT [flags] -``` - -### Options - -``` - --description string Project description - -d, --dest stringArray Permitted destination server and namespace (e.g. https://192.168.99.100:8443,default) - -h, --help help for proj - --orphaned-resources Enables orphaned resources monitoring - --orphaned-resources-warn Specifies if applications should have a warning condition when orphaned resources detected - -o, --output string Output format. One of: json|yaml (default "yaml") - --signature-keys strings GnuPG public key IDs for commit signature verification - -s, --src stringArray Permitted source repository URL -``` - -### SEE ALSO - -* [argocd-util config](argocd-util_config.md) - Generate declarative configuration files - diff --git a/docs/operator-manual/server-commands/argocd-util_config_repo.md b/docs/operator-manual/server-commands/argocd-util_config_repo.md deleted file mode 100644 index 80fec43bf7a7d..0000000000000 --- a/docs/operator-manual/server-commands/argocd-util_config_repo.md +++ /dev/null @@ -1,61 +0,0 @@ -## argocd-util config repo - -Generate declarative config for a repo - -``` -argocd-util config repo REPOURL [flags] -``` - -### Examples - -``` - - # Add a Git repository via SSH using a private key for authentication, ignoring the server's host key: - argocd-util config repo git@git.example.com:repos/repo --insecure-ignore-host-key --ssh-private-key-path ~/id_rsa - - # Add a Git repository via SSH on a non-default port - need to use ssh:// style URLs here - argocd-util config repo ssh://git@git.example.com:2222/repos/repo --ssh-private-key-path ~/id_rsa - - # Add a private Git repository via HTTPS using username/password and TLS client certificates: - argocd-util config repo https://git.example.com/repos/repo --username git --password secret --tls-client-cert-path ~/mycert.crt --tls-client-cert-key-path ~/mycert.key - - # Add a private Git repository via HTTPS using username/password without verifying the server's TLS certificate - argocd-util config repo https://git.example.com/repos/repo --username git --password secret --insecure-skip-server-verification - - # Add a public Helm repository named 'stable' via HTTPS - argocd-util config repo https://kubernetes-charts.storage.googleapis.com --type helm --name stable - - # Add a private Helm repository named 'stable' via HTTPS - argocd-util config repo https://kubernetes-charts.storage.googleapis.com --type helm --name stable --username test --password test - - # Add a private Helm OCI-based repository named 'stable' via HTTPS - argocd-util config repo helm-oci-registry.cn-zhangjiakou.cr.aliyuncs.com --type helm --name stable --enable-oci --username test --password test - -``` - -### Options - -``` - --enable-lfs enable git-lfs (Large File Support) on this repository - --enable-oci enable helm-oci (Helm OCI-Based Repository) - --github-app-enterprise-base-url string base url to use when using GitHub Enterprise (e.g. https://ghe.example.com/api/v3 - --github-app-id int id of the GitHub Application - --github-app-installation-id int installation id of the GitHub Application - --github-app-private-key-path string private key of the GitHub Application - -h, --help help for repo - --insecure-ignore-host-key disables SSH strict host key checking (deprecated, use --insecure-skip-server-verification instead) - --insecure-skip-server-verification disables server certificate and host key checks - --name string name of the repository, mandatory for repositories of type helm - -o, --output string Output format. One of: json|yaml (default "yaml") - --password string password to the repository - --ssh-private-key-path string path to the private ssh key (e.g. ~/.ssh/id_rsa) - --tls-client-cert-key-path string path to the TLS client cert's key path (must be PEM format) - --tls-client-cert-path string path to the TLS client cert (must be PEM format) - --type string type of the repository, "git" or "helm" (default "git") - --username string username to the repository -``` - -### SEE ALSO - -* [argocd-util config](argocd-util_config.md) - Generate declarative configuration files - diff --git a/docs/operator-manual/server-commands/argocd-util_gendexcfg.md b/docs/operator-manual/server-commands/argocd-util_gendexcfg.md deleted file mode 100644 index 4f3f0c5a78082..0000000000000 --- a/docs/operator-manual/server-commands/argocd-util_gendexcfg.md +++ /dev/null @@ -1,36 +0,0 @@ -## argocd-util gendexcfg - -Generates a dex config from Argo CD settings - -``` -argocd-util gendexcfg [flags] -``` - -### Options - -``` - --as string Username to impersonate for the operation - --as-group stringArray Group to impersonate for the operation, this flag can be repeated to specify multiple groups. - --certificate-authority string Path to a cert file for the certificate authority - --client-certificate string Path to a client certificate file for TLS - --client-key string Path to a client key file for TLS - --cluster string The name of the kubeconfig cluster to use - --context string The name of the kubeconfig context to use - -h, --help help for gendexcfg - --insecure-skip-tls-verify If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure - --kubeconfig string Path to a kube config. Only required if out-of-cluster - -n, --namespace string If present, the namespace scope for this CLI request - -o, --out string Output to the specified file instead of stdout - --password string Password for basic authentication to the API server - --request-timeout string The length of time to wait before giving up on a single server request. Non-zero values should contain a corresponding time unit (e.g. 1s, 2m, 3h). A value of zero means don't timeout requests. (default "0") - --server string The address and port of the Kubernetes API server - --tls-server-name string If provided, this name will be used to validate server certificate. If this is not provided, hostname used to contact the server is used. - --token string Bearer token for authentication to the API server - --user string The name of the kubeconfig user to use - --username string Username for basic authentication to the API server -``` - -### SEE ALSO - -* [argocd-util](argocd-util.md) - argocd-util tools used by Argo CD - diff --git a/docs/operator-manual/server-commands/argocd-util_kubeconfig.md b/docs/operator-manual/server-commands/argocd-util_kubeconfig.md deleted file mode 100644 index 70426e22876cb..0000000000000 --- a/docs/operator-manual/server-commands/argocd-util_kubeconfig.md +++ /dev/null @@ -1,35 +0,0 @@ -## argocd-util kubeconfig - -Generates kubeconfig for the specified cluster - -``` -argocd-util kubeconfig CLUSTER_URL OUTPUT_PATH [flags] -``` - -### Options - -``` - --as string Username to impersonate for the operation - --as-group stringArray Group to impersonate for the operation, this flag can be repeated to specify multiple groups. - --certificate-authority string Path to a cert file for the certificate authority - --client-certificate string Path to a client certificate file for TLS - --client-key string Path to a client key file for TLS - --cluster string The name of the kubeconfig cluster to use - --context string The name of the kubeconfig context to use - -h, --help help for kubeconfig - --insecure-skip-tls-verify If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure - --kubeconfig string Path to a kube config. Only required if out-of-cluster - -n, --namespace string If present, the namespace scope for this CLI request - --password string Password for basic authentication to the API server - --request-timeout string The length of time to wait before giving up on a single server request. Non-zero values should contain a corresponding time unit (e.g. 1s, 2m, 3h). A value of zero means don't timeout requests. (default "0") - --server string The address and port of the Kubernetes API server - --tls-server-name string If provided, this name will be used to validate server certificate. If this is not provided, hostname used to contact the server is used. - --token string Bearer token for authentication to the API server - --user string The name of the kubeconfig user to use - --username string Username for basic authentication to the API server -``` - -### SEE ALSO - -* [argocd-util](argocd-util.md) - argocd-util tools used by Argo CD - diff --git a/docs/operator-manual/server-commands/argocd-util_proj.md b/docs/operator-manual/server-commands/argocd-util_proj.md deleted file mode 100644 index 0cef263287e10..0000000000000 --- a/docs/operator-manual/server-commands/argocd-util_proj.md +++ /dev/null @@ -1,21 +0,0 @@ -## argocd-util proj - -Manage projects configuration - -``` -argocd-util proj [flags] -``` - -### Options - -``` - -h, --help help for proj -``` - -### SEE ALSO - -* [argocd-util](argocd-util.md) - argocd-util tools used by Argo CD -* [argocd-util proj generate-allow-list](argocd-util_proj_generate-allow-list.md) - Generates project allow list from the specified clusterRole file -* [argocd-util proj generate-spec](argocd-util_proj_generate-spec.md) - Generate declarative config for a project -* [argocd-util proj update-role-policy](argocd-util_proj_update-role-policy.md) - Implement bulk project role update. Useful to back-fill existing project policies or remove obsolete actions. - diff --git a/docs/operator-manual/server-commands/argocd-util_proj_generate-allow-list.md b/docs/operator-manual/server-commands/argocd-util_proj_generate-allow-list.md deleted file mode 100644 index 75e77b2740eac..0000000000000 --- a/docs/operator-manual/server-commands/argocd-util_proj_generate-allow-list.md +++ /dev/null @@ -1,36 +0,0 @@ -## argocd-util proj generate-allow-list - -Generates project allow list from the specified clusterRole file - -``` -argocd-util proj generate-allow-list CLUSTERROLE_PATH PROJ_NAME [flags] -``` - -### Options - -``` - --as string Username to impersonate for the operation - --as-group stringArray Group to impersonate for the operation, this flag can be repeated to specify multiple groups. - --certificate-authority string Path to a cert file for the certificate authority - --client-certificate string Path to a client certificate file for TLS - --client-key string Path to a client key file for TLS - --cluster string The name of the kubeconfig cluster to use - --context string The name of the kubeconfig context to use - -h, --help help for generate-allow-list - --insecure-skip-tls-verify If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure - --kubeconfig string Path to a kube config. Only required if out-of-cluster - -n, --namespace string If present, the namespace scope for this CLI request - -o, --out string Output to the specified file instead of stdout (default "-") - --password string Password for basic authentication to the API server - --request-timeout string The length of time to wait before giving up on a single server request. Non-zero values should contain a corresponding time unit (e.g. 1s, 2m, 3h). A value of zero means don't timeout requests. (default "0") - --server string The address and port of the Kubernetes API server - --tls-server-name string If provided, this name will be used to validate server certificate. If this is not provided, hostname used to contact the server is used. - --token string Bearer token for authentication to the API server - --user string The name of the kubeconfig user to use - --username string Username for basic authentication to the API server -``` - -### SEE ALSO - -* [argocd-util proj](argocd-util_proj.md) - Manage projects configuration - diff --git a/docs/operator-manual/server-commands/argocd-util_proj_generate-spec.md b/docs/operator-manual/server-commands/argocd-util_proj_generate-spec.md deleted file mode 100644 index 74407a69d8ab8..0000000000000 --- a/docs/operator-manual/server-commands/argocd-util_proj_generate-spec.md +++ /dev/null @@ -1,30 +0,0 @@ -## argocd-util proj generate-spec - -Generate declarative config for a project - -``` -argocd-util proj generate-spec PROJECT [flags] -``` - -### Options - -``` - --allow-cluster-resource stringArray List of allowed cluster level resources - --allow-namespaced-resource stringArray List of allowed namespaced resources - --deny-cluster-resource stringArray List of denied cluster level resources - --deny-namespaced-resource stringArray List of denied namespaced resources - --description string Project description - -d, --dest stringArray Permitted destination server and namespace (e.g. https://192.168.99.100:8443,default) - -f, --file string Filename or URL to Kubernetes manifests for the project - -h, --help help for generate-spec - --orphaned-resources Enables orphaned resources monitoring - --orphaned-resources-warn Specifies if applications should have a warning condition when orphaned resources detected - -o, --output string Output format. One of: json|yaml (default "yaml") - --signature-keys strings GnuPG public key IDs for commit signature verification - -s, --src stringArray Permitted source repository URL -``` - -### SEE ALSO - -* [argocd-util proj](argocd-util_proj.md) - Manage projects configuration - diff --git a/docs/operator-manual/server-commands/argocd-util_projects.md b/docs/operator-manual/server-commands/argocd-util_projects.md deleted file mode 100644 index 5aa2d214f2894..0000000000000 --- a/docs/operator-manual/server-commands/argocd-util_projects.md +++ /dev/null @@ -1,20 +0,0 @@ -## argocd-util projects - -Utility commands operate on ArgoCD Projects - -``` -argocd-util projects [flags] -``` - -### Options - -``` - -h, --help help for projects -``` - -### SEE ALSO - -* [argocd-util](argocd-util.md) - argocd-util tools used by Argo CD -* [argocd-util projects generate-allow-list](argocd-util_projects_generate-allow-list.md) - Generates project allow list from the specified clusterRole file -* [argocd-util projects update-role-policy](argocd-util_projects_update-role-policy.md) - Implement bulk project role update. Useful to back-fill existing project policies or remove obsolete actions. - diff --git a/docs/operator-manual/server-commands/argocd-util_projects_update-role-policy.md b/docs/operator-manual/server-commands/argocd-util_projects_update-role-policy.md deleted file mode 100644 index 346034bc541de..0000000000000 --- a/docs/operator-manual/server-commands/argocd-util_projects_update-role-policy.md +++ /dev/null @@ -1,51 +0,0 @@ -## argocd-util projects update-role-policy - -Implement bulk project role update. Useful to back-fill existing project policies or remove obsolete actions. - -``` -argocd-util projects update-role-policy PROJECT_GLOB MODIFICATION ACTION [flags] -``` - -### Examples - -``` - # Add policy that allows executing any action (action/*) to roles which name matches to *deployer* in all projects - argocd-util projects update-role-policy '*' set 'action/*' --role '*deployer*' --resource applications --scope '*' --permission allow - - # Remove policy that which manages running (action/*) from all roles which name matches *deployer* in all projects - argocd-util projects update-role-policy '*' remove override --role '*deployer*' - -``` - -### Options - -``` - --as string Username to impersonate for the operation - --as-group stringArray Group to impersonate for the operation, this flag can be repeated to specify multiple groups. - --certificate-authority string Path to a cert file for the certificate authority - --client-certificate string Path to a client certificate file for TLS - --client-key string Path to a client key file for TLS - --cluster string The name of the kubeconfig cluster to use - --context string The name of the kubeconfig context to use - --dry-run Dry run (default true) - -h, --help help for update-role-policy - --insecure-skip-tls-verify If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure - --kubeconfig string Path to a kube config. Only required if out-of-cluster - -n, --namespace string If present, the namespace scope for this CLI request - --password string Password for basic authentication to the API server - --permission string Action permission - --request-timeout string The length of time to wait before giving up on a single server request. Non-zero values should contain a corresponding time unit (e.g. 1s, 2m, 3h). A value of zero means don't timeout requests. (default "0") - --resource string Resource e.g. 'applications' - --role string Role name pattern e.g. '*deployer*' (default "*") - --scope string Resource scope e.g. '*' - --server string The address and port of the Kubernetes API server - --tls-server-name string If provided, this name will be used to validate server certificate. If this is not provided, hostname used to contact the server is used. - --token string Bearer token for authentication to the API server - --user string The name of the kubeconfig user to use - --username string Username for basic authentication to the API server -``` - -### SEE ALSO - -* [argocd-util projects](argocd-util_projects.md) - Utility commands operate on ArgoCD Projects - diff --git a/docs/operator-manual/server-commands/argocd-util_repo.md b/docs/operator-manual/server-commands/argocd-util_repo.md deleted file mode 100644 index 5010cf024a18d..0000000000000 --- a/docs/operator-manual/server-commands/argocd-util_repo.md +++ /dev/null @@ -1,19 +0,0 @@ -## argocd-util repo - -Manage repositories configuration - -``` -argocd-util repo [flags] -``` - -### Options - -``` - -h, --help help for repo -``` - -### SEE ALSO - -* [argocd-util](argocd-util.md) - argocd-util tools used by Argo CD -* [argocd-util repo generate-spec](argocd-util_repo_generate-spec.md) - Generate declarative config for a repo - diff --git a/docs/operator-manual/server-commands/argocd-util_repo_generate-spec.md b/docs/operator-manual/server-commands/argocd-util_repo_generate-spec.md deleted file mode 100644 index 166a57e080646..0000000000000 --- a/docs/operator-manual/server-commands/argocd-util_repo_generate-spec.md +++ /dev/null @@ -1,62 +0,0 @@ -## argocd-util repo generate-spec - -Generate declarative config for a repo - -``` -argocd-util repo generate-spec REPOURL [flags] -``` - -### Examples - -``` - - # Add a Git repository via SSH using a private key for authentication, ignoring the server's host key: - argocd-util repo generate-spec git@git.example.com:repos/repo --insecure-ignore-host-key --ssh-private-key-path ~/id_rsa - - # Add a Git repository via SSH on a non-default port - need to use ssh:// style URLs here - argocd-util repo generate-spec ssh://git@git.example.com:2222/repos/repo --ssh-private-key-path ~/id_rsa - - # Add a private Git repository via HTTPS using username/password and TLS client certificates: - argocd-util repo generate-spec https://git.example.com/repos/repo --username git --password secret --tls-client-cert-path ~/mycert.crt --tls-client-cert-key-path ~/mycert.key - - # Add a private Git repository via HTTPS using username/password without verifying the server's TLS certificate - argocd-util repo generate-spec https://git.example.com/repos/repo --username git --password secret --insecure-skip-server-verification - - # Add a public Helm repository named 'stable' via HTTPS - argocd-util repo generate-spec https://charts.helm.sh/stable --type helm --name stable - - # Add a private Helm repository named 'stable' via HTTPS - argocd-util repo generate-spec https://charts.helm.sh/stable --type helm --name stable --username test --password test - - # Add a private Helm OCI-based repository named 'stable' via HTTPS - argocd-util repo generate-spec helm-oci-registry.cn-zhangjiakou.cr.aliyuncs.com --type helm --name stable --enable-oci --username test --password test - -``` - -### Options - -``` - --enable-lfs enable git-lfs (Large File Support) on this repository - --enable-oci enable helm-oci (Helm OCI-Based Repository) - --github-app-enterprise-base-url string base url to use when using GitHub Enterprise (e.g. https://ghe.example.com/api/v3 - --github-app-id int id of the GitHub Application - --github-app-installation-id int installation id of the GitHub Application - --github-app-private-key-path string private key of the GitHub Application - -h, --help help for generate-spec - --insecure-ignore-host-key disables SSH strict host key checking (deprecated, use --insecure-skip-server-verification instead) - --insecure-skip-server-verification disables server certificate and host key checks - --name string name of the repository, mandatory for repositories of type helm - -o, --output string Output format. One of: json|yaml (default "yaml") - --password string password to the repository - --proxy string use proxy to access repository - --ssh-private-key-path string path to the private ssh key (e.g. ~/.ssh/id_rsa) - --tls-client-cert-key-path string path to the TLS client cert's key path (must be PEM format) - --tls-client-cert-path string path to the TLS client cert (must be PEM format) - --type string type of the repository, "git" or "helm" (default "git") - --username string username to the repository -``` - -### SEE ALSO - -* [argocd-util repo](argocd-util_repo.md) - Manage repositories configuration - diff --git a/docs/operator-manual/server-commands/argocd-util_rundex.md b/docs/operator-manual/server-commands/argocd-util_rundex.md deleted file mode 100644 index 069cf329e23f8..0000000000000 --- a/docs/operator-manual/server-commands/argocd-util_rundex.md +++ /dev/null @@ -1,35 +0,0 @@ -## argocd-util rundex - -Runs dex generating a config using settings from the Argo CD configmap and secret - -``` -argocd-util rundex [flags] -``` - -### Options - -``` - --as string Username to impersonate for the operation - --as-group stringArray Group to impersonate for the operation, this flag can be repeated to specify multiple groups. - --certificate-authority string Path to a cert file for the certificate authority - --client-certificate string Path to a client certificate file for TLS - --client-key string Path to a client key file for TLS - --cluster string The name of the kubeconfig cluster to use - --context string The name of the kubeconfig context to use - -h, --help help for rundex - --insecure-skip-tls-verify If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure - --kubeconfig string Path to a kube config. Only required if out-of-cluster - -n, --namespace string If present, the namespace scope for this CLI request - --password string Password for basic authentication to the API server - --request-timeout string The length of time to wait before giving up on a single server request. Non-zero values should contain a corresponding time unit (e.g. 1s, 2m, 3h). A value of zero means don't timeout requests. (default "0") - --server string The address and port of the Kubernetes API server - --tls-server-name string If provided, this name will be used to validate server certificate. If this is not provided, hostname used to contact the server is used. - --token string Bearer token for authentication to the API server - --user string The name of the kubeconfig user to use - --username string Username for basic authentication to the API server -``` - -### SEE ALSO - -* [argocd-util](argocd-util.md) - argocd-util tools used by Argo CD - diff --git a/docs/operator-manual/server-commands/argocd-util_settings.md b/docs/operator-manual/server-commands/argocd-util_settings.md deleted file mode 100644 index 728f52ccd3527..0000000000000 --- a/docs/operator-manual/server-commands/argocd-util_settings.md +++ /dev/null @@ -1,41 +0,0 @@ -## argocd-util settings - -Provides set of commands for settings validation and troubleshooting - -``` -argocd-util settings [flags] -``` - -### Options - -``` - --argocd-cm-path string Path to local argocd-cm.yaml file - --argocd-secret-path string Path to local argocd-secret.yaml file - --as string Username to impersonate for the operation - --as-group stringArray Group to impersonate for the operation, this flag can be repeated to specify multiple groups. - --certificate-authority string Path to a cert file for the certificate authority - --client-certificate string Path to a client certificate file for TLS - --client-key string Path to a client key file for TLS - --cluster string The name of the kubeconfig cluster to use - --context string The name of the kubeconfig context to use - -h, --help help for settings - --insecure-skip-tls-verify If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure - --kubeconfig string Path to a kube config. Only required if out-of-cluster - --load-cluster-settings Indicates that config map and secret should be loaded from cluster unless local file path is provided - -n, --namespace string If present, the namespace scope for this CLI request - --password string Password for basic authentication to the API server - --request-timeout string The length of time to wait before giving up on a single server request. Non-zero values should contain a corresponding time unit (e.g. 1s, 2m, 3h). A value of zero means don't timeout requests. (default "0") - --server string The address and port of the Kubernetes API server - --tls-server-name string If provided, this name will be used to validate server certificate. If this is not provided, hostname used to contact the server is used. - --token string Bearer token for authentication to the API server - --user string The name of the kubeconfig user to use - --username string Username for basic authentication to the API server -``` - -### SEE ALSO - -* [argocd-util](argocd-util.md) - argocd-util tools used by Argo CD -* [argocd-util settings rbac](argocd-util_settings_rbac.md) - Validate and test RBAC configuration -* [argocd-util settings resource-overrides](argocd-util_settings_resource-overrides.md) - Troubleshoot resource overrides -* [argocd-util settings validate](argocd-util_settings_validate.md) - Validate settings - diff --git a/docs/operator-manual/server-commands/argocd-util_settings_rbac.md b/docs/operator-manual/server-commands/argocd-util_settings_rbac.md deleted file mode 100644 index 768f75dd39364..0000000000000 --- a/docs/operator-manual/server-commands/argocd-util_settings_rbac.md +++ /dev/null @@ -1,45 +0,0 @@ -## argocd-util settings rbac - -Validate and test RBAC configuration - -``` -argocd-util settings rbac [flags] -``` - -### Options - -``` - -h, --help help for rbac -``` - -### Options inherited from parent commands - -``` - --argocd-cm-path string Path to local argocd-cm.yaml file - --argocd-secret-path string Path to local argocd-secret.yaml file - --as string Username to impersonate for the operation - --as-group stringArray Group to impersonate for the operation, this flag can be repeated to specify multiple groups. - --certificate-authority string Path to a cert file for the certificate authority - --client-certificate string Path to a client certificate file for TLS - --client-key string Path to a client key file for TLS - --cluster string The name of the kubeconfig cluster to use - --context string The name of the kubeconfig context to use - --insecure-skip-tls-verify If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure - --kubeconfig string Path to a kube config. Only required if out-of-cluster - --load-cluster-settings Indicates that config map and secret should be loaded from cluster unless local file path is provided - -n, --namespace string If present, the namespace scope for this CLI request - --password string Password for basic authentication to the API server - --request-timeout string The length of time to wait before giving up on a single server request. Non-zero values should contain a corresponding time unit (e.g. 1s, 2m, 3h). A value of zero means don't timeout requests. (default "0") - --server string The address and port of the Kubernetes API server - --tls-server-name string If provided, this name will be used to validate server certificate. If this is not provided, hostname used to contact the server is used. - --token string Bearer token for authentication to the API server - --user string The name of the kubeconfig user to use - --username string Username for basic authentication to the API server -``` - -### SEE ALSO - -* [argocd-util settings](argocd-util_settings.md) - Provides set of commands for settings validation and troubleshooting -* [argocd-util settings rbac can](argocd-util_settings_rbac_can.md) - Check RBAC permissions for a role or subject -* [argocd-util settings rbac validate](argocd-util_settings_rbac_validate.md) - Validate RBAC policy - diff --git a/docs/operator-manual/server-commands/argocd-util_settings_rbac_can.md b/docs/operator-manual/server-commands/argocd-util_settings_rbac_can.md deleted file mode 100644 index 24a5c2d2277f7..0000000000000 --- a/docs/operator-manual/server-commands/argocd-util_settings_rbac_can.md +++ /dev/null @@ -1,78 +0,0 @@ -## argocd-util settings rbac can - -Check RBAC permissions for a role or subject - -### Synopsis - - -Check whether a given role or subject has appropriate RBAC permissions to do -something. - - -``` -argocd-util settings rbac can ROLE/SUBJECT ACTION RESOURCE [SUB-RESOURCE] [flags] -``` - -### Examples - -``` - -# Check whether role some:role has permissions to create an application in the -# 'default' project, using a local policy.csv file -argocd-util settings rbac can some:role create application 'default/app' --policy-file policy.csv - -# Policy file can also be K8s config map with data keys like argocd-rbac-cm, -# i.e. 'policy.csv' and (optionally) 'policy.default' -argocd-util settings rbac can some:role create application 'default/app' --policy-file argocd-rbac-cm.yaml - -# If --policy-file is not given, the ConfigMap 'argocd-rbac-cm' from K8s is -# used. You need to specify the argocd namespace, and make sure that your -# current Kubernetes context is pointing to the cluster Argo CD is running in -argocd-util settings rbac can some:role create application 'default/app' --namespace argocd - -# You can override a possibly configured default role -argocd-util settings rbac can someuser create application 'default/app' --default-role role:readonly - - -``` - -### Options - -``` - --default-role string name of the default role to use - -h, --help help for can - --policy-file string path to the policy file to use - -q, --quiet quiet mode - do not print results to stdout - --strict whether to perform strict check on action and resource names (default true) - --use-builtin-policy whether to also use builtin-policy (default true) -``` - -### Options inherited from parent commands - -``` - --argocd-cm-path string Path to local argocd-cm.yaml file - --argocd-secret-path string Path to local argocd-secret.yaml file - --as string Username to impersonate for the operation - --as-group stringArray Group to impersonate for the operation, this flag can be repeated to specify multiple groups. - --certificate-authority string Path to a cert file for the certificate authority - --client-certificate string Path to a client certificate file for TLS - --client-key string Path to a client key file for TLS - --cluster string The name of the kubeconfig cluster to use - --context string The name of the kubeconfig context to use - --insecure-skip-tls-verify If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure - --kubeconfig string Path to a kube config. Only required if out-of-cluster - --load-cluster-settings Indicates that config map and secret should be loaded from cluster unless local file path is provided - -n, --namespace string If present, the namespace scope for this CLI request - --password string Password for basic authentication to the API server - --request-timeout string The length of time to wait before giving up on a single server request. Non-zero values should contain a corresponding time unit (e.g. 1s, 2m, 3h). A value of zero means don't timeout requests. (default "0") - --server string The address and port of the Kubernetes API server - --tls-server-name string If provided, this name will be used to validate server certificate. If this is not provided, hostname used to contact the server is used. - --token string Bearer token for authentication to the API server - --user string The name of the kubeconfig user to use - --username string Username for basic authentication to the API server -``` - -### SEE ALSO - -* [argocd-util settings rbac](argocd-util_settings_rbac.md) - Validate and test RBAC configuration - diff --git a/docs/operator-manual/server-commands/argocd-util_settings_rbac_validate.md b/docs/operator-manual/server-commands/argocd-util_settings_rbac_validate.md deleted file mode 100644 index 81ae11d44face..0000000000000 --- a/docs/operator-manual/server-commands/argocd-util_settings_rbac_validate.md +++ /dev/null @@ -1,51 +0,0 @@ -## argocd-util settings rbac validate - -Validate RBAC policy - -### Synopsis - - -Validates an RBAC policy for being syntactically correct. The policy must be -a local file, and in either CSV or K8s ConfigMap format. - - -``` -argocd-util settings rbac validate --policy-file=POLICYFILE [flags] -``` - -### Options - -``` - -h, --help help for validate - --policy-file string path to the policy file to use -``` - -### Options inherited from parent commands - -``` - --argocd-cm-path string Path to local argocd-cm.yaml file - --argocd-secret-path string Path to local argocd-secret.yaml file - --as string Username to impersonate for the operation - --as-group stringArray Group to impersonate for the operation, this flag can be repeated to specify multiple groups. - --certificate-authority string Path to a cert file for the certificate authority - --client-certificate string Path to a client certificate file for TLS - --client-key string Path to a client key file for TLS - --cluster string The name of the kubeconfig cluster to use - --context string The name of the kubeconfig context to use - --insecure-skip-tls-verify If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure - --kubeconfig string Path to a kube config. Only required if out-of-cluster - --load-cluster-settings Indicates that config map and secret should be loaded from cluster unless local file path is provided - -n, --namespace string If present, the namespace scope for this CLI request - --password string Password for basic authentication to the API server - --request-timeout string The length of time to wait before giving up on a single server request. Non-zero values should contain a corresponding time unit (e.g. 1s, 2m, 3h). A value of zero means don't timeout requests. (default "0") - --server string The address and port of the Kubernetes API server - --tls-server-name string If provided, this name will be used to validate server certificate. If this is not provided, hostname used to contact the server is used. - --token string Bearer token for authentication to the API server - --user string The name of the kubeconfig user to use - --username string Username for basic authentication to the API server -``` - -### SEE ALSO - -* [argocd-util settings rbac](argocd-util_settings_rbac.md) - Validate and test RBAC configuration - diff --git a/docs/operator-manual/server-commands/argocd-util_settings_resource-overrides.md b/docs/operator-manual/server-commands/argocd-util_settings_resource-overrides.md deleted file mode 100644 index 9baf7d5e88a26..0000000000000 --- a/docs/operator-manual/server-commands/argocd-util_settings_resource-overrides.md +++ /dev/null @@ -1,47 +0,0 @@ -## argocd-util settings resource-overrides - -Troubleshoot resource overrides - -``` -argocd-util settings resource-overrides [flags] -``` - -### Options - -``` - -h, --help help for resource-overrides -``` - -### Options inherited from parent commands - -``` - --argocd-cm-path string Path to local argocd-cm.yaml file - --argocd-secret-path string Path to local argocd-secret.yaml file - --as string Username to impersonate for the operation - --as-group stringArray Group to impersonate for the operation, this flag can be repeated to specify multiple groups. - --certificate-authority string Path to a cert file for the certificate authority - --client-certificate string Path to a client certificate file for TLS - --client-key string Path to a client key file for TLS - --cluster string The name of the kubeconfig cluster to use - --context string The name of the kubeconfig context to use - --insecure-skip-tls-verify If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure - --kubeconfig string Path to a kube config. Only required if out-of-cluster - --load-cluster-settings Indicates that config map and secret should be loaded from cluster unless local file path is provided - -n, --namespace string If present, the namespace scope for this CLI request - --password string Password for basic authentication to the API server - --request-timeout string The length of time to wait before giving up on a single server request. Non-zero values should contain a corresponding time unit (e.g. 1s, 2m, 3h). A value of zero means don't timeout requests. (default "0") - --server string The address and port of the Kubernetes API server - --tls-server-name string If provided, this name will be used to validate server certificate. If this is not provided, hostname used to contact the server is used. - --token string Bearer token for authentication to the API server - --user string The name of the kubeconfig user to use - --username string Username for basic authentication to the API server -``` - -### SEE ALSO - -* [argocd-util settings](argocd-util_settings.md) - Provides set of commands for settings validation and troubleshooting -* [argocd-util settings resource-overrides health](argocd-util_settings_resource-overrides_health.md) - Assess resource health -* [argocd-util settings resource-overrides ignore-differences](argocd-util_settings_resource-overrides_ignore-differences.md) - Renders fields excluded from diffing -* [argocd-util settings resource-overrides list-actions](argocd-util_settings_resource-overrides_list-actions.md) - List available resource actions -* [argocd-util settings resource-overrides run-action](argocd-util_settings_resource-overrides_run-action.md) - Executes resource action - diff --git a/docs/operator-manual/server-commands/argocd-util_settings_resource-overrides_health.md b/docs/operator-manual/server-commands/argocd-util_settings_resource-overrides_health.md deleted file mode 100644 index 815bf6d406cc3..0000000000000 --- a/docs/operator-manual/server-commands/argocd-util_settings_resource-overrides_health.md +++ /dev/null @@ -1,54 +0,0 @@ -## argocd-util settings resource-overrides health - -Assess resource health - -### Synopsis - -Assess resource health using the lua script configured in the 'resource.customizations' field of 'argocd-cm' ConfigMap - -``` -argocd-util settings resource-overrides health RESOURCE_YAML_PATH [flags] -``` - -### Examples - -``` - -argocd-util settings resource-overrides health ./deploy.yaml --argocd-cm-path ./argocd-cm.yaml -``` - -### Options - -``` - -h, --help help for health -``` - -### Options inherited from parent commands - -``` - --argocd-cm-path string Path to local argocd-cm.yaml file - --argocd-secret-path string Path to local argocd-secret.yaml file - --as string Username to impersonate for the operation - --as-group stringArray Group to impersonate for the operation, this flag can be repeated to specify multiple groups. - --certificate-authority string Path to a cert file for the certificate authority - --client-certificate string Path to a client certificate file for TLS - --client-key string Path to a client key file for TLS - --cluster string The name of the kubeconfig cluster to use - --context string The name of the kubeconfig context to use - --insecure-skip-tls-verify If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure - --kubeconfig string Path to a kube config. Only required if out-of-cluster - --load-cluster-settings Indicates that config map and secret should be loaded from cluster unless local file path is provided - -n, --namespace string If present, the namespace scope for this CLI request - --password string Password for basic authentication to the API server - --request-timeout string The length of time to wait before giving up on a single server request. Non-zero values should contain a corresponding time unit (e.g. 1s, 2m, 3h). A value of zero means don't timeout requests. (default "0") - --server string The address and port of the Kubernetes API server - --tls-server-name string If provided, this name will be used to validate server certificate. If this is not provided, hostname used to contact the server is used. - --token string Bearer token for authentication to the API server - --user string The name of the kubeconfig user to use - --username string Username for basic authentication to the API server -``` - -### SEE ALSO - -* [argocd-util settings resource-overrides](argocd-util_settings_resource-overrides.md) - Troubleshoot resource overrides - diff --git a/docs/operator-manual/server-commands/argocd-util_settings_resource-overrides_ignore-differences.md b/docs/operator-manual/server-commands/argocd-util_settings_resource-overrides_ignore-differences.md deleted file mode 100644 index c66be6208dca4..0000000000000 --- a/docs/operator-manual/server-commands/argocd-util_settings_resource-overrides_ignore-differences.md +++ /dev/null @@ -1,54 +0,0 @@ -## argocd-util settings resource-overrides ignore-differences - -Renders fields excluded from diffing - -### Synopsis - -Renders ignored fields using the 'ignoreDifferences' setting specified in the 'resource.customizations' field of 'argocd-cm' ConfigMap - -``` -argocd-util settings resource-overrides ignore-differences RESOURCE_YAML_PATH [flags] -``` - -### Examples - -``` - -argocd-util settings resource-overrides ignore-differences ./deploy.yaml --argocd-cm-path ./argocd-cm.yaml -``` - -### Options - -``` - -h, --help help for ignore-differences -``` - -### Options inherited from parent commands - -``` - --argocd-cm-path string Path to local argocd-cm.yaml file - --argocd-secret-path string Path to local argocd-secret.yaml file - --as string Username to impersonate for the operation - --as-group stringArray Group to impersonate for the operation, this flag can be repeated to specify multiple groups. - --certificate-authority string Path to a cert file for the certificate authority - --client-certificate string Path to a client certificate file for TLS - --client-key string Path to a client key file for TLS - --cluster string The name of the kubeconfig cluster to use - --context string The name of the kubeconfig context to use - --insecure-skip-tls-verify If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure - --kubeconfig string Path to a kube config. Only required if out-of-cluster - --load-cluster-settings Indicates that config map and secret should be loaded from cluster unless local file path is provided - -n, --namespace string If present, the namespace scope for this CLI request - --password string Password for basic authentication to the API server - --request-timeout string The length of time to wait before giving up on a single server request. Non-zero values should contain a corresponding time unit (e.g. 1s, 2m, 3h). A value of zero means don't timeout requests. (default "0") - --server string The address and port of the Kubernetes API server - --tls-server-name string If provided, this name will be used to validate server certificate. If this is not provided, hostname used to contact the server is used. - --token string Bearer token for authentication to the API server - --user string The name of the kubeconfig user to use - --username string Username for basic authentication to the API server -``` - -### SEE ALSO - -* [argocd-util settings resource-overrides](argocd-util_settings_resource-overrides.md) - Troubleshoot resource overrides - diff --git a/docs/operator-manual/server-commands/argocd-util_settings_resource-overrides_list-actions.md b/docs/operator-manual/server-commands/argocd-util_settings_resource-overrides_list-actions.md deleted file mode 100644 index 804a74b788368..0000000000000 --- a/docs/operator-manual/server-commands/argocd-util_settings_resource-overrides_list-actions.md +++ /dev/null @@ -1,54 +0,0 @@ -## argocd-util settings resource-overrides list-actions - -List available resource actions - -### Synopsis - -List actions available for given resource action using the lua scripts configured in the 'resource.customizations' field of 'argocd-cm' ConfigMap and outputs updated fields - -``` -argocd-util settings resource-overrides list-actions RESOURCE_YAML_PATH [flags] -``` - -### Examples - -``` - -argocd-util settings resource-overrides action list /tmp/deploy.yaml --argocd-cm-path ./argocd-cm.yaml -``` - -### Options - -``` - -h, --help help for list-actions -``` - -### Options inherited from parent commands - -``` - --argocd-cm-path string Path to local argocd-cm.yaml file - --argocd-secret-path string Path to local argocd-secret.yaml file - --as string Username to impersonate for the operation - --as-group stringArray Group to impersonate for the operation, this flag can be repeated to specify multiple groups. - --certificate-authority string Path to a cert file for the certificate authority - --client-certificate string Path to a client certificate file for TLS - --client-key string Path to a client key file for TLS - --cluster string The name of the kubeconfig cluster to use - --context string The name of the kubeconfig context to use - --insecure-skip-tls-verify If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure - --kubeconfig string Path to a kube config. Only required if out-of-cluster - --load-cluster-settings Indicates that config map and secret should be loaded from cluster unless local file path is provided - -n, --namespace string If present, the namespace scope for this CLI request - --password string Password for basic authentication to the API server - --request-timeout string The length of time to wait before giving up on a single server request. Non-zero values should contain a corresponding time unit (e.g. 1s, 2m, 3h). A value of zero means don't timeout requests. (default "0") - --server string The address and port of the Kubernetes API server - --tls-server-name string If provided, this name will be used to validate server certificate. If this is not provided, hostname used to contact the server is used. - --token string Bearer token for authentication to the API server - --user string The name of the kubeconfig user to use - --username string Username for basic authentication to the API server -``` - -### SEE ALSO - -* [argocd-util settings resource-overrides](argocd-util_settings_resource-overrides.md) - Troubleshoot resource overrides - diff --git a/docs/operator-manual/server-commands/argocd-util_settings_resource-overrides_run-action.md b/docs/operator-manual/server-commands/argocd-util_settings_resource-overrides_run-action.md deleted file mode 100644 index f4992e79dfd9e..0000000000000 --- a/docs/operator-manual/server-commands/argocd-util_settings_resource-overrides_run-action.md +++ /dev/null @@ -1,54 +0,0 @@ -## argocd-util settings resource-overrides run-action - -Executes resource action - -### Synopsis - -Executes resource action using the lua script configured in the 'resource.customizations' field of 'argocd-cm' ConfigMap and outputs updated fields - -``` -argocd-util settings resource-overrides run-action RESOURCE_YAML_PATH ACTION [flags] -``` - -### Examples - -``` - -argocd-util settings resource-overrides action run /tmp/deploy.yaml restart --argocd-cm-path ./argocd-cm.yaml -``` - -### Options - -``` - -h, --help help for run-action -``` - -### Options inherited from parent commands - -``` - --argocd-cm-path string Path to local argocd-cm.yaml file - --argocd-secret-path string Path to local argocd-secret.yaml file - --as string Username to impersonate for the operation - --as-group stringArray Group to impersonate for the operation, this flag can be repeated to specify multiple groups. - --certificate-authority string Path to a cert file for the certificate authority - --client-certificate string Path to a client certificate file for TLS - --client-key string Path to a client key file for TLS - --cluster string The name of the kubeconfig cluster to use - --context string The name of the kubeconfig context to use - --insecure-skip-tls-verify If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure - --kubeconfig string Path to a kube config. Only required if out-of-cluster - --load-cluster-settings Indicates that config map and secret should be loaded from cluster unless local file path is provided - -n, --namespace string If present, the namespace scope for this CLI request - --password string Password for basic authentication to the API server - --request-timeout string The length of time to wait before giving up on a single server request. Non-zero values should contain a corresponding time unit (e.g. 1s, 2m, 3h). A value of zero means don't timeout requests. (default "0") - --server string The address and port of the Kubernetes API server - --tls-server-name string If provided, this name will be used to validate server certificate. If this is not provided, hostname used to contact the server is used. - --token string Bearer token for authentication to the API server - --user string The name of the kubeconfig user to use - --username string Username for basic authentication to the API server -``` - -### SEE ALSO - -* [argocd-util settings resource-overrides](argocd-util_settings_resource-overrides.md) - Troubleshoot resource overrides - diff --git a/docs/operator-manual/server-commands/argocd-util_settings_validate.md b/docs/operator-manual/server-commands/argocd-util_settings_validate.md deleted file mode 100644 index 855c3098b2887..0000000000000 --- a/docs/operator-manual/server-commands/argocd-util_settings_validate.md +++ /dev/null @@ -1,59 +0,0 @@ -## argocd-util settings validate - -Validate settings - -### Synopsis - -Validates settings specified in 'argocd-cm' ConfigMap and 'argocd-secret' Secret - -``` -argocd-util settings validate [flags] -``` - -### Examples - -``` - -#Validates all settings in the specified YAML file -argocd-util settings validate --argocd-cm-path ./argocd-cm.yaml - -#Validates accounts and plugins settings in Kubernetes cluster of current kubeconfig context -argocd-util settings validate --group accounts --group plugins --load-cluster-settings -``` - -### Options - -``` - --group stringArray Optional list of setting groups that have to be validated ( one of: accounts, general, kustomize, plugins, repositories, resource-overrides) - -h, --help help for validate -``` - -### Options inherited from parent commands - -``` - --argocd-cm-path string Path to local argocd-cm.yaml file - --argocd-secret-path string Path to local argocd-secret.yaml file - --as string Username to impersonate for the operation - --as-group stringArray Group to impersonate for the operation, this flag can be repeated to specify multiple groups. - --certificate-authority string Path to a cert file for the certificate authority - --client-certificate string Path to a client certificate file for TLS - --client-key string Path to a client key file for TLS - --cluster string The name of the kubeconfig cluster to use - --context string The name of the kubeconfig context to use - --insecure-skip-tls-verify If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure - --kubeconfig string Path to a kube config. Only required if out-of-cluster - --load-cluster-settings Indicates that config map and secret should be loaded from cluster unless local file path is provided - -n, --namespace string If present, the namespace scope for this CLI request - --password string Password for basic authentication to the API server - --request-timeout string The length of time to wait before giving up on a single server request. Non-zero values should contain a corresponding time unit (e.g. 1s, 2m, 3h). A value of zero means don't timeout requests. (default "0") - --server string The address and port of the Kubernetes API server - --tls-server-name string If provided, this name will be used to validate server certificate. If this is not provided, hostname used to contact the server is used. - --token string Bearer token for authentication to the API server - --user string The name of the kubeconfig user to use - --username string Username for basic authentication to the API server -``` - -### SEE ALSO - -* [argocd-util settings](argocd-util_settings.md) - Provides set of commands for settings validation and troubleshooting - diff --git a/docs/operator-manual/server-commands/argocd-util_version.md b/docs/operator-manual/server-commands/argocd-util_version.md deleted file mode 100644 index cf2325ad03c25..0000000000000 --- a/docs/operator-manual/server-commands/argocd-util_version.md +++ /dev/null @@ -1,19 +0,0 @@ -## argocd-util version - -Print version information - -``` -argocd-util version [flags] -``` - -### Options - -``` - -h, --help help for version - --short print just the version number -``` - -### SEE ALSO - -* [argocd-util](argocd-util.md) - argocd-util tools used by Argo CD - diff --git a/docs/operator-manual/troubleshooting.md b/docs/operator-manual/troubleshooting.md index 6057cb4d366cc..884045410b0b8 100644 --- a/docs/operator-manual/troubleshooting.md +++ b/docs/operator-manual/troubleshooting.md @@ -1,29 +1,15 @@ # Troubleshooting Tools -The document describes how to use `argocd-tool` binary to simplify Argo CD settings customizations and troubleshot +The document describes how to use `argocd admin` subcommands to simplify Argo CD settings customizations and troubleshot connectivity issues. ## Settings Argo CD provides multiple ways to customize system behavior and has a lot of settings. It might be dangerous to modify -settings on Argo CD used in production by multiple users. Before applying settings you can use `argocd-util` binary to -make sure that settings are valid and Argo CD is working as expected. The `argocd-util` binary is available in `argocd` -image and might be used using docker. -You can download the latest `argocd-util` binary from [the latest release page of this repository](https://github.com/argoproj/argo-cd/releases/latest), which will include the `argocd-util` CLI. -Example: +settings on Argo CD used in production by multiple users. Before applying settings you can use `argocd admin` subcommands to +make sure that settings are valid and Argo CD is working as expected. -```bash -docker run --rm -it -w /src -v $(pwd):/src argoproj/argocd: \ - argocd-util settings validate --argocd-cm-path ./argocd-cm.yaml -``` - -If you are using Linux you can extract `argocd-util` binary from docker image: - -```bash -docker run --rm -it -w /src -v $(pwd):/src argocd cp /usr/local/bin/argocd-util ./argocd-util -``` - -The `argocd-util settings validate` command performs basic settings validation and print short summary +The `argocd admin settings validate` command performs basic settings validation and print short summary of each settings group. **Diffing Customization** @@ -31,11 +17,10 @@ of each settings group. [Diffing customization](../user-guide/diffing.md) allows excluding some resource fields from diffing process. The diffing customizations are configured in `resource.customizations` field of `argocd-cm` ConfigMap. -The following `argocd-util` command prints information about fields excluded from diffing in the specified ConfigMap. +The following `argocd admin` command prints information about fields excluded from diffing in the specified ConfigMap. ```bash -docker run --rm -it -w /src -v $(pwd):/src argoproj/argocd: \ - argocd-util settings resource-overrides ignore-differences ./deploy.yaml --argocd-cm-path ./argocd-cm.yaml +argocd admin settings resource-overrides ignore-differences ./deploy.yaml --argocd-cm-path ./argocd-cm.yaml ``` **Health Assessment** @@ -44,35 +29,32 @@ Argo CD provides built-in [health assessment](./health.md) for several kubernete customized by writing your own health checks in [Lua](https://www.lua.org/). The health checks are configured in the `resource.customizations` field of `argocd-cm` ConfigMap. -The following `argocd-util` command assess resource health using Lua script configured in the specified ConfigMap. +The following `argocd admin` command assess resource health using Lua script configured in the specified ConfigMap. ```bash -docker run --rm -it -w /src -v $(pwd):/src argoproj/argocd: \ - argocd-util settings resource-overrides health ./deploy.yaml --argocd-cm-path ./argocd-cm.yaml +argocd admin settings resource-overrides health ./deploy.yaml --argocd-cm-path ./argocd-cm.yaml ``` **Resource Actions** Resource actions allows configuring named Lua script which performs resource modification. -The following `argocd-util` command executes action using Lua script configured in the specified ConfigMap and prints +The following `argocd admin` command executes action using Lua script configured in the specified ConfigMap and prints applied modifications. ```bash -docker run --rm -it -w /src -v $(pwd):/src argoproj/argocd: \ - argocd-util settings resource-overrides run-action /tmp/deploy.yaml restart --argocd-cm-path /private/tmp/argocd-cm.yaml +argocd admin settings resource-overrides run-action /tmp/deploy.yaml restart --argocd-cm-path /private/tmp/argocd-cm.yaml ``` -The following `argocd-util` command lists actions available for a given resource using Lua script configured in the specified ConfigMap. +The following `argocd admin` command lists actions available for a given resource using Lua script configured in the specified ConfigMap. ```bash -docker run --rm -it -w /src -v $(pwd):/src argoproj/argocd: \ - argocd-util settings resource-overrides list-actions /tmp/deploy.yaml --argocd-cm-path /private/tmp/argocd-cm.yaml +argocd admin settings resource-overrides list-actions /tmp/deploy.yaml --argocd-cm-path /private/tmp/argocd-cm.yaml ``` ## Cluster credentials -The `argocd-util cluster kubeconfig` is useful if you manually created Secret with cluster credentials and trying need to +The `argocd admin cluster kubeconfig` is useful if you manually created Secret with cluster credentials and trying need to troubleshoot connectivity issues. In this case, it is suggested to use the following steps: 1 SSH into [argocd-application-controller] pod. @@ -82,10 +64,10 @@ kubectl exec -n argocd -it \ $(kubectl get pods -n argocd -l app.kubernetes.io/name=argocd-application-controller -o jsonpath='{.items[0].metadata.name}') bash ``` -2 Use `argocd-util cluster kubeconfig` command to export kubeconfig file from the configured Secret: +2 Use `argocd admin cluster kubeconfig` command to export kubeconfig file from the configured Secret: ``` -argocd-util cluster kubeconfig https:// /tmp/kubeconfig --namespace argocd +argocd admin cluster kubeconfig https:// /tmp/kubeconfig --namespace argocd ``` 3 Use `kubectl` to get more details about connection issues, fix them and apply changes back to secret: diff --git a/docs/operator-manual/upgrading/1.7-1.8.md b/docs/operator-manual/upgrading/1.7-1.8.md index 2d4cd54182e21..05c4516c70e2e 100644 --- a/docs/operator-manual/upgrading/1.7-1.8.md +++ b/docs/operator-manual/upgrading/1.7-1.8.md @@ -6,10 +6,10 @@ The `argocd-application-controller` has been converted to StatefulSet. That mean Similarly if you decided to rollback to v1.7 don't forget to delete `argocd-application-controller` StatefulSet. -## Health assessement of argoproj.io/Application CRD has been removed +## Health assessment of argoproj.io/Application CRD has been removed -The health assessement of `argoproj.io/Application` CRD has been removed (see [#3781](https://github.com/argoproj/argo-cd/issues/3781) for more information). -You might need to restore it if you are using app-of-apps pattern and orchestrating syncronization using sync waves. Add the following resource customization in +The health assessment of `argoproj.io/Application` CRD has been removed (see [#3781](https://github.com/argoproj/argo-cd/issues/3781) for more information). +You might need to restore it if you are using app-of-apps pattern and orchestrating synchronization using sync waves. Add the following resource customization in `argocd-cm` ConfigMap: ```yaml diff --git a/docs/operator-manual/upgrading/2.0-2.1.md b/docs/operator-manual/upgrading/2.0-2.1.md index a8f2f7024fdb5..5d3c13d740885 100644 --- a/docs/operator-manual/upgrading/2.0-2.1.md +++ b/docs/operator-manual/upgrading/2.0-2.1.md @@ -19,4 +19,8 @@ From here on you can follow the [regular upgrade process](./overview.md). The configuration of repositories and repository credential templates via the `argocd-cm` has been deprecated. Repositories and repository credentials are now discovered via Secrets that are labeled with `argocd.argoproj.io/secret-type=repository` or `argocd.argoproj.io/secret-type=repo-creds` respectively. See the examples in [argocd-repositories.yaml](../argocd-repositories.yaml) -and [argocd-repo-creds.yaml](../argocd-repo-creds.yaml). \ No newline at end of file +and [argocd-repo-creds.yaml](../argocd-repo-creds.yaml). + +## The `argocd-util` CLI commands merged into `argocd admin` + +The `argocd-util` CLI commands are available under `argocd admin` and the `argocd-util` binary is no longer available. \ No newline at end of file diff --git a/docs/operator-manual/user-management/google.md b/docs/operator-manual/user-management/google.md index 354f93d4fac64..9f319ab10776f 100644 --- a/docs/operator-manual/user-management/google.md +++ b/docs/operator-manual/user-management/google.md @@ -26,7 +26,7 @@ data: ![Google Admin Add Custom SAML App](../../assets/google-admin-saml-add-app-menu.png "Add apps menu with add custom SAML app highlighted") -3. Enter a `Name` for the application (eg. `Argo CD`), then choose `Continue` +3. Enter a `Name` for the application (e.g. `Argo CD`), then choose `Continue` ![Google Admin Apps Menu](../../assets/google-admin-saml-app-details.png "Add apps menu with add custom SAML app highlighted") @@ -44,7 +44,7 @@ data: 6. Add SAML Attribute Mapping, Map `Primary email` to `name` and `Primary Email` to `email`. and click `ADD MAPPING` button. - ![Google Admin SAML Attribute Mapping Details](../../assets/google-admin-saml-attribute-mapping-details.png "A screenshot of the Google Admin SAML Attribut Mapping Details") + ![Google Admin SAML Attribute Mapping Details](../../assets/google-admin-saml-attribute-mapping-details.png "A screenshot of the Google Admin SAML Attribute Mapping Details") 7. Finish creating the application. @@ -61,7 +61,7 @@ data: id: saml name: saml config: - ssoURL: https://sso-url (eg. https://accounts.google.com/o/saml2/idp?idpid=Abcde0) + ssoURL: https://sso-url (e.g. https://accounts.google.com/o/saml2/idp?idpid=Abcde0) entityIssuer: https://argocd.example.com/api/dex/callback caData: | BASE64-ENCODED-CERTIFICATE-DATA diff --git a/docs/operator-manual/user-management/index.md b/docs/operator-manual/user-management/index.md index 3fd067f54f4ce..8ed40e7871cb1 100644 --- a/docs/operator-manual/user-management/index.md +++ b/docs/operator-manual/user-management/index.md @@ -172,7 +172,7 @@ data: name: GitHub config: clientID: aabbccddeeff00112233 - clientSecret: $dex.github.clientSecret + clientSecret: $dex.github.clientSecret # Alternatively $:dex.github.clientSecret orgs: - name: your-github-org @@ -183,7 +183,7 @@ data: config: hostName: github.acme.com clientID: abcdefghijklmnopqrst - clientSecret: $dex.acme.clientSecret + clientSecret: $dex.acme.clientSecret # Alternatively $:dex.acme.clientSecret orgs: - name: your-github-org ``` @@ -293,6 +293,12 @@ You are not required to specify a logoutRedirectURL as this is automatically gen ### Sensitive Data and SSO Client Secrets You can use the `argocd-secret` to store any sensitive data. ArgoCD knows to check the keys under `data` in the `argocd-secret` secret for a corresponding key whenever a value in a configmap starts with `$`. This can be used to store things such as your `clientSecret`. +* Any values which start with `$` will : + - If value is in form of `$:a.key.in.k8s.secret`, look to a key in K8S `` of the same name (minus the `$`), and reads it value. + - Otherwise, look to a key in `argocd-secret` of the same name (minus the `$`), + to obtain the actual value. This allows you to store the `clientSecret` as a kubernetes secret. + Kubernetes secrets must be base64 encoded. To base64 encode your secret, you can run + `printf RAW_STRING | base64`. Data should be base64 encoded before it is added to `argocd-secret`. You can do so by running `printf RAW_SECRET_STRING | base64`. @@ -336,3 +342,51 @@ data: clientSecret: $oidc.auth0.clientSecret ... ``` + +#### Alternative + +If you want to store sensitive data in **another** Kubernetes `Secret`, instead of `argocd-secret`. ArgoCD knows to check the keys under `data` in your Kubernetes `Secret` for a corresponding key whenever a value in a configmap starts with `$`, then your Kubernetes `Secret` name and `:` (colon). + +Syntax: `$:` + +> NOTE: Secret must have label `app.kubernetes.io/part-of: argocd` + +##### Example + +`another-secret`: +```yaml +apiVersion: v1 +kind: Secret +metadata: + name: another-secret + namespace: argocd + labels: + app.kubernetes.io/part-of: argocd +type: Opaque +data: + ... + # Store client secret like below. + # Ensure the secret is base64 encoded + oidc.auth0.clientSecret: + ... +``` + +`argocd-cm`: +```yaml +apiVersion: v1 +kind: ConfigMap +metadata: + name: argocd-cm + namespace: argocd + labels: + app.kubernetes.io/name: argocd-cm + app.kubernetes.io/part-of: argocd +data: + ... + oidc.config: | + name: Auth0 + clientID: aabbccddeeff00112233 + # Reference key in another-secret (and not argocd-secret) + clientSecret: $another-secret:oidc.auth0.clientSecret # Mind the ':' + ... +``` diff --git a/docs/operator-manual/user-management/microsoft.md b/docs/operator-manual/user-management/microsoft.md index 4526c7a227f03..1271c6ceda1c4 100644 --- a/docs/operator-manual/user-management/microsoft.md +++ b/docs/operator-manual/user-management/microsoft.md @@ -10,7 +10,7 @@ 1. From the `Azure Active Directory` > `Enterprise applications` menu, choose `+ New application` 2. Select `Non-gallery application` -3. Enter a `Name` for the application (eg. `Argo CD`), then choose `Add` +3. Enter a `Name` for the application (e.g. `Argo CD`), then choose `Add` 4. Once the application is created, open it from the `Enterprise applications` menu. 5. From the `Users and groups` menu of the app, add any users or groups requiring access to the service. @@ -55,7 +55,7 @@ data: name: saml config: entityIssuer: https://my-argo-cd-url/api/dex/callback - ssoURL: https://my-login-url (eg. https://login.microsoftonline.com/xxxxx/a/saml2) + ssoURL: https://my-login-url (e.g. https://login.microsoftonline.com/xxxxx/a/saml2) caData: | MY-BASE64-ENCODED-CERTIFICATE-DATA redirectURI: https://my-argo-cd-url/api/dex/callback diff --git a/docs/operator-manual/webhook.md b/docs/operator-manual/webhook.md index d870c0d8ea8b7..00a019020414a 100644 --- a/docs/operator-manual/webhook.md +++ b/docs/operator-manual/webhook.md @@ -17,7 +17,7 @@ arbitrary value in the secret. This value will be used when configuring the webh ![Add Webhook](../assets/webhook-config.png "Add Webhook") !!! note - When creating the webhook in Github, the "Content type" needs to be set to "application/json". The default value "application/x-www-form-urlencoded" is not supported by the library used to handle the hooks + When creating the webhook in GitHub, the "Content type" needs to be set to "application/json". The default value "application/x-www-form-urlencoded" is not supported by the library used to handle the hooks ### 2. Configure Argo CD With The WebHook Secret (Optional) diff --git a/docs/proposals/headless-argocd.md b/docs/proposals/headless-argocd.md new file mode 100644 index 0000000000000..51bee5ce85bcb --- /dev/null +++ b/docs/proposals/headless-argocd.md @@ -0,0 +1,132 @@ +--- +title: Neat-enhancement-idea +authors: +- "@alexmt" + sponsors: +- TBD + reviewers: +- "@jessesuen" +- TBD + approvers: +- "@jessesuen" +- TBD + +creation-date: 2020-05-01 +last-updated: 2020-05-01 +--- + +# Neat Enhancement Idea + +Support "disabling" multi-tenancy features by introducing Headless Argo CD. + +## Summary + +There are two main group of GitOps users: + +* Application developers - engineers who leverages Kubernetes to run applications. +* Cluster administrators - engineers who manage and support Kubernetes clusters for the organization. + +Argo CD is a perfect fit for application developers thanks to its multi-tenancy features. Instead of running a separate Argo CD instance for +each team, it is possible to run on the instance and leverage features like SSO, RBAC, and Web user interface. However, this is not the case +for cluster administrators. Administrators prefer to rely on Kubernetes RBAC and view SSO and Argo CD RBAC as an obstacle and security threat. +SSO, RBAC, and UI/API are totally optional and can be disabled but it requires additional configuration and learning. + +## Motivation + +It is proposed to introduce officially supported **Headless Argo CD** that encapsulates changes required to disable multi-tenancy features +and provide a seamless experience for cluster administrators (or any other user who don't need multi-tenancy). + +### Goals + +The goals of "Headless Argo CD" are: + +#### Provide an easy way to deploy Argo CD without API/UI + +The end-user should be able to install required components using a single `kubectl apply` command without following any additional instructions. + +#### Provide an easy way to use and manage Headless Argo CD + +The `Headless Argo CD` should provide a simple way to view and manage Argo CD applications using CLI/UI. The access control should be enforced by +Kubernetes RBAC only. + +#### Easy transition from Headless to non-Headless Argo CD + +It is a common case when the Argo CD adopter wants to start small and then expand Argo CD to the whole organization. It should be easy +to "upgrade" headless to full Argo CD installation. + +### Non-Goals + +#### Not modified Argo CD + +The `Headless Argo CD` is not modified Argo CD. It is Argo CD distribution that missing UI/API and CLI that provides commands for Argo CD admin. + +#### Not deprecating existing operational methods + +The `Headless Argo CD` is not intended to deprecate any of the existing operational methods. + +## Proposal + +#### Headless Installation Manifests + +In order to simplify installation of Argo CD without API we need introduce `headless/install.yaml` in [manifests](../../manifests) directory. +The installation manifests should include only non HA controller, repo-server, Redis components, and RBAC. + +#### Headless CLI + +Without the API server, users won't be able to take advantage of Argo CD UI and `argocd` CLI so the user experience won't be complete. To fill that gap +we need to change the `argocd` CLI that and support talking directly to Kubernetes without requiring Argo CD API Server. The [argo-cd#6361](https://github.com/argoproj/argo-cd/pull/6361) +demonstrates required changes: + +* Adds `--headless` flag to `argocd` commands +* If the `--headless` flag is set to true then pre-run function that starts "local" Argo CD API server and points CLI to locally running instance +* Finally on-demand port-forwards to Redis and repo server. + +The user should be able to store `--headless` flag in config in order to avoid specifying the flag for every command. It is proposed to use `argocd login --headless` to generate +"headless" config. + +#### Local UI + +In addition to exposing CLI commands the PR introduces `argocd admin dashboard` command. The new command starts API server locally and exposes Argo CD UI locally. +In order to make this possible the static assets have been embedded into Argo CD binary. + +### Merge Argo CD Util + +The potential users of "headless" mode will benefit from `argocd-util` commands. The experience won't be smooth since they will need to switch back and forth +between `argocd` and `argocd-util`. Given that we still have not finalized how users are supposed to get `argocd-util` binary (https://github.com/argoproj/argo-cd/issues/5307) +it is proposed to deprecate `argocd-util` and merge in into `argocd` CLI under admin subcommand: + +``` +argocd admin app generate-spec guestbook --repo https://github.com/argoproj/argocd-example-apps +``` + +### Use cases + +Add a list of detailed use cases this enhancement intends to take care of. + +## Use case 1: + +As an Argo CD administrator, I would like to manage cluster resources using Argo CD without exposing API/UI outside of the cluster. + +## Use case 2: + +As an Argo CD administrator, I would like to use Argo CD CLI commands and user interface to manage Argo CD applications/settings using only `kubeconf` file and without Argo CD API access. + +### Security Considerations + +The Headless CLI/UI disables built-in Argo CD authentication and relies only on Kubernetes RBAC. So if the user will be able to make the same change using Headless CLI as using kubectl. + +### Risks and Mitigations + +TBD + +### Upgrade / Downgrade Strategy + +Switching to and from Argo CD Headless does not modify any persistent data or settings. So upgrade/downgrade should be seamless by just applying the right manifest file. + +## Drawbacks + +* Embedding static resources into the binary increases it's size by ~20 mb. The image size is the same. + +## Alternatives + +* Re-invent GitOps Agent CLI experience and don't re-use Argo CD. \ No newline at end of file diff --git a/docs/roadmap.md b/docs/roadmap.md index e649a4d950f11..460827881219a 100644 --- a/docs/roadmap.md +++ b/docs/roadmap.md @@ -5,7 +5,7 @@ - [Config Management Tools Integrations (proposal)](#config-management-tools-integrations-proposal) - [Argo CD Extensions (proposal)](#argo-cd-extensions-proposal) - [Project scoped repository and clusters (proposal)](#project-scoped-repository-and-clusters-proposal) - - [Headless Argo CD (aka GitOps Agent) (proposal)](#headless-argo-cd-aka-gitops-agent-proposal) + - [Core Argo CD (proposal)](#core-argo-cd-aka-gitops-agent-proposal) - [v2.2 and beyond](#v22-and-beyond) - [Application Details Page Usability](#application-details-page-usability) - [Cluster Management User Interface](#cluster-management-user-interface) @@ -42,10 +42,10 @@ via Git repository. The feature streamlines the process of adding repositories and clusters to the project and makes it self-service. Instead of asking an administrator to change Argo CD settings end users can perform the change independently. -### Headless Argo CD (aka GitOps Agent) ([proposal](https://github.com/argoproj/argo-cd/pull/6385)) +### Core Argo CD ([proposal](https://github.com/argoproj/argo-cd/pull/6385)) -Headless Argo CD allows to installation and use of lightweight Argo CD that includes only the backend without exposing the API or UI. -The Headless Argo CD provides a better experience to users who need only core Argo CD features and don't want to deal with multi-tenancy features. +Core Argo CD allows to installation and use of lightweight Argo CD that includes only the backend without exposing the API or UI. +The Core Argo CD provides a better experience to users who need only core Argo CD features and don't want to deal with multi-tenancy features. ## v2.2 and beyond @@ -116,7 +116,7 @@ That includes more metrics, out of the box alerts and a cluster management user ### Argo CD Notifications [Argo CD Notifications](https://github.com/argoproj-labs/argocd-notifications) provides the ability to notify users about Argo CD Application -changes as well as implement integrations such as update Github commit status, trigger Jenkins job, set Grafana label, etc. +changes as well as implement integrations such as update GitHub commit status, trigger Jenkins job, set Grafana label, etc. ### Automated Registry Monitoring diff --git a/docs/user-guide/best_practices.md b/docs/user-guide/best_practices.md index 7c44c554da116..61a2005b590f0 100644 --- a/docs/user-guide/best_practices.md +++ b/docs/user-guide/best_practices.md @@ -16,7 +16,7 @@ from your application source code, is highly recommended for the following reaso 3. Your application may be comprised of services built from multiple Git repositories, but is deployed as a single unit. Oftentimes, microservices applications are comprised of services - with different versioning schemes, and release cycles (e.g. ELK, Kafka + Zookeeper). It may not + with different versioning schemes, and release cycles (e.g. ELK, Kafka + ZooKeeper). It may not make sense to store the manifests in one of the source code repositories of a single component. 4. Separation of access. The developers who are developing the application, may not necessarily be diff --git a/docs/user-guide/commands/argocd.md b/docs/user-guide/commands/argocd.md index 43fad143dc583..0c6bf881f2c5a 100644 --- a/docs/user-guide/commands/argocd.md +++ b/docs/user-guide/commands/argocd.md @@ -13,10 +13,12 @@ argocd [flags] --client-crt string Client certificate file --client-crt-key string Client certificate key file --config string Path to Argo CD config (default "/home/user/.argocd/config") + --core If set to true then CLI talks directly to Kubernetes instead of talking to Argo CD API server --grpc-web Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. --grpc-web-root-path string Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. Set web root. -H, --header strings Sets additional header to all requests made by Argo CD CLI. (Can be repeated multiple times to add multiple headers, also supports comma separated headers) -h, --help help for argocd + --http-retry-max int Maximum number of retries to establish http connection to Argo CD server --insecure Skip server certificate and domain verification --logformat string Set the logging format. One of: text|json (default "text") --loglevel string Set the logging level. One of: debug|info|warn|error (default "info") @@ -30,6 +32,7 @@ argocd [flags] ### SEE ALSO * [argocd account](argocd_account.md) - Manage account settings +* [argocd admin](argocd_admin.md) - Contains a set of commands useful for Argo CD administrators and requires direct Kubernetes access * [argocd app](argocd_app.md) - Manage applications * [argocd cert](argocd_cert.md) - Manage repository certificates and SSH known hosts entries * [argocd cluster](argocd_cluster.md) - Manage cluster credentials diff --git a/docs/user-guide/commands/argocd_account.md b/docs/user-guide/commands/argocd_account.md index 479066e737137..ea837a841fdc5 100644 --- a/docs/user-guide/commands/argocd_account.md +++ b/docs/user-guide/commands/argocd_account.md @@ -9,7 +9,23 @@ argocd account [flags] ### Options ``` - -h, --help help for account + --as string Username to impersonate for the operation + --as-group stringArray Group to impersonate for the operation, this flag can be repeated to specify multiple groups. + --certificate-authority string Path to a cert file for the certificate authority + --client-certificate string Path to a client certificate file for TLS + --client-key string Path to a client key file for TLS + --cluster string The name of the kubeconfig cluster to use + --context string The name of the kubeconfig context to use + -h, --help help for account + --insecure-skip-tls-verify If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure + --kubeconfig string Path to a kube config. Only required if out-of-cluster + -n, --namespace string If present, the namespace scope for this CLI request + --password string Password for basic authentication to the API server + --request-timeout string The length of time to wait before giving up on a single server request. Non-zero values should contain a corresponding time unit (e.g. 1s, 2m, 3h). A value of zero means don't timeout requests. (default "0") + --tls-server-name string If provided, this name will be used to validate server certificate. If this is not provided, hostname used to contact the server is used. + --token string Bearer token for authentication to the API server + --user string The name of the kubeconfig user to use + --username string Username for basic authentication to the API server ``` ### Options inherited from parent commands @@ -19,9 +35,11 @@ argocd account [flags] --client-crt string Client certificate file --client-crt-key string Client certificate key file --config string Path to Argo CD config (default "/home/user/.argocd/config") + --core If set to true then CLI talks directly to Kubernetes instead of talking to Argo CD API server --grpc-web Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. --grpc-web-root-path string Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. Set web root. -H, --header strings Sets additional header to all requests made by Argo CD CLI. (Can be repeated multiple times to add multiple headers, also supports comma separated headers) + --http-retry-max int Maximum number of retries to establish http connection to Argo CD server --insecure Skip server certificate and domain verification --logformat string Set the logging format. One of: text|json (default "text") --loglevel string Set the logging level. One of: debug|info|warn|error (default "info") diff --git a/docs/user-guide/commands/argocd_account_can-i.md b/docs/user-guide/commands/argocd_account_can-i.md index 88016188936db..eac9cd8720c6c 100644 --- a/docs/user-guide/commands/argocd_account_can-i.md +++ b/docs/user-guide/commands/argocd_account_can-i.md @@ -33,21 +33,38 @@ Resources: [clusters projects applications repositories certificates] ### Options inherited from parent commands ``` + --as string Username to impersonate for the operation + --as-group stringArray Group to impersonate for the operation, this flag can be repeated to specify multiple groups. --auth-token string Authentication token + --certificate-authority string Path to a cert file for the certificate authority + --client-certificate string Path to a client certificate file for TLS --client-crt string Client certificate file --client-crt-key string Client certificate key file + --client-key string Path to a client key file for TLS + --cluster string The name of the kubeconfig cluster to use --config string Path to Argo CD config (default "/home/user/.argocd/config") + --context string The name of the kubeconfig context to use + --core If set to true then CLI talks directly to Kubernetes instead of talking to Argo CD API server --grpc-web Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. --grpc-web-root-path string Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. Set web root. -H, --header strings Sets additional header to all requests made by Argo CD CLI. (Can be repeated multiple times to add multiple headers, also supports comma separated headers) + --http-retry-max int Maximum number of retries to establish http connection to Argo CD server --insecure Skip server certificate and domain verification + --insecure-skip-tls-verify If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure --logformat string Set the logging format. One of: text|json (default "text") --loglevel string Set the logging level. One of: debug|info|warn|error (default "info") + -n, --namespace string If present, the namespace scope for this CLI request + --password string Password for basic authentication to the API server --plaintext Disable TLS --port-forward Connect to a random argocd-server port using port forwarding --port-forward-namespace string Namespace name which should be used for port forwarding - --server string Argo CD server address + --request-timeout string The length of time to wait before giving up on a single server request. Non-zero values should contain a corresponding time unit (e.g. 1s, 2m, 3h). A value of zero means don't timeout requests. (default "0") + --server string The address and port of the Kubernetes API server --server-crt string Server certificate file + --tls-server-name string If provided, this name will be used to validate server certificate. If this is not provided, hostname used to contact the server is used. + --token string Bearer token for authentication to the API server + --user string The name of the kubeconfig user to use + --username string Username for basic authentication to the API server ``` ### SEE ALSO diff --git a/docs/user-guide/commands/argocd_account_delete-token.md b/docs/user-guide/commands/argocd_account_delete-token.md index 0002610705259..9d7c667169b25 100644 --- a/docs/user-guide/commands/argocd_account_delete-token.md +++ b/docs/user-guide/commands/argocd_account_delete-token.md @@ -13,7 +13,7 @@ argocd account delete-token [flags] argocd account delete-token ID # Delete token of the account with the specified name -argocd account generate-token --account +argocd account delete-token --account ID ``` ### Options @@ -26,21 +26,38 @@ argocd account generate-token --account ### Options inherited from parent commands ``` + --as string Username to impersonate for the operation + --as-group stringArray Group to impersonate for the operation, this flag can be repeated to specify multiple groups. --auth-token string Authentication token + --certificate-authority string Path to a cert file for the certificate authority + --client-certificate string Path to a client certificate file for TLS --client-crt string Client certificate file --client-crt-key string Client certificate key file + --client-key string Path to a client key file for TLS + --cluster string The name of the kubeconfig cluster to use --config string Path to Argo CD config (default "/home/user/.argocd/config") + --context string The name of the kubeconfig context to use + --core If set to true then CLI talks directly to Kubernetes instead of talking to Argo CD API server --grpc-web Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. --grpc-web-root-path string Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. Set web root. -H, --header strings Sets additional header to all requests made by Argo CD CLI. (Can be repeated multiple times to add multiple headers, also supports comma separated headers) + --http-retry-max int Maximum number of retries to establish http connection to Argo CD server --insecure Skip server certificate and domain verification + --insecure-skip-tls-verify If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure --logformat string Set the logging format. One of: text|json (default "text") --loglevel string Set the logging level. One of: debug|info|warn|error (default "info") + -n, --namespace string If present, the namespace scope for this CLI request + --password string Password for basic authentication to the API server --plaintext Disable TLS --port-forward Connect to a random argocd-server port using port forwarding --port-forward-namespace string Namespace name which should be used for port forwarding - --server string Argo CD server address + --request-timeout string The length of time to wait before giving up on a single server request. Non-zero values should contain a corresponding time unit (e.g. 1s, 2m, 3h). A value of zero means don't timeout requests. (default "0") + --server string The address and port of the Kubernetes API server --server-crt string Server certificate file + --tls-server-name string If provided, this name will be used to validate server certificate. If this is not provided, hostname used to contact the server is used. + --token string Bearer token for authentication to the API server + --user string The name of the kubeconfig user to use + --username string Username for basic authentication to the API server ``` ### SEE ALSO diff --git a/docs/user-guide/commands/argocd_account_generate-token.md b/docs/user-guide/commands/argocd_account_generate-token.md index 26840f4320caf..aa2b3917f854b 100644 --- a/docs/user-guide/commands/argocd_account_generate-token.md +++ b/docs/user-guide/commands/argocd_account_generate-token.md @@ -22,27 +22,44 @@ argocd account generate-token --account -a, --account string Account name. Defaults to the current account. -e, --expires-in string Duration before the token will expire. (Default: No expiration) (default "0s") -h, --help help for generate-token - --id string Optional token id. Fallback to uuid if not value specified. + --id string Optional token id. Fall back to uuid if not value specified. ``` ### Options inherited from parent commands ``` + --as string Username to impersonate for the operation + --as-group stringArray Group to impersonate for the operation, this flag can be repeated to specify multiple groups. --auth-token string Authentication token + --certificate-authority string Path to a cert file for the certificate authority + --client-certificate string Path to a client certificate file for TLS --client-crt string Client certificate file --client-crt-key string Client certificate key file + --client-key string Path to a client key file for TLS + --cluster string The name of the kubeconfig cluster to use --config string Path to Argo CD config (default "/home/user/.argocd/config") + --context string The name of the kubeconfig context to use + --core If set to true then CLI talks directly to Kubernetes instead of talking to Argo CD API server --grpc-web Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. --grpc-web-root-path string Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. Set web root. -H, --header strings Sets additional header to all requests made by Argo CD CLI. (Can be repeated multiple times to add multiple headers, also supports comma separated headers) + --http-retry-max int Maximum number of retries to establish http connection to Argo CD server --insecure Skip server certificate and domain verification + --insecure-skip-tls-verify If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure --logformat string Set the logging format. One of: text|json (default "text") --loglevel string Set the logging level. One of: debug|info|warn|error (default "info") + -n, --namespace string If present, the namespace scope for this CLI request + --password string Password for basic authentication to the API server --plaintext Disable TLS --port-forward Connect to a random argocd-server port using port forwarding --port-forward-namespace string Namespace name which should be used for port forwarding - --server string Argo CD server address + --request-timeout string The length of time to wait before giving up on a single server request. Non-zero values should contain a corresponding time unit (e.g. 1s, 2m, 3h). A value of zero means don't timeout requests. (default "0") + --server string The address and port of the Kubernetes API server --server-crt string Server certificate file + --tls-server-name string If provided, this name will be used to validate server certificate. If this is not provided, hostname used to contact the server is used. + --token string Bearer token for authentication to the API server + --user string The name of the kubeconfig user to use + --username string Username for basic authentication to the API server ``` ### SEE ALSO diff --git a/docs/user-guide/commands/argocd_account_get-user-info.md b/docs/user-guide/commands/argocd_account_get-user-info.md index 8620a0c6026ec..0f78cbdb17888 100644 --- a/docs/user-guide/commands/argocd_account_get-user-info.md +++ b/docs/user-guide/commands/argocd_account_get-user-info.md @@ -16,21 +16,38 @@ argocd account get-user-info [flags] ### Options inherited from parent commands ``` + --as string Username to impersonate for the operation + --as-group stringArray Group to impersonate for the operation, this flag can be repeated to specify multiple groups. --auth-token string Authentication token + --certificate-authority string Path to a cert file for the certificate authority + --client-certificate string Path to a client certificate file for TLS --client-crt string Client certificate file --client-crt-key string Client certificate key file + --client-key string Path to a client key file for TLS + --cluster string The name of the kubeconfig cluster to use --config string Path to Argo CD config (default "/home/user/.argocd/config") + --context string The name of the kubeconfig context to use + --core If set to true then CLI talks directly to Kubernetes instead of talking to Argo CD API server --grpc-web Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. --grpc-web-root-path string Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. Set web root. -H, --header strings Sets additional header to all requests made by Argo CD CLI. (Can be repeated multiple times to add multiple headers, also supports comma separated headers) + --http-retry-max int Maximum number of retries to establish http connection to Argo CD server --insecure Skip server certificate and domain verification + --insecure-skip-tls-verify If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure --logformat string Set the logging format. One of: text|json (default "text") --loglevel string Set the logging level. One of: debug|info|warn|error (default "info") + -n, --namespace string If present, the namespace scope for this CLI request + --password string Password for basic authentication to the API server --plaintext Disable TLS --port-forward Connect to a random argocd-server port using port forwarding --port-forward-namespace string Namespace name which should be used for port forwarding - --server string Argo CD server address + --request-timeout string The length of time to wait before giving up on a single server request. Non-zero values should contain a corresponding time unit (e.g. 1s, 2m, 3h). A value of zero means don't timeout requests. (default "0") + --server string The address and port of the Kubernetes API server --server-crt string Server certificate file + --tls-server-name string If provided, this name will be used to validate server certificate. If this is not provided, hostname used to contact the server is used. + --token string Bearer token for authentication to the API server + --user string The name of the kubeconfig user to use + --username string Username for basic authentication to the API server ``` ### SEE ALSO diff --git a/docs/user-guide/commands/argocd_account_get.md b/docs/user-guide/commands/argocd_account_get.md index 1863a6de42d42..e1e521ce1a84a 100644 --- a/docs/user-guide/commands/argocd_account_get.md +++ b/docs/user-guide/commands/argocd_account_get.md @@ -27,21 +27,38 @@ argocd account get --account ### Options inherited from parent commands ``` + --as string Username to impersonate for the operation + --as-group stringArray Group to impersonate for the operation, this flag can be repeated to specify multiple groups. --auth-token string Authentication token + --certificate-authority string Path to a cert file for the certificate authority + --client-certificate string Path to a client certificate file for TLS --client-crt string Client certificate file --client-crt-key string Client certificate key file + --client-key string Path to a client key file for TLS + --cluster string The name of the kubeconfig cluster to use --config string Path to Argo CD config (default "/home/user/.argocd/config") + --context string The name of the kubeconfig context to use + --core If set to true then CLI talks directly to Kubernetes instead of talking to Argo CD API server --grpc-web Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. --grpc-web-root-path string Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. Set web root. -H, --header strings Sets additional header to all requests made by Argo CD CLI. (Can be repeated multiple times to add multiple headers, also supports comma separated headers) + --http-retry-max int Maximum number of retries to establish http connection to Argo CD server --insecure Skip server certificate and domain verification + --insecure-skip-tls-verify If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure --logformat string Set the logging format. One of: text|json (default "text") --loglevel string Set the logging level. One of: debug|info|warn|error (default "info") + -n, --namespace string If present, the namespace scope for this CLI request + --password string Password for basic authentication to the API server --plaintext Disable TLS --port-forward Connect to a random argocd-server port using port forwarding --port-forward-namespace string Namespace name which should be used for port forwarding - --server string Argo CD server address + --request-timeout string The length of time to wait before giving up on a single server request. Non-zero values should contain a corresponding time unit (e.g. 1s, 2m, 3h). A value of zero means don't timeout requests. (default "0") + --server string The address and port of the Kubernetes API server --server-crt string Server certificate file + --tls-server-name string If provided, this name will be used to validate server certificate. If this is not provided, hostname used to contact the server is used. + --token string Bearer token for authentication to the API server + --user string The name of the kubeconfig user to use + --username string Username for basic authentication to the API server ``` ### SEE ALSO diff --git a/docs/user-guide/commands/argocd_account_list.md b/docs/user-guide/commands/argocd_account_list.md index 41ea0f9af34d2..bb0d3e2986e39 100644 --- a/docs/user-guide/commands/argocd_account_list.md +++ b/docs/user-guide/commands/argocd_account_list.md @@ -22,21 +22,38 @@ argocd account list ### Options inherited from parent commands ``` + --as string Username to impersonate for the operation + --as-group stringArray Group to impersonate for the operation, this flag can be repeated to specify multiple groups. --auth-token string Authentication token + --certificate-authority string Path to a cert file for the certificate authority + --client-certificate string Path to a client certificate file for TLS --client-crt string Client certificate file --client-crt-key string Client certificate key file + --client-key string Path to a client key file for TLS + --cluster string The name of the kubeconfig cluster to use --config string Path to Argo CD config (default "/home/user/.argocd/config") + --context string The name of the kubeconfig context to use + --core If set to true then CLI talks directly to Kubernetes instead of talking to Argo CD API server --grpc-web Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. --grpc-web-root-path string Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. Set web root. -H, --header strings Sets additional header to all requests made by Argo CD CLI. (Can be repeated multiple times to add multiple headers, also supports comma separated headers) + --http-retry-max int Maximum number of retries to establish http connection to Argo CD server --insecure Skip server certificate and domain verification + --insecure-skip-tls-verify If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure --logformat string Set the logging format. One of: text|json (default "text") --loglevel string Set the logging level. One of: debug|info|warn|error (default "info") + -n, --namespace string If present, the namespace scope for this CLI request + --password string Password for basic authentication to the API server --plaintext Disable TLS --port-forward Connect to a random argocd-server port using port forwarding --port-forward-namespace string Namespace name which should be used for port forwarding - --server string Argo CD server address + --request-timeout string The length of time to wait before giving up on a single server request. Non-zero values should contain a corresponding time unit (e.g. 1s, 2m, 3h). A value of zero means don't timeout requests. (default "0") + --server string The address and port of the Kubernetes API server --server-crt string Server certificate file + --tls-server-name string If provided, this name will be used to validate server certificate. If this is not provided, hostname used to contact the server is used. + --token string Bearer token for authentication to the API server + --user string The name of the kubeconfig user to use + --username string Username for basic authentication to the API server ``` ### SEE ALSO diff --git a/docs/user-guide/commands/argocd_account_update-password.md b/docs/user-guide/commands/argocd_account_update-password.md index 6894d5bfaafd4..2d8e4231818ec 100644 --- a/docs/user-guide/commands/argocd_account_update-password.md +++ b/docs/user-guide/commands/argocd_account_update-password.md @@ -18,21 +18,38 @@ argocd account update-password [flags] ### Options inherited from parent commands ``` + --as string Username to impersonate for the operation + --as-group stringArray Group to impersonate for the operation, this flag can be repeated to specify multiple groups. --auth-token string Authentication token + --certificate-authority string Path to a cert file for the certificate authority + --client-certificate string Path to a client certificate file for TLS --client-crt string Client certificate file --client-crt-key string Client certificate key file + --client-key string Path to a client key file for TLS + --cluster string The name of the kubeconfig cluster to use --config string Path to Argo CD config (default "/home/user/.argocd/config") + --context string The name of the kubeconfig context to use + --core If set to true then CLI talks directly to Kubernetes instead of talking to Argo CD API server --grpc-web Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. --grpc-web-root-path string Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. Set web root. -H, --header strings Sets additional header to all requests made by Argo CD CLI. (Can be repeated multiple times to add multiple headers, also supports comma separated headers) + --http-retry-max int Maximum number of retries to establish http connection to Argo CD server --insecure Skip server certificate and domain verification + --insecure-skip-tls-verify If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure --logformat string Set the logging format. One of: text|json (default "text") --loglevel string Set the logging level. One of: debug|info|warn|error (default "info") + -n, --namespace string If present, the namespace scope for this CLI request + --password string Password for basic authentication to the API server --plaintext Disable TLS --port-forward Connect to a random argocd-server port using port forwarding --port-forward-namespace string Namespace name which should be used for port forwarding - --server string Argo CD server address + --request-timeout string The length of time to wait before giving up on a single server request. Non-zero values should contain a corresponding time unit (e.g. 1s, 2m, 3h). A value of zero means don't timeout requests. (default "0") + --server string The address and port of the Kubernetes API server --server-crt string Server certificate file + --tls-server-name string If provided, this name will be used to validate server certificate. If this is not provided, hostname used to contact the server is used. + --token string Bearer token for authentication to the API server + --user string The name of the kubeconfig user to use + --username string Username for basic authentication to the API server ``` ### SEE ALSO diff --git a/docs/user-guide/commands/argocd_admin.md b/docs/user-guide/commands/argocd_admin.md new file mode 100644 index 0000000000000..3e70ef202a219 --- /dev/null +++ b/docs/user-guide/commands/argocd_admin.md @@ -0,0 +1,48 @@ +## argocd admin + +Contains a set of commands useful for Argo CD administrators and requires direct Kubernetes access + +``` +argocd admin [flags] +``` + +### Options + +``` + -h, --help help for admin +``` + +### Options inherited from parent commands + +``` + --auth-token string Authentication token + --client-crt string Client certificate file + --client-crt-key string Client certificate key file + --config string Path to Argo CD config (default "/home/user/.argocd/config") + --core If set to true then CLI talks directly to Kubernetes instead of talking to Argo CD API server + --grpc-web Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. + --grpc-web-root-path string Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. Set web root. + -H, --header strings Sets additional header to all requests made by Argo CD CLI. (Can be repeated multiple times to add multiple headers, also supports comma separated headers) + --http-retry-max int Maximum number of retries to establish http connection to Argo CD server + --insecure Skip server certificate and domain verification + --logformat string Set the logging format. One of: text|json (default "text") + --loglevel string Set the logging level. One of: debug|info|warn|error (default "info") + --plaintext Disable TLS + --port-forward Connect to a random argocd-server port using port forwarding + --port-forward-namespace string Namespace name which should be used for port forwarding + --server string Argo CD server address + --server-crt string Server certificate file +``` + +### SEE ALSO + +* [argocd](argocd.md) - argocd controls a Argo CD server +* [argocd admin app](argocd_admin_app.md) - Manage applications configuration +* [argocd admin cluster](argocd_admin_cluster.md) - Manage clusters configuration +* [argocd admin dashboard](argocd_admin_dashboard.md) - Starts Argo CD Web UI locally +* [argocd admin export](argocd_admin_export.md) - Export all Argo CD data to stdout (default) or a file +* [argocd admin import](argocd_admin_import.md) - Import Argo CD data from stdin (specify `-') or a file +* [argocd admin proj](argocd_admin_proj.md) - Manage projects configuration +* [argocd admin repo](argocd_admin_repo.md) - Manage repositories configuration +* [argocd admin settings](argocd_admin_settings.md) - Provides set of commands for settings validation and troubleshooting + diff --git a/docs/user-guide/commands/argocd_admin_app.md b/docs/user-guide/commands/argocd_admin_app.md new file mode 100644 index 0000000000000..e8ccb35bc2543 --- /dev/null +++ b/docs/user-guide/commands/argocd_admin_app.md @@ -0,0 +1,43 @@ +## argocd admin app + +Manage applications configuration + +``` +argocd admin app [flags] +``` + +### Options + +``` + -h, --help help for app +``` + +### Options inherited from parent commands + +``` + --auth-token string Authentication token + --client-crt string Client certificate file + --client-crt-key string Client certificate key file + --config string Path to Argo CD config (default "/home/user/.argocd/config") + --core If set to true then CLI talks directly to Kubernetes instead of talking to Argo CD API server + --grpc-web Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. + --grpc-web-root-path string Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. Set web root. + -H, --header strings Sets additional header to all requests made by Argo CD CLI. (Can be repeated multiple times to add multiple headers, also supports comma separated headers) + --http-retry-max int Maximum number of retries to establish http connection to Argo CD server + --insecure Skip server certificate and domain verification + --logformat string Set the logging format. One of: text|json (default "text") + --loglevel string Set the logging level. One of: debug|info|warn|error (default "info") + --plaintext Disable TLS + --port-forward Connect to a random argocd-server port using port forwarding + --port-forward-namespace string Namespace name which should be used for port forwarding + --server string Argo CD server address + --server-crt string Server certificate file +``` + +### SEE ALSO + +* [argocd admin](argocd_admin.md) - Contains a set of commands useful for Argo CD administrators and requires direct Kubernetes access +* [argocd admin app diff-reconcile-results](argocd_admin_app_diff-reconcile-results.md) - Compare results of two reconciliations and print diff. +* [argocd admin app generate-spec](argocd_admin_app_generate-spec.md) - Generate declarative config for an application +* [argocd admin app get-reconcile-results](argocd_admin_app_get-reconcile-results.md) - Reconcile all applications and stores reconciliation summary in the specified file. + diff --git a/docs/user-guide/commands/argocd_admin_app_diff-reconcile-results.md b/docs/user-guide/commands/argocd_admin_app_diff-reconcile-results.md new file mode 100644 index 0000000000000..887a1b2ce01d7 --- /dev/null +++ b/docs/user-guide/commands/argocd_admin_app_diff-reconcile-results.md @@ -0,0 +1,40 @@ +## argocd admin app diff-reconcile-results + +Compare results of two reconciliations and print diff. + +``` +argocd admin app diff-reconcile-results PATH1 PATH2 [flags] +``` + +### Options + +``` + -h, --help help for diff-reconcile-results +``` + +### Options inherited from parent commands + +``` + --auth-token string Authentication token + --client-crt string Client certificate file + --client-crt-key string Client certificate key file + --config string Path to Argo CD config (default "/home/user/.argocd/config") + --core If set to true then CLI talks directly to Kubernetes instead of talking to Argo CD API server + --grpc-web Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. + --grpc-web-root-path string Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. Set web root. + -H, --header strings Sets additional header to all requests made by Argo CD CLI. (Can be repeated multiple times to add multiple headers, also supports comma separated headers) + --http-retry-max int Maximum number of retries to establish http connection to Argo CD server + --insecure Skip server certificate and domain verification + --logformat string Set the logging format. One of: text|json (default "text") + --loglevel string Set the logging level. One of: debug|info|warn|error (default "info") + --plaintext Disable TLS + --port-forward Connect to a random argocd-server port using port forwarding + --port-forward-namespace string Namespace name which should be used for port forwarding + --server string Argo CD server address + --server-crt string Server certificate file +``` + +### SEE ALSO + +* [argocd admin app](argocd_admin_app.md) - Manage applications configuration + diff --git a/docs/operator-manual/server-commands/argocd-util_app_generate-spec.md b/docs/user-guide/commands/argocd_admin_app_generate-spec.md similarity index 62% rename from docs/operator-manual/server-commands/argocd-util_app_generate-spec.md rename to docs/user-guide/commands/argocd_admin_app_generate-spec.md index 762b61af92e6a..b8a35a693f4ff 100644 --- a/docs/operator-manual/server-commands/argocd-util_app_generate-spec.md +++ b/docs/user-guide/commands/argocd_admin_app_generate-spec.md @@ -1,9 +1,9 @@ -## argocd-util app generate-spec +## argocd admin app generate-spec Generate declarative config for an application ``` -argocd-util app generate-spec APPNAME [flags] +argocd admin app generate-spec APPNAME [flags] ``` ### Examples @@ -11,22 +11,22 @@ argocd-util app generate-spec APPNAME [flags] ``` # Generate declarative config for a directory app - argocd-util app generate-spec guestbook --repo https://github.com/argoproj/argocd-example-apps.git --path guestbook --dest-namespace default --dest-server https://kubernetes.default.svc --directory-recurse + argocd admin app generate-spec guestbook --repo https://github.com/argoproj/argocd-example-apps.git --path guestbook --dest-namespace default --dest-server https://kubernetes.default.svc --directory-recurse # Generate declarative config for a Jsonnet app - argocd-util app generate-spec jsonnet-guestbook --repo https://github.com/argoproj/argocd-example-apps.git --path jsonnet-guestbook --dest-namespace default --dest-server https://kubernetes.default.svc --jsonnet-ext-str replicas=2 + argocd admin app generate-spec jsonnet-guestbook --repo https://github.com/argoproj/argocd-example-apps.git --path jsonnet-guestbook --dest-namespace default --dest-server https://kubernetes.default.svc --jsonnet-ext-str replicas=2 # Generate declarative config for a Helm app - argocd-util app generate-spec helm-guestbook --repo https://github.com/argoproj/argocd-example-apps.git --path helm-guestbook --dest-namespace default --dest-server https://kubernetes.default.svc --helm-set replicaCount=2 + argocd admin app generate-spec helm-guestbook --repo https://github.com/argoproj/argocd-example-apps.git --path helm-guestbook --dest-namespace default --dest-server https://kubernetes.default.svc --helm-set replicaCount=2 # Generate declarative config for a Helm app from a Helm repo - argocd-util app generate-spec nginx-ingress --repo https://charts.helm.sh/stable --helm-chart nginx-ingress --revision 1.24.3 --dest-namespace default --dest-server https://kubernetes.default.svc + argocd admin app generate-spec nginx-ingress --repo https://charts.helm.sh/stable --helm-chart nginx-ingress --revision 1.24.3 --dest-namespace default --dest-server https://kubernetes.default.svc # Generate declarative config for a Kustomize app - argocd-util app generate-spec kustomize-guestbook --repo https://github.com/argoproj/argocd-example-apps.git --path kustomize-guestbook --dest-namespace default --dest-server https://kubernetes.default.svc --kustomize-image gcr.io/heptio-images/ks-guestbook-demo:0.1 + argocd admin app generate-spec kustomize-guestbook --repo https://github.com/argoproj/argocd-example-apps.git --path kustomize-guestbook --dest-namespace default --dest-server https://kubernetes.default.svc --kustomize-image gcr.io/heptio-images/ks-guestbook-demo:0.1 # Generate declarative config for a app using a custom tool: - argocd-util app generate-spec ksane --repo https://github.com/argoproj/argocd-example-apps.git --path plugins/kasane --dest-namespace default --dest-server https://kubernetes.default.svc --config-management-plugin kasane + argocd admin app generate-spec ksane --repo https://github.com/argoproj/argocd-example-apps.git --path plugins/kasane --dest-namespace default --dest-server https://kubernetes.default.svc --config-management-plugin kasane ``` @@ -34,6 +34,7 @@ argocd-util app generate-spec APPNAME [flags] ``` --allow-empty Set allow zero live resources when sync is automated + --annotations stringArray Set metadata annotations (e.g. example=value) --auto-prune Set automatic pruning when sync is automated --config-management-plugin string Config management plugin name --dest-name string K8s cluster Name (e.g. minikube) @@ -50,6 +51,7 @@ argocd-util app generate-spec APPNAME [flags] --helm-set-string stringArray Helm set STRING values on the command line (can be repeated to set several values: --helm-set-string key1=val1 --helm-set-string key2=val2) --helm-version string Helm version -h, --help help for generate-spec + -i, --inline If set then generated resource is written back to the file specified in --file flag --jsonnet-ext-var-code stringArray Jsonnet ext var --jsonnet-ext-var-str stringArray Jsonnet string ext var --jsonnet-libs stringArray Additional jsonnet libs (prefixed by repoRoot) @@ -86,7 +88,29 @@ argocd-util app generate-spec APPNAME [flags] --values-literal-file string Filename or URL to import as a literal Helm values block ``` +### Options inherited from parent commands + +``` + --auth-token string Authentication token + --client-crt string Client certificate file + --client-crt-key string Client certificate key file + --config string Path to Argo CD config (default "/home/user/.argocd/config") + --core If set to true then CLI talks directly to Kubernetes instead of talking to Argo CD API server + --grpc-web Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. + --grpc-web-root-path string Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. Set web root. + -H, --header strings Sets additional header to all requests made by Argo CD CLI. (Can be repeated multiple times to add multiple headers, also supports comma separated headers) + --http-retry-max int Maximum number of retries to establish http connection to Argo CD server + --insecure Skip server certificate and domain verification + --logformat string Set the logging format. One of: text|json (default "text") + --loglevel string Set the logging level. One of: debug|info|warn|error (default "info") + --plaintext Disable TLS + --port-forward Connect to a random argocd-server port using port forwarding + --port-forward-namespace string Namespace name which should be used for port forwarding + --server string Argo CD server address + --server-crt string Server certificate file +``` + ### SEE ALSO -* [argocd-util app](argocd-util_app.md) - Manage applications configuration +* [argocd admin app](argocd_admin_app.md) - Manage applications configuration diff --git a/docs/operator-manual/server-commands/argocd-util_app_get-reconcile-results.md b/docs/user-guide/commands/argocd_admin_app_get-reconcile-results.md similarity index 53% rename from docs/operator-manual/server-commands/argocd-util_app_get-reconcile-results.md rename to docs/user-guide/commands/argocd_admin_app_get-reconcile-results.md index 286b2a7adda8b..fb3f0878f8950 100644 --- a/docs/operator-manual/server-commands/argocd-util_app_get-reconcile-results.md +++ b/docs/user-guide/commands/argocd_admin_app_get-reconcile-results.md @@ -1,9 +1,9 @@ -## argocd-util app get-reconcile-results +## argocd admin app get-reconcile-results Reconcile all applications and stores reconciliation summary in the specified file. ``` -argocd-util app get-reconcile-results PATH [flags] +argocd admin app get-reconcile-results PATH [flags] ``` ### Options @@ -26,14 +26,35 @@ argocd-util app get-reconcile-results PATH [flags] --refresh If set to true then recalculates apps reconciliation --repo-server string Repo server address. --request-timeout string The length of time to wait before giving up on a single server request. Non-zero values should contain a corresponding time unit (e.g. 1s, 2m, 3h). A value of zero means don't timeout requests. (default "0") - --server string The address and port of the Kubernetes API server --tls-server-name string If provided, this name will be used to validate server certificate. If this is not provided, hostname used to contact the server is used. --token string Bearer token for authentication to the API server --user string The name of the kubeconfig user to use --username string Username for basic authentication to the API server ``` +### Options inherited from parent commands + +``` + --auth-token string Authentication token + --client-crt string Client certificate file + --client-crt-key string Client certificate key file + --config string Path to Argo CD config (default "/home/user/.argocd/config") + --core If set to true then CLI talks directly to Kubernetes instead of talking to Argo CD API server + --grpc-web Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. + --grpc-web-root-path string Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. Set web root. + -H, --header strings Sets additional header to all requests made by Argo CD CLI. (Can be repeated multiple times to add multiple headers, also supports comma separated headers) + --http-retry-max int Maximum number of retries to establish http connection to Argo CD server + --insecure Skip server certificate and domain verification + --logformat string Set the logging format. One of: text|json (default "text") + --loglevel string Set the logging level. One of: debug|info|warn|error (default "info") + --plaintext Disable TLS + --port-forward Connect to a random argocd-server port using port forwarding + --port-forward-namespace string Namespace name which should be used for port forwarding + --server string Argo CD server address + --server-crt string Server certificate file +``` + ### SEE ALSO -* [argocd-util app](argocd-util_app.md) - Manage applications configuration +* [argocd admin app](argocd_admin_app.md) - Manage applications configuration diff --git a/docs/user-guide/commands/argocd_admin_cluster.md b/docs/user-guide/commands/argocd_admin_cluster.md new file mode 100644 index 0000000000000..7e75059641420 --- /dev/null +++ b/docs/user-guide/commands/argocd_admin_cluster.md @@ -0,0 +1,45 @@ +## argocd admin cluster + +Manage clusters configuration + +``` +argocd admin cluster [flags] +``` + +### Options + +``` + -h, --help help for cluster +``` + +### Options inherited from parent commands + +``` + --auth-token string Authentication token + --client-crt string Client certificate file + --client-crt-key string Client certificate key file + --config string Path to Argo CD config (default "/home/user/.argocd/config") + --core If set to true then CLI talks directly to Kubernetes instead of talking to Argo CD API server + --grpc-web Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. + --grpc-web-root-path string Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. Set web root. + -H, --header strings Sets additional header to all requests made by Argo CD CLI. (Can be repeated multiple times to add multiple headers, also supports comma separated headers) + --http-retry-max int Maximum number of retries to establish http connection to Argo CD server + --insecure Skip server certificate and domain verification + --logformat string Set the logging format. One of: text|json (default "text") + --loglevel string Set the logging level. One of: debug|info|warn|error (default "info") + --plaintext Disable TLS + --port-forward Connect to a random argocd-server port using port forwarding + --port-forward-namespace string Namespace name which should be used for port forwarding + --server string Argo CD server address + --server-crt string Server certificate file +``` + +### SEE ALSO + +* [argocd admin](argocd_admin.md) - Contains a set of commands useful for Argo CD administrators and requires direct Kubernetes access +* [argocd admin cluster generate-spec](argocd_admin_cluster_generate-spec.md) - Generate declarative config for a cluster +* [argocd admin cluster kubeconfig](argocd_admin_cluster_kubeconfig.md) - Generates kubeconfig for the specified cluster +* [argocd admin cluster namespaces](argocd_admin_cluster_namespaces.md) - Print information namespaces which Argo CD manages in each cluster. +* [argocd admin cluster shards](argocd_admin_cluster_shards.md) - Print information about each controller shard and portion of Kubernetes resources it is responsible for. +* [argocd admin cluster stats](argocd_admin_cluster_stats.md) - Prints information cluster statistics and inferred shard number + diff --git a/docs/operator-manual/server-commands/argocd-util_cluster_generate-spec.md b/docs/user-guide/commands/argocd_admin_cluster_generate-spec.md similarity index 52% rename from docs/operator-manual/server-commands/argocd-util_cluster_generate-spec.md rename to docs/user-guide/commands/argocd_admin_cluster_generate-spec.md index 77c7d70ebfb2c..43c774bf560db 100644 --- a/docs/operator-manual/server-commands/argocd-util_cluster_generate-spec.md +++ b/docs/user-guide/commands/argocd_admin_cluster_generate-spec.md @@ -1,9 +1,9 @@ -## argocd-util cluster generate-spec +## argocd admin cluster generate-spec Generate declarative config for a cluster ``` -argocd-util cluster generate-spec CONTEXT [flags] +argocd admin cluster generate-spec CONTEXT [flags] ``` ### Options @@ -12,6 +12,7 @@ argocd-util cluster generate-spec CONTEXT [flags] --aws-cluster-name string AWS Cluster name if set then aws cli eks token command will be used to access cluster --aws-role-arn string Optional AWS role arn. If set then AWS IAM Authenticator assumes a role to perform cluster operations instead of the default AWS credential provider chain. --bearer-token string Authentication token that should be used to access K8S API server + --cluster-resources Indicates if cluster level resources should be managed. The setting is used only if list of managed namespaces is not empty. --exec-command string Command to run to provide client credentials to the cluster. You may need to build a custom ArgoCD image to ensure the command is available at runtime. --exec-command-api-version string Preferred input version of the ExecInfo for the --exec-command executable --exec-command-args stringArray Arguments to supply to the --exec-command executable @@ -29,7 +30,29 @@ argocd-util cluster generate-spec CONTEXT [flags] --system-namespace string Use different system namespace (default "kube-system") ``` +### Options inherited from parent commands + +``` + --auth-token string Authentication token + --client-crt string Client certificate file + --client-crt-key string Client certificate key file + --config string Path to Argo CD config (default "/home/user/.argocd/config") + --core If set to true then CLI talks directly to Kubernetes instead of talking to Argo CD API server + --grpc-web Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. + --grpc-web-root-path string Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. Set web root. + -H, --header strings Sets additional header to all requests made by Argo CD CLI. (Can be repeated multiple times to add multiple headers, also supports comma separated headers) + --http-retry-max int Maximum number of retries to establish http connection to Argo CD server + --insecure Skip server certificate and domain verification + --logformat string Set the logging format. One of: text|json (default "text") + --loglevel string Set the logging level. One of: debug|info|warn|error (default "info") + --plaintext Disable TLS + --port-forward Connect to a random argocd-server port using port forwarding + --port-forward-namespace string Namespace name which should be used for port forwarding + --server string Argo CD server address + --server-crt string Server certificate file +``` + ### SEE ALSO -* [argocd-util cluster](argocd-util_cluster.md) - Manage clusters configuration +* [argocd admin cluster](argocd_admin_cluster.md) - Manage clusters configuration diff --git a/docs/user-guide/commands/argocd_admin_cluster_kubeconfig.md b/docs/user-guide/commands/argocd_admin_cluster_kubeconfig.md new file mode 100644 index 0000000000000..bc6163ecc617f --- /dev/null +++ b/docs/user-guide/commands/argocd_admin_cluster_kubeconfig.md @@ -0,0 +1,56 @@ +## argocd admin cluster kubeconfig + +Generates kubeconfig for the specified cluster + +``` +argocd admin cluster kubeconfig CLUSTER_URL OUTPUT_PATH [flags] +``` + +### Options + +``` + --as string Username to impersonate for the operation + --as-group stringArray Group to impersonate for the operation, this flag can be repeated to specify multiple groups. + --certificate-authority string Path to a cert file for the certificate authority + --client-certificate string Path to a client certificate file for TLS + --client-key string Path to a client key file for TLS + --cluster string The name of the kubeconfig cluster to use + --context string The name of the kubeconfig context to use + -h, --help help for kubeconfig + --insecure-skip-tls-verify If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure + --kubeconfig string Path to a kube config. Only required if out-of-cluster + -n, --namespace string If present, the namespace scope for this CLI request + --password string Password for basic authentication to the API server + --request-timeout string The length of time to wait before giving up on a single server request. Non-zero values should contain a corresponding time unit (e.g. 1s, 2m, 3h). A value of zero means don't timeout requests. (default "0") + --tls-server-name string If provided, this name will be used to validate server certificate. If this is not provided, hostname used to contact the server is used. + --token string Bearer token for authentication to the API server + --user string The name of the kubeconfig user to use + --username string Username for basic authentication to the API server +``` + +### Options inherited from parent commands + +``` + --auth-token string Authentication token + --client-crt string Client certificate file + --client-crt-key string Client certificate key file + --config string Path to Argo CD config (default "/home/user/.argocd/config") + --core If set to true then CLI talks directly to Kubernetes instead of talking to Argo CD API server + --grpc-web Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. + --grpc-web-root-path string Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. Set web root. + -H, --header strings Sets additional header to all requests made by Argo CD CLI. (Can be repeated multiple times to add multiple headers, also supports comma separated headers) + --http-retry-max int Maximum number of retries to establish http connection to Argo CD server + --insecure Skip server certificate and domain verification + --logformat string Set the logging format. One of: text|json (default "text") + --loglevel string Set the logging level. One of: debug|info|warn|error (default "info") + --plaintext Disable TLS + --port-forward Connect to a random argocd-server port using port forwarding + --port-forward-namespace string Namespace name which should be used for port forwarding + --server string Argo CD server address + --server-crt string Server certificate file +``` + +### SEE ALSO + +* [argocd admin cluster](argocd_admin_cluster.md) - Manage clusters configuration + diff --git a/docs/user-guide/commands/argocd_admin_cluster_namespaces.md b/docs/user-guide/commands/argocd_admin_cluster_namespaces.md new file mode 100644 index 0000000000000..aa9588d04d165 --- /dev/null +++ b/docs/user-guide/commands/argocd_admin_cluster_namespaces.md @@ -0,0 +1,58 @@ +## argocd admin cluster namespaces + +Print information namespaces which Argo CD manages in each cluster. + +``` +argocd admin cluster namespaces [flags] +``` + +### Options + +``` + --as string Username to impersonate for the operation + --as-group stringArray Group to impersonate for the operation, this flag can be repeated to specify multiple groups. + --certificate-authority string Path to a cert file for the certificate authority + --client-certificate string Path to a client certificate file for TLS + --client-key string Path to a client key file for TLS + --cluster string The name of the kubeconfig cluster to use + --context string The name of the kubeconfig context to use + -h, --help help for namespaces + --insecure-skip-tls-verify If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure + --kubeconfig string Path to a kube config. Only required if out-of-cluster + -n, --namespace string If present, the namespace scope for this CLI request + --password string Password for basic authentication to the API server + --request-timeout string The length of time to wait before giving up on a single server request. Non-zero values should contain a corresponding time unit (e.g. 1s, 2m, 3h). A value of zero means don't timeout requests. (default "0") + --tls-server-name string If provided, this name will be used to validate server certificate. If this is not provided, hostname used to contact the server is used. + --token string Bearer token for authentication to the API server + --user string The name of the kubeconfig user to use + --username string Username for basic authentication to the API server +``` + +### Options inherited from parent commands + +``` + --auth-token string Authentication token + --client-crt string Client certificate file + --client-crt-key string Client certificate key file + --config string Path to Argo CD config (default "/home/user/.argocd/config") + --core If set to true then CLI talks directly to Kubernetes instead of talking to Argo CD API server + --grpc-web Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. + --grpc-web-root-path string Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. Set web root. + -H, --header strings Sets additional header to all requests made by Argo CD CLI. (Can be repeated multiple times to add multiple headers, also supports comma separated headers) + --http-retry-max int Maximum number of retries to establish http connection to Argo CD server + --insecure Skip server certificate and domain verification + --logformat string Set the logging format. One of: text|json (default "text") + --loglevel string Set the logging level. One of: debug|info|warn|error (default "info") + --plaintext Disable TLS + --port-forward Connect to a random argocd-server port using port forwarding + --port-forward-namespace string Namespace name which should be used for port forwarding + --server string Argo CD server address + --server-crt string Server certificate file +``` + +### SEE ALSO + +* [argocd admin cluster](argocd_admin_cluster.md) - Manage clusters configuration +* [argocd admin cluster namespaces disable-namespaced-mode](argocd_admin_cluster_namespaces_disable-namespaced-mode.md) - Disable namespaced mode for clusters which name matches to the specified pattern. +* [argocd admin cluster namespaces enable-namespaced-mode](argocd_admin_cluster_namespaces_enable-namespaced-mode.md) - Enable namespaced mode for clusters which name matches to the specified pattern. + diff --git a/docs/user-guide/commands/argocd_admin_cluster_namespaces_disable-namespaced-mode.md b/docs/user-guide/commands/argocd_admin_cluster_namespaces_disable-namespaced-mode.md new file mode 100644 index 0000000000000..7a6d1f4b1484c --- /dev/null +++ b/docs/user-guide/commands/argocd_admin_cluster_namespaces_disable-namespaced-mode.md @@ -0,0 +1,57 @@ +## argocd admin cluster namespaces disable-namespaced-mode + +Disable namespaced mode for clusters which name matches to the specified pattern. + +``` +argocd admin cluster namespaces disable-namespaced-mode PATTERN [flags] +``` + +### Options + +``` + --dry-run Print what will be performed (default true) + -h, --help help for disable-namespaced-mode +``` + +### Options inherited from parent commands + +``` + --as string Username to impersonate for the operation + --as-group stringArray Group to impersonate for the operation, this flag can be repeated to specify multiple groups. + --auth-token string Authentication token + --certificate-authority string Path to a cert file for the certificate authority + --client-certificate string Path to a client certificate file for TLS + --client-crt string Client certificate file + --client-crt-key string Client certificate key file + --client-key string Path to a client key file for TLS + --cluster string The name of the kubeconfig cluster to use + --config string Path to Argo CD config (default "/home/user/.argocd/config") + --context string The name of the kubeconfig context to use + --core If set to true then CLI talks directly to Kubernetes instead of talking to Argo CD API server + --grpc-web Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. + --grpc-web-root-path string Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. Set web root. + -H, --header strings Sets additional header to all requests made by Argo CD CLI. (Can be repeated multiple times to add multiple headers, also supports comma separated headers) + --http-retry-max int Maximum number of retries to establish http connection to Argo CD server + --insecure Skip server certificate and domain verification + --insecure-skip-tls-verify If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure + --kubeconfig string Path to a kube config. Only required if out-of-cluster + --logformat string Set the logging format. One of: text|json (default "text") + --loglevel string Set the logging level. One of: debug|info|warn|error (default "info") + -n, --namespace string If present, the namespace scope for this CLI request + --password string Password for basic authentication to the API server + --plaintext Disable TLS + --port-forward Connect to a random argocd-server port using port forwarding + --port-forward-namespace string Namespace name which should be used for port forwarding + --request-timeout string The length of time to wait before giving up on a single server request. Non-zero values should contain a corresponding time unit (e.g. 1s, 2m, 3h). A value of zero means don't timeout requests. (default "0") + --server string The address and port of the Kubernetes API server + --server-crt string Server certificate file + --tls-server-name string If provided, this name will be used to validate server certificate. If this is not provided, hostname used to contact the server is used. + --token string Bearer token for authentication to the API server + --user string The name of the kubeconfig user to use + --username string Username for basic authentication to the API server +``` + +### SEE ALSO + +* [argocd admin cluster namespaces](argocd_admin_cluster_namespaces.md) - Print information namespaces which Argo CD manages in each cluster. + diff --git a/docs/user-guide/commands/argocd_admin_cluster_namespaces_enable-namespaced-mode.md b/docs/user-guide/commands/argocd_admin_cluster_namespaces_enable-namespaced-mode.md new file mode 100644 index 0000000000000..b726e86075dea --- /dev/null +++ b/docs/user-guide/commands/argocd_admin_cluster_namespaces_enable-namespaced-mode.md @@ -0,0 +1,59 @@ +## argocd admin cluster namespaces enable-namespaced-mode + +Enable namespaced mode for clusters which name matches to the specified pattern. + +``` +argocd admin cluster namespaces enable-namespaced-mode PATTERN [flags] +``` + +### Options + +``` + --cluster-resources Indicates if cluster level resources should be managed. + --dry-run Print what will be performed (default true) + -h, --help help for enable-namespaced-mode + --max-namespace-count int Max number of namespaces that cluster should managed managed namespaces is less or equal to specified count +``` + +### Options inherited from parent commands + +``` + --as string Username to impersonate for the operation + --as-group stringArray Group to impersonate for the operation, this flag can be repeated to specify multiple groups. + --auth-token string Authentication token + --certificate-authority string Path to a cert file for the certificate authority + --client-certificate string Path to a client certificate file for TLS + --client-crt string Client certificate file + --client-crt-key string Client certificate key file + --client-key string Path to a client key file for TLS + --cluster string The name of the kubeconfig cluster to use + --config string Path to Argo CD config (default "/home/user/.argocd/config") + --context string The name of the kubeconfig context to use + --core If set to true then CLI talks directly to Kubernetes instead of talking to Argo CD API server + --grpc-web Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. + --grpc-web-root-path string Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. Set web root. + -H, --header strings Sets additional header to all requests made by Argo CD CLI. (Can be repeated multiple times to add multiple headers, also supports comma separated headers) + --http-retry-max int Maximum number of retries to establish http connection to Argo CD server + --insecure Skip server certificate and domain verification + --insecure-skip-tls-verify If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure + --kubeconfig string Path to a kube config. Only required if out-of-cluster + --logformat string Set the logging format. One of: text|json (default "text") + --loglevel string Set the logging level. One of: debug|info|warn|error (default "info") + -n, --namespace string If present, the namespace scope for this CLI request + --password string Password for basic authentication to the API server + --plaintext Disable TLS + --port-forward Connect to a random argocd-server port using port forwarding + --port-forward-namespace string Namespace name which should be used for port forwarding + --request-timeout string The length of time to wait before giving up on a single server request. Non-zero values should contain a corresponding time unit (e.g. 1s, 2m, 3h). A value of zero means don't timeout requests. (default "0") + --server string The address and port of the Kubernetes API server + --server-crt string Server certificate file + --tls-server-name string If provided, this name will be used to validate server certificate. If this is not provided, hostname used to contact the server is used. + --token string Bearer token for authentication to the API server + --user string The name of the kubeconfig user to use + --username string Username for basic authentication to the API server +``` + +### SEE ALSO + +* [argocd admin cluster namespaces](argocd_admin_cluster_namespaces.md) - Print information namespaces which Argo CD manages in each cluster. + diff --git a/docs/operator-manual/server-commands/argocd-util_cluster_shards.md b/docs/user-guide/commands/argocd_admin_cluster_shards.md similarity index 54% rename from docs/operator-manual/server-commands/argocd-util_cluster_shards.md rename to docs/user-guide/commands/argocd_admin_cluster_shards.md index ffe8e7c3bb292..7be827370654a 100644 --- a/docs/operator-manual/server-commands/argocd-util_cluster_shards.md +++ b/docs/user-guide/commands/argocd_admin_cluster_shards.md @@ -1,9 +1,9 @@ -## argocd-util cluster shards +## argocd admin cluster shards Print information about each controller shard and portion of Kubernetes resources it is responsible for. ``` -argocd-util cluster shards [flags] +argocd admin cluster shards [flags] ``` ### Options @@ -25,12 +25,16 @@ argocd-util cluster shards [flags] --password string Password for basic authentication to the API server --port-forward-redis Automatically port-forward ha proxy redis from current namespace? (default true) --redis string Redis server hostname and port (e.g. argocd-redis:6379). + --redis-ca-certificate string Path to Redis server CA certificate (e.g. /etc/certs/redis/ca.crt). If not specified, system trusted CAs will be used for server certificate validation. + --redis-client-certificate string Path to Redis client certificate (e.g. /etc/certs/redis/client.crt). + --redis-client-key string Path to Redis client key (e.g. /etc/certs/redis/client.crt). + --redis-insecure-skip-tls-verify Skip Redis server certificate validation. + --redis-use-tls Use TLS when connecting to Redis. --redisdb int Redis database. --replicas int Application controller replicas count. Inferred from number of running controller pods if not specified --request-timeout string The length of time to wait before giving up on a single server request. Non-zero values should contain a corresponding time unit (e.g. 1s, 2m, 3h). A value of zero means don't timeout requests. (default "0") --sentinel stringArray Redis sentinel hostname and port (e.g. argocd-redis-ha-announce-0:6379). --sentinelmaster string Redis sentinel master group name. (default "master") - --server string The address and port of the Kubernetes API server --shard int Cluster shard filter (default -1) --tls-server-name string If provided, this name will be used to validate server certificate. If this is not provided, hostname used to contact the server is used. --token string Bearer token for authentication to the API server @@ -38,7 +42,29 @@ argocd-util cluster shards [flags] --username string Username for basic authentication to the API server ``` +### Options inherited from parent commands + +``` + --auth-token string Authentication token + --client-crt string Client certificate file + --client-crt-key string Client certificate key file + --config string Path to Argo CD config (default "/home/user/.argocd/config") + --core If set to true then CLI talks directly to Kubernetes instead of talking to Argo CD API server + --grpc-web Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. + --grpc-web-root-path string Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. Set web root. + -H, --header strings Sets additional header to all requests made by Argo CD CLI. (Can be repeated multiple times to add multiple headers, also supports comma separated headers) + --http-retry-max int Maximum number of retries to establish http connection to Argo CD server + --insecure Skip server certificate and domain verification + --logformat string Set the logging format. One of: text|json (default "text") + --loglevel string Set the logging level. One of: debug|info|warn|error (default "info") + --plaintext Disable TLS + --port-forward Connect to a random argocd-server port using port forwarding + --port-forward-namespace string Namespace name which should be used for port forwarding + --server string Argo CD server address + --server-crt string Server certificate file +``` + ### SEE ALSO -* [argocd-util cluster](argocd-util_cluster.md) - Manage clusters configuration +* [argocd admin cluster](argocd_admin_cluster.md) - Manage clusters configuration diff --git a/docs/operator-manual/server-commands/argocd-util_cluster_stats.md b/docs/user-guide/commands/argocd_admin_cluster_stats.md similarity index 54% rename from docs/operator-manual/server-commands/argocd-util_cluster_stats.md rename to docs/user-guide/commands/argocd_admin_cluster_stats.md index 2271a7576a420..2321837040429 100644 --- a/docs/operator-manual/server-commands/argocd-util_cluster_stats.md +++ b/docs/user-guide/commands/argocd_admin_cluster_stats.md @@ -1,9 +1,9 @@ -## argocd-util cluster stats +## argocd admin cluster stats Prints information cluster statistics and inferred shard number ``` -argocd-util cluster stats [flags] +argocd admin cluster stats [flags] ``` ### Options @@ -25,12 +25,16 @@ argocd-util cluster stats [flags] --password string Password for basic authentication to the API server --port-forward-redis Automatically port-forward ha proxy redis from current namespace? (default true) --redis string Redis server hostname and port (e.g. argocd-redis:6379). + --redis-ca-certificate string Path to Redis server CA certificate (e.g. /etc/certs/redis/ca.crt). If not specified, system trusted CAs will be used for server certificate validation. + --redis-client-certificate string Path to Redis client certificate (e.g. /etc/certs/redis/client.crt). + --redis-client-key string Path to Redis client key (e.g. /etc/certs/redis/client.crt). + --redis-insecure-skip-tls-verify Skip Redis server certificate validation. + --redis-use-tls Use TLS when connecting to Redis. --redisdb int Redis database. --replicas int Application controller replicas count. Inferred from number of running controller pods if not specified --request-timeout string The length of time to wait before giving up on a single server request. Non-zero values should contain a corresponding time unit (e.g. 1s, 2m, 3h). A value of zero means don't timeout requests. (default "0") --sentinel stringArray Redis sentinel hostname and port (e.g. argocd-redis-ha-announce-0:6379). --sentinelmaster string Redis sentinel master group name. (default "master") - --server string The address and port of the Kubernetes API server --shard int Cluster shard filter (default -1) --tls-server-name string If provided, this name will be used to validate server certificate. If this is not provided, hostname used to contact the server is used. --token string Bearer token for authentication to the API server @@ -38,7 +42,29 @@ argocd-util cluster stats [flags] --username string Username for basic authentication to the API server ``` +### Options inherited from parent commands + +``` + --auth-token string Authentication token + --client-crt string Client certificate file + --client-crt-key string Client certificate key file + --config string Path to Argo CD config (default "/home/user/.argocd/config") + --core If set to true then CLI talks directly to Kubernetes instead of talking to Argo CD API server + --grpc-web Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. + --grpc-web-root-path string Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. Set web root. + -H, --header strings Sets additional header to all requests made by Argo CD CLI. (Can be repeated multiple times to add multiple headers, also supports comma separated headers) + --http-retry-max int Maximum number of retries to establish http connection to Argo CD server + --insecure Skip server certificate and domain verification + --logformat string Set the logging format. One of: text|json (default "text") + --loglevel string Set the logging level. One of: debug|info|warn|error (default "info") + --plaintext Disable TLS + --port-forward Connect to a random argocd-server port using port forwarding + --port-forward-namespace string Namespace name which should be used for port forwarding + --server string Argo CD server address + --server-crt string Server certificate file +``` + ### SEE ALSO -* [argocd-util cluster](argocd-util_cluster.md) - Manage clusters configuration +* [argocd admin cluster](argocd_admin_cluster.md) - Manage clusters configuration diff --git a/docs/user-guide/commands/argocd_admin_dashboard.md b/docs/user-guide/commands/argocd_admin_dashboard.md new file mode 100644 index 0000000000000..d7760b2289990 --- /dev/null +++ b/docs/user-guide/commands/argocd_admin_dashboard.md @@ -0,0 +1,57 @@ +## argocd admin dashboard + +Starts Argo CD Web UI locally + +``` +argocd admin dashboard [flags] +``` + +### Options + +``` + --as string Username to impersonate for the operation + --as-group stringArray Group to impersonate for the operation, this flag can be repeated to specify multiple groups. + --certificate-authority string Path to a cert file for the certificate authority + --client-certificate string Path to a client certificate file for TLS + --client-key string Path to a client key file for TLS + --cluster string The name of the kubeconfig cluster to use + --context string The name of the kubeconfig context to use + -h, --help help for dashboard + --insecure-skip-tls-verify If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure + --kubeconfig string Path to a kube config. Only required if out-of-cluster + -n, --namespace string If present, the namespace scope for this CLI request + --password string Password for basic authentication to the API server + --port int Listen on given port (default 8080) + --request-timeout string The length of time to wait before giving up on a single server request. Non-zero values should contain a corresponding time unit (e.g. 1s, 2m, 3h). A value of zero means don't timeout requests. (default "0") + --tls-server-name string If provided, this name will be used to validate server certificate. If this is not provided, hostname used to contact the server is used. + --token string Bearer token for authentication to the API server + --user string The name of the kubeconfig user to use + --username string Username for basic authentication to the API server +``` + +### Options inherited from parent commands + +``` + --auth-token string Authentication token + --client-crt string Client certificate file + --client-crt-key string Client certificate key file + --config string Path to Argo CD config (default "/home/user/.argocd/config") + --core If set to true then CLI talks directly to Kubernetes instead of talking to Argo CD API server + --grpc-web Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. + --grpc-web-root-path string Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. Set web root. + -H, --header strings Sets additional header to all requests made by Argo CD CLI. (Can be repeated multiple times to add multiple headers, also supports comma separated headers) + --http-retry-max int Maximum number of retries to establish http connection to Argo CD server + --insecure Skip server certificate and domain verification + --logformat string Set the logging format. One of: text|json (default "text") + --loglevel string Set the logging level. One of: debug|info|warn|error (default "info") + --plaintext Disable TLS + --port-forward Connect to a random argocd-server port using port forwarding + --port-forward-namespace string Namespace name which should be used for port forwarding + --server string Argo CD server address + --server-crt string Server certificate file +``` + +### SEE ALSO + +* [argocd admin](argocd_admin.md) - Contains a set of commands useful for Argo CD administrators and requires direct Kubernetes access + diff --git a/docs/operator-manual/server-commands/argocd-util_export.md b/docs/user-guide/commands/argocd_admin_export.md similarity index 50% rename from docs/operator-manual/server-commands/argocd-util_export.md rename to docs/user-guide/commands/argocd_admin_export.md index b52a1fc048a76..2ee86732f0111 100644 --- a/docs/operator-manual/server-commands/argocd-util_export.md +++ b/docs/user-guide/commands/argocd_admin_export.md @@ -1,9 +1,9 @@ -## argocd-util export +## argocd admin export Export all Argo CD data to stdout (default) or a file ``` -argocd-util export [flags] +argocd admin export [flags] ``` ### Options @@ -23,14 +23,35 @@ argocd-util export [flags] -o, --out string Output to the specified file instead of stdout (default "-") --password string Password for basic authentication to the API server --request-timeout string The length of time to wait before giving up on a single server request. Non-zero values should contain a corresponding time unit (e.g. 1s, 2m, 3h). A value of zero means don't timeout requests. (default "0") - --server string The address and port of the Kubernetes API server --tls-server-name string If provided, this name will be used to validate server certificate. If this is not provided, hostname used to contact the server is used. --token string Bearer token for authentication to the API server --user string The name of the kubeconfig user to use --username string Username for basic authentication to the API server ``` +### Options inherited from parent commands + +``` + --auth-token string Authentication token + --client-crt string Client certificate file + --client-crt-key string Client certificate key file + --config string Path to Argo CD config (default "/home/user/.argocd/config") + --core If set to true then CLI talks directly to Kubernetes instead of talking to Argo CD API server + --grpc-web Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. + --grpc-web-root-path string Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. Set web root. + -H, --header strings Sets additional header to all requests made by Argo CD CLI. (Can be repeated multiple times to add multiple headers, also supports comma separated headers) + --http-retry-max int Maximum number of retries to establish http connection to Argo CD server + --insecure Skip server certificate and domain verification + --logformat string Set the logging format. One of: text|json (default "text") + --loglevel string Set the logging level. One of: debug|info|warn|error (default "info") + --plaintext Disable TLS + --port-forward Connect to a random argocd-server port using port forwarding + --port-forward-namespace string Namespace name which should be used for port forwarding + --server string Argo CD server address + --server-crt string Server certificate file +``` + ### SEE ALSO -* [argocd-util](argocd-util.md) - argocd-util tools used by Argo CD +* [argocd admin](argocd_admin.md) - Contains a set of commands useful for Argo CD administrators and requires direct Kubernetes access diff --git a/docs/operator-manual/server-commands/argocd-util_import.md b/docs/user-guide/commands/argocd_admin_import.md similarity index 52% rename from docs/operator-manual/server-commands/argocd-util_import.md rename to docs/user-guide/commands/argocd_admin_import.md index 7174769b491e4..4b2e06693c4c5 100644 --- a/docs/operator-manual/server-commands/argocd-util_import.md +++ b/docs/user-guide/commands/argocd_admin_import.md @@ -1,9 +1,9 @@ -## argocd-util import +## argocd admin import Import Argo CD data from stdin (specify `-') or a file ``` -argocd-util import SOURCE [flags] +argocd admin import SOURCE [flags] ``` ### Options @@ -24,7 +24,6 @@ argocd-util import SOURCE [flags] --password string Password for basic authentication to the API server --prune Prune secrets, applications and projects which do not appear in the backup --request-timeout string The length of time to wait before giving up on a single server request. Non-zero values should contain a corresponding time unit (e.g. 1s, 2m, 3h). A value of zero means don't timeout requests. (default "0") - --server string The address and port of the Kubernetes API server --tls-server-name string If provided, this name will be used to validate server certificate. If this is not provided, hostname used to contact the server is used. --token string Bearer token for authentication to the API server --user string The name of the kubeconfig user to use @@ -32,7 +31,29 @@ argocd-util import SOURCE [flags] --verbose Verbose output (versus only changed output) ``` +### Options inherited from parent commands + +``` + --auth-token string Authentication token + --client-crt string Client certificate file + --client-crt-key string Client certificate key file + --config string Path to Argo CD config (default "/home/user/.argocd/config") + --core If set to true then CLI talks directly to Kubernetes instead of talking to Argo CD API server + --grpc-web Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. + --grpc-web-root-path string Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. Set web root. + -H, --header strings Sets additional header to all requests made by Argo CD CLI. (Can be repeated multiple times to add multiple headers, also supports comma separated headers) + --http-retry-max int Maximum number of retries to establish http connection to Argo CD server + --insecure Skip server certificate and domain verification + --logformat string Set the logging format. One of: text|json (default "text") + --loglevel string Set the logging level. One of: debug|info|warn|error (default "info") + --plaintext Disable TLS + --port-forward Connect to a random argocd-server port using port forwarding + --port-forward-namespace string Namespace name which should be used for port forwarding + --server string Argo CD server address + --server-crt string Server certificate file +``` + ### SEE ALSO -* [argocd-util](argocd-util.md) - argocd-util tools used by Argo CD +* [argocd admin](argocd_admin.md) - Contains a set of commands useful for Argo CD administrators and requires direct Kubernetes access diff --git a/docs/user-guide/commands/argocd_admin_proj.md b/docs/user-guide/commands/argocd_admin_proj.md new file mode 100644 index 0000000000000..1a414fded3d1b --- /dev/null +++ b/docs/user-guide/commands/argocd_admin_proj.md @@ -0,0 +1,43 @@ +## argocd admin proj + +Manage projects configuration + +``` +argocd admin proj [flags] +``` + +### Options + +``` + -h, --help help for proj +``` + +### Options inherited from parent commands + +``` + --auth-token string Authentication token + --client-crt string Client certificate file + --client-crt-key string Client certificate key file + --config string Path to Argo CD config (default "/home/user/.argocd/config") + --core If set to true then CLI talks directly to Kubernetes instead of talking to Argo CD API server + --grpc-web Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. + --grpc-web-root-path string Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. Set web root. + -H, --header strings Sets additional header to all requests made by Argo CD CLI. (Can be repeated multiple times to add multiple headers, also supports comma separated headers) + --http-retry-max int Maximum number of retries to establish http connection to Argo CD server + --insecure Skip server certificate and domain verification + --logformat string Set the logging format. One of: text|json (default "text") + --loglevel string Set the logging level. One of: debug|info|warn|error (default "info") + --plaintext Disable TLS + --port-forward Connect to a random argocd-server port using port forwarding + --port-forward-namespace string Namespace name which should be used for port forwarding + --server string Argo CD server address + --server-crt string Server certificate file +``` + +### SEE ALSO + +* [argocd admin](argocd_admin.md) - Contains a set of commands useful for Argo CD administrators and requires direct Kubernetes access +* [argocd admin proj generate-allow-list](argocd_admin_proj_generate-allow-list.md) - Generates project allow list from the specified clusterRole file +* [argocd admin proj generate-spec](argocd_admin_proj_generate-spec.md) - Generate declarative config for a project +* [argocd admin proj update-role-policy](argocd_admin_proj_update-role-policy.md) - Implement bulk project role update. Useful to back-fill existing project policies or remove obsolete actions. + diff --git a/docs/operator-manual/server-commands/argocd-util_projects_generate-allow-list.md b/docs/user-guide/commands/argocd_admin_proj_generate-allow-list.md similarity index 50% rename from docs/operator-manual/server-commands/argocd-util_projects_generate-allow-list.md rename to docs/user-guide/commands/argocd_admin_proj_generate-allow-list.md index f78512bd7a71f..cefe7787cf135 100644 --- a/docs/operator-manual/server-commands/argocd-util_projects_generate-allow-list.md +++ b/docs/user-guide/commands/argocd_admin_proj_generate-allow-list.md @@ -1,9 +1,9 @@ -## argocd-util projects generate-allow-list +## argocd admin proj generate-allow-list Generates project allow list from the specified clusterRole file ``` -argocd-util projects generate-allow-list CLUSTERROLE_PATH PROJ_NAME [flags] +argocd admin proj generate-allow-list CLUSTERROLE_PATH PROJ_NAME [flags] ``` ### Options @@ -23,14 +23,35 @@ argocd-util projects generate-allow-list CLUSTERROLE_PATH PROJ_NAME [flags] -o, --out string Output to the specified file instead of stdout (default "-") --password string Password for basic authentication to the API server --request-timeout string The length of time to wait before giving up on a single server request. Non-zero values should contain a corresponding time unit (e.g. 1s, 2m, 3h). A value of zero means don't timeout requests. (default "0") - --server string The address and port of the Kubernetes API server --tls-server-name string If provided, this name will be used to validate server certificate. If this is not provided, hostname used to contact the server is used. --token string Bearer token for authentication to the API server --user string The name of the kubeconfig user to use --username string Username for basic authentication to the API server ``` +### Options inherited from parent commands + +``` + --auth-token string Authentication token + --client-crt string Client certificate file + --client-crt-key string Client certificate key file + --config string Path to Argo CD config (default "/home/user/.argocd/config") + --core If set to true then CLI talks directly to Kubernetes instead of talking to Argo CD API server + --grpc-web Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. + --grpc-web-root-path string Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. Set web root. + -H, --header strings Sets additional header to all requests made by Argo CD CLI. (Can be repeated multiple times to add multiple headers, also supports comma separated headers) + --http-retry-max int Maximum number of retries to establish http connection to Argo CD server + --insecure Skip server certificate and domain verification + --logformat string Set the logging format. One of: text|json (default "text") + --loglevel string Set the logging level. One of: debug|info|warn|error (default "info") + --plaintext Disable TLS + --port-forward Connect to a random argocd-server port using port forwarding + --port-forward-namespace string Namespace name which should be used for port forwarding + --server string Argo CD server address + --server-crt string Server certificate file +``` + ### SEE ALSO -* [argocd-util projects](argocd-util_projects.md) - Utility commands operate on ArgoCD Projects +* [argocd admin proj](argocd_admin_proj.md) - Manage projects configuration diff --git a/docs/user-guide/commands/argocd_admin_proj_generate-spec.md b/docs/user-guide/commands/argocd_admin_proj_generate-spec.md new file mode 100644 index 0000000000000..2876a965df162 --- /dev/null +++ b/docs/user-guide/commands/argocd_admin_proj_generate-spec.md @@ -0,0 +1,53 @@ +## argocd admin proj generate-spec + +Generate declarative config for a project + +``` +argocd admin proj generate-spec PROJECT [flags] +``` + +### Options + +``` + --allow-cluster-resource stringArray List of allowed cluster level resources + --allow-namespaced-resource stringArray List of allowed namespaced resources + --deny-cluster-resource stringArray List of denied cluster level resources + --deny-namespaced-resource stringArray List of denied namespaced resources + --description string Project description + -d, --dest stringArray Permitted destination server and namespace (e.g. https://192.168.99.100:8443,default) + -f, --file string Filename or URL to Kubernetes manifests for the project + -h, --help help for generate-spec + -i, --inline If set then generated resource is written back to the file specified in --file flag + --orphaned-resources Enables orphaned resources monitoring + --orphaned-resources-warn Specifies if applications should have a warning condition when orphaned resources detected + -o, --output string Output format. One of: json|yaml (default "yaml") + --signature-keys strings GnuPG public key IDs for commit signature verification + -s, --src stringArray Permitted source repository URL +``` + +### Options inherited from parent commands + +``` + --auth-token string Authentication token + --client-crt string Client certificate file + --client-crt-key string Client certificate key file + --config string Path to Argo CD config (default "/home/user/.argocd/config") + --core If set to true then CLI talks directly to Kubernetes instead of talking to Argo CD API server + --grpc-web Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. + --grpc-web-root-path string Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. Set web root. + -H, --header strings Sets additional header to all requests made by Argo CD CLI. (Can be repeated multiple times to add multiple headers, also supports comma separated headers) + --http-retry-max int Maximum number of retries to establish http connection to Argo CD server + --insecure Skip server certificate and domain verification + --logformat string Set the logging format. One of: text|json (default "text") + --loglevel string Set the logging level. One of: debug|info|warn|error (default "info") + --plaintext Disable TLS + --port-forward Connect to a random argocd-server port using port forwarding + --port-forward-namespace string Namespace name which should be used for port forwarding + --server string Argo CD server address + --server-crt string Server certificate file +``` + +### SEE ALSO + +* [argocd admin proj](argocd_admin_proj.md) - Manage projects configuration + diff --git a/docs/operator-manual/server-commands/argocd-util_proj_update-role-policy.md b/docs/user-guide/commands/argocd_admin_proj_update-role-policy.md similarity index 54% rename from docs/operator-manual/server-commands/argocd-util_proj_update-role-policy.md rename to docs/user-guide/commands/argocd_admin_proj_update-role-policy.md index 56506b7927f3f..9df8693e9ac32 100644 --- a/docs/operator-manual/server-commands/argocd-util_proj_update-role-policy.md +++ b/docs/user-guide/commands/argocd_admin_proj_update-role-policy.md @@ -1,19 +1,19 @@ -## argocd-util proj update-role-policy +## argocd admin proj update-role-policy Implement bulk project role update. Useful to back-fill existing project policies or remove obsolete actions. ``` -argocd-util proj update-role-policy PROJECT_GLOB MODIFICATION ACTION [flags] +argocd admin proj update-role-policy PROJECT_GLOB MODIFICATION ACTION [flags] ``` ### Examples ``` # Add policy that allows executing any action (action/*) to roles which name matches to *deployer* in all projects - argocd-util projects update-role-policy '*' set 'action/*' --role '*deployer*' --resource applications --scope '*' --permission allow + argocd admin projects update-role-policy '*' set 'action/*' --role '*deployer*' --resource applications --scope '*' --permission allow # Remove policy that which manages running (action/*) from all roles which name matches *deployer* in all projects - argocd-util projects update-role-policy '*' remove override --role '*deployer*' + argocd admin projects update-role-policy '*' remove override --role '*deployer*' ``` @@ -38,14 +38,35 @@ argocd-util proj update-role-policy PROJECT_GLOB MODIFICATION ACTION [flags] --resource string Resource e.g. 'applications' --role string Role name pattern e.g. '*deployer*' (default "*") --scope string Resource scope e.g. '*' - --server string The address and port of the Kubernetes API server --tls-server-name string If provided, this name will be used to validate server certificate. If this is not provided, hostname used to contact the server is used. --token string Bearer token for authentication to the API server --user string The name of the kubeconfig user to use --username string Username for basic authentication to the API server ``` +### Options inherited from parent commands + +``` + --auth-token string Authentication token + --client-crt string Client certificate file + --client-crt-key string Client certificate key file + --config string Path to Argo CD config (default "/home/user/.argocd/config") + --core If set to true then CLI talks directly to Kubernetes instead of talking to Argo CD API server + --grpc-web Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. + --grpc-web-root-path string Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. Set web root. + -H, --header strings Sets additional header to all requests made by Argo CD CLI. (Can be repeated multiple times to add multiple headers, also supports comma separated headers) + --http-retry-max int Maximum number of retries to establish http connection to Argo CD server + --insecure Skip server certificate and domain verification + --logformat string Set the logging format. One of: text|json (default "text") + --loglevel string Set the logging level. One of: debug|info|warn|error (default "info") + --plaintext Disable TLS + --port-forward Connect to a random argocd-server port using port forwarding + --port-forward-namespace string Namespace name which should be used for port forwarding + --server string Argo CD server address + --server-crt string Server certificate file +``` + ### SEE ALSO -* [argocd-util proj](argocd-util_proj.md) - Manage projects configuration +* [argocd admin proj](argocd_admin_proj.md) - Manage projects configuration diff --git a/docs/user-guide/commands/argocd_admin_repo.md b/docs/user-guide/commands/argocd_admin_repo.md new file mode 100644 index 0000000000000..75251bb0771de --- /dev/null +++ b/docs/user-guide/commands/argocd_admin_repo.md @@ -0,0 +1,41 @@ +## argocd admin repo + +Manage repositories configuration + +``` +argocd admin repo [flags] +``` + +### Options + +``` + -h, --help help for repo +``` + +### Options inherited from parent commands + +``` + --auth-token string Authentication token + --client-crt string Client certificate file + --client-crt-key string Client certificate key file + --config string Path to Argo CD config (default "/home/user/.argocd/config") + --core If set to true then CLI talks directly to Kubernetes instead of talking to Argo CD API server + --grpc-web Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. + --grpc-web-root-path string Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. Set web root. + -H, --header strings Sets additional header to all requests made by Argo CD CLI. (Can be repeated multiple times to add multiple headers, also supports comma separated headers) + --http-retry-max int Maximum number of retries to establish http connection to Argo CD server + --insecure Skip server certificate and domain verification + --logformat string Set the logging format. One of: text|json (default "text") + --loglevel string Set the logging level. One of: debug|info|warn|error (default "info") + --plaintext Disable TLS + --port-forward Connect to a random argocd-server port using port forwarding + --port-forward-namespace string Namespace name which should be used for port forwarding + --server string Argo CD server address + --server-crt string Server certificate file +``` + +### SEE ALSO + +* [argocd admin](argocd_admin.md) - Contains a set of commands useful for Argo CD administrators and requires direct Kubernetes access +* [argocd admin repo generate-spec](argocd_admin_repo_generate-spec.md) - Generate declarative config for a repo + diff --git a/docs/user-guide/commands/argocd_admin_repo_generate-spec.md b/docs/user-guide/commands/argocd_admin_repo_generate-spec.md new file mode 100644 index 0000000000000..1d1157870288c --- /dev/null +++ b/docs/user-guide/commands/argocd_admin_repo_generate-spec.md @@ -0,0 +1,84 @@ +## argocd admin repo generate-spec + +Generate declarative config for a repo + +``` +argocd admin repo generate-spec REPOURL [flags] +``` + +### Examples + +``` + + # Add a Git repository via SSH using a private key for authentication, ignoring the server's host key: + argocd admin repo generate-spec git@git.example.com:repos/repo --insecure-ignore-host-key --ssh-private-key-path ~/id_rsa + + # Add a Git repository via SSH on a non-default port - need to use ssh:// style URLs here + argocd admin repo generate-spec ssh://git@git.example.com:2222/repos/repo --ssh-private-key-path ~/id_rsa + + # Add a private Git repository via HTTPS using username/password and TLS client certificates: + argocd admin repo generate-spec https://git.example.com/repos/repo --username git --password secret --tls-client-cert-path ~/mycert.crt --tls-client-cert-key-path ~/mycert.key + + # Add a private Git repository via HTTPS using username/password without verifying the server's TLS certificate + argocd admin repo generate-spec https://git.example.com/repos/repo --username git --password secret --insecure-skip-server-verification + + # Add a public Helm repository named 'stable' via HTTPS + argocd admin repo generate-spec https://charts.helm.sh/stable --type helm --name stable + + # Add a private Helm repository named 'stable' via HTTPS + argocd admin repo generate-spec https://charts.helm.sh/stable --type helm --name stable --username test --password test + + # Add a private Helm OCI-based repository named 'stable' via HTTPS + argocd admin repo generate-spec helm-oci-registry.cn-zhangjiakou.cr.aliyuncs.com --type helm --name stable --enable-oci --username test --password test + +``` + +### Options + +``` + --enable-lfs enable git-lfs (Large File Support) on this repository + --enable-oci enable helm-oci (Helm OCI-Based Repository) + --github-app-enterprise-base-url string base url to use when using GitHub Enterprise (e.g. https://ghe.example.com/api/v3 + --github-app-id int id of the GitHub Application + --github-app-installation-id int installation id of the GitHub Application + --github-app-private-key-path string private key of the GitHub Application + -h, --help help for generate-spec + --insecure-ignore-host-key disables SSH strict host key checking (deprecated, use --insecure-skip-server-verification instead) + --insecure-skip-server-verification disables server certificate and host key checks + --name string name of the repository, mandatory for repositories of type helm + -o, --output string Output format. One of: json|yaml (default "yaml") + --password string password to the repository + --proxy string use proxy to access repository + --ssh-private-key-path string path to the private ssh key (e.g. ~/.ssh/id_rsa) + --tls-client-cert-key-path string path to the TLS client cert's key path (must be PEM format) + --tls-client-cert-path string path to the TLS client cert (must be PEM format) + --type string type of the repository, "git" or "helm" (default "git") + --username string username to the repository +``` + +### Options inherited from parent commands + +``` + --auth-token string Authentication token + --client-crt string Client certificate file + --client-crt-key string Client certificate key file + --config string Path to Argo CD config (default "/home/user/.argocd/config") + --core If set to true then CLI talks directly to Kubernetes instead of talking to Argo CD API server + --grpc-web Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. + --grpc-web-root-path string Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. Set web root. + -H, --header strings Sets additional header to all requests made by Argo CD CLI. (Can be repeated multiple times to add multiple headers, also supports comma separated headers) + --http-retry-max int Maximum number of retries to establish http connection to Argo CD server + --insecure Skip server certificate and domain verification + --logformat string Set the logging format. One of: text|json (default "text") + --loglevel string Set the logging level. One of: debug|info|warn|error (default "info") + --plaintext Disable TLS + --port-forward Connect to a random argocd-server port using port forwarding + --port-forward-namespace string Namespace name which should be used for port forwarding + --server string Argo CD server address + --server-crt string Server certificate file +``` + +### SEE ALSO + +* [argocd admin repo](argocd_admin_repo.md) - Manage repositories configuration + diff --git a/docs/user-guide/commands/argocd_admin_settings.md b/docs/user-guide/commands/argocd_admin_settings.md new file mode 100644 index 0000000000000..b4bebd240957a --- /dev/null +++ b/docs/user-guide/commands/argocd_admin_settings.md @@ -0,0 +1,62 @@ +## argocd admin settings + +Provides set of commands for settings validation and troubleshooting + +``` +argocd admin settings [flags] +``` + +### Options + +``` + --argocd-cm-path string Path to local argocd-cm.yaml file + --argocd-secret-path string Path to local argocd-secret.yaml file + --as string Username to impersonate for the operation + --as-group stringArray Group to impersonate for the operation, this flag can be repeated to specify multiple groups. + --certificate-authority string Path to a cert file for the certificate authority + --client-certificate string Path to a client certificate file for TLS + --client-key string Path to a client key file for TLS + --cluster string The name of the kubeconfig cluster to use + --context string The name of the kubeconfig context to use + -h, --help help for settings + --insecure-skip-tls-verify If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure + --kubeconfig string Path to a kube config. Only required if out-of-cluster + --load-cluster-settings Indicates that config map and secret should be loaded from cluster unless local file path is provided + -n, --namespace string If present, the namespace scope for this CLI request + --password string Password for basic authentication to the API server + --request-timeout string The length of time to wait before giving up on a single server request. Non-zero values should contain a corresponding time unit (e.g. 1s, 2m, 3h). A value of zero means don't timeout requests. (default "0") + --tls-server-name string If provided, this name will be used to validate server certificate. If this is not provided, hostname used to contact the server is used. + --token string Bearer token for authentication to the API server + --user string The name of the kubeconfig user to use + --username string Username for basic authentication to the API server +``` + +### Options inherited from parent commands + +``` + --auth-token string Authentication token + --client-crt string Client certificate file + --client-crt-key string Client certificate key file + --config string Path to Argo CD config (default "/home/user/.argocd/config") + --core If set to true then CLI talks directly to Kubernetes instead of talking to Argo CD API server + --grpc-web Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. + --grpc-web-root-path string Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. Set web root. + -H, --header strings Sets additional header to all requests made by Argo CD CLI. (Can be repeated multiple times to add multiple headers, also supports comma separated headers) + --http-retry-max int Maximum number of retries to establish http connection to Argo CD server + --insecure Skip server certificate and domain verification + --logformat string Set the logging format. One of: text|json (default "text") + --loglevel string Set the logging level. One of: debug|info|warn|error (default "info") + --plaintext Disable TLS + --port-forward Connect to a random argocd-server port using port forwarding + --port-forward-namespace string Namespace name which should be used for port forwarding + --server string Argo CD server address + --server-crt string Server certificate file +``` + +### SEE ALSO + +* [argocd admin](argocd_admin.md) - Contains a set of commands useful for Argo CD administrators and requires direct Kubernetes access +* [argocd admin settings rbac](argocd_admin_settings_rbac.md) - Validate and test RBAC configuration +* [argocd admin settings resource-overrides](argocd_admin_settings_resource-overrides.md) - Troubleshoot resource overrides +* [argocd admin settings validate](argocd_admin_settings_validate.md) - Validate settings + diff --git a/docs/user-guide/commands/argocd_admin_settings_rbac.md b/docs/user-guide/commands/argocd_admin_settings_rbac.md new file mode 100644 index 0000000000000..353637e187641 --- /dev/null +++ b/docs/user-guide/commands/argocd_admin_settings_rbac.md @@ -0,0 +1,61 @@ +## argocd admin settings rbac + +Validate and test RBAC configuration + +``` +argocd admin settings rbac [flags] +``` + +### Options + +``` + -h, --help help for rbac +``` + +### Options inherited from parent commands + +``` + --argocd-cm-path string Path to local argocd-cm.yaml file + --argocd-secret-path string Path to local argocd-secret.yaml file + --as string Username to impersonate for the operation + --as-group stringArray Group to impersonate for the operation, this flag can be repeated to specify multiple groups. + --auth-token string Authentication token + --certificate-authority string Path to a cert file for the certificate authority + --client-certificate string Path to a client certificate file for TLS + --client-crt string Client certificate file + --client-crt-key string Client certificate key file + --client-key string Path to a client key file for TLS + --cluster string The name of the kubeconfig cluster to use + --config string Path to Argo CD config (default "/home/user/.argocd/config") + --context string The name of the kubeconfig context to use + --core If set to true then CLI talks directly to Kubernetes instead of talking to Argo CD API server + --grpc-web Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. + --grpc-web-root-path string Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. Set web root. + -H, --header strings Sets additional header to all requests made by Argo CD CLI. (Can be repeated multiple times to add multiple headers, also supports comma separated headers) + --http-retry-max int Maximum number of retries to establish http connection to Argo CD server + --insecure Skip server certificate and domain verification + --insecure-skip-tls-verify If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure + --kubeconfig string Path to a kube config. Only required if out-of-cluster + --load-cluster-settings Indicates that config map and secret should be loaded from cluster unless local file path is provided + --logformat string Set the logging format. One of: text|json (default "text") + --loglevel string Set the logging level. One of: debug|info|warn|error (default "info") + -n, --namespace string If present, the namespace scope for this CLI request + --password string Password for basic authentication to the API server + --plaintext Disable TLS + --port-forward Connect to a random argocd-server port using port forwarding + --port-forward-namespace string Namespace name which should be used for port forwarding + --request-timeout string The length of time to wait before giving up on a single server request. Non-zero values should contain a corresponding time unit (e.g. 1s, 2m, 3h). A value of zero means don't timeout requests. (default "0") + --server string The address and port of the Kubernetes API server + --server-crt string Server certificate file + --tls-server-name string If provided, this name will be used to validate server certificate. If this is not provided, hostname used to contact the server is used. + --token string Bearer token for authentication to the API server + --user string The name of the kubeconfig user to use + --username string Username for basic authentication to the API server +``` + +### SEE ALSO + +* [argocd admin settings](argocd_admin_settings.md) - Provides set of commands for settings validation and troubleshooting +* [argocd admin settings rbac can](argocd_admin_settings_rbac_can.md) - Check RBAC permissions for a role or subject +* [argocd admin settings rbac validate](argocd_admin_settings_rbac_validate.md) - Validate RBAC policy + diff --git a/docs/user-guide/commands/argocd_admin_settings_rbac_can.md b/docs/user-guide/commands/argocd_admin_settings_rbac_can.md new file mode 100644 index 0000000000000..b9dd22dc94dad --- /dev/null +++ b/docs/user-guide/commands/argocd_admin_settings_rbac_can.md @@ -0,0 +1,94 @@ +## argocd admin settings rbac can + +Check RBAC permissions for a role or subject + +### Synopsis + + +Check whether a given role or subject has appropriate RBAC permissions to do +something. + + +``` +argocd admin settings rbac can ROLE/SUBJECT ACTION RESOURCE [SUB-RESOURCE] [flags] +``` + +### Examples + +``` + +# Check whether role some:role has permissions to create an application in the +# 'default' project, using a local policy.csv file +argocd admin settings rbac can some:role create application 'default/app' --policy-file policy.csv + +# Policy file can also be K8s config map with data keys like argocd-rbac-cm, +# i.e. 'policy.csv' and (optionally) 'policy.default' +argocd admin settings rbac can some:role create application 'default/app' --policy-file argocd-rbac-cm.yaml + +# If --policy-file is not given, the ConfigMap 'argocd-rbac-cm' from K8s is +# used. You need to specify the argocd namespace, and make sure that your +# current Kubernetes context is pointing to the cluster Argo CD is running in +argocd admin settings rbac can some:role create application 'default/app' --namespace argocd + +# You can override a possibly configured default role +argocd admin settings rbac can someuser create application 'default/app' --default-role role:readonly + + +``` + +### Options + +``` + --default-role string name of the default role to use + -h, --help help for can + --policy-file string path to the policy file to use + -q, --quiet quiet mode - do not print results to stdout + --strict whether to perform strict check on action and resource names (default true) + --use-builtin-policy whether to also use builtin-policy (default true) +``` + +### Options inherited from parent commands + +``` + --argocd-cm-path string Path to local argocd-cm.yaml file + --argocd-secret-path string Path to local argocd-secret.yaml file + --as string Username to impersonate for the operation + --as-group stringArray Group to impersonate for the operation, this flag can be repeated to specify multiple groups. + --auth-token string Authentication token + --certificate-authority string Path to a cert file for the certificate authority + --client-certificate string Path to a client certificate file for TLS + --client-crt string Client certificate file + --client-crt-key string Client certificate key file + --client-key string Path to a client key file for TLS + --cluster string The name of the kubeconfig cluster to use + --config string Path to Argo CD config (default "/home/user/.argocd/config") + --context string The name of the kubeconfig context to use + --core If set to true then CLI talks directly to Kubernetes instead of talking to Argo CD API server + --grpc-web Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. + --grpc-web-root-path string Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. Set web root. + -H, --header strings Sets additional header to all requests made by Argo CD CLI. (Can be repeated multiple times to add multiple headers, also supports comma separated headers) + --http-retry-max int Maximum number of retries to establish http connection to Argo CD server + --insecure Skip server certificate and domain verification + --insecure-skip-tls-verify If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure + --kubeconfig string Path to a kube config. Only required if out-of-cluster + --load-cluster-settings Indicates that config map and secret should be loaded from cluster unless local file path is provided + --logformat string Set the logging format. One of: text|json (default "text") + --loglevel string Set the logging level. One of: debug|info|warn|error (default "info") + -n, --namespace string If present, the namespace scope for this CLI request + --password string Password for basic authentication to the API server + --plaintext Disable TLS + --port-forward Connect to a random argocd-server port using port forwarding + --port-forward-namespace string Namespace name which should be used for port forwarding + --request-timeout string The length of time to wait before giving up on a single server request. Non-zero values should contain a corresponding time unit (e.g. 1s, 2m, 3h). A value of zero means don't timeout requests. (default "0") + --server string The address and port of the Kubernetes API server + --server-crt string Server certificate file + --tls-server-name string If provided, this name will be used to validate server certificate. If this is not provided, hostname used to contact the server is used. + --token string Bearer token for authentication to the API server + --user string The name of the kubeconfig user to use + --username string Username for basic authentication to the API server +``` + +### SEE ALSO + +* [argocd admin settings rbac](argocd_admin_settings_rbac.md) - Validate and test RBAC configuration + diff --git a/docs/user-guide/commands/argocd_admin_settings_rbac_validate.md b/docs/user-guide/commands/argocd_admin_settings_rbac_validate.md new file mode 100644 index 0000000000000..f15a1bbc94657 --- /dev/null +++ b/docs/user-guide/commands/argocd_admin_settings_rbac_validate.md @@ -0,0 +1,67 @@ +## argocd admin settings rbac validate + +Validate RBAC policy + +### Synopsis + + +Validates an RBAC policy for being syntactically correct. The policy must be +a local file, and in either CSV or K8s ConfigMap format. + + +``` +argocd admin settings rbac validate --policy-file=POLICYFILE [flags] +``` + +### Options + +``` + -h, --help help for validate + --policy-file string path to the policy file to use +``` + +### Options inherited from parent commands + +``` + --argocd-cm-path string Path to local argocd-cm.yaml file + --argocd-secret-path string Path to local argocd-secret.yaml file + --as string Username to impersonate for the operation + --as-group stringArray Group to impersonate for the operation, this flag can be repeated to specify multiple groups. + --auth-token string Authentication token + --certificate-authority string Path to a cert file for the certificate authority + --client-certificate string Path to a client certificate file for TLS + --client-crt string Client certificate file + --client-crt-key string Client certificate key file + --client-key string Path to a client key file for TLS + --cluster string The name of the kubeconfig cluster to use + --config string Path to Argo CD config (default "/home/user/.argocd/config") + --context string The name of the kubeconfig context to use + --core If set to true then CLI talks directly to Kubernetes instead of talking to Argo CD API server + --grpc-web Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. + --grpc-web-root-path string Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. Set web root. + -H, --header strings Sets additional header to all requests made by Argo CD CLI. (Can be repeated multiple times to add multiple headers, also supports comma separated headers) + --http-retry-max int Maximum number of retries to establish http connection to Argo CD server + --insecure Skip server certificate and domain verification + --insecure-skip-tls-verify If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure + --kubeconfig string Path to a kube config. Only required if out-of-cluster + --load-cluster-settings Indicates that config map and secret should be loaded from cluster unless local file path is provided + --logformat string Set the logging format. One of: text|json (default "text") + --loglevel string Set the logging level. One of: debug|info|warn|error (default "info") + -n, --namespace string If present, the namespace scope for this CLI request + --password string Password for basic authentication to the API server + --plaintext Disable TLS + --port-forward Connect to a random argocd-server port using port forwarding + --port-forward-namespace string Namespace name which should be used for port forwarding + --request-timeout string The length of time to wait before giving up on a single server request. Non-zero values should contain a corresponding time unit (e.g. 1s, 2m, 3h). A value of zero means don't timeout requests. (default "0") + --server string The address and port of the Kubernetes API server + --server-crt string Server certificate file + --tls-server-name string If provided, this name will be used to validate server certificate. If this is not provided, hostname used to contact the server is used. + --token string Bearer token for authentication to the API server + --user string The name of the kubeconfig user to use + --username string Username for basic authentication to the API server +``` + +### SEE ALSO + +* [argocd admin settings rbac](argocd_admin_settings_rbac.md) - Validate and test RBAC configuration + diff --git a/docs/user-guide/commands/argocd_admin_settings_resource-overrides.md b/docs/user-guide/commands/argocd_admin_settings_resource-overrides.md new file mode 100644 index 0000000000000..4ab2b14407d09 --- /dev/null +++ b/docs/user-guide/commands/argocd_admin_settings_resource-overrides.md @@ -0,0 +1,63 @@ +## argocd admin settings resource-overrides + +Troubleshoot resource overrides + +``` +argocd admin settings resource-overrides [flags] +``` + +### Options + +``` + -h, --help help for resource-overrides +``` + +### Options inherited from parent commands + +``` + --argocd-cm-path string Path to local argocd-cm.yaml file + --argocd-secret-path string Path to local argocd-secret.yaml file + --as string Username to impersonate for the operation + --as-group stringArray Group to impersonate for the operation, this flag can be repeated to specify multiple groups. + --auth-token string Authentication token + --certificate-authority string Path to a cert file for the certificate authority + --client-certificate string Path to a client certificate file for TLS + --client-crt string Client certificate file + --client-crt-key string Client certificate key file + --client-key string Path to a client key file for TLS + --cluster string The name of the kubeconfig cluster to use + --config string Path to Argo CD config (default "/home/user/.argocd/config") + --context string The name of the kubeconfig context to use + --core If set to true then CLI talks directly to Kubernetes instead of talking to Argo CD API server + --grpc-web Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. + --grpc-web-root-path string Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. Set web root. + -H, --header strings Sets additional header to all requests made by Argo CD CLI. (Can be repeated multiple times to add multiple headers, also supports comma separated headers) + --http-retry-max int Maximum number of retries to establish http connection to Argo CD server + --insecure Skip server certificate and domain verification + --insecure-skip-tls-verify If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure + --kubeconfig string Path to a kube config. Only required if out-of-cluster + --load-cluster-settings Indicates that config map and secret should be loaded from cluster unless local file path is provided + --logformat string Set the logging format. One of: text|json (default "text") + --loglevel string Set the logging level. One of: debug|info|warn|error (default "info") + -n, --namespace string If present, the namespace scope for this CLI request + --password string Password for basic authentication to the API server + --plaintext Disable TLS + --port-forward Connect to a random argocd-server port using port forwarding + --port-forward-namespace string Namespace name which should be used for port forwarding + --request-timeout string The length of time to wait before giving up on a single server request. Non-zero values should contain a corresponding time unit (e.g. 1s, 2m, 3h). A value of zero means don't timeout requests. (default "0") + --server string The address and port of the Kubernetes API server + --server-crt string Server certificate file + --tls-server-name string If provided, this name will be used to validate server certificate. If this is not provided, hostname used to contact the server is used. + --token string Bearer token for authentication to the API server + --user string The name of the kubeconfig user to use + --username string Username for basic authentication to the API server +``` + +### SEE ALSO + +* [argocd admin settings](argocd_admin_settings.md) - Provides set of commands for settings validation and troubleshooting +* [argocd admin settings resource-overrides health](argocd_admin_settings_resource-overrides_health.md) - Assess resource health +* [argocd admin settings resource-overrides ignore-differences](argocd_admin_settings_resource-overrides_ignore-differences.md) - Renders fields excluded from diffing +* [argocd admin settings resource-overrides list-actions](argocd_admin_settings_resource-overrides_list-actions.md) - List available resource actions +* [argocd admin settings resource-overrides run-action](argocd_admin_settings_resource-overrides_run-action.md) - Executes resource action + diff --git a/docs/user-guide/commands/argocd_admin_settings_resource-overrides_health.md b/docs/user-guide/commands/argocd_admin_settings_resource-overrides_health.md new file mode 100644 index 0000000000000..6f33c8f7ae5cc --- /dev/null +++ b/docs/user-guide/commands/argocd_admin_settings_resource-overrides_health.md @@ -0,0 +1,70 @@ +## argocd admin settings resource-overrides health + +Assess resource health + +### Synopsis + +Assess resource health using the lua script configured in the 'resource.customizations' field of 'argocd-cm' ConfigMap + +``` +argocd admin settings resource-overrides health RESOURCE_YAML_PATH [flags] +``` + +### Examples + +``` + +argocd admin settings resource-overrides health ./deploy.yaml --argocd-cm-path ./argocd-cm.yaml +``` + +### Options + +``` + -h, --help help for health +``` + +### Options inherited from parent commands + +``` + --argocd-cm-path string Path to local argocd-cm.yaml file + --argocd-secret-path string Path to local argocd-secret.yaml file + --as string Username to impersonate for the operation + --as-group stringArray Group to impersonate for the operation, this flag can be repeated to specify multiple groups. + --auth-token string Authentication token + --certificate-authority string Path to a cert file for the certificate authority + --client-certificate string Path to a client certificate file for TLS + --client-crt string Client certificate file + --client-crt-key string Client certificate key file + --client-key string Path to a client key file for TLS + --cluster string The name of the kubeconfig cluster to use + --config string Path to Argo CD config (default "/home/user/.argocd/config") + --context string The name of the kubeconfig context to use + --core If set to true then CLI talks directly to Kubernetes instead of talking to Argo CD API server + --grpc-web Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. + --grpc-web-root-path string Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. Set web root. + -H, --header strings Sets additional header to all requests made by Argo CD CLI. (Can be repeated multiple times to add multiple headers, also supports comma separated headers) + --http-retry-max int Maximum number of retries to establish http connection to Argo CD server + --insecure Skip server certificate and domain verification + --insecure-skip-tls-verify If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure + --kubeconfig string Path to a kube config. Only required if out-of-cluster + --load-cluster-settings Indicates that config map and secret should be loaded from cluster unless local file path is provided + --logformat string Set the logging format. One of: text|json (default "text") + --loglevel string Set the logging level. One of: debug|info|warn|error (default "info") + -n, --namespace string If present, the namespace scope for this CLI request + --password string Password for basic authentication to the API server + --plaintext Disable TLS + --port-forward Connect to a random argocd-server port using port forwarding + --port-forward-namespace string Namespace name which should be used for port forwarding + --request-timeout string The length of time to wait before giving up on a single server request. Non-zero values should contain a corresponding time unit (e.g. 1s, 2m, 3h). A value of zero means don't timeout requests. (default "0") + --server string The address and port of the Kubernetes API server + --server-crt string Server certificate file + --tls-server-name string If provided, this name will be used to validate server certificate. If this is not provided, hostname used to contact the server is used. + --token string Bearer token for authentication to the API server + --user string The name of the kubeconfig user to use + --username string Username for basic authentication to the API server +``` + +### SEE ALSO + +* [argocd admin settings resource-overrides](argocd_admin_settings_resource-overrides.md) - Troubleshoot resource overrides + diff --git a/docs/user-guide/commands/argocd_admin_settings_resource-overrides_ignore-differences.md b/docs/user-guide/commands/argocd_admin_settings_resource-overrides_ignore-differences.md new file mode 100644 index 0000000000000..694e81ff9198d --- /dev/null +++ b/docs/user-guide/commands/argocd_admin_settings_resource-overrides_ignore-differences.md @@ -0,0 +1,70 @@ +## argocd admin settings resource-overrides ignore-differences + +Renders fields excluded from diffing + +### Synopsis + +Renders ignored fields using the 'ignoreDifferences' setting specified in the 'resource.customizations' field of 'argocd-cm' ConfigMap + +``` +argocd admin settings resource-overrides ignore-differences RESOURCE_YAML_PATH [flags] +``` + +### Examples + +``` + +argocd admin settings resource-overrides ignore-differences ./deploy.yaml --argocd-cm-path ./argocd-cm.yaml +``` + +### Options + +``` + -h, --help help for ignore-differences +``` + +### Options inherited from parent commands + +``` + --argocd-cm-path string Path to local argocd-cm.yaml file + --argocd-secret-path string Path to local argocd-secret.yaml file + --as string Username to impersonate for the operation + --as-group stringArray Group to impersonate for the operation, this flag can be repeated to specify multiple groups. + --auth-token string Authentication token + --certificate-authority string Path to a cert file for the certificate authority + --client-certificate string Path to a client certificate file for TLS + --client-crt string Client certificate file + --client-crt-key string Client certificate key file + --client-key string Path to a client key file for TLS + --cluster string The name of the kubeconfig cluster to use + --config string Path to Argo CD config (default "/home/user/.argocd/config") + --context string The name of the kubeconfig context to use + --core If set to true then CLI talks directly to Kubernetes instead of talking to Argo CD API server + --grpc-web Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. + --grpc-web-root-path string Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. Set web root. + -H, --header strings Sets additional header to all requests made by Argo CD CLI. (Can be repeated multiple times to add multiple headers, also supports comma separated headers) + --http-retry-max int Maximum number of retries to establish http connection to Argo CD server + --insecure Skip server certificate and domain verification + --insecure-skip-tls-verify If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure + --kubeconfig string Path to a kube config. Only required if out-of-cluster + --load-cluster-settings Indicates that config map and secret should be loaded from cluster unless local file path is provided + --logformat string Set the logging format. One of: text|json (default "text") + --loglevel string Set the logging level. One of: debug|info|warn|error (default "info") + -n, --namespace string If present, the namespace scope for this CLI request + --password string Password for basic authentication to the API server + --plaintext Disable TLS + --port-forward Connect to a random argocd-server port using port forwarding + --port-forward-namespace string Namespace name which should be used for port forwarding + --request-timeout string The length of time to wait before giving up on a single server request. Non-zero values should contain a corresponding time unit (e.g. 1s, 2m, 3h). A value of zero means don't timeout requests. (default "0") + --server string The address and port of the Kubernetes API server + --server-crt string Server certificate file + --tls-server-name string If provided, this name will be used to validate server certificate. If this is not provided, hostname used to contact the server is used. + --token string Bearer token for authentication to the API server + --user string The name of the kubeconfig user to use + --username string Username for basic authentication to the API server +``` + +### SEE ALSO + +* [argocd admin settings resource-overrides](argocd_admin_settings_resource-overrides.md) - Troubleshoot resource overrides + diff --git a/docs/user-guide/commands/argocd_admin_settings_resource-overrides_list-actions.md b/docs/user-guide/commands/argocd_admin_settings_resource-overrides_list-actions.md new file mode 100644 index 0000000000000..2556eae3e4d7c --- /dev/null +++ b/docs/user-guide/commands/argocd_admin_settings_resource-overrides_list-actions.md @@ -0,0 +1,70 @@ +## argocd admin settings resource-overrides list-actions + +List available resource actions + +### Synopsis + +List actions available for given resource action using the lua scripts configured in the 'resource.customizations' field of 'argocd-cm' ConfigMap and outputs updated fields + +``` +argocd admin settings resource-overrides list-actions RESOURCE_YAML_PATH [flags] +``` + +### Examples + +``` + +argocd admin settings resource-overrides action list /tmp/deploy.yaml --argocd-cm-path ./argocd-cm.yaml +``` + +### Options + +``` + -h, --help help for list-actions +``` + +### Options inherited from parent commands + +``` + --argocd-cm-path string Path to local argocd-cm.yaml file + --argocd-secret-path string Path to local argocd-secret.yaml file + --as string Username to impersonate for the operation + --as-group stringArray Group to impersonate for the operation, this flag can be repeated to specify multiple groups. + --auth-token string Authentication token + --certificate-authority string Path to a cert file for the certificate authority + --client-certificate string Path to a client certificate file for TLS + --client-crt string Client certificate file + --client-crt-key string Client certificate key file + --client-key string Path to a client key file for TLS + --cluster string The name of the kubeconfig cluster to use + --config string Path to Argo CD config (default "/home/user/.argocd/config") + --context string The name of the kubeconfig context to use + --core If set to true then CLI talks directly to Kubernetes instead of talking to Argo CD API server + --grpc-web Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. + --grpc-web-root-path string Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. Set web root. + -H, --header strings Sets additional header to all requests made by Argo CD CLI. (Can be repeated multiple times to add multiple headers, also supports comma separated headers) + --http-retry-max int Maximum number of retries to establish http connection to Argo CD server + --insecure Skip server certificate and domain verification + --insecure-skip-tls-verify If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure + --kubeconfig string Path to a kube config. Only required if out-of-cluster + --load-cluster-settings Indicates that config map and secret should be loaded from cluster unless local file path is provided + --logformat string Set the logging format. One of: text|json (default "text") + --loglevel string Set the logging level. One of: debug|info|warn|error (default "info") + -n, --namespace string If present, the namespace scope for this CLI request + --password string Password for basic authentication to the API server + --plaintext Disable TLS + --port-forward Connect to a random argocd-server port using port forwarding + --port-forward-namespace string Namespace name which should be used for port forwarding + --request-timeout string The length of time to wait before giving up on a single server request. Non-zero values should contain a corresponding time unit (e.g. 1s, 2m, 3h). A value of zero means don't timeout requests. (default "0") + --server string The address and port of the Kubernetes API server + --server-crt string Server certificate file + --tls-server-name string If provided, this name will be used to validate server certificate. If this is not provided, hostname used to contact the server is used. + --token string Bearer token for authentication to the API server + --user string The name of the kubeconfig user to use + --username string Username for basic authentication to the API server +``` + +### SEE ALSO + +* [argocd admin settings resource-overrides](argocd_admin_settings_resource-overrides.md) - Troubleshoot resource overrides + diff --git a/docs/user-guide/commands/argocd_admin_settings_resource-overrides_run-action.md b/docs/user-guide/commands/argocd_admin_settings_resource-overrides_run-action.md new file mode 100644 index 0000000000000..7563ddf8fbc35 --- /dev/null +++ b/docs/user-guide/commands/argocd_admin_settings_resource-overrides_run-action.md @@ -0,0 +1,70 @@ +## argocd admin settings resource-overrides run-action + +Executes resource action + +### Synopsis + +Executes resource action using the lua script configured in the 'resource.customizations' field of 'argocd-cm' ConfigMap and outputs updated fields + +``` +argocd admin settings resource-overrides run-action RESOURCE_YAML_PATH ACTION [flags] +``` + +### Examples + +``` + +argocd admin settings resource-overrides action run /tmp/deploy.yaml restart --argocd-cm-path ./argocd-cm.yaml +``` + +### Options + +``` + -h, --help help for run-action +``` + +### Options inherited from parent commands + +``` + --argocd-cm-path string Path to local argocd-cm.yaml file + --argocd-secret-path string Path to local argocd-secret.yaml file + --as string Username to impersonate for the operation + --as-group stringArray Group to impersonate for the operation, this flag can be repeated to specify multiple groups. + --auth-token string Authentication token + --certificate-authority string Path to a cert file for the certificate authority + --client-certificate string Path to a client certificate file for TLS + --client-crt string Client certificate file + --client-crt-key string Client certificate key file + --client-key string Path to a client key file for TLS + --cluster string The name of the kubeconfig cluster to use + --config string Path to Argo CD config (default "/home/user/.argocd/config") + --context string The name of the kubeconfig context to use + --core If set to true then CLI talks directly to Kubernetes instead of talking to Argo CD API server + --grpc-web Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. + --grpc-web-root-path string Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. Set web root. + -H, --header strings Sets additional header to all requests made by Argo CD CLI. (Can be repeated multiple times to add multiple headers, also supports comma separated headers) + --http-retry-max int Maximum number of retries to establish http connection to Argo CD server + --insecure Skip server certificate and domain verification + --insecure-skip-tls-verify If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure + --kubeconfig string Path to a kube config. Only required if out-of-cluster + --load-cluster-settings Indicates that config map and secret should be loaded from cluster unless local file path is provided + --logformat string Set the logging format. One of: text|json (default "text") + --loglevel string Set the logging level. One of: debug|info|warn|error (default "info") + -n, --namespace string If present, the namespace scope for this CLI request + --password string Password for basic authentication to the API server + --plaintext Disable TLS + --port-forward Connect to a random argocd-server port using port forwarding + --port-forward-namespace string Namespace name which should be used for port forwarding + --request-timeout string The length of time to wait before giving up on a single server request. Non-zero values should contain a corresponding time unit (e.g. 1s, 2m, 3h). A value of zero means don't timeout requests. (default "0") + --server string The address and port of the Kubernetes API server + --server-crt string Server certificate file + --tls-server-name string If provided, this name will be used to validate server certificate. If this is not provided, hostname used to contact the server is used. + --token string Bearer token for authentication to the API server + --user string The name of the kubeconfig user to use + --username string Username for basic authentication to the API server +``` + +### SEE ALSO + +* [argocd admin settings resource-overrides](argocd_admin_settings_resource-overrides.md) - Troubleshoot resource overrides + diff --git a/docs/user-guide/commands/argocd_admin_settings_validate.md b/docs/user-guide/commands/argocd_admin_settings_validate.md new file mode 100644 index 0000000000000..61db807478717 --- /dev/null +++ b/docs/user-guide/commands/argocd_admin_settings_validate.md @@ -0,0 +1,75 @@ +## argocd admin settings validate + +Validate settings + +### Synopsis + +Validates settings specified in 'argocd-cm' ConfigMap and 'argocd-secret' Secret + +``` +argocd admin settings validate [flags] +``` + +### Examples + +``` + +#Validates all settings in the specified YAML file +argocd admin settings validate --argocd-cm-path ./argocd-cm.yaml + +#Validates accounts and plugins settings in Kubernetes cluster of current kubeconfig context +argocd admin settings validate --group accounts --group plugins --load-cluster-settings +``` + +### Options + +``` + --group stringArray Optional list of setting groups that have to be validated ( one of: accounts, general, kustomize, plugins, repositories, resource-overrides) + -h, --help help for validate +``` + +### Options inherited from parent commands + +``` + --argocd-cm-path string Path to local argocd-cm.yaml file + --argocd-secret-path string Path to local argocd-secret.yaml file + --as string Username to impersonate for the operation + --as-group stringArray Group to impersonate for the operation, this flag can be repeated to specify multiple groups. + --auth-token string Authentication token + --certificate-authority string Path to a cert file for the certificate authority + --client-certificate string Path to a client certificate file for TLS + --client-crt string Client certificate file + --client-crt-key string Client certificate key file + --client-key string Path to a client key file for TLS + --cluster string The name of the kubeconfig cluster to use + --config string Path to Argo CD config (default "/home/user/.argocd/config") + --context string The name of the kubeconfig context to use + --core If set to true then CLI talks directly to Kubernetes instead of talking to Argo CD API server + --grpc-web Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. + --grpc-web-root-path string Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. Set web root. + -H, --header strings Sets additional header to all requests made by Argo CD CLI. (Can be repeated multiple times to add multiple headers, also supports comma separated headers) + --http-retry-max int Maximum number of retries to establish http connection to Argo CD server + --insecure Skip server certificate and domain verification + --insecure-skip-tls-verify If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure + --kubeconfig string Path to a kube config. Only required if out-of-cluster + --load-cluster-settings Indicates that config map and secret should be loaded from cluster unless local file path is provided + --logformat string Set the logging format. One of: text|json (default "text") + --loglevel string Set the logging level. One of: debug|info|warn|error (default "info") + -n, --namespace string If present, the namespace scope for this CLI request + --password string Password for basic authentication to the API server + --plaintext Disable TLS + --port-forward Connect to a random argocd-server port using port forwarding + --port-forward-namespace string Namespace name which should be used for port forwarding + --request-timeout string The length of time to wait before giving up on a single server request. Non-zero values should contain a corresponding time unit (e.g. 1s, 2m, 3h). A value of zero means don't timeout requests. (default "0") + --server string The address and port of the Kubernetes API server + --server-crt string Server certificate file + --tls-server-name string If provided, this name will be used to validate server certificate. If this is not provided, hostname used to contact the server is used. + --token string Bearer token for authentication to the API server + --user string The name of the kubeconfig user to use + --username string Username for basic authentication to the API server +``` + +### SEE ALSO + +* [argocd admin settings](argocd_admin_settings.md) - Provides set of commands for settings validation and troubleshooting + diff --git a/docs/user-guide/commands/argocd_app.md b/docs/user-guide/commands/argocd_app.md index 99b534a73339f..1eaca8b71c6d8 100644 --- a/docs/user-guide/commands/argocd_app.md +++ b/docs/user-guide/commands/argocd_app.md @@ -22,7 +22,23 @@ argocd app [flags] ### Options ``` - -h, --help help for app + --as string Username to impersonate for the operation + --as-group stringArray Group to impersonate for the operation, this flag can be repeated to specify multiple groups. + --certificate-authority string Path to a cert file for the certificate authority + --client-certificate string Path to a client certificate file for TLS + --client-key string Path to a client key file for TLS + --cluster string The name of the kubeconfig cluster to use + --context string The name of the kubeconfig context to use + -h, --help help for app + --insecure-skip-tls-verify If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure + --kubeconfig string Path to a kube config. Only required if out-of-cluster + -n, --namespace string If present, the namespace scope for this CLI request + --password string Password for basic authentication to the API server + --request-timeout string The length of time to wait before giving up on a single server request. Non-zero values should contain a corresponding time unit (e.g. 1s, 2m, 3h). A value of zero means don't timeout requests. (default "0") + --tls-server-name string If provided, this name will be used to validate server certificate. If this is not provided, hostname used to contact the server is used. + --token string Bearer token for authentication to the API server + --user string The name of the kubeconfig user to use + --username string Username for basic authentication to the API server ``` ### Options inherited from parent commands @@ -32,9 +48,11 @@ argocd app [flags] --client-crt string Client certificate file --client-crt-key string Client certificate key file --config string Path to Argo CD config (default "/home/user/.argocd/config") + --core If set to true then CLI talks directly to Kubernetes instead of talking to Argo CD API server --grpc-web Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. --grpc-web-root-path string Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. Set web root. -H, --header strings Sets additional header to all requests made by Argo CD CLI. (Can be repeated multiple times to add multiple headers, also supports comma separated headers) + --http-retry-max int Maximum number of retries to establish http connection to Argo CD server --insecure Skip server certificate and domain verification --logformat string Set the logging format. One of: text|json (default "text") --loglevel string Set the logging level. One of: debug|info|warn|error (default "info") diff --git a/docs/user-guide/commands/argocd_app_actions.md b/docs/user-guide/commands/argocd_app_actions.md index e4db9993d861a..20ff7324968ac 100644 --- a/docs/user-guide/commands/argocd_app_actions.md +++ b/docs/user-guide/commands/argocd_app_actions.md @@ -15,21 +15,38 @@ argocd app actions [flags] ### Options inherited from parent commands ``` + --as string Username to impersonate for the operation + --as-group stringArray Group to impersonate for the operation, this flag can be repeated to specify multiple groups. --auth-token string Authentication token + --certificate-authority string Path to a cert file for the certificate authority + --client-certificate string Path to a client certificate file for TLS --client-crt string Client certificate file --client-crt-key string Client certificate key file + --client-key string Path to a client key file for TLS + --cluster string The name of the kubeconfig cluster to use --config string Path to Argo CD config (default "/home/user/.argocd/config") + --context string The name of the kubeconfig context to use + --core If set to true then CLI talks directly to Kubernetes instead of talking to Argo CD API server --grpc-web Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. --grpc-web-root-path string Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. Set web root. -H, --header strings Sets additional header to all requests made by Argo CD CLI. (Can be repeated multiple times to add multiple headers, also supports comma separated headers) + --http-retry-max int Maximum number of retries to establish http connection to Argo CD server --insecure Skip server certificate and domain verification + --insecure-skip-tls-verify If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure --logformat string Set the logging format. One of: text|json (default "text") --loglevel string Set the logging level. One of: debug|info|warn|error (default "info") + -n, --namespace string If present, the namespace scope for this CLI request + --password string Password for basic authentication to the API server --plaintext Disable TLS --port-forward Connect to a random argocd-server port using port forwarding --port-forward-namespace string Namespace name which should be used for port forwarding - --server string Argo CD server address + --request-timeout string The length of time to wait before giving up on a single server request. Non-zero values should contain a corresponding time unit (e.g. 1s, 2m, 3h). A value of zero means don't timeout requests. (default "0") + --server string The address and port of the Kubernetes API server --server-crt string Server certificate file + --tls-server-name string If provided, this name will be used to validate server certificate. If this is not provided, hostname used to contact the server is used. + --token string Bearer token for authentication to the API server + --user string The name of the kubeconfig user to use + --username string Username for basic authentication to the API server ``` ### SEE ALSO diff --git a/docs/user-guide/commands/argocd_app_actions_list.md b/docs/user-guide/commands/argocd_app_actions_list.md index 5dd8c09bc881d..5772a20eeda9c 100644 --- a/docs/user-guide/commands/argocd_app_actions_list.md +++ b/docs/user-guide/commands/argocd_app_actions_list.md @@ -12,7 +12,6 @@ argocd app actions list APPNAME [flags] --group string Group -h, --help help for list --kind string Kind - --namespace string Namespace -o, --out string Output format. One of: yaml, json --resource-name string Name of resource ``` @@ -20,21 +19,38 @@ argocd app actions list APPNAME [flags] ### Options inherited from parent commands ``` + --as string Username to impersonate for the operation + --as-group stringArray Group to impersonate for the operation, this flag can be repeated to specify multiple groups. --auth-token string Authentication token + --certificate-authority string Path to a cert file for the certificate authority + --client-certificate string Path to a client certificate file for TLS --client-crt string Client certificate file --client-crt-key string Client certificate key file + --client-key string Path to a client key file for TLS + --cluster string The name of the kubeconfig cluster to use --config string Path to Argo CD config (default "/home/user/.argocd/config") + --context string The name of the kubeconfig context to use + --core If set to true then CLI talks directly to Kubernetes instead of talking to Argo CD API server --grpc-web Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. --grpc-web-root-path string Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. Set web root. -H, --header strings Sets additional header to all requests made by Argo CD CLI. (Can be repeated multiple times to add multiple headers, also supports comma separated headers) + --http-retry-max int Maximum number of retries to establish http connection to Argo CD server --insecure Skip server certificate and domain verification + --insecure-skip-tls-verify If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure --logformat string Set the logging format. One of: text|json (default "text") --loglevel string Set the logging level. One of: debug|info|warn|error (default "info") + -n, --namespace string If present, the namespace scope for this CLI request + --password string Password for basic authentication to the API server --plaintext Disable TLS --port-forward Connect to a random argocd-server port using port forwarding --port-forward-namespace string Namespace name which should be used for port forwarding - --server string Argo CD server address + --request-timeout string The length of time to wait before giving up on a single server request. Non-zero values should contain a corresponding time unit (e.g. 1s, 2m, 3h). A value of zero means don't timeout requests. (default "0") + --server string The address and port of the Kubernetes API server --server-crt string Server certificate file + --tls-server-name string If provided, this name will be used to validate server certificate. If this is not provided, hostname used to contact the server is used. + --token string Bearer token for authentication to the API server + --user string The name of the kubeconfig user to use + --username string Username for basic authentication to the API server ``` ### SEE ALSO diff --git a/docs/user-guide/commands/argocd_app_actions_run.md b/docs/user-guide/commands/argocd_app_actions_run.md index 6e491d38a8bc6..0f46c72d623a8 100644 --- a/docs/user-guide/commands/argocd_app_actions_run.md +++ b/docs/user-guide/commands/argocd_app_actions_run.md @@ -13,28 +13,44 @@ argocd app actions run APPNAME ACTION [flags] --group string Group -h, --help help for run --kind string Kind - --namespace string Namespace --resource-name string Name of resource ``` ### Options inherited from parent commands ``` + --as string Username to impersonate for the operation + --as-group stringArray Group to impersonate for the operation, this flag can be repeated to specify multiple groups. --auth-token string Authentication token + --certificate-authority string Path to a cert file for the certificate authority + --client-certificate string Path to a client certificate file for TLS --client-crt string Client certificate file --client-crt-key string Client certificate key file + --client-key string Path to a client key file for TLS + --cluster string The name of the kubeconfig cluster to use --config string Path to Argo CD config (default "/home/user/.argocd/config") + --context string The name of the kubeconfig context to use + --core If set to true then CLI talks directly to Kubernetes instead of talking to Argo CD API server --grpc-web Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. --grpc-web-root-path string Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. Set web root. -H, --header strings Sets additional header to all requests made by Argo CD CLI. (Can be repeated multiple times to add multiple headers, also supports comma separated headers) + --http-retry-max int Maximum number of retries to establish http connection to Argo CD server --insecure Skip server certificate and domain verification + --insecure-skip-tls-verify If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure --logformat string Set the logging format. One of: text|json (default "text") --loglevel string Set the logging level. One of: debug|info|warn|error (default "info") + -n, --namespace string If present, the namespace scope for this CLI request + --password string Password for basic authentication to the API server --plaintext Disable TLS --port-forward Connect to a random argocd-server port using port forwarding --port-forward-namespace string Namespace name which should be used for port forwarding - --server string Argo CD server address + --request-timeout string The length of time to wait before giving up on a single server request. Non-zero values should contain a corresponding time unit (e.g. 1s, 2m, 3h). A value of zero means don't timeout requests. (default "0") + --server string The address and port of the Kubernetes API server --server-crt string Server certificate file + --tls-server-name string If provided, this name will be used to validate server certificate. If this is not provided, hostname used to contact the server is used. + --token string Bearer token for authentication to the API server + --user string The name of the kubeconfig user to use + --username string Username for basic authentication to the API server ``` ### SEE ALSO diff --git a/docs/user-guide/commands/argocd_app_create.md b/docs/user-guide/commands/argocd_app_create.md index 6039c991e516f..ea8ec2aee543e 100644 --- a/docs/user-guide/commands/argocd_app_create.md +++ b/docs/user-guide/commands/argocd_app_create.md @@ -34,6 +34,7 @@ argocd app create APPNAME [flags] ``` --allow-empty Set allow zero live resources when sync is automated + --annotations stringArray Set metadata annotations (e.g. example=value) --auto-prune Set automatic pruning when sync is automated --config-management-plugin string Config management plugin name --dest-name string K8s cluster Name (e.g. minikube) @@ -89,21 +90,38 @@ argocd app create APPNAME [flags] ### Options inherited from parent commands ``` + --as string Username to impersonate for the operation + --as-group stringArray Group to impersonate for the operation, this flag can be repeated to specify multiple groups. --auth-token string Authentication token + --certificate-authority string Path to a cert file for the certificate authority + --client-certificate string Path to a client certificate file for TLS --client-crt string Client certificate file --client-crt-key string Client certificate key file + --client-key string Path to a client key file for TLS + --cluster string The name of the kubeconfig cluster to use --config string Path to Argo CD config (default "/home/user/.argocd/config") + --context string The name of the kubeconfig context to use + --core If set to true then CLI talks directly to Kubernetes instead of talking to Argo CD API server --grpc-web Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. --grpc-web-root-path string Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. Set web root. -H, --header strings Sets additional header to all requests made by Argo CD CLI. (Can be repeated multiple times to add multiple headers, also supports comma separated headers) + --http-retry-max int Maximum number of retries to establish http connection to Argo CD server --insecure Skip server certificate and domain verification + --insecure-skip-tls-verify If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure --logformat string Set the logging format. One of: text|json (default "text") --loglevel string Set the logging level. One of: debug|info|warn|error (default "info") + -n, --namespace string If present, the namespace scope for this CLI request + --password string Password for basic authentication to the API server --plaintext Disable TLS --port-forward Connect to a random argocd-server port using port forwarding --port-forward-namespace string Namespace name which should be used for port forwarding - --server string Argo CD server address + --request-timeout string The length of time to wait before giving up on a single server request. Non-zero values should contain a corresponding time unit (e.g. 1s, 2m, 3h). A value of zero means don't timeout requests. (default "0") + --server string The address and port of the Kubernetes API server --server-crt string Server certificate file + --tls-server-name string If provided, this name will be used to validate server certificate. If this is not provided, hostname used to contact the server is used. + --token string Bearer token for authentication to the API server + --user string The name of the kubeconfig user to use + --username string Username for basic authentication to the API server ``` ### SEE ALSO diff --git a/docs/user-guide/commands/argocd_app_delete.md b/docs/user-guide/commands/argocd_app_delete.md index 6e9be123ac6d1..08af4b030bf00 100644 --- a/docs/user-guide/commands/argocd_app_delete.md +++ b/docs/user-guide/commands/argocd_app_delete.md @@ -18,21 +18,38 @@ argocd app delete APPNAME [flags] ### Options inherited from parent commands ``` + --as string Username to impersonate for the operation + --as-group stringArray Group to impersonate for the operation, this flag can be repeated to specify multiple groups. --auth-token string Authentication token + --certificate-authority string Path to a cert file for the certificate authority + --client-certificate string Path to a client certificate file for TLS --client-crt string Client certificate file --client-crt-key string Client certificate key file + --client-key string Path to a client key file for TLS + --cluster string The name of the kubeconfig cluster to use --config string Path to Argo CD config (default "/home/user/.argocd/config") + --context string The name of the kubeconfig context to use + --core If set to true then CLI talks directly to Kubernetes instead of talking to Argo CD API server --grpc-web Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. --grpc-web-root-path string Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. Set web root. -H, --header strings Sets additional header to all requests made by Argo CD CLI. (Can be repeated multiple times to add multiple headers, also supports comma separated headers) + --http-retry-max int Maximum number of retries to establish http connection to Argo CD server --insecure Skip server certificate and domain verification + --insecure-skip-tls-verify If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure --logformat string Set the logging format. One of: text|json (default "text") --loglevel string Set the logging level. One of: debug|info|warn|error (default "info") + -n, --namespace string If present, the namespace scope for this CLI request + --password string Password for basic authentication to the API server --plaintext Disable TLS --port-forward Connect to a random argocd-server port using port forwarding --port-forward-namespace string Namespace name which should be used for port forwarding - --server string Argo CD server address + --request-timeout string The length of time to wait before giving up on a single server request. Non-zero values should contain a corresponding time unit (e.g. 1s, 2m, 3h). A value of zero means don't timeout requests. (default "0") + --server string The address and port of the Kubernetes API server --server-crt string Server certificate file + --tls-server-name string If provided, this name will be used to validate server certificate. If this is not provided, hostname used to contact the server is used. + --token string Bearer token for authentication to the API server + --user string The name of the kubeconfig user to use + --username string Username for basic authentication to the API server ``` ### SEE ALSO diff --git a/docs/user-guide/commands/argocd_app_diff.md b/docs/user-guide/commands/argocd_app_diff.md index c1c2583ca9e33..3c8a2226a0549 100644 --- a/docs/user-guide/commands/argocd_app_diff.md +++ b/docs/user-guide/commands/argocd_app_diff.md @@ -27,21 +27,38 @@ argocd app diff APPNAME [flags] ### Options inherited from parent commands ``` + --as string Username to impersonate for the operation + --as-group stringArray Group to impersonate for the operation, this flag can be repeated to specify multiple groups. --auth-token string Authentication token + --certificate-authority string Path to a cert file for the certificate authority + --client-certificate string Path to a client certificate file for TLS --client-crt string Client certificate file --client-crt-key string Client certificate key file + --client-key string Path to a client key file for TLS + --cluster string The name of the kubeconfig cluster to use --config string Path to Argo CD config (default "/home/user/.argocd/config") + --context string The name of the kubeconfig context to use + --core If set to true then CLI talks directly to Kubernetes instead of talking to Argo CD API server --grpc-web Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. --grpc-web-root-path string Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. Set web root. -H, --header strings Sets additional header to all requests made by Argo CD CLI. (Can be repeated multiple times to add multiple headers, also supports comma separated headers) + --http-retry-max int Maximum number of retries to establish http connection to Argo CD server --insecure Skip server certificate and domain verification + --insecure-skip-tls-verify If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure --logformat string Set the logging format. One of: text|json (default "text") --loglevel string Set the logging level. One of: debug|info|warn|error (default "info") + -n, --namespace string If present, the namespace scope for this CLI request + --password string Password for basic authentication to the API server --plaintext Disable TLS --port-forward Connect to a random argocd-server port using port forwarding --port-forward-namespace string Namespace name which should be used for port forwarding - --server string Argo CD server address + --request-timeout string The length of time to wait before giving up on a single server request. Non-zero values should contain a corresponding time unit (e.g. 1s, 2m, 3h). A value of zero means don't timeout requests. (default "0") + --server string The address and port of the Kubernetes API server --server-crt string Server certificate file + --tls-server-name string If provided, this name will be used to validate server certificate. If this is not provided, hostname used to contact the server is used. + --token string Bearer token for authentication to the API server + --user string The name of the kubeconfig user to use + --username string Username for basic authentication to the API server ``` ### SEE ALSO diff --git a/docs/user-guide/commands/argocd_app_edit.md b/docs/user-guide/commands/argocd_app_edit.md index cdd660ea82ca4..5f520b18fec93 100644 --- a/docs/user-guide/commands/argocd_app_edit.md +++ b/docs/user-guide/commands/argocd_app_edit.md @@ -15,21 +15,38 @@ argocd app edit APPNAME [flags] ### Options inherited from parent commands ``` + --as string Username to impersonate for the operation + --as-group stringArray Group to impersonate for the operation, this flag can be repeated to specify multiple groups. --auth-token string Authentication token + --certificate-authority string Path to a cert file for the certificate authority + --client-certificate string Path to a client certificate file for TLS --client-crt string Client certificate file --client-crt-key string Client certificate key file + --client-key string Path to a client key file for TLS + --cluster string The name of the kubeconfig cluster to use --config string Path to Argo CD config (default "/home/user/.argocd/config") + --context string The name of the kubeconfig context to use + --core If set to true then CLI talks directly to Kubernetes instead of talking to Argo CD API server --grpc-web Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. --grpc-web-root-path string Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. Set web root. -H, --header strings Sets additional header to all requests made by Argo CD CLI. (Can be repeated multiple times to add multiple headers, also supports comma separated headers) + --http-retry-max int Maximum number of retries to establish http connection to Argo CD server --insecure Skip server certificate and domain verification + --insecure-skip-tls-verify If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure --logformat string Set the logging format. One of: text|json (default "text") --loglevel string Set the logging level. One of: debug|info|warn|error (default "info") + -n, --namespace string If present, the namespace scope for this CLI request + --password string Password for basic authentication to the API server --plaintext Disable TLS --port-forward Connect to a random argocd-server port using port forwarding --port-forward-namespace string Namespace name which should be used for port forwarding - --server string Argo CD server address + --request-timeout string The length of time to wait before giving up on a single server request. Non-zero values should contain a corresponding time unit (e.g. 1s, 2m, 3h). A value of zero means don't timeout requests. (default "0") + --server string The address and port of the Kubernetes API server --server-crt string Server certificate file + --tls-server-name string If provided, this name will be used to validate server certificate. If this is not provided, hostname used to contact the server is used. + --token string Bearer token for authentication to the API server + --user string The name of the kubeconfig user to use + --username string Username for basic authentication to the API server ``` ### SEE ALSO diff --git a/docs/user-guide/commands/argocd_app_get.md b/docs/user-guide/commands/argocd_app_get.md index 2a61131731472..56d26b3813417 100644 --- a/docs/user-guide/commands/argocd_app_get.md +++ b/docs/user-guide/commands/argocd_app_get.md @@ -20,21 +20,38 @@ argocd app get APPNAME [flags] ### Options inherited from parent commands ``` + --as string Username to impersonate for the operation + --as-group stringArray Group to impersonate for the operation, this flag can be repeated to specify multiple groups. --auth-token string Authentication token + --certificate-authority string Path to a cert file for the certificate authority + --client-certificate string Path to a client certificate file for TLS --client-crt string Client certificate file --client-crt-key string Client certificate key file + --client-key string Path to a client key file for TLS + --cluster string The name of the kubeconfig cluster to use --config string Path to Argo CD config (default "/home/user/.argocd/config") + --context string The name of the kubeconfig context to use + --core If set to true then CLI talks directly to Kubernetes instead of talking to Argo CD API server --grpc-web Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. --grpc-web-root-path string Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. Set web root. -H, --header strings Sets additional header to all requests made by Argo CD CLI. (Can be repeated multiple times to add multiple headers, also supports comma separated headers) + --http-retry-max int Maximum number of retries to establish http connection to Argo CD server --insecure Skip server certificate and domain verification + --insecure-skip-tls-verify If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure --logformat string Set the logging format. One of: text|json (default "text") --loglevel string Set the logging level. One of: debug|info|warn|error (default "info") + -n, --namespace string If present, the namespace scope for this CLI request + --password string Password for basic authentication to the API server --plaintext Disable TLS --port-forward Connect to a random argocd-server port using port forwarding --port-forward-namespace string Namespace name which should be used for port forwarding - --server string Argo CD server address + --request-timeout string The length of time to wait before giving up on a single server request. Non-zero values should contain a corresponding time unit (e.g. 1s, 2m, 3h). A value of zero means don't timeout requests. (default "0") + --server string The address and port of the Kubernetes API server --server-crt string Server certificate file + --tls-server-name string If provided, this name will be used to validate server certificate. If this is not provided, hostname used to contact the server is used. + --token string Bearer token for authentication to the API server + --user string The name of the kubeconfig user to use + --username string Username for basic authentication to the API server ``` ### SEE ALSO diff --git a/docs/user-guide/commands/argocd_app_history.md b/docs/user-guide/commands/argocd_app_history.md index f17681549438b..a6191518845b2 100644 --- a/docs/user-guide/commands/argocd_app_history.md +++ b/docs/user-guide/commands/argocd_app_history.md @@ -16,21 +16,38 @@ argocd app history APPNAME [flags] ### Options inherited from parent commands ``` + --as string Username to impersonate for the operation + --as-group stringArray Group to impersonate for the operation, this flag can be repeated to specify multiple groups. --auth-token string Authentication token + --certificate-authority string Path to a cert file for the certificate authority + --client-certificate string Path to a client certificate file for TLS --client-crt string Client certificate file --client-crt-key string Client certificate key file + --client-key string Path to a client key file for TLS + --cluster string The name of the kubeconfig cluster to use --config string Path to Argo CD config (default "/home/user/.argocd/config") + --context string The name of the kubeconfig context to use + --core If set to true then CLI talks directly to Kubernetes instead of talking to Argo CD API server --grpc-web Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. --grpc-web-root-path string Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. Set web root. -H, --header strings Sets additional header to all requests made by Argo CD CLI. (Can be repeated multiple times to add multiple headers, also supports comma separated headers) + --http-retry-max int Maximum number of retries to establish http connection to Argo CD server --insecure Skip server certificate and domain verification + --insecure-skip-tls-verify If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure --logformat string Set the logging format. One of: text|json (default "text") --loglevel string Set the logging level. One of: debug|info|warn|error (default "info") + -n, --namespace string If present, the namespace scope for this CLI request + --password string Password for basic authentication to the API server --plaintext Disable TLS --port-forward Connect to a random argocd-server port using port forwarding --port-forward-namespace string Namespace name which should be used for port forwarding - --server string Argo CD server address + --request-timeout string The length of time to wait before giving up on a single server request. Non-zero values should contain a corresponding time unit (e.g. 1s, 2m, 3h). A value of zero means don't timeout requests. (default "0") + --server string The address and port of the Kubernetes API server --server-crt string Server certificate file + --tls-server-name string If provided, this name will be used to validate server certificate. If this is not provided, hostname used to contact the server is used. + --token string Bearer token for authentication to the API server + --user string The name of the kubeconfig user to use + --username string Username for basic authentication to the API server ``` ### SEE ALSO diff --git a/docs/user-guide/commands/argocd_app_list.md b/docs/user-guide/commands/argocd_app_list.md index 4559d073a9d1c..045a25b8473fa 100644 --- a/docs/user-guide/commands/argocd_app_list.md +++ b/docs/user-guide/commands/argocd_app_list.md @@ -29,21 +29,38 @@ argocd app list [flags] ### Options inherited from parent commands ``` + --as string Username to impersonate for the operation + --as-group stringArray Group to impersonate for the operation, this flag can be repeated to specify multiple groups. --auth-token string Authentication token + --certificate-authority string Path to a cert file for the certificate authority + --client-certificate string Path to a client certificate file for TLS --client-crt string Client certificate file --client-crt-key string Client certificate key file + --client-key string Path to a client key file for TLS + --cluster string The name of the kubeconfig cluster to use --config string Path to Argo CD config (default "/home/user/.argocd/config") + --context string The name of the kubeconfig context to use + --core If set to true then CLI talks directly to Kubernetes instead of talking to Argo CD API server --grpc-web Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. --grpc-web-root-path string Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. Set web root. -H, --header strings Sets additional header to all requests made by Argo CD CLI. (Can be repeated multiple times to add multiple headers, also supports comma separated headers) + --http-retry-max int Maximum number of retries to establish http connection to Argo CD server --insecure Skip server certificate and domain verification + --insecure-skip-tls-verify If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure --logformat string Set the logging format. One of: text|json (default "text") --loglevel string Set the logging level. One of: debug|info|warn|error (default "info") + -n, --namespace string If present, the namespace scope for this CLI request + --password string Password for basic authentication to the API server --plaintext Disable TLS --port-forward Connect to a random argocd-server port using port forwarding --port-forward-namespace string Namespace name which should be used for port forwarding - --server string Argo CD server address + --request-timeout string The length of time to wait before giving up on a single server request. Non-zero values should contain a corresponding time unit (e.g. 1s, 2m, 3h). A value of zero means don't timeout requests. (default "0") + --server string The address and port of the Kubernetes API server --server-crt string Server certificate file + --tls-server-name string If provided, this name will be used to validate server certificate. If this is not provided, hostname used to contact the server is used. + --token string Bearer token for authentication to the API server + --user string The name of the kubeconfig user to use + --username string Username for basic authentication to the API server ``` ### SEE ALSO diff --git a/docs/user-guide/commands/argocd_app_logs.md b/docs/user-guide/commands/argocd_app_logs.md index 88eaeb8beedc4..c63ae877682c9 100644 --- a/docs/user-guide/commands/argocd_app_logs.md +++ b/docs/user-guide/commands/argocd_app_logs.md @@ -16,7 +16,6 @@ argocd app logs APPNAME [flags] -h, --help help for logs --kind string Resource kind --name string Resource name - --namespace string Resource namespace --since-seconds int A relative time in seconds before the current time from which to show logs --tail int The number of lines from the end of the logs to show --until-time string Show logs until this time @@ -25,21 +24,38 @@ argocd app logs APPNAME [flags] ### Options inherited from parent commands ``` + --as string Username to impersonate for the operation + --as-group stringArray Group to impersonate for the operation, this flag can be repeated to specify multiple groups. --auth-token string Authentication token + --certificate-authority string Path to a cert file for the certificate authority + --client-certificate string Path to a client certificate file for TLS --client-crt string Client certificate file --client-crt-key string Client certificate key file + --client-key string Path to a client key file for TLS + --cluster string The name of the kubeconfig cluster to use --config string Path to Argo CD config (default "/home/user/.argocd/config") + --context string The name of the kubeconfig context to use + --core If set to true then CLI talks directly to Kubernetes instead of talking to Argo CD API server --grpc-web Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. --grpc-web-root-path string Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. Set web root. -H, --header strings Sets additional header to all requests made by Argo CD CLI. (Can be repeated multiple times to add multiple headers, also supports comma separated headers) + --http-retry-max int Maximum number of retries to establish http connection to Argo CD server --insecure Skip server certificate and domain verification + --insecure-skip-tls-verify If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure --logformat string Set the logging format. One of: text|json (default "text") --loglevel string Set the logging level. One of: debug|info|warn|error (default "info") + -n, --namespace string If present, the namespace scope for this CLI request + --password string Password for basic authentication to the API server --plaintext Disable TLS --port-forward Connect to a random argocd-server port using port forwarding --port-forward-namespace string Namespace name which should be used for port forwarding - --server string Argo CD server address + --request-timeout string The length of time to wait before giving up on a single server request. Non-zero values should contain a corresponding time unit (e.g. 1s, 2m, 3h). A value of zero means don't timeout requests. (default "0") + --server string The address and port of the Kubernetes API server --server-crt string Server certificate file + --tls-server-name string If provided, this name will be used to validate server certificate. If this is not provided, hostname used to contact the server is used. + --token string Bearer token for authentication to the API server + --user string The name of the kubeconfig user to use + --username string Username for basic authentication to the API server ``` ### SEE ALSO diff --git a/docs/user-guide/commands/argocd_app_manifests.md b/docs/user-guide/commands/argocd_app_manifests.md index 6b79eea271f13..a4d96672b7785 100644 --- a/docs/user-guide/commands/argocd_app_manifests.md +++ b/docs/user-guide/commands/argocd_app_manifests.md @@ -17,21 +17,38 @@ argocd app manifests APPNAME [flags] ### Options inherited from parent commands ``` + --as string Username to impersonate for the operation + --as-group stringArray Group to impersonate for the operation, this flag can be repeated to specify multiple groups. --auth-token string Authentication token + --certificate-authority string Path to a cert file for the certificate authority + --client-certificate string Path to a client certificate file for TLS --client-crt string Client certificate file --client-crt-key string Client certificate key file + --client-key string Path to a client key file for TLS + --cluster string The name of the kubeconfig cluster to use --config string Path to Argo CD config (default "/home/user/.argocd/config") + --context string The name of the kubeconfig context to use + --core If set to true then CLI talks directly to Kubernetes instead of talking to Argo CD API server --grpc-web Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. --grpc-web-root-path string Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. Set web root. -H, --header strings Sets additional header to all requests made by Argo CD CLI. (Can be repeated multiple times to add multiple headers, also supports comma separated headers) + --http-retry-max int Maximum number of retries to establish http connection to Argo CD server --insecure Skip server certificate and domain verification + --insecure-skip-tls-verify If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure --logformat string Set the logging format. One of: text|json (default "text") --loglevel string Set the logging level. One of: debug|info|warn|error (default "info") + -n, --namespace string If present, the namespace scope for this CLI request + --password string Password for basic authentication to the API server --plaintext Disable TLS --port-forward Connect to a random argocd-server port using port forwarding --port-forward-namespace string Namespace name which should be used for port forwarding - --server string Argo CD server address + --request-timeout string The length of time to wait before giving up on a single server request. Non-zero values should contain a corresponding time unit (e.g. 1s, 2m, 3h). A value of zero means don't timeout requests. (default "0") + --server string The address and port of the Kubernetes API server --server-crt string Server certificate file + --tls-server-name string If provided, this name will be used to validate server certificate. If this is not provided, hostname used to contact the server is used. + --token string Bearer token for authentication to the API server + --user string The name of the kubeconfig user to use + --username string Username for basic authentication to the API server ``` ### SEE ALSO diff --git a/docs/user-guide/commands/argocd_app_patch-resource.md b/docs/user-guide/commands/argocd_app_patch-resource.md index 3e98d912d5937..f54ee0474dfd7 100644 --- a/docs/user-guide/commands/argocd_app_patch-resource.md +++ b/docs/user-guide/commands/argocd_app_patch-resource.md @@ -13,7 +13,6 @@ argocd app patch-resource APPNAME [flags] --group string Group -h, --help help for patch-resource --kind string Kind - --namespace string Namespace --patch string Patch --patch-type string Which Patching strategy to use: 'application/json-patch+json', 'application/merge-patch+json', or 'application/strategic-merge-patch+json'. Defaults to 'application/merge-patch+json' (default "application/merge-patch+json") --resource-name string Name of resource @@ -22,21 +21,38 @@ argocd app patch-resource APPNAME [flags] ### Options inherited from parent commands ``` + --as string Username to impersonate for the operation + --as-group stringArray Group to impersonate for the operation, this flag can be repeated to specify multiple groups. --auth-token string Authentication token + --certificate-authority string Path to a cert file for the certificate authority + --client-certificate string Path to a client certificate file for TLS --client-crt string Client certificate file --client-crt-key string Client certificate key file + --client-key string Path to a client key file for TLS + --cluster string The name of the kubeconfig cluster to use --config string Path to Argo CD config (default "/home/user/.argocd/config") + --context string The name of the kubeconfig context to use + --core If set to true then CLI talks directly to Kubernetes instead of talking to Argo CD API server --grpc-web Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. --grpc-web-root-path string Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. Set web root. -H, --header strings Sets additional header to all requests made by Argo CD CLI. (Can be repeated multiple times to add multiple headers, also supports comma separated headers) + --http-retry-max int Maximum number of retries to establish http connection to Argo CD server --insecure Skip server certificate and domain verification + --insecure-skip-tls-verify If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure --logformat string Set the logging format. One of: text|json (default "text") --loglevel string Set the logging level. One of: debug|info|warn|error (default "info") + -n, --namespace string If present, the namespace scope for this CLI request + --password string Password for basic authentication to the API server --plaintext Disable TLS --port-forward Connect to a random argocd-server port using port forwarding --port-forward-namespace string Namespace name which should be used for port forwarding - --server string Argo CD server address + --request-timeout string The length of time to wait before giving up on a single server request. Non-zero values should contain a corresponding time unit (e.g. 1s, 2m, 3h). A value of zero means don't timeout requests. (default "0") + --server string The address and port of the Kubernetes API server --server-crt string Server certificate file + --tls-server-name string If provided, this name will be used to validate server certificate. If this is not provided, hostname used to contact the server is used. + --token string Bearer token for authentication to the API server + --user string The name of the kubeconfig user to use + --username string Username for basic authentication to the API server ``` ### SEE ALSO diff --git a/docs/user-guide/commands/argocd_app_patch.md b/docs/user-guide/commands/argocd_app_patch.md index a2cf869cc99ce..230f96ddb48bf 100644 --- a/docs/user-guide/commands/argocd_app_patch.md +++ b/docs/user-guide/commands/argocd_app_patch.md @@ -26,21 +26,38 @@ argocd app patch APPNAME [flags] ### Options inherited from parent commands ``` + --as string Username to impersonate for the operation + --as-group stringArray Group to impersonate for the operation, this flag can be repeated to specify multiple groups. --auth-token string Authentication token + --certificate-authority string Path to a cert file for the certificate authority + --client-certificate string Path to a client certificate file for TLS --client-crt string Client certificate file --client-crt-key string Client certificate key file + --client-key string Path to a client key file for TLS + --cluster string The name of the kubeconfig cluster to use --config string Path to Argo CD config (default "/home/user/.argocd/config") + --context string The name of the kubeconfig context to use + --core If set to true then CLI talks directly to Kubernetes instead of talking to Argo CD API server --grpc-web Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. --grpc-web-root-path string Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. Set web root. -H, --header strings Sets additional header to all requests made by Argo CD CLI. (Can be repeated multiple times to add multiple headers, also supports comma separated headers) + --http-retry-max int Maximum number of retries to establish http connection to Argo CD server --insecure Skip server certificate and domain verification + --insecure-skip-tls-verify If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure --logformat string Set the logging format. One of: text|json (default "text") --loglevel string Set the logging level. One of: debug|info|warn|error (default "info") + -n, --namespace string If present, the namespace scope for this CLI request + --password string Password for basic authentication to the API server --plaintext Disable TLS --port-forward Connect to a random argocd-server port using port forwarding --port-forward-namespace string Namespace name which should be used for port forwarding - --server string Argo CD server address + --request-timeout string The length of time to wait before giving up on a single server request. Non-zero values should contain a corresponding time unit (e.g. 1s, 2m, 3h). A value of zero means don't timeout requests. (default "0") + --server string The address and port of the Kubernetes API server --server-crt string Server certificate file + --tls-server-name string If provided, this name will be used to validate server certificate. If this is not provided, hostname used to contact the server is used. + --token string Bearer token for authentication to the API server + --user string The name of the kubeconfig user to use + --username string Username for basic authentication to the API server ``` ### SEE ALSO diff --git a/docs/user-guide/commands/argocd_app_resources.md b/docs/user-guide/commands/argocd_app_resources.md index 730084a9611dc..0a458411b8e0a 100644 --- a/docs/user-guide/commands/argocd_app_resources.md +++ b/docs/user-guide/commands/argocd_app_resources.md @@ -16,21 +16,38 @@ argocd app resources APPNAME [flags] ### Options inherited from parent commands ``` + --as string Username to impersonate for the operation + --as-group stringArray Group to impersonate for the operation, this flag can be repeated to specify multiple groups. --auth-token string Authentication token + --certificate-authority string Path to a cert file for the certificate authority + --client-certificate string Path to a client certificate file for TLS --client-crt string Client certificate file --client-crt-key string Client certificate key file + --client-key string Path to a client key file for TLS + --cluster string The name of the kubeconfig cluster to use --config string Path to Argo CD config (default "/home/user/.argocd/config") + --context string The name of the kubeconfig context to use + --core If set to true then CLI talks directly to Kubernetes instead of talking to Argo CD API server --grpc-web Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. --grpc-web-root-path string Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. Set web root. -H, --header strings Sets additional header to all requests made by Argo CD CLI. (Can be repeated multiple times to add multiple headers, also supports comma separated headers) + --http-retry-max int Maximum number of retries to establish http connection to Argo CD server --insecure Skip server certificate and domain verification + --insecure-skip-tls-verify If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure --logformat string Set the logging format. One of: text|json (default "text") --loglevel string Set the logging level. One of: debug|info|warn|error (default "info") + -n, --namespace string If present, the namespace scope for this CLI request + --password string Password for basic authentication to the API server --plaintext Disable TLS --port-forward Connect to a random argocd-server port using port forwarding --port-forward-namespace string Namespace name which should be used for port forwarding - --server string Argo CD server address + --request-timeout string The length of time to wait before giving up on a single server request. Non-zero values should contain a corresponding time unit (e.g. 1s, 2m, 3h). A value of zero means don't timeout requests. (default "0") + --server string The address and port of the Kubernetes API server --server-crt string Server certificate file + --tls-server-name string If provided, this name will be used to validate server certificate. If this is not provided, hostname used to contact the server is used. + --token string Bearer token for authentication to the API server + --user string The name of the kubeconfig user to use + --username string Username for basic authentication to the API server ``` ### SEE ALSO diff --git a/docs/user-guide/commands/argocd_app_rollback.md b/docs/user-guide/commands/argocd_app_rollback.md index 8a39389153c9d..9e9e2e391abd6 100644 --- a/docs/user-guide/commands/argocd_app_rollback.md +++ b/docs/user-guide/commands/argocd_app_rollback.md @@ -17,21 +17,38 @@ argocd app rollback APPNAME ID [flags] ### Options inherited from parent commands ``` + --as string Username to impersonate for the operation + --as-group stringArray Group to impersonate for the operation, this flag can be repeated to specify multiple groups. --auth-token string Authentication token + --certificate-authority string Path to a cert file for the certificate authority + --client-certificate string Path to a client certificate file for TLS --client-crt string Client certificate file --client-crt-key string Client certificate key file + --client-key string Path to a client key file for TLS + --cluster string The name of the kubeconfig cluster to use --config string Path to Argo CD config (default "/home/user/.argocd/config") + --context string The name of the kubeconfig context to use + --core If set to true then CLI talks directly to Kubernetes instead of talking to Argo CD API server --grpc-web Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. --grpc-web-root-path string Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. Set web root. -H, --header strings Sets additional header to all requests made by Argo CD CLI. (Can be repeated multiple times to add multiple headers, also supports comma separated headers) + --http-retry-max int Maximum number of retries to establish http connection to Argo CD server --insecure Skip server certificate and domain verification + --insecure-skip-tls-verify If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure --logformat string Set the logging format. One of: text|json (default "text") --loglevel string Set the logging level. One of: debug|info|warn|error (default "info") + -n, --namespace string If present, the namespace scope for this CLI request + --password string Password for basic authentication to the API server --plaintext Disable TLS --port-forward Connect to a random argocd-server port using port forwarding --port-forward-namespace string Namespace name which should be used for port forwarding - --server string Argo CD server address + --request-timeout string The length of time to wait before giving up on a single server request. Non-zero values should contain a corresponding time unit (e.g. 1s, 2m, 3h). A value of zero means don't timeout requests. (default "0") + --server string The address and port of the Kubernetes API server --server-crt string Server certificate file + --tls-server-name string If provided, this name will be used to validate server certificate. If this is not provided, hostname used to contact the server is used. + --token string Bearer token for authentication to the API server + --user string The name of the kubeconfig user to use + --username string Username for basic authentication to the API server ``` ### SEE ALSO diff --git a/docs/user-guide/commands/argocd_app_set.md b/docs/user-guide/commands/argocd_app_set.md index 2d36deb6036a3..2ecb9d08cb012 100644 --- a/docs/user-guide/commands/argocd_app_set.md +++ b/docs/user-guide/commands/argocd_app_set.md @@ -61,21 +61,38 @@ argocd app set APPNAME [flags] ### Options inherited from parent commands ``` + --as string Username to impersonate for the operation + --as-group stringArray Group to impersonate for the operation, this flag can be repeated to specify multiple groups. --auth-token string Authentication token + --certificate-authority string Path to a cert file for the certificate authority + --client-certificate string Path to a client certificate file for TLS --client-crt string Client certificate file --client-crt-key string Client certificate key file + --client-key string Path to a client key file for TLS + --cluster string The name of the kubeconfig cluster to use --config string Path to Argo CD config (default "/home/user/.argocd/config") + --context string The name of the kubeconfig context to use + --core If set to true then CLI talks directly to Kubernetes instead of talking to Argo CD API server --grpc-web Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. --grpc-web-root-path string Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. Set web root. -H, --header strings Sets additional header to all requests made by Argo CD CLI. (Can be repeated multiple times to add multiple headers, also supports comma separated headers) + --http-retry-max int Maximum number of retries to establish http connection to Argo CD server --insecure Skip server certificate and domain verification + --insecure-skip-tls-verify If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure --logformat string Set the logging format. One of: text|json (default "text") --loglevel string Set the logging level. One of: debug|info|warn|error (default "info") + -n, --namespace string If present, the namespace scope for this CLI request + --password string Password for basic authentication to the API server --plaintext Disable TLS --port-forward Connect to a random argocd-server port using port forwarding --port-forward-namespace string Namespace name which should be used for port forwarding - --server string Argo CD server address + --request-timeout string The length of time to wait before giving up on a single server request. Non-zero values should contain a corresponding time unit (e.g. 1s, 2m, 3h). A value of zero means don't timeout requests. (default "0") + --server string The address and port of the Kubernetes API server --server-crt string Server certificate file + --tls-server-name string If provided, this name will be used to validate server certificate. If this is not provided, hostname used to contact the server is used. + --token string Bearer token for authentication to the API server + --user string The name of the kubeconfig user to use + --username string Username for basic authentication to the API server ``` ### SEE ALSO diff --git a/docs/user-guide/commands/argocd_app_sync.md b/docs/user-guide/commands/argocd_app_sync.md index 9ce3fca3b5e7a..fb04f59b585f2 100644 --- a/docs/user-guide/commands/argocd_app_sync.md +++ b/docs/user-guide/commands/argocd_app_sync.md @@ -52,21 +52,38 @@ argocd app sync [APPNAME... | -l selector] [flags] ### Options inherited from parent commands ``` + --as string Username to impersonate for the operation + --as-group stringArray Group to impersonate for the operation, this flag can be repeated to specify multiple groups. --auth-token string Authentication token + --certificate-authority string Path to a cert file for the certificate authority + --client-certificate string Path to a client certificate file for TLS --client-crt string Client certificate file --client-crt-key string Client certificate key file + --client-key string Path to a client key file for TLS + --cluster string The name of the kubeconfig cluster to use --config string Path to Argo CD config (default "/home/user/.argocd/config") + --context string The name of the kubeconfig context to use + --core If set to true then CLI talks directly to Kubernetes instead of talking to Argo CD API server --grpc-web Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. --grpc-web-root-path string Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. Set web root. -H, --header strings Sets additional header to all requests made by Argo CD CLI. (Can be repeated multiple times to add multiple headers, also supports comma separated headers) + --http-retry-max int Maximum number of retries to establish http connection to Argo CD server --insecure Skip server certificate and domain verification + --insecure-skip-tls-verify If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure --logformat string Set the logging format. One of: text|json (default "text") --loglevel string Set the logging level. One of: debug|info|warn|error (default "info") + -n, --namespace string If present, the namespace scope for this CLI request + --password string Password for basic authentication to the API server --plaintext Disable TLS --port-forward Connect to a random argocd-server port using port forwarding --port-forward-namespace string Namespace name which should be used for port forwarding - --server string Argo CD server address + --request-timeout string The length of time to wait before giving up on a single server request. Non-zero values should contain a corresponding time unit (e.g. 1s, 2m, 3h). A value of zero means don't timeout requests. (default "0") + --server string The address and port of the Kubernetes API server --server-crt string Server certificate file + --tls-server-name string If provided, this name will be used to validate server certificate. If this is not provided, hostname used to contact the server is used. + --token string Bearer token for authentication to the API server + --user string The name of the kubeconfig user to use + --username string Username for basic authentication to the API server ``` ### SEE ALSO diff --git a/docs/user-guide/commands/argocd_app_terminate-op.md b/docs/user-guide/commands/argocd_app_terminate-op.md index 210d038aa08a1..b716340abb35b 100644 --- a/docs/user-guide/commands/argocd_app_terminate-op.md +++ b/docs/user-guide/commands/argocd_app_terminate-op.md @@ -15,21 +15,38 @@ argocd app terminate-op APPNAME [flags] ### Options inherited from parent commands ``` + --as string Username to impersonate for the operation + --as-group stringArray Group to impersonate for the operation, this flag can be repeated to specify multiple groups. --auth-token string Authentication token + --certificate-authority string Path to a cert file for the certificate authority + --client-certificate string Path to a client certificate file for TLS --client-crt string Client certificate file --client-crt-key string Client certificate key file + --client-key string Path to a client key file for TLS + --cluster string The name of the kubeconfig cluster to use --config string Path to Argo CD config (default "/home/user/.argocd/config") + --context string The name of the kubeconfig context to use + --core If set to true then CLI talks directly to Kubernetes instead of talking to Argo CD API server --grpc-web Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. --grpc-web-root-path string Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. Set web root. -H, --header strings Sets additional header to all requests made by Argo CD CLI. (Can be repeated multiple times to add multiple headers, also supports comma separated headers) + --http-retry-max int Maximum number of retries to establish http connection to Argo CD server --insecure Skip server certificate and domain verification + --insecure-skip-tls-verify If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure --logformat string Set the logging format. One of: text|json (default "text") --loglevel string Set the logging level. One of: debug|info|warn|error (default "info") + -n, --namespace string If present, the namespace scope for this CLI request + --password string Password for basic authentication to the API server --plaintext Disable TLS --port-forward Connect to a random argocd-server port using port forwarding --port-forward-namespace string Namespace name which should be used for port forwarding - --server string Argo CD server address + --request-timeout string The length of time to wait before giving up on a single server request. Non-zero values should contain a corresponding time unit (e.g. 1s, 2m, 3h). A value of zero means don't timeout requests. (default "0") + --server string The address and port of the Kubernetes API server --server-crt string Server certificate file + --tls-server-name string If provided, this name will be used to validate server certificate. If this is not provided, hostname used to contact the server is used. + --token string Bearer token for authentication to the API server + --user string The name of the kubeconfig user to use + --username string Username for basic authentication to the API server ``` ### SEE ALSO diff --git a/docs/user-guide/commands/argocd_app_unset.md b/docs/user-guide/commands/argocd_app_unset.md index 543bbf188ec87..cdbd4f339d266 100644 --- a/docs/user-guide/commands/argocd_app_unset.md +++ b/docs/user-guide/commands/argocd_app_unset.md @@ -36,21 +36,38 @@ argocd app unset APPNAME parameters [flags] ### Options inherited from parent commands ``` + --as string Username to impersonate for the operation + --as-group stringArray Group to impersonate for the operation, this flag can be repeated to specify multiple groups. --auth-token string Authentication token + --certificate-authority string Path to a cert file for the certificate authority + --client-certificate string Path to a client certificate file for TLS --client-crt string Client certificate file --client-crt-key string Client certificate key file + --client-key string Path to a client key file for TLS + --cluster string The name of the kubeconfig cluster to use --config string Path to Argo CD config (default "/home/user/.argocd/config") + --context string The name of the kubeconfig context to use + --core If set to true then CLI talks directly to Kubernetes instead of talking to Argo CD API server --grpc-web Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. --grpc-web-root-path string Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. Set web root. -H, --header strings Sets additional header to all requests made by Argo CD CLI. (Can be repeated multiple times to add multiple headers, also supports comma separated headers) + --http-retry-max int Maximum number of retries to establish http connection to Argo CD server --insecure Skip server certificate and domain verification + --insecure-skip-tls-verify If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure --logformat string Set the logging format. One of: text|json (default "text") --loglevel string Set the logging level. One of: debug|info|warn|error (default "info") + -n, --namespace string If present, the namespace scope for this CLI request + --password string Password for basic authentication to the API server --plaintext Disable TLS --port-forward Connect to a random argocd-server port using port forwarding --port-forward-namespace string Namespace name which should be used for port forwarding - --server string Argo CD server address + --request-timeout string The length of time to wait before giving up on a single server request. Non-zero values should contain a corresponding time unit (e.g. 1s, 2m, 3h). A value of zero means don't timeout requests. (default "0") + --server string The address and port of the Kubernetes API server --server-crt string Server certificate file + --tls-server-name string If provided, this name will be used to validate server certificate. If this is not provided, hostname used to contact the server is used. + --token string Bearer token for authentication to the API server + --user string The name of the kubeconfig user to use + --username string Username for basic authentication to the API server ``` ### SEE ALSO diff --git a/docs/user-guide/commands/argocd_app_wait.md b/docs/user-guide/commands/argocd_app_wait.md index 05bad83c62d7c..5a1a5c1fad6a2 100644 --- a/docs/user-guide/commands/argocd_app_wait.md +++ b/docs/user-guide/commands/argocd_app_wait.md @@ -35,21 +35,38 @@ argocd app wait [APPNAME.. | -l selector] [flags] ### Options inherited from parent commands ``` + --as string Username to impersonate for the operation + --as-group stringArray Group to impersonate for the operation, this flag can be repeated to specify multiple groups. --auth-token string Authentication token + --certificate-authority string Path to a cert file for the certificate authority + --client-certificate string Path to a client certificate file for TLS --client-crt string Client certificate file --client-crt-key string Client certificate key file + --client-key string Path to a client key file for TLS + --cluster string The name of the kubeconfig cluster to use --config string Path to Argo CD config (default "/home/user/.argocd/config") + --context string The name of the kubeconfig context to use + --core If set to true then CLI talks directly to Kubernetes instead of talking to Argo CD API server --grpc-web Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. --grpc-web-root-path string Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. Set web root. -H, --header strings Sets additional header to all requests made by Argo CD CLI. (Can be repeated multiple times to add multiple headers, also supports comma separated headers) + --http-retry-max int Maximum number of retries to establish http connection to Argo CD server --insecure Skip server certificate and domain verification + --insecure-skip-tls-verify If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure --logformat string Set the logging format. One of: text|json (default "text") --loglevel string Set the logging level. One of: debug|info|warn|error (default "info") + -n, --namespace string If present, the namespace scope for this CLI request + --password string Password for basic authentication to the API server --plaintext Disable TLS --port-forward Connect to a random argocd-server port using port forwarding --port-forward-namespace string Namespace name which should be used for port forwarding - --server string Argo CD server address + --request-timeout string The length of time to wait before giving up on a single server request. Non-zero values should contain a corresponding time unit (e.g. 1s, 2m, 3h). A value of zero means don't timeout requests. (default "0") + --server string The address and port of the Kubernetes API server --server-crt string Server certificate file + --tls-server-name string If provided, this name will be used to validate server certificate. If this is not provided, hostname used to contact the server is used. + --token string Bearer token for authentication to the API server + --user string The name of the kubeconfig user to use + --username string Username for basic authentication to the API server ``` ### SEE ALSO diff --git a/docs/user-guide/commands/argocd_cert.md b/docs/user-guide/commands/argocd_cert.md index 9c3a81d21ea74..80fa88e006256 100644 --- a/docs/user-guide/commands/argocd_cert.md +++ b/docs/user-guide/commands/argocd_cert.md @@ -32,7 +32,23 @@ argocd cert [flags] ### Options ``` - -h, --help help for cert + --as string Username to impersonate for the operation + --as-group stringArray Group to impersonate for the operation, this flag can be repeated to specify multiple groups. + --certificate-authority string Path to a cert file for the certificate authority + --client-certificate string Path to a client certificate file for TLS + --client-key string Path to a client key file for TLS + --cluster string The name of the kubeconfig cluster to use + --context string The name of the kubeconfig context to use + -h, --help help for cert + --insecure-skip-tls-verify If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure + --kubeconfig string Path to a kube config. Only required if out-of-cluster + -n, --namespace string If present, the namespace scope for this CLI request + --password string Password for basic authentication to the API server + --request-timeout string The length of time to wait before giving up on a single server request. Non-zero values should contain a corresponding time unit (e.g. 1s, 2m, 3h). A value of zero means don't timeout requests. (default "0") + --tls-server-name string If provided, this name will be used to validate server certificate. If this is not provided, hostname used to contact the server is used. + --token string Bearer token for authentication to the API server + --user string The name of the kubeconfig user to use + --username string Username for basic authentication to the API server ``` ### Options inherited from parent commands @@ -42,9 +58,11 @@ argocd cert [flags] --client-crt string Client certificate file --client-crt-key string Client certificate key file --config string Path to Argo CD config (default "/home/user/.argocd/config") + --core If set to true then CLI talks directly to Kubernetes instead of talking to Argo CD API server --grpc-web Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. --grpc-web-root-path string Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. Set web root. -H, --header strings Sets additional header to all requests made by Argo CD CLI. (Can be repeated multiple times to add multiple headers, also supports comma separated headers) + --http-retry-max int Maximum number of retries to establish http connection to Argo CD server --insecure Skip server certificate and domain verification --logformat string Set the logging format. One of: text|json (default "text") --loglevel string Set the logging level. One of: debug|info|warn|error (default "info") diff --git a/docs/user-guide/commands/argocd_cert_add-ssh.md b/docs/user-guide/commands/argocd_cert_add-ssh.md index 4a15deada4b9c..23422f8ee5551 100644 --- a/docs/user-guide/commands/argocd_cert_add-ssh.md +++ b/docs/user-guide/commands/argocd_cert_add-ssh.md @@ -18,21 +18,38 @@ argocd cert add-ssh --batch [flags] ### Options inherited from parent commands ``` + --as string Username to impersonate for the operation + --as-group stringArray Group to impersonate for the operation, this flag can be repeated to specify multiple groups. --auth-token string Authentication token + --certificate-authority string Path to a cert file for the certificate authority + --client-certificate string Path to a client certificate file for TLS --client-crt string Client certificate file --client-crt-key string Client certificate key file + --client-key string Path to a client key file for TLS + --cluster string The name of the kubeconfig cluster to use --config string Path to Argo CD config (default "/home/user/.argocd/config") + --context string The name of the kubeconfig context to use + --core If set to true then CLI talks directly to Kubernetes instead of talking to Argo CD API server --grpc-web Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. --grpc-web-root-path string Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. Set web root. -H, --header strings Sets additional header to all requests made by Argo CD CLI. (Can be repeated multiple times to add multiple headers, also supports comma separated headers) + --http-retry-max int Maximum number of retries to establish http connection to Argo CD server --insecure Skip server certificate and domain verification + --insecure-skip-tls-verify If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure --logformat string Set the logging format. One of: text|json (default "text") --loglevel string Set the logging level. One of: debug|info|warn|error (default "info") + -n, --namespace string If present, the namespace scope for this CLI request + --password string Password for basic authentication to the API server --plaintext Disable TLS --port-forward Connect to a random argocd-server port using port forwarding --port-forward-namespace string Namespace name which should be used for port forwarding - --server string Argo CD server address + --request-timeout string The length of time to wait before giving up on a single server request. Non-zero values should contain a corresponding time unit (e.g. 1s, 2m, 3h). A value of zero means don't timeout requests. (default "0") + --server string The address and port of the Kubernetes API server --server-crt string Server certificate file + --tls-server-name string If provided, this name will be used to validate server certificate. If this is not provided, hostname used to contact the server is used. + --token string Bearer token for authentication to the API server + --user string The name of the kubeconfig user to use + --username string Username for basic authentication to the API server ``` ### SEE ALSO diff --git a/docs/user-guide/commands/argocd_cert_add-tls.md b/docs/user-guide/commands/argocd_cert_add-tls.md index d6019c9143f9e..3c44b57e78838 100644 --- a/docs/user-guide/commands/argocd_cert_add-tls.md +++ b/docs/user-guide/commands/argocd_cert_add-tls.md @@ -17,21 +17,38 @@ argocd cert add-tls SERVERNAME [flags] ### Options inherited from parent commands ``` + --as string Username to impersonate for the operation + --as-group stringArray Group to impersonate for the operation, this flag can be repeated to specify multiple groups. --auth-token string Authentication token + --certificate-authority string Path to a cert file for the certificate authority + --client-certificate string Path to a client certificate file for TLS --client-crt string Client certificate file --client-crt-key string Client certificate key file + --client-key string Path to a client key file for TLS + --cluster string The name of the kubeconfig cluster to use --config string Path to Argo CD config (default "/home/user/.argocd/config") + --context string The name of the kubeconfig context to use + --core If set to true then CLI talks directly to Kubernetes instead of talking to Argo CD API server --grpc-web Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. --grpc-web-root-path string Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. Set web root. -H, --header strings Sets additional header to all requests made by Argo CD CLI. (Can be repeated multiple times to add multiple headers, also supports comma separated headers) + --http-retry-max int Maximum number of retries to establish http connection to Argo CD server --insecure Skip server certificate and domain verification + --insecure-skip-tls-verify If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure --logformat string Set the logging format. One of: text|json (default "text") --loglevel string Set the logging level. One of: debug|info|warn|error (default "info") + -n, --namespace string If present, the namespace scope for this CLI request + --password string Password for basic authentication to the API server --plaintext Disable TLS --port-forward Connect to a random argocd-server port using port forwarding --port-forward-namespace string Namespace name which should be used for port forwarding - --server string Argo CD server address + --request-timeout string The length of time to wait before giving up on a single server request. Non-zero values should contain a corresponding time unit (e.g. 1s, 2m, 3h). A value of zero means don't timeout requests. (default "0") + --server string The address and port of the Kubernetes API server --server-crt string Server certificate file + --tls-server-name string If provided, this name will be used to validate server certificate. If this is not provided, hostname used to contact the server is used. + --token string Bearer token for authentication to the API server + --user string The name of the kubeconfig user to use + --username string Username for basic authentication to the API server ``` ### SEE ALSO diff --git a/docs/user-guide/commands/argocd_cert_list.md b/docs/user-guide/commands/argocd_cert_list.md index db7747d6a8295..470155e580f7a 100644 --- a/docs/user-guide/commands/argocd_cert_list.md +++ b/docs/user-guide/commands/argocd_cert_list.md @@ -19,21 +19,38 @@ argocd cert list [flags] ### Options inherited from parent commands ``` + --as string Username to impersonate for the operation + --as-group stringArray Group to impersonate for the operation, this flag can be repeated to specify multiple groups. --auth-token string Authentication token + --certificate-authority string Path to a cert file for the certificate authority + --client-certificate string Path to a client certificate file for TLS --client-crt string Client certificate file --client-crt-key string Client certificate key file + --client-key string Path to a client key file for TLS + --cluster string The name of the kubeconfig cluster to use --config string Path to Argo CD config (default "/home/user/.argocd/config") + --context string The name of the kubeconfig context to use + --core If set to true then CLI talks directly to Kubernetes instead of talking to Argo CD API server --grpc-web Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. --grpc-web-root-path string Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. Set web root. -H, --header strings Sets additional header to all requests made by Argo CD CLI. (Can be repeated multiple times to add multiple headers, also supports comma separated headers) + --http-retry-max int Maximum number of retries to establish http connection to Argo CD server --insecure Skip server certificate and domain verification + --insecure-skip-tls-verify If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure --logformat string Set the logging format. One of: text|json (default "text") --loglevel string Set the logging level. One of: debug|info|warn|error (default "info") + -n, --namespace string If present, the namespace scope for this CLI request + --password string Password for basic authentication to the API server --plaintext Disable TLS --port-forward Connect to a random argocd-server port using port forwarding --port-forward-namespace string Namespace name which should be used for port forwarding - --server string Argo CD server address + --request-timeout string The length of time to wait before giving up on a single server request. Non-zero values should contain a corresponding time unit (e.g. 1s, 2m, 3h). A value of zero means don't timeout requests. (default "0") + --server string The address and port of the Kubernetes API server --server-crt string Server certificate file + --tls-server-name string If provided, this name will be used to validate server certificate. If this is not provided, hostname used to contact the server is used. + --token string Bearer token for authentication to the API server + --user string The name of the kubeconfig user to use + --username string Username for basic authentication to the API server ``` ### SEE ALSO diff --git a/docs/user-guide/commands/argocd_cert_rm.md b/docs/user-guide/commands/argocd_cert_rm.md index 0c825009964bd..41b3393f48942 100644 --- a/docs/user-guide/commands/argocd_cert_rm.md +++ b/docs/user-guide/commands/argocd_cert_rm.md @@ -17,21 +17,38 @@ argocd cert rm REPOSERVER [flags] ### Options inherited from parent commands ``` + --as string Username to impersonate for the operation + --as-group stringArray Group to impersonate for the operation, this flag can be repeated to specify multiple groups. --auth-token string Authentication token + --certificate-authority string Path to a cert file for the certificate authority + --client-certificate string Path to a client certificate file for TLS --client-crt string Client certificate file --client-crt-key string Client certificate key file + --client-key string Path to a client key file for TLS + --cluster string The name of the kubeconfig cluster to use --config string Path to Argo CD config (default "/home/user/.argocd/config") + --context string The name of the kubeconfig context to use + --core If set to true then CLI talks directly to Kubernetes instead of talking to Argo CD API server --grpc-web Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. --grpc-web-root-path string Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. Set web root. -H, --header strings Sets additional header to all requests made by Argo CD CLI. (Can be repeated multiple times to add multiple headers, also supports comma separated headers) + --http-retry-max int Maximum number of retries to establish http connection to Argo CD server --insecure Skip server certificate and domain verification + --insecure-skip-tls-verify If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure --logformat string Set the logging format. One of: text|json (default "text") --loglevel string Set the logging level. One of: debug|info|warn|error (default "info") + -n, --namespace string If present, the namespace scope for this CLI request + --password string Password for basic authentication to the API server --plaintext Disable TLS --port-forward Connect to a random argocd-server port using port forwarding --port-forward-namespace string Namespace name which should be used for port forwarding - --server string Argo CD server address + --request-timeout string The length of time to wait before giving up on a single server request. Non-zero values should contain a corresponding time unit (e.g. 1s, 2m, 3h). A value of zero means don't timeout requests. (default "0") + --server string The address and port of the Kubernetes API server --server-crt string Server certificate file + --tls-server-name string If provided, this name will be used to validate server certificate. If this is not provided, hostname used to contact the server is used. + --token string Bearer token for authentication to the API server + --user string The name of the kubeconfig user to use + --username string Username for basic authentication to the API server ``` ### SEE ALSO diff --git a/docs/user-guide/commands/argocd_cluster.md b/docs/user-guide/commands/argocd_cluster.md index 72d50f2d07e22..4094fd0cbe379 100644 --- a/docs/user-guide/commands/argocd_cluster.md +++ b/docs/user-guide/commands/argocd_cluster.md @@ -26,7 +26,23 @@ argocd cluster [flags] ### Options ``` - -h, --help help for cluster + --as string Username to impersonate for the operation + --as-group stringArray Group to impersonate for the operation, this flag can be repeated to specify multiple groups. + --certificate-authority string Path to a cert file for the certificate authority + --client-certificate string Path to a client certificate file for TLS + --client-key string Path to a client key file for TLS + --cluster string The name of the kubeconfig cluster to use + --context string The name of the kubeconfig context to use + -h, --help help for cluster + --insecure-skip-tls-verify If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure + --kubeconfig string Path to a kube config. Only required if out-of-cluster + -n, --namespace string If present, the namespace scope for this CLI request + --password string Password for basic authentication to the API server + --request-timeout string The length of time to wait before giving up on a single server request. Non-zero values should contain a corresponding time unit (e.g. 1s, 2m, 3h). A value of zero means don't timeout requests. (default "0") + --tls-server-name string If provided, this name will be used to validate server certificate. If this is not provided, hostname used to contact the server is used. + --token string Bearer token for authentication to the API server + --user string The name of the kubeconfig user to use + --username string Username for basic authentication to the API server ``` ### Options inherited from parent commands @@ -36,9 +52,11 @@ argocd cluster [flags] --client-crt string Client certificate file --client-crt-key string Client certificate key file --config string Path to Argo CD config (default "/home/user/.argocd/config") + --core If set to true then CLI talks directly to Kubernetes instead of talking to Argo CD API server --grpc-web Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. --grpc-web-root-path string Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. Set web root. -H, --header strings Sets additional header to all requests made by Argo CD CLI. (Can be repeated multiple times to add multiple headers, also supports comma separated headers) + --http-retry-max int Maximum number of retries to establish http connection to Argo CD server --insecure Skip server certificate and domain verification --logformat string Set the logging format. One of: text|json (default "text") --loglevel string Set the logging level. One of: debug|info|warn|error (default "info") diff --git a/docs/user-guide/commands/argocd_cluster_add.md b/docs/user-guide/commands/argocd_cluster_add.md index 3886e6fd1503f..930a40f305301 100644 --- a/docs/user-guide/commands/argocd_cluster_add.md +++ b/docs/user-guide/commands/argocd_cluster_add.md @@ -11,6 +11,7 @@ argocd cluster add CONTEXT [flags] ``` --aws-cluster-name string AWS Cluster name if set then aws cli eks token command will be used to access cluster --aws-role-arn string Optional AWS role arn. If set then AWS IAM Authenticator assumes a role to perform cluster operations instead of the default AWS credential provider chain. + --cluster-resources Indicates if cluster level resources should be managed. The setting is used only if list of managed namespaces is not empty. --exec-command string Command to run to provide client credentials to the cluster. You may need to build a custom ArgoCD image to ensure the command is available at runtime. --exec-command-api-version string Preferred input version of the ExecInfo for the --exec-command executable --exec-command-args stringArray Arguments to supply to the --exec-command executable @@ -20,7 +21,6 @@ argocd cluster add CONTEXT [flags] --in-cluster Indicates Argo CD resides inside this cluster and should connect using the internal k8s hostname (kubernetes.default.svc) --kubeconfig string use a particular kubeconfig file --name string Overwrite the cluster name - --namespace stringArray List of namespaces which are allowed to manage --service-account string System namespace service account to use for kubernetes resource management. If not set then default "argocd-manager" SA will be created --shard int Cluster shard number; inferred from hostname if not set (default -1) --system-namespace string Use different system namespace (default "kube-system") @@ -31,21 +31,38 @@ argocd cluster add CONTEXT [flags] ### Options inherited from parent commands ``` + --as string Username to impersonate for the operation + --as-group stringArray Group to impersonate for the operation, this flag can be repeated to specify multiple groups. --auth-token string Authentication token + --certificate-authority string Path to a cert file for the certificate authority + --client-certificate string Path to a client certificate file for TLS --client-crt string Client certificate file --client-crt-key string Client certificate key file + --client-key string Path to a client key file for TLS + --cluster string The name of the kubeconfig cluster to use --config string Path to Argo CD config (default "/home/user/.argocd/config") + --context string The name of the kubeconfig context to use + --core If set to true then CLI talks directly to Kubernetes instead of talking to Argo CD API server --grpc-web Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. --grpc-web-root-path string Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. Set web root. -H, --header strings Sets additional header to all requests made by Argo CD CLI. (Can be repeated multiple times to add multiple headers, also supports comma separated headers) + --http-retry-max int Maximum number of retries to establish http connection to Argo CD server --insecure Skip server certificate and domain verification + --insecure-skip-tls-verify If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure --logformat string Set the logging format. One of: text|json (default "text") --loglevel string Set the logging level. One of: debug|info|warn|error (default "info") + -n, --namespace string If present, the namespace scope for this CLI request + --password string Password for basic authentication to the API server --plaintext Disable TLS --port-forward Connect to a random argocd-server port using port forwarding --port-forward-namespace string Namespace name which should be used for port forwarding - --server string Argo CD server address + --request-timeout string The length of time to wait before giving up on a single server request. Non-zero values should contain a corresponding time unit (e.g. 1s, 2m, 3h). A value of zero means don't timeout requests. (default "0") + --server string The address and port of the Kubernetes API server --server-crt string Server certificate file + --tls-server-name string If provided, this name will be used to validate server certificate. If this is not provided, hostname used to contact the server is used. + --token string Bearer token for authentication to the API server + --user string The name of the kubeconfig user to use + --username string Username for basic authentication to the API server ``` ### SEE ALSO diff --git a/docs/user-guide/commands/argocd_cluster_get.md b/docs/user-guide/commands/argocd_cluster_get.md index d78648a6aa936..87f583070f7a9 100644 --- a/docs/user-guide/commands/argocd_cluster_get.md +++ b/docs/user-guide/commands/argocd_cluster_get.md @@ -22,21 +22,38 @@ argocd cluster get https://12.34.567.89 ### Options inherited from parent commands ``` + --as string Username to impersonate for the operation + --as-group stringArray Group to impersonate for the operation, this flag can be repeated to specify multiple groups. --auth-token string Authentication token + --certificate-authority string Path to a cert file for the certificate authority + --client-certificate string Path to a client certificate file for TLS --client-crt string Client certificate file --client-crt-key string Client certificate key file + --client-key string Path to a client key file for TLS + --cluster string The name of the kubeconfig cluster to use --config string Path to Argo CD config (default "/home/user/.argocd/config") + --context string The name of the kubeconfig context to use + --core If set to true then CLI talks directly to Kubernetes instead of talking to Argo CD API server --grpc-web Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. --grpc-web-root-path string Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. Set web root. -H, --header strings Sets additional header to all requests made by Argo CD CLI. (Can be repeated multiple times to add multiple headers, also supports comma separated headers) + --http-retry-max int Maximum number of retries to establish http connection to Argo CD server --insecure Skip server certificate and domain verification + --insecure-skip-tls-verify If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure --logformat string Set the logging format. One of: text|json (default "text") --loglevel string Set the logging level. One of: debug|info|warn|error (default "info") + -n, --namespace string If present, the namespace scope for this CLI request + --password string Password for basic authentication to the API server --plaintext Disable TLS --port-forward Connect to a random argocd-server port using port forwarding --port-forward-namespace string Namespace name which should be used for port forwarding - --server string Argo CD server address + --request-timeout string The length of time to wait before giving up on a single server request. Non-zero values should contain a corresponding time unit (e.g. 1s, 2m, 3h). A value of zero means don't timeout requests. (default "0") + --server string The address and port of the Kubernetes API server --server-crt string Server certificate file + --tls-server-name string If provided, this name will be used to validate server certificate. If this is not provided, hostname used to contact the server is used. + --token string Bearer token for authentication to the API server + --user string The name of the kubeconfig user to use + --username string Username for basic authentication to the API server ``` ### SEE ALSO diff --git a/docs/user-guide/commands/argocd_cluster_list.md b/docs/user-guide/commands/argocd_cluster_list.md index 42aced59035d7..785e8c1905a2c 100644 --- a/docs/user-guide/commands/argocd_cluster_list.md +++ b/docs/user-guide/commands/argocd_cluster_list.md @@ -16,21 +16,38 @@ argocd cluster list [flags] ### Options inherited from parent commands ``` + --as string Username to impersonate for the operation + --as-group stringArray Group to impersonate for the operation, this flag can be repeated to specify multiple groups. --auth-token string Authentication token + --certificate-authority string Path to a cert file for the certificate authority + --client-certificate string Path to a client certificate file for TLS --client-crt string Client certificate file --client-crt-key string Client certificate key file + --client-key string Path to a client key file for TLS + --cluster string The name of the kubeconfig cluster to use --config string Path to Argo CD config (default "/home/user/.argocd/config") + --context string The name of the kubeconfig context to use + --core If set to true then CLI talks directly to Kubernetes instead of talking to Argo CD API server --grpc-web Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. --grpc-web-root-path string Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. Set web root. -H, --header strings Sets additional header to all requests made by Argo CD CLI. (Can be repeated multiple times to add multiple headers, also supports comma separated headers) + --http-retry-max int Maximum number of retries to establish http connection to Argo CD server --insecure Skip server certificate and domain verification + --insecure-skip-tls-verify If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure --logformat string Set the logging format. One of: text|json (default "text") --loglevel string Set the logging level. One of: debug|info|warn|error (default "info") + -n, --namespace string If present, the namespace scope for this CLI request + --password string Password for basic authentication to the API server --plaintext Disable TLS --port-forward Connect to a random argocd-server port using port forwarding --port-forward-namespace string Namespace name which should be used for port forwarding - --server string Argo CD server address + --request-timeout string The length of time to wait before giving up on a single server request. Non-zero values should contain a corresponding time unit (e.g. 1s, 2m, 3h). A value of zero means don't timeout requests. (default "0") + --server string The address and port of the Kubernetes API server --server-crt string Server certificate file + --tls-server-name string If provided, this name will be used to validate server certificate. If this is not provided, hostname used to contact the server is used. + --token string Bearer token for authentication to the API server + --user string The name of the kubeconfig user to use + --username string Username for basic authentication to the API server ``` ### SEE ALSO diff --git a/docs/user-guide/commands/argocd_cluster_rm.md b/docs/user-guide/commands/argocd_cluster_rm.md index ba147784d3ff1..a8a4a93700ee7 100644 --- a/docs/user-guide/commands/argocd_cluster_rm.md +++ b/docs/user-guide/commands/argocd_cluster_rm.md @@ -21,21 +21,38 @@ argocd cluster rm https://12.34.567.89 ### Options inherited from parent commands ``` + --as string Username to impersonate for the operation + --as-group stringArray Group to impersonate for the operation, this flag can be repeated to specify multiple groups. --auth-token string Authentication token + --certificate-authority string Path to a cert file for the certificate authority + --client-certificate string Path to a client certificate file for TLS --client-crt string Client certificate file --client-crt-key string Client certificate key file + --client-key string Path to a client key file for TLS + --cluster string The name of the kubeconfig cluster to use --config string Path to Argo CD config (default "/home/user/.argocd/config") + --context string The name of the kubeconfig context to use + --core If set to true then CLI talks directly to Kubernetes instead of talking to Argo CD API server --grpc-web Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. --grpc-web-root-path string Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. Set web root. -H, --header strings Sets additional header to all requests made by Argo CD CLI. (Can be repeated multiple times to add multiple headers, also supports comma separated headers) + --http-retry-max int Maximum number of retries to establish http connection to Argo CD server --insecure Skip server certificate and domain verification + --insecure-skip-tls-verify If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure --logformat string Set the logging format. One of: text|json (default "text") --loglevel string Set the logging level. One of: debug|info|warn|error (default "info") + -n, --namespace string If present, the namespace scope for this CLI request + --password string Password for basic authentication to the API server --plaintext Disable TLS --port-forward Connect to a random argocd-server port using port forwarding --port-forward-namespace string Namespace name which should be used for port forwarding - --server string Argo CD server address + --request-timeout string The length of time to wait before giving up on a single server request. Non-zero values should contain a corresponding time unit (e.g. 1s, 2m, 3h). A value of zero means don't timeout requests. (default "0") + --server string The address and port of the Kubernetes API server --server-crt string Server certificate file + --tls-server-name string If provided, this name will be used to validate server certificate. If this is not provided, hostname used to contact the server is used. + --token string Bearer token for authentication to the API server + --user string The name of the kubeconfig user to use + --username string Username for basic authentication to the API server ``` ### SEE ALSO diff --git a/docs/user-guide/commands/argocd_cluster_rotate-auth.md b/docs/user-guide/commands/argocd_cluster_rotate-auth.md index a072b336a91aa..f5a63af8bd8ff 100644 --- a/docs/user-guide/commands/argocd_cluster_rotate-auth.md +++ b/docs/user-guide/commands/argocd_cluster_rotate-auth.md @@ -21,21 +21,38 @@ argocd cluster rotate-auth https://12.34.567.89 ### Options inherited from parent commands ``` + --as string Username to impersonate for the operation + --as-group stringArray Group to impersonate for the operation, this flag can be repeated to specify multiple groups. --auth-token string Authentication token + --certificate-authority string Path to a cert file for the certificate authority + --client-certificate string Path to a client certificate file for TLS --client-crt string Client certificate file --client-crt-key string Client certificate key file + --client-key string Path to a client key file for TLS + --cluster string The name of the kubeconfig cluster to use --config string Path to Argo CD config (default "/home/user/.argocd/config") + --context string The name of the kubeconfig context to use + --core If set to true then CLI talks directly to Kubernetes instead of talking to Argo CD API server --grpc-web Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. --grpc-web-root-path string Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. Set web root. -H, --header strings Sets additional header to all requests made by Argo CD CLI. (Can be repeated multiple times to add multiple headers, also supports comma separated headers) + --http-retry-max int Maximum number of retries to establish http connection to Argo CD server --insecure Skip server certificate and domain verification + --insecure-skip-tls-verify If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure --logformat string Set the logging format. One of: text|json (default "text") --loglevel string Set the logging level. One of: debug|info|warn|error (default "info") + -n, --namespace string If present, the namespace scope for this CLI request + --password string Password for basic authentication to the API server --plaintext Disable TLS --port-forward Connect to a random argocd-server port using port forwarding --port-forward-namespace string Namespace name which should be used for port forwarding - --server string Argo CD server address + --request-timeout string The length of time to wait before giving up on a single server request. Non-zero values should contain a corresponding time unit (e.g. 1s, 2m, 3h). A value of zero means don't timeout requests. (default "0") + --server string The address and port of the Kubernetes API server --server-crt string Server certificate file + --tls-server-name string If provided, this name will be used to validate server certificate. If this is not provided, hostname used to contact the server is used. + --token string Bearer token for authentication to the API server + --user string The name of the kubeconfig user to use + --username string Username for basic authentication to the API server ``` ### SEE ALSO diff --git a/docs/user-guide/commands/argocd_completion.md b/docs/user-guide/commands/argocd_completion.md index 28f87994330b5..1a6e0f6de7248 100644 --- a/docs/user-guide/commands/argocd_completion.md +++ b/docs/user-guide/commands/argocd_completion.md @@ -32,9 +32,11 @@ argocd completion SHELL [flags] --client-crt string Client certificate file --client-crt-key string Client certificate key file --config string Path to Argo CD config (default "/home/user/.argocd/config") + --core If set to true then CLI talks directly to Kubernetes instead of talking to Argo CD API server --grpc-web Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. --grpc-web-root-path string Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. Set web root. -H, --header strings Sets additional header to all requests made by Argo CD CLI. (Can be repeated multiple times to add multiple headers, also supports comma separated headers) + --http-retry-max int Maximum number of retries to establish http connection to Argo CD server --insecure Skip server certificate and domain verification --logformat string Set the logging format. One of: text|json (default "text") --loglevel string Set the logging level. One of: debug|info|warn|error (default "info") diff --git a/docs/user-guide/commands/argocd_context.md b/docs/user-guide/commands/argocd_context.md index dbd1b57c25d22..30933e0bb9849 100644 --- a/docs/user-guide/commands/argocd_context.md +++ b/docs/user-guide/commands/argocd_context.md @@ -20,9 +20,11 @@ argocd context [CONTEXT] [flags] --client-crt string Client certificate file --client-crt-key string Client certificate key file --config string Path to Argo CD config (default "/home/user/.argocd/config") + --core If set to true then CLI talks directly to Kubernetes instead of talking to Argo CD API server --grpc-web Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. --grpc-web-root-path string Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. Set web root. -H, --header strings Sets additional header to all requests made by Argo CD CLI. (Can be repeated multiple times to add multiple headers, also supports comma separated headers) + --http-retry-max int Maximum number of retries to establish http connection to Argo CD server --insecure Skip server certificate and domain verification --logformat string Set the logging format. One of: text|json (default "text") --loglevel string Set the logging level. One of: debug|info|warn|error (default "info") diff --git a/docs/user-guide/commands/argocd_gpg.md b/docs/user-guide/commands/argocd_gpg.md index 7ee841c861fba..b4c8d1bfd694f 100644 --- a/docs/user-guide/commands/argocd_gpg.md +++ b/docs/user-guide/commands/argocd_gpg.md @@ -9,7 +9,23 @@ argocd gpg [flags] ### Options ``` - -h, --help help for gpg + --as string Username to impersonate for the operation + --as-group stringArray Group to impersonate for the operation, this flag can be repeated to specify multiple groups. + --certificate-authority string Path to a cert file for the certificate authority + --client-certificate string Path to a client certificate file for TLS + --client-key string Path to a client key file for TLS + --cluster string The name of the kubeconfig cluster to use + --context string The name of the kubeconfig context to use + -h, --help help for gpg + --insecure-skip-tls-verify If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure + --kubeconfig string Path to a kube config. Only required if out-of-cluster + -n, --namespace string If present, the namespace scope for this CLI request + --password string Password for basic authentication to the API server + --request-timeout string The length of time to wait before giving up on a single server request. Non-zero values should contain a corresponding time unit (e.g. 1s, 2m, 3h). A value of zero means don't timeout requests. (default "0") + --tls-server-name string If provided, this name will be used to validate server certificate. If this is not provided, hostname used to contact the server is used. + --token string Bearer token for authentication to the API server + --user string The name of the kubeconfig user to use + --username string Username for basic authentication to the API server ``` ### Options inherited from parent commands @@ -19,9 +35,11 @@ argocd gpg [flags] --client-crt string Client certificate file --client-crt-key string Client certificate key file --config string Path to Argo CD config (default "/home/user/.argocd/config") + --core If set to true then CLI talks directly to Kubernetes instead of talking to Argo CD API server --grpc-web Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. --grpc-web-root-path string Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. Set web root. -H, --header strings Sets additional header to all requests made by Argo CD CLI. (Can be repeated multiple times to add multiple headers, also supports comma separated headers) + --http-retry-max int Maximum number of retries to establish http connection to Argo CD server --insecure Skip server certificate and domain verification --logformat string Set the logging format. One of: text|json (default "text") --loglevel string Set the logging level. One of: debug|info|warn|error (default "info") diff --git a/docs/user-guide/commands/argocd_gpg_add.md b/docs/user-guide/commands/argocd_gpg_add.md index a48de2d0d0eb0..c9c61cdc13c56 100644 --- a/docs/user-guide/commands/argocd_gpg_add.md +++ b/docs/user-guide/commands/argocd_gpg_add.md @@ -16,21 +16,38 @@ argocd gpg add [flags] ### Options inherited from parent commands ``` + --as string Username to impersonate for the operation + --as-group stringArray Group to impersonate for the operation, this flag can be repeated to specify multiple groups. --auth-token string Authentication token + --certificate-authority string Path to a cert file for the certificate authority + --client-certificate string Path to a client certificate file for TLS --client-crt string Client certificate file --client-crt-key string Client certificate key file + --client-key string Path to a client key file for TLS + --cluster string The name of the kubeconfig cluster to use --config string Path to Argo CD config (default "/home/user/.argocd/config") + --context string The name of the kubeconfig context to use + --core If set to true then CLI talks directly to Kubernetes instead of talking to Argo CD API server --grpc-web Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. --grpc-web-root-path string Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. Set web root. -H, --header strings Sets additional header to all requests made by Argo CD CLI. (Can be repeated multiple times to add multiple headers, also supports comma separated headers) + --http-retry-max int Maximum number of retries to establish http connection to Argo CD server --insecure Skip server certificate and domain verification + --insecure-skip-tls-verify If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure --logformat string Set the logging format. One of: text|json (default "text") --loglevel string Set the logging level. One of: debug|info|warn|error (default "info") + -n, --namespace string If present, the namespace scope for this CLI request + --password string Password for basic authentication to the API server --plaintext Disable TLS --port-forward Connect to a random argocd-server port using port forwarding --port-forward-namespace string Namespace name which should be used for port forwarding - --server string Argo CD server address + --request-timeout string The length of time to wait before giving up on a single server request. Non-zero values should contain a corresponding time unit (e.g. 1s, 2m, 3h). A value of zero means don't timeout requests. (default "0") + --server string The address and port of the Kubernetes API server --server-crt string Server certificate file + --tls-server-name string If provided, this name will be used to validate server certificate. If this is not provided, hostname used to contact the server is used. + --token string Bearer token for authentication to the API server + --user string The name of the kubeconfig user to use + --username string Username for basic authentication to the API server ``` ### SEE ALSO diff --git a/docs/user-guide/commands/argocd_gpg_get.md b/docs/user-guide/commands/argocd_gpg_get.md index 981de9ac89aab..9bf52aff4b768 100644 --- a/docs/user-guide/commands/argocd_gpg_get.md +++ b/docs/user-guide/commands/argocd_gpg_get.md @@ -16,21 +16,38 @@ argocd gpg get KEYID [flags] ### Options inherited from parent commands ``` + --as string Username to impersonate for the operation + --as-group stringArray Group to impersonate for the operation, this flag can be repeated to specify multiple groups. --auth-token string Authentication token + --certificate-authority string Path to a cert file for the certificate authority + --client-certificate string Path to a client certificate file for TLS --client-crt string Client certificate file --client-crt-key string Client certificate key file + --client-key string Path to a client key file for TLS + --cluster string The name of the kubeconfig cluster to use --config string Path to Argo CD config (default "/home/user/.argocd/config") + --context string The name of the kubeconfig context to use + --core If set to true then CLI talks directly to Kubernetes instead of talking to Argo CD API server --grpc-web Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. --grpc-web-root-path string Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. Set web root. -H, --header strings Sets additional header to all requests made by Argo CD CLI. (Can be repeated multiple times to add multiple headers, also supports comma separated headers) + --http-retry-max int Maximum number of retries to establish http connection to Argo CD server --insecure Skip server certificate and domain verification + --insecure-skip-tls-verify If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure --logformat string Set the logging format. One of: text|json (default "text") --loglevel string Set the logging level. One of: debug|info|warn|error (default "info") + -n, --namespace string If present, the namespace scope for this CLI request + --password string Password for basic authentication to the API server --plaintext Disable TLS --port-forward Connect to a random argocd-server port using port forwarding --port-forward-namespace string Namespace name which should be used for port forwarding - --server string Argo CD server address + --request-timeout string The length of time to wait before giving up on a single server request. Non-zero values should contain a corresponding time unit (e.g. 1s, 2m, 3h). A value of zero means don't timeout requests. (default "0") + --server string The address and port of the Kubernetes API server --server-crt string Server certificate file + --tls-server-name string If provided, this name will be used to validate server certificate. If this is not provided, hostname used to contact the server is used. + --token string Bearer token for authentication to the API server + --user string The name of the kubeconfig user to use + --username string Username for basic authentication to the API server ``` ### SEE ALSO diff --git a/docs/user-guide/commands/argocd_gpg_list.md b/docs/user-guide/commands/argocd_gpg_list.md index a80120f97b8a2..2a8d5af4bedca 100644 --- a/docs/user-guide/commands/argocd_gpg_list.md +++ b/docs/user-guide/commands/argocd_gpg_list.md @@ -16,21 +16,38 @@ argocd gpg list [flags] ### Options inherited from parent commands ``` + --as string Username to impersonate for the operation + --as-group stringArray Group to impersonate for the operation, this flag can be repeated to specify multiple groups. --auth-token string Authentication token + --certificate-authority string Path to a cert file for the certificate authority + --client-certificate string Path to a client certificate file for TLS --client-crt string Client certificate file --client-crt-key string Client certificate key file + --client-key string Path to a client key file for TLS + --cluster string The name of the kubeconfig cluster to use --config string Path to Argo CD config (default "/home/user/.argocd/config") + --context string The name of the kubeconfig context to use + --core If set to true then CLI talks directly to Kubernetes instead of talking to Argo CD API server --grpc-web Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. --grpc-web-root-path string Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. Set web root. -H, --header strings Sets additional header to all requests made by Argo CD CLI. (Can be repeated multiple times to add multiple headers, also supports comma separated headers) + --http-retry-max int Maximum number of retries to establish http connection to Argo CD server --insecure Skip server certificate and domain verification + --insecure-skip-tls-verify If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure --logformat string Set the logging format. One of: text|json (default "text") --loglevel string Set the logging level. One of: debug|info|warn|error (default "info") + -n, --namespace string If present, the namespace scope for this CLI request + --password string Password for basic authentication to the API server --plaintext Disable TLS --port-forward Connect to a random argocd-server port using port forwarding --port-forward-namespace string Namespace name which should be used for port forwarding - --server string Argo CD server address + --request-timeout string The length of time to wait before giving up on a single server request. Non-zero values should contain a corresponding time unit (e.g. 1s, 2m, 3h). A value of zero means don't timeout requests. (default "0") + --server string The address and port of the Kubernetes API server --server-crt string Server certificate file + --tls-server-name string If provided, this name will be used to validate server certificate. If this is not provided, hostname used to contact the server is used. + --token string Bearer token for authentication to the API server + --user string The name of the kubeconfig user to use + --username string Username for basic authentication to the API server ``` ### SEE ALSO diff --git a/docs/user-guide/commands/argocd_gpg_rm.md b/docs/user-guide/commands/argocd_gpg_rm.md index ff759077d37f9..258a21c031c3d 100644 --- a/docs/user-guide/commands/argocd_gpg_rm.md +++ b/docs/user-guide/commands/argocd_gpg_rm.md @@ -15,21 +15,38 @@ argocd gpg rm KEYID [flags] ### Options inherited from parent commands ``` + --as string Username to impersonate for the operation + --as-group stringArray Group to impersonate for the operation, this flag can be repeated to specify multiple groups. --auth-token string Authentication token + --certificate-authority string Path to a cert file for the certificate authority + --client-certificate string Path to a client certificate file for TLS --client-crt string Client certificate file --client-crt-key string Client certificate key file + --client-key string Path to a client key file for TLS + --cluster string The name of the kubeconfig cluster to use --config string Path to Argo CD config (default "/home/user/.argocd/config") + --context string The name of the kubeconfig context to use + --core If set to true then CLI talks directly to Kubernetes instead of talking to Argo CD API server --grpc-web Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. --grpc-web-root-path string Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. Set web root. -H, --header strings Sets additional header to all requests made by Argo CD CLI. (Can be repeated multiple times to add multiple headers, also supports comma separated headers) + --http-retry-max int Maximum number of retries to establish http connection to Argo CD server --insecure Skip server certificate and domain verification + --insecure-skip-tls-verify If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure --logformat string Set the logging format. One of: text|json (default "text") --loglevel string Set the logging level. One of: debug|info|warn|error (default "info") + -n, --namespace string If present, the namespace scope for this CLI request + --password string Password for basic authentication to the API server --plaintext Disable TLS --port-forward Connect to a random argocd-server port using port forwarding --port-forward-namespace string Namespace name which should be used for port forwarding - --server string Argo CD server address + --request-timeout string The length of time to wait before giving up on a single server request. Non-zero values should contain a corresponding time unit (e.g. 1s, 2m, 3h). A value of zero means don't timeout requests. (default "0") + --server string The address and port of the Kubernetes API server --server-crt string Server certificate file + --tls-server-name string If provided, this name will be used to validate server certificate. If this is not provided, hostname used to contact the server is used. + --token string Bearer token for authentication to the API server + --user string The name of the kubeconfig user to use + --username string Username for basic authentication to the API server ``` ### SEE ALSO diff --git a/docs/user-guide/commands/argocd_login.md b/docs/user-guide/commands/argocd_login.md index 9508214bf35d0..5fcf9946fc452 100644 --- a/docs/user-guide/commands/argocd_login.md +++ b/docs/user-guide/commands/argocd_login.md @@ -10,6 +10,19 @@ Log in to Argo CD argocd login SERVER [flags] ``` +### Examples + +``` +# Login to Argo CD using a username and password +argocd login cd.argoproj.io + +# Login to Argo CD using SSO +argocd login cd.argoproj.io --sso + +# Configure direct access using Kubernetes API server +argocd login cd.argoproj.io --core +``` + ### Options ``` @@ -28,9 +41,11 @@ argocd login SERVER [flags] --client-crt string Client certificate file --client-crt-key string Client certificate key file --config string Path to Argo CD config (default "/home/user/.argocd/config") + --core If set to true then CLI talks directly to Kubernetes instead of talking to Argo CD API server --grpc-web Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. --grpc-web-root-path string Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. Set web root. -H, --header strings Sets additional header to all requests made by Argo CD CLI. (Can be repeated multiple times to add multiple headers, also supports comma separated headers) + --http-retry-max int Maximum number of retries to establish http connection to Argo CD server --insecure Skip server certificate and domain verification --logformat string Set the logging format. One of: text|json (default "text") --loglevel string Set the logging level. One of: debug|info|warn|error (default "info") diff --git a/docs/user-guide/commands/argocd_logout.md b/docs/user-guide/commands/argocd_logout.md index f251ebadec32c..3dc5119d3dc05 100644 --- a/docs/user-guide/commands/argocd_logout.md +++ b/docs/user-guide/commands/argocd_logout.md @@ -23,9 +23,11 @@ argocd logout CONTEXT [flags] --client-crt string Client certificate file --client-crt-key string Client certificate key file --config string Path to Argo CD config (default "/home/user/.argocd/config") + --core If set to true then CLI talks directly to Kubernetes instead of talking to Argo CD API server --grpc-web Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. --grpc-web-root-path string Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. Set web root. -H, --header strings Sets additional header to all requests made by Argo CD CLI. (Can be repeated multiple times to add multiple headers, also supports comma separated headers) + --http-retry-max int Maximum number of retries to establish http connection to Argo CD server --insecure Skip server certificate and domain verification --logformat string Set the logging format. One of: text|json (default "text") --loglevel string Set the logging level. One of: debug|info|warn|error (default "info") diff --git a/docs/user-guide/commands/argocd_proj.md b/docs/user-guide/commands/argocd_proj.md index c514e0dfc58b3..0df0fc2a122a4 100644 --- a/docs/user-guide/commands/argocd_proj.md +++ b/docs/user-guide/commands/argocd_proj.md @@ -9,7 +9,23 @@ argocd proj [flags] ### Options ``` - -h, --help help for proj + --as string Username to impersonate for the operation + --as-group stringArray Group to impersonate for the operation, this flag can be repeated to specify multiple groups. + --certificate-authority string Path to a cert file for the certificate authority + --client-certificate string Path to a client certificate file for TLS + --client-key string Path to a client key file for TLS + --cluster string The name of the kubeconfig cluster to use + --context string The name of the kubeconfig context to use + -h, --help help for proj + --insecure-skip-tls-verify If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure + --kubeconfig string Path to a kube config. Only required if out-of-cluster + -n, --namespace string If present, the namespace scope for this CLI request + --password string Password for basic authentication to the API server + --request-timeout string The length of time to wait before giving up on a single server request. Non-zero values should contain a corresponding time unit (e.g. 1s, 2m, 3h). A value of zero means don't timeout requests. (default "0") + --tls-server-name string If provided, this name will be used to validate server certificate. If this is not provided, hostname used to contact the server is used. + --token string Bearer token for authentication to the API server + --user string The name of the kubeconfig user to use + --username string Username for basic authentication to the API server ``` ### Options inherited from parent commands @@ -19,9 +35,11 @@ argocd proj [flags] --client-crt string Client certificate file --client-crt-key string Client certificate key file --config string Path to Argo CD config (default "/home/user/.argocd/config") + --core If set to true then CLI talks directly to Kubernetes instead of talking to Argo CD API server --grpc-web Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. --grpc-web-root-path string Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. Set web root. -H, --header strings Sets additional header to all requests made by Argo CD CLI. (Can be repeated multiple times to add multiple headers, also supports comma separated headers) + --http-retry-max int Maximum number of retries to establish http connection to Argo CD server --insecure Skip server certificate and domain verification --logformat string Set the logging format. One of: text|json (default "text") --loglevel string Set the logging level. One of: debug|info|warn|error (default "info") diff --git a/docs/user-guide/commands/argocd_proj_add-destination.md b/docs/user-guide/commands/argocd_proj_add-destination.md index 3330e66d7674f..a82c746d4fa4f 100644 --- a/docs/user-guide/commands/argocd_proj_add-destination.md +++ b/docs/user-guide/commands/argocd_proj_add-destination.md @@ -15,21 +15,38 @@ argocd proj add-destination PROJECT SERVER NAMESPACE [flags] ### Options inherited from parent commands ``` + --as string Username to impersonate for the operation + --as-group stringArray Group to impersonate for the operation, this flag can be repeated to specify multiple groups. --auth-token string Authentication token + --certificate-authority string Path to a cert file for the certificate authority + --client-certificate string Path to a client certificate file for TLS --client-crt string Client certificate file --client-crt-key string Client certificate key file + --client-key string Path to a client key file for TLS + --cluster string The name of the kubeconfig cluster to use --config string Path to Argo CD config (default "/home/user/.argocd/config") + --context string The name of the kubeconfig context to use + --core If set to true then CLI talks directly to Kubernetes instead of talking to Argo CD API server --grpc-web Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. --grpc-web-root-path string Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. Set web root. -H, --header strings Sets additional header to all requests made by Argo CD CLI. (Can be repeated multiple times to add multiple headers, also supports comma separated headers) + --http-retry-max int Maximum number of retries to establish http connection to Argo CD server --insecure Skip server certificate and domain verification + --insecure-skip-tls-verify If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure --logformat string Set the logging format. One of: text|json (default "text") --loglevel string Set the logging level. One of: debug|info|warn|error (default "info") + -n, --namespace string If present, the namespace scope for this CLI request + --password string Password for basic authentication to the API server --plaintext Disable TLS --port-forward Connect to a random argocd-server port using port forwarding --port-forward-namespace string Namespace name which should be used for port forwarding - --server string Argo CD server address + --request-timeout string The length of time to wait before giving up on a single server request. Non-zero values should contain a corresponding time unit (e.g. 1s, 2m, 3h). A value of zero means don't timeout requests. (default "0") + --server string The address and port of the Kubernetes API server --server-crt string Server certificate file + --tls-server-name string If provided, this name will be used to validate server certificate. If this is not provided, hostname used to contact the server is used. + --token string Bearer token for authentication to the API server + --user string The name of the kubeconfig user to use + --username string Username for basic authentication to the API server ``` ### SEE ALSO diff --git a/docs/user-guide/commands/argocd_proj_add-orphaned-ignore.md b/docs/user-guide/commands/argocd_proj_add-orphaned-ignore.md index 26c336cb1522f..b82b8db130b94 100644 --- a/docs/user-guide/commands/argocd_proj_add-orphaned-ignore.md +++ b/docs/user-guide/commands/argocd_proj_add-orphaned-ignore.md @@ -16,21 +16,38 @@ argocd proj add-orphaned-ignore PROJECT GROUP KIND [flags] ### Options inherited from parent commands ``` + --as string Username to impersonate for the operation + --as-group stringArray Group to impersonate for the operation, this flag can be repeated to specify multiple groups. --auth-token string Authentication token + --certificate-authority string Path to a cert file for the certificate authority + --client-certificate string Path to a client certificate file for TLS --client-crt string Client certificate file --client-crt-key string Client certificate key file + --client-key string Path to a client key file for TLS + --cluster string The name of the kubeconfig cluster to use --config string Path to Argo CD config (default "/home/user/.argocd/config") + --context string The name of the kubeconfig context to use + --core If set to true then CLI talks directly to Kubernetes instead of talking to Argo CD API server --grpc-web Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. --grpc-web-root-path string Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. Set web root. -H, --header strings Sets additional header to all requests made by Argo CD CLI. (Can be repeated multiple times to add multiple headers, also supports comma separated headers) + --http-retry-max int Maximum number of retries to establish http connection to Argo CD server --insecure Skip server certificate and domain verification + --insecure-skip-tls-verify If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure --logformat string Set the logging format. One of: text|json (default "text") --loglevel string Set the logging level. One of: debug|info|warn|error (default "info") + -n, --namespace string If present, the namespace scope for this CLI request + --password string Password for basic authentication to the API server --plaintext Disable TLS --port-forward Connect to a random argocd-server port using port forwarding --port-forward-namespace string Namespace name which should be used for port forwarding - --server string Argo CD server address + --request-timeout string The length of time to wait before giving up on a single server request. Non-zero values should contain a corresponding time unit (e.g. 1s, 2m, 3h). A value of zero means don't timeout requests. (default "0") + --server string The address and port of the Kubernetes API server --server-crt string Server certificate file + --tls-server-name string If provided, this name will be used to validate server certificate. If this is not provided, hostname used to contact the server is used. + --token string Bearer token for authentication to the API server + --user string The name of the kubeconfig user to use + --username string Username for basic authentication to the API server ``` ### SEE ALSO diff --git a/docs/user-guide/commands/argocd_proj_add-signature-key.md b/docs/user-guide/commands/argocd_proj_add-signature-key.md index f9b35df557cc7..5c054f29d16c8 100644 --- a/docs/user-guide/commands/argocd_proj_add-signature-key.md +++ b/docs/user-guide/commands/argocd_proj_add-signature-key.md @@ -15,21 +15,38 @@ argocd proj add-signature-key PROJECT KEY-ID [flags] ### Options inherited from parent commands ``` + --as string Username to impersonate for the operation + --as-group stringArray Group to impersonate for the operation, this flag can be repeated to specify multiple groups. --auth-token string Authentication token + --certificate-authority string Path to a cert file for the certificate authority + --client-certificate string Path to a client certificate file for TLS --client-crt string Client certificate file --client-crt-key string Client certificate key file + --client-key string Path to a client key file for TLS + --cluster string The name of the kubeconfig cluster to use --config string Path to Argo CD config (default "/home/user/.argocd/config") + --context string The name of the kubeconfig context to use + --core If set to true then CLI talks directly to Kubernetes instead of talking to Argo CD API server --grpc-web Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. --grpc-web-root-path string Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. Set web root. -H, --header strings Sets additional header to all requests made by Argo CD CLI. (Can be repeated multiple times to add multiple headers, also supports comma separated headers) + --http-retry-max int Maximum number of retries to establish http connection to Argo CD server --insecure Skip server certificate and domain verification + --insecure-skip-tls-verify If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure --logformat string Set the logging format. One of: text|json (default "text") --loglevel string Set the logging level. One of: debug|info|warn|error (default "info") + -n, --namespace string If present, the namespace scope for this CLI request + --password string Password for basic authentication to the API server --plaintext Disable TLS --port-forward Connect to a random argocd-server port using port forwarding --port-forward-namespace string Namespace name which should be used for port forwarding - --server string Argo CD server address + --request-timeout string The length of time to wait before giving up on a single server request. Non-zero values should contain a corresponding time unit (e.g. 1s, 2m, 3h). A value of zero means don't timeout requests. (default "0") + --server string The address and port of the Kubernetes API server --server-crt string Server certificate file + --tls-server-name string If provided, this name will be used to validate server certificate. If this is not provided, hostname used to contact the server is used. + --token string Bearer token for authentication to the API server + --user string The name of the kubeconfig user to use + --username string Username for basic authentication to the API server ``` ### SEE ALSO diff --git a/docs/user-guide/commands/argocd_proj_add-source.md b/docs/user-guide/commands/argocd_proj_add-source.md index ee283122cbdc0..41408cee41617 100644 --- a/docs/user-guide/commands/argocd_proj_add-source.md +++ b/docs/user-guide/commands/argocd_proj_add-source.md @@ -15,21 +15,38 @@ argocd proj add-source PROJECT URL [flags] ### Options inherited from parent commands ``` + --as string Username to impersonate for the operation + --as-group stringArray Group to impersonate for the operation, this flag can be repeated to specify multiple groups. --auth-token string Authentication token + --certificate-authority string Path to a cert file for the certificate authority + --client-certificate string Path to a client certificate file for TLS --client-crt string Client certificate file --client-crt-key string Client certificate key file + --client-key string Path to a client key file for TLS + --cluster string The name of the kubeconfig cluster to use --config string Path to Argo CD config (default "/home/user/.argocd/config") + --context string The name of the kubeconfig context to use + --core If set to true then CLI talks directly to Kubernetes instead of talking to Argo CD API server --grpc-web Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. --grpc-web-root-path string Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. Set web root. -H, --header strings Sets additional header to all requests made by Argo CD CLI. (Can be repeated multiple times to add multiple headers, also supports comma separated headers) + --http-retry-max int Maximum number of retries to establish http connection to Argo CD server --insecure Skip server certificate and domain verification + --insecure-skip-tls-verify If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure --logformat string Set the logging format. One of: text|json (default "text") --loglevel string Set the logging level. One of: debug|info|warn|error (default "info") + -n, --namespace string If present, the namespace scope for this CLI request + --password string Password for basic authentication to the API server --plaintext Disable TLS --port-forward Connect to a random argocd-server port using port forwarding --port-forward-namespace string Namespace name which should be used for port forwarding - --server string Argo CD server address + --request-timeout string The length of time to wait before giving up on a single server request. Non-zero values should contain a corresponding time unit (e.g. 1s, 2m, 3h). A value of zero means don't timeout requests. (default "0") + --server string The address and port of the Kubernetes API server --server-crt string Server certificate file + --tls-server-name string If provided, this name will be used to validate server certificate. If this is not provided, hostname used to contact the server is used. + --token string Bearer token for authentication to the API server + --user string The name of the kubeconfig user to use + --username string Username for basic authentication to the API server ``` ### SEE ALSO diff --git a/docs/user-guide/commands/argocd_proj_allow-cluster-resource.md b/docs/user-guide/commands/argocd_proj_allow-cluster-resource.md index 3667d93e5af01..5e68fc6e70218 100644 --- a/docs/user-guide/commands/argocd_proj_allow-cluster-resource.md +++ b/docs/user-guide/commands/argocd_proj_allow-cluster-resource.md @@ -16,21 +16,38 @@ argocd proj allow-cluster-resource PROJECT GROUP KIND [flags] ### Options inherited from parent commands ``` + --as string Username to impersonate for the operation + --as-group stringArray Group to impersonate for the operation, this flag can be repeated to specify multiple groups. --auth-token string Authentication token + --certificate-authority string Path to a cert file for the certificate authority + --client-certificate string Path to a client certificate file for TLS --client-crt string Client certificate file --client-crt-key string Client certificate key file + --client-key string Path to a client key file for TLS + --cluster string The name of the kubeconfig cluster to use --config string Path to Argo CD config (default "/home/user/.argocd/config") + --context string The name of the kubeconfig context to use + --core If set to true then CLI talks directly to Kubernetes instead of talking to Argo CD API server --grpc-web Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. --grpc-web-root-path string Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. Set web root. -H, --header strings Sets additional header to all requests made by Argo CD CLI. (Can be repeated multiple times to add multiple headers, also supports comma separated headers) + --http-retry-max int Maximum number of retries to establish http connection to Argo CD server --insecure Skip server certificate and domain verification + --insecure-skip-tls-verify If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure --logformat string Set the logging format. One of: text|json (default "text") --loglevel string Set the logging level. One of: debug|info|warn|error (default "info") + -n, --namespace string If present, the namespace scope for this CLI request + --password string Password for basic authentication to the API server --plaintext Disable TLS --port-forward Connect to a random argocd-server port using port forwarding --port-forward-namespace string Namespace name which should be used for port forwarding - --server string Argo CD server address + --request-timeout string The length of time to wait before giving up on a single server request. Non-zero values should contain a corresponding time unit (e.g. 1s, 2m, 3h). A value of zero means don't timeout requests. (default "0") + --server string The address and port of the Kubernetes API server --server-crt string Server certificate file + --tls-server-name string If provided, this name will be used to validate server certificate. If this is not provided, hostname used to contact the server is used. + --token string Bearer token for authentication to the API server + --user string The name of the kubeconfig user to use + --username string Username for basic authentication to the API server ``` ### SEE ALSO diff --git a/docs/user-guide/commands/argocd_proj_allow-namespace-resource.md b/docs/user-guide/commands/argocd_proj_allow-namespace-resource.md index 9d88307819b7d..63da4577d5f52 100644 --- a/docs/user-guide/commands/argocd_proj_allow-namespace-resource.md +++ b/docs/user-guide/commands/argocd_proj_allow-namespace-resource.md @@ -16,21 +16,38 @@ argocd proj allow-namespace-resource PROJECT GROUP KIND [flags] ### Options inherited from parent commands ``` + --as string Username to impersonate for the operation + --as-group stringArray Group to impersonate for the operation, this flag can be repeated to specify multiple groups. --auth-token string Authentication token + --certificate-authority string Path to a cert file for the certificate authority + --client-certificate string Path to a client certificate file for TLS --client-crt string Client certificate file --client-crt-key string Client certificate key file + --client-key string Path to a client key file for TLS + --cluster string The name of the kubeconfig cluster to use --config string Path to Argo CD config (default "/home/user/.argocd/config") + --context string The name of the kubeconfig context to use + --core If set to true then CLI talks directly to Kubernetes instead of talking to Argo CD API server --grpc-web Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. --grpc-web-root-path string Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. Set web root. -H, --header strings Sets additional header to all requests made by Argo CD CLI. (Can be repeated multiple times to add multiple headers, also supports comma separated headers) + --http-retry-max int Maximum number of retries to establish http connection to Argo CD server --insecure Skip server certificate and domain verification + --insecure-skip-tls-verify If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure --logformat string Set the logging format. One of: text|json (default "text") --loglevel string Set the logging level. One of: debug|info|warn|error (default "info") + -n, --namespace string If present, the namespace scope for this CLI request + --password string Password for basic authentication to the API server --plaintext Disable TLS --port-forward Connect to a random argocd-server port using port forwarding --port-forward-namespace string Namespace name which should be used for port forwarding - --server string Argo CD server address + --request-timeout string The length of time to wait before giving up on a single server request. Non-zero values should contain a corresponding time unit (e.g. 1s, 2m, 3h). A value of zero means don't timeout requests. (default "0") + --server string The address and port of the Kubernetes API server --server-crt string Server certificate file + --tls-server-name string If provided, this name will be used to validate server certificate. If this is not provided, hostname used to contact the server is used. + --token string Bearer token for authentication to the API server + --user string The name of the kubeconfig user to use + --username string Username for basic authentication to the API server ``` ### SEE ALSO diff --git a/docs/user-guide/commands/argocd_proj_create.md b/docs/user-guide/commands/argocd_proj_create.md index 56a7882c71ef0..a5a5c31194ce1 100644 --- a/docs/user-guide/commands/argocd_proj_create.md +++ b/docs/user-guide/commands/argocd_proj_create.md @@ -27,21 +27,38 @@ argocd proj create PROJECT [flags] ### Options inherited from parent commands ``` + --as string Username to impersonate for the operation + --as-group stringArray Group to impersonate for the operation, this flag can be repeated to specify multiple groups. --auth-token string Authentication token + --certificate-authority string Path to a cert file for the certificate authority + --client-certificate string Path to a client certificate file for TLS --client-crt string Client certificate file --client-crt-key string Client certificate key file + --client-key string Path to a client key file for TLS + --cluster string The name of the kubeconfig cluster to use --config string Path to Argo CD config (default "/home/user/.argocd/config") + --context string The name of the kubeconfig context to use + --core If set to true then CLI talks directly to Kubernetes instead of talking to Argo CD API server --grpc-web Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. --grpc-web-root-path string Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. Set web root. -H, --header strings Sets additional header to all requests made by Argo CD CLI. (Can be repeated multiple times to add multiple headers, also supports comma separated headers) + --http-retry-max int Maximum number of retries to establish http connection to Argo CD server --insecure Skip server certificate and domain verification + --insecure-skip-tls-verify If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure --logformat string Set the logging format. One of: text|json (default "text") --loglevel string Set the logging level. One of: debug|info|warn|error (default "info") + -n, --namespace string If present, the namespace scope for this CLI request + --password string Password for basic authentication to the API server --plaintext Disable TLS --port-forward Connect to a random argocd-server port using port forwarding --port-forward-namespace string Namespace name which should be used for port forwarding - --server string Argo CD server address + --request-timeout string The length of time to wait before giving up on a single server request. Non-zero values should contain a corresponding time unit (e.g. 1s, 2m, 3h). A value of zero means don't timeout requests. (default "0") + --server string The address and port of the Kubernetes API server --server-crt string Server certificate file + --tls-server-name string If provided, this name will be used to validate server certificate. If this is not provided, hostname used to contact the server is used. + --token string Bearer token for authentication to the API server + --user string The name of the kubeconfig user to use + --username string Username for basic authentication to the API server ``` ### SEE ALSO diff --git a/docs/user-guide/commands/argocd_proj_delete.md b/docs/user-guide/commands/argocd_proj_delete.md index 3e707c9e2fab5..70511b6c576c1 100644 --- a/docs/user-guide/commands/argocd_proj_delete.md +++ b/docs/user-guide/commands/argocd_proj_delete.md @@ -15,21 +15,38 @@ argocd proj delete PROJECT [flags] ### Options inherited from parent commands ``` + --as string Username to impersonate for the operation + --as-group stringArray Group to impersonate for the operation, this flag can be repeated to specify multiple groups. --auth-token string Authentication token + --certificate-authority string Path to a cert file for the certificate authority + --client-certificate string Path to a client certificate file for TLS --client-crt string Client certificate file --client-crt-key string Client certificate key file + --client-key string Path to a client key file for TLS + --cluster string The name of the kubeconfig cluster to use --config string Path to Argo CD config (default "/home/user/.argocd/config") + --context string The name of the kubeconfig context to use + --core If set to true then CLI talks directly to Kubernetes instead of talking to Argo CD API server --grpc-web Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. --grpc-web-root-path string Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. Set web root. -H, --header strings Sets additional header to all requests made by Argo CD CLI. (Can be repeated multiple times to add multiple headers, also supports comma separated headers) + --http-retry-max int Maximum number of retries to establish http connection to Argo CD server --insecure Skip server certificate and domain verification + --insecure-skip-tls-verify If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure --logformat string Set the logging format. One of: text|json (default "text") --loglevel string Set the logging level. One of: debug|info|warn|error (default "info") + -n, --namespace string If present, the namespace scope for this CLI request + --password string Password for basic authentication to the API server --plaintext Disable TLS --port-forward Connect to a random argocd-server port using port forwarding --port-forward-namespace string Namespace name which should be used for port forwarding - --server string Argo CD server address + --request-timeout string The length of time to wait before giving up on a single server request. Non-zero values should contain a corresponding time unit (e.g. 1s, 2m, 3h). A value of zero means don't timeout requests. (default "0") + --server string The address and port of the Kubernetes API server --server-crt string Server certificate file + --tls-server-name string If provided, this name will be used to validate server certificate. If this is not provided, hostname used to contact the server is used. + --token string Bearer token for authentication to the API server + --user string The name of the kubeconfig user to use + --username string Username for basic authentication to the API server ``` ### SEE ALSO diff --git a/docs/user-guide/commands/argocd_proj_deny-cluster-resource.md b/docs/user-guide/commands/argocd_proj_deny-cluster-resource.md index f2b3f9b46a14f..53e65eb537f0f 100644 --- a/docs/user-guide/commands/argocd_proj_deny-cluster-resource.md +++ b/docs/user-guide/commands/argocd_proj_deny-cluster-resource.md @@ -16,21 +16,38 @@ argocd proj deny-cluster-resource PROJECT GROUP KIND [flags] ### Options inherited from parent commands ``` + --as string Username to impersonate for the operation + --as-group stringArray Group to impersonate for the operation, this flag can be repeated to specify multiple groups. --auth-token string Authentication token + --certificate-authority string Path to a cert file for the certificate authority + --client-certificate string Path to a client certificate file for TLS --client-crt string Client certificate file --client-crt-key string Client certificate key file + --client-key string Path to a client key file for TLS + --cluster string The name of the kubeconfig cluster to use --config string Path to Argo CD config (default "/home/user/.argocd/config") + --context string The name of the kubeconfig context to use + --core If set to true then CLI talks directly to Kubernetes instead of talking to Argo CD API server --grpc-web Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. --grpc-web-root-path string Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. Set web root. -H, --header strings Sets additional header to all requests made by Argo CD CLI. (Can be repeated multiple times to add multiple headers, also supports comma separated headers) + --http-retry-max int Maximum number of retries to establish http connection to Argo CD server --insecure Skip server certificate and domain verification + --insecure-skip-tls-verify If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure --logformat string Set the logging format. One of: text|json (default "text") --loglevel string Set the logging level. One of: debug|info|warn|error (default "info") + -n, --namespace string If present, the namespace scope for this CLI request + --password string Password for basic authentication to the API server --plaintext Disable TLS --port-forward Connect to a random argocd-server port using port forwarding --port-forward-namespace string Namespace name which should be used for port forwarding - --server string Argo CD server address + --request-timeout string The length of time to wait before giving up on a single server request. Non-zero values should contain a corresponding time unit (e.g. 1s, 2m, 3h). A value of zero means don't timeout requests. (default "0") + --server string The address and port of the Kubernetes API server --server-crt string Server certificate file + --tls-server-name string If provided, this name will be used to validate server certificate. If this is not provided, hostname used to contact the server is used. + --token string Bearer token for authentication to the API server + --user string The name of the kubeconfig user to use + --username string Username for basic authentication to the API server ``` ### SEE ALSO diff --git a/docs/user-guide/commands/argocd_proj_deny-namespace-resource.md b/docs/user-guide/commands/argocd_proj_deny-namespace-resource.md index bbc438092c7a2..d188340fe0e25 100644 --- a/docs/user-guide/commands/argocd_proj_deny-namespace-resource.md +++ b/docs/user-guide/commands/argocd_proj_deny-namespace-resource.md @@ -16,21 +16,38 @@ argocd proj deny-namespace-resource PROJECT GROUP KIND [flags] ### Options inherited from parent commands ``` + --as string Username to impersonate for the operation + --as-group stringArray Group to impersonate for the operation, this flag can be repeated to specify multiple groups. --auth-token string Authentication token + --certificate-authority string Path to a cert file for the certificate authority + --client-certificate string Path to a client certificate file for TLS --client-crt string Client certificate file --client-crt-key string Client certificate key file + --client-key string Path to a client key file for TLS + --cluster string The name of the kubeconfig cluster to use --config string Path to Argo CD config (default "/home/user/.argocd/config") + --context string The name of the kubeconfig context to use + --core If set to true then CLI talks directly to Kubernetes instead of talking to Argo CD API server --grpc-web Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. --grpc-web-root-path string Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. Set web root. -H, --header strings Sets additional header to all requests made by Argo CD CLI. (Can be repeated multiple times to add multiple headers, also supports comma separated headers) + --http-retry-max int Maximum number of retries to establish http connection to Argo CD server --insecure Skip server certificate and domain verification + --insecure-skip-tls-verify If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure --logformat string Set the logging format. One of: text|json (default "text") --loglevel string Set the logging level. One of: debug|info|warn|error (default "info") + -n, --namespace string If present, the namespace scope for this CLI request + --password string Password for basic authentication to the API server --plaintext Disable TLS --port-forward Connect to a random argocd-server port using port forwarding --port-forward-namespace string Namespace name which should be used for port forwarding - --server string Argo CD server address + --request-timeout string The length of time to wait before giving up on a single server request. Non-zero values should contain a corresponding time unit (e.g. 1s, 2m, 3h). A value of zero means don't timeout requests. (default "0") + --server string The address and port of the Kubernetes API server --server-crt string Server certificate file + --tls-server-name string If provided, this name will be used to validate server certificate. If this is not provided, hostname used to contact the server is used. + --token string Bearer token for authentication to the API server + --user string The name of the kubeconfig user to use + --username string Username for basic authentication to the API server ``` ### SEE ALSO diff --git a/docs/user-guide/commands/argocd_proj_edit.md b/docs/user-guide/commands/argocd_proj_edit.md index 4b43b539f2c16..c9fedee79f1a8 100644 --- a/docs/user-guide/commands/argocd_proj_edit.md +++ b/docs/user-guide/commands/argocd_proj_edit.md @@ -15,21 +15,38 @@ argocd proj edit PROJECT [flags] ### Options inherited from parent commands ``` + --as string Username to impersonate for the operation + --as-group stringArray Group to impersonate for the operation, this flag can be repeated to specify multiple groups. --auth-token string Authentication token + --certificate-authority string Path to a cert file for the certificate authority + --client-certificate string Path to a client certificate file for TLS --client-crt string Client certificate file --client-crt-key string Client certificate key file + --client-key string Path to a client key file for TLS + --cluster string The name of the kubeconfig cluster to use --config string Path to Argo CD config (default "/home/user/.argocd/config") + --context string The name of the kubeconfig context to use + --core If set to true then CLI talks directly to Kubernetes instead of talking to Argo CD API server --grpc-web Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. --grpc-web-root-path string Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. Set web root. -H, --header strings Sets additional header to all requests made by Argo CD CLI. (Can be repeated multiple times to add multiple headers, also supports comma separated headers) + --http-retry-max int Maximum number of retries to establish http connection to Argo CD server --insecure Skip server certificate and domain verification + --insecure-skip-tls-verify If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure --logformat string Set the logging format. One of: text|json (default "text") --loglevel string Set the logging level. One of: debug|info|warn|error (default "info") + -n, --namespace string If present, the namespace scope for this CLI request + --password string Password for basic authentication to the API server --plaintext Disable TLS --port-forward Connect to a random argocd-server port using port forwarding --port-forward-namespace string Namespace name which should be used for port forwarding - --server string Argo CD server address + --request-timeout string The length of time to wait before giving up on a single server request. Non-zero values should contain a corresponding time unit (e.g. 1s, 2m, 3h). A value of zero means don't timeout requests. (default "0") + --server string The address and port of the Kubernetes API server --server-crt string Server certificate file + --tls-server-name string If provided, this name will be used to validate server certificate. If this is not provided, hostname used to contact the server is used. + --token string Bearer token for authentication to the API server + --user string The name of the kubeconfig user to use + --username string Username for basic authentication to the API server ``` ### SEE ALSO diff --git a/docs/user-guide/commands/argocd_proj_get.md b/docs/user-guide/commands/argocd_proj_get.md index 5b66cf9347083..f1d581c51c821 100644 --- a/docs/user-guide/commands/argocd_proj_get.md +++ b/docs/user-guide/commands/argocd_proj_get.md @@ -16,21 +16,38 @@ argocd proj get PROJECT [flags] ### Options inherited from parent commands ``` + --as string Username to impersonate for the operation + --as-group stringArray Group to impersonate for the operation, this flag can be repeated to specify multiple groups. --auth-token string Authentication token + --certificate-authority string Path to a cert file for the certificate authority + --client-certificate string Path to a client certificate file for TLS --client-crt string Client certificate file --client-crt-key string Client certificate key file + --client-key string Path to a client key file for TLS + --cluster string The name of the kubeconfig cluster to use --config string Path to Argo CD config (default "/home/user/.argocd/config") + --context string The name of the kubeconfig context to use + --core If set to true then CLI talks directly to Kubernetes instead of talking to Argo CD API server --grpc-web Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. --grpc-web-root-path string Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. Set web root. -H, --header strings Sets additional header to all requests made by Argo CD CLI. (Can be repeated multiple times to add multiple headers, also supports comma separated headers) + --http-retry-max int Maximum number of retries to establish http connection to Argo CD server --insecure Skip server certificate and domain verification + --insecure-skip-tls-verify If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure --logformat string Set the logging format. One of: text|json (default "text") --loglevel string Set the logging level. One of: debug|info|warn|error (default "info") + -n, --namespace string If present, the namespace scope for this CLI request + --password string Password for basic authentication to the API server --plaintext Disable TLS --port-forward Connect to a random argocd-server port using port forwarding --port-forward-namespace string Namespace name which should be used for port forwarding - --server string Argo CD server address + --request-timeout string The length of time to wait before giving up on a single server request. Non-zero values should contain a corresponding time unit (e.g. 1s, 2m, 3h). A value of zero means don't timeout requests. (default "0") + --server string The address and port of the Kubernetes API server --server-crt string Server certificate file + --tls-server-name string If provided, this name will be used to validate server certificate. If this is not provided, hostname used to contact the server is used. + --token string Bearer token for authentication to the API server + --user string The name of the kubeconfig user to use + --username string Username for basic authentication to the API server ``` ### SEE ALSO diff --git a/docs/user-guide/commands/argocd_proj_list.md b/docs/user-guide/commands/argocd_proj_list.md index 3eda716be3f04..8cb9b9176ccb0 100644 --- a/docs/user-guide/commands/argocd_proj_list.md +++ b/docs/user-guide/commands/argocd_proj_list.md @@ -16,21 +16,38 @@ argocd proj list [flags] ### Options inherited from parent commands ``` + --as string Username to impersonate for the operation + --as-group stringArray Group to impersonate for the operation, this flag can be repeated to specify multiple groups. --auth-token string Authentication token + --certificate-authority string Path to a cert file for the certificate authority + --client-certificate string Path to a client certificate file for TLS --client-crt string Client certificate file --client-crt-key string Client certificate key file + --client-key string Path to a client key file for TLS + --cluster string The name of the kubeconfig cluster to use --config string Path to Argo CD config (default "/home/user/.argocd/config") + --context string The name of the kubeconfig context to use + --core If set to true then CLI talks directly to Kubernetes instead of talking to Argo CD API server --grpc-web Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. --grpc-web-root-path string Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. Set web root. -H, --header strings Sets additional header to all requests made by Argo CD CLI. (Can be repeated multiple times to add multiple headers, also supports comma separated headers) + --http-retry-max int Maximum number of retries to establish http connection to Argo CD server --insecure Skip server certificate and domain verification + --insecure-skip-tls-verify If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure --logformat string Set the logging format. One of: text|json (default "text") --loglevel string Set the logging level. One of: debug|info|warn|error (default "info") + -n, --namespace string If present, the namespace scope for this CLI request + --password string Password for basic authentication to the API server --plaintext Disable TLS --port-forward Connect to a random argocd-server port using port forwarding --port-forward-namespace string Namespace name which should be used for port forwarding - --server string Argo CD server address + --request-timeout string The length of time to wait before giving up on a single server request. Non-zero values should contain a corresponding time unit (e.g. 1s, 2m, 3h). A value of zero means don't timeout requests. (default "0") + --server string The address and port of the Kubernetes API server --server-crt string Server certificate file + --tls-server-name string If provided, this name will be used to validate server certificate. If this is not provided, hostname used to contact the server is used. + --token string Bearer token for authentication to the API server + --user string The name of the kubeconfig user to use + --username string Username for basic authentication to the API server ``` ### SEE ALSO diff --git a/docs/user-guide/commands/argocd_proj_remove-destination.md b/docs/user-guide/commands/argocd_proj_remove-destination.md index 09c1690e2ea39..2c13ef83e3097 100644 --- a/docs/user-guide/commands/argocd_proj_remove-destination.md +++ b/docs/user-guide/commands/argocd_proj_remove-destination.md @@ -15,21 +15,38 @@ argocd proj remove-destination PROJECT SERVER NAMESPACE [flags] ### Options inherited from parent commands ``` + --as string Username to impersonate for the operation + --as-group stringArray Group to impersonate for the operation, this flag can be repeated to specify multiple groups. --auth-token string Authentication token + --certificate-authority string Path to a cert file for the certificate authority + --client-certificate string Path to a client certificate file for TLS --client-crt string Client certificate file --client-crt-key string Client certificate key file + --client-key string Path to a client key file for TLS + --cluster string The name of the kubeconfig cluster to use --config string Path to Argo CD config (default "/home/user/.argocd/config") + --context string The name of the kubeconfig context to use + --core If set to true then CLI talks directly to Kubernetes instead of talking to Argo CD API server --grpc-web Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. --grpc-web-root-path string Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. Set web root. -H, --header strings Sets additional header to all requests made by Argo CD CLI. (Can be repeated multiple times to add multiple headers, also supports comma separated headers) + --http-retry-max int Maximum number of retries to establish http connection to Argo CD server --insecure Skip server certificate and domain verification + --insecure-skip-tls-verify If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure --logformat string Set the logging format. One of: text|json (default "text") --loglevel string Set the logging level. One of: debug|info|warn|error (default "info") + -n, --namespace string If present, the namespace scope for this CLI request + --password string Password for basic authentication to the API server --plaintext Disable TLS --port-forward Connect to a random argocd-server port using port forwarding --port-forward-namespace string Namespace name which should be used for port forwarding - --server string Argo CD server address + --request-timeout string The length of time to wait before giving up on a single server request. Non-zero values should contain a corresponding time unit (e.g. 1s, 2m, 3h). A value of zero means don't timeout requests. (default "0") + --server string The address and port of the Kubernetes API server --server-crt string Server certificate file + --tls-server-name string If provided, this name will be used to validate server certificate. If this is not provided, hostname used to contact the server is used. + --token string Bearer token for authentication to the API server + --user string The name of the kubeconfig user to use + --username string Username for basic authentication to the API server ``` ### SEE ALSO diff --git a/docs/user-guide/commands/argocd_proj_remove-orphaned-ignore.md b/docs/user-guide/commands/argocd_proj_remove-orphaned-ignore.md index f10697fe35249..38b08c6592235 100644 --- a/docs/user-guide/commands/argocd_proj_remove-orphaned-ignore.md +++ b/docs/user-guide/commands/argocd_proj_remove-orphaned-ignore.md @@ -16,21 +16,38 @@ argocd proj remove-orphaned-ignore PROJECT GROUP KIND NAME [flags] ### Options inherited from parent commands ``` + --as string Username to impersonate for the operation + --as-group stringArray Group to impersonate for the operation, this flag can be repeated to specify multiple groups. --auth-token string Authentication token + --certificate-authority string Path to a cert file for the certificate authority + --client-certificate string Path to a client certificate file for TLS --client-crt string Client certificate file --client-crt-key string Client certificate key file + --client-key string Path to a client key file for TLS + --cluster string The name of the kubeconfig cluster to use --config string Path to Argo CD config (default "/home/user/.argocd/config") + --context string The name of the kubeconfig context to use + --core If set to true then CLI talks directly to Kubernetes instead of talking to Argo CD API server --grpc-web Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. --grpc-web-root-path string Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. Set web root. -H, --header strings Sets additional header to all requests made by Argo CD CLI. (Can be repeated multiple times to add multiple headers, also supports comma separated headers) + --http-retry-max int Maximum number of retries to establish http connection to Argo CD server --insecure Skip server certificate and domain verification + --insecure-skip-tls-verify If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure --logformat string Set the logging format. One of: text|json (default "text") --loglevel string Set the logging level. One of: debug|info|warn|error (default "info") + -n, --namespace string If present, the namespace scope for this CLI request + --password string Password for basic authentication to the API server --plaintext Disable TLS --port-forward Connect to a random argocd-server port using port forwarding --port-forward-namespace string Namespace name which should be used for port forwarding - --server string Argo CD server address + --request-timeout string The length of time to wait before giving up on a single server request. Non-zero values should contain a corresponding time unit (e.g. 1s, 2m, 3h). A value of zero means don't timeout requests. (default "0") + --server string The address and port of the Kubernetes API server --server-crt string Server certificate file + --tls-server-name string If provided, this name will be used to validate server certificate. If this is not provided, hostname used to contact the server is used. + --token string Bearer token for authentication to the API server + --user string The name of the kubeconfig user to use + --username string Username for basic authentication to the API server ``` ### SEE ALSO diff --git a/docs/user-guide/commands/argocd_proj_remove-signature-key.md b/docs/user-guide/commands/argocd_proj_remove-signature-key.md index d871886236ebd..8d9558f1a5584 100644 --- a/docs/user-guide/commands/argocd_proj_remove-signature-key.md +++ b/docs/user-guide/commands/argocd_proj_remove-signature-key.md @@ -15,21 +15,38 @@ argocd proj remove-signature-key PROJECT KEY-ID [flags] ### Options inherited from parent commands ``` + --as string Username to impersonate for the operation + --as-group stringArray Group to impersonate for the operation, this flag can be repeated to specify multiple groups. --auth-token string Authentication token + --certificate-authority string Path to a cert file for the certificate authority + --client-certificate string Path to a client certificate file for TLS --client-crt string Client certificate file --client-crt-key string Client certificate key file + --client-key string Path to a client key file for TLS + --cluster string The name of the kubeconfig cluster to use --config string Path to Argo CD config (default "/home/user/.argocd/config") + --context string The name of the kubeconfig context to use + --core If set to true then CLI talks directly to Kubernetes instead of talking to Argo CD API server --grpc-web Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. --grpc-web-root-path string Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. Set web root. -H, --header strings Sets additional header to all requests made by Argo CD CLI. (Can be repeated multiple times to add multiple headers, also supports comma separated headers) + --http-retry-max int Maximum number of retries to establish http connection to Argo CD server --insecure Skip server certificate and domain verification + --insecure-skip-tls-verify If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure --logformat string Set the logging format. One of: text|json (default "text") --loglevel string Set the logging level. One of: debug|info|warn|error (default "info") + -n, --namespace string If present, the namespace scope for this CLI request + --password string Password for basic authentication to the API server --plaintext Disable TLS --port-forward Connect to a random argocd-server port using port forwarding --port-forward-namespace string Namespace name which should be used for port forwarding - --server string Argo CD server address + --request-timeout string The length of time to wait before giving up on a single server request. Non-zero values should contain a corresponding time unit (e.g. 1s, 2m, 3h). A value of zero means don't timeout requests. (default "0") + --server string The address and port of the Kubernetes API server --server-crt string Server certificate file + --tls-server-name string If provided, this name will be used to validate server certificate. If this is not provided, hostname used to contact the server is used. + --token string Bearer token for authentication to the API server + --user string The name of the kubeconfig user to use + --username string Username for basic authentication to the API server ``` ### SEE ALSO diff --git a/docs/user-guide/commands/argocd_proj_remove-source.md b/docs/user-guide/commands/argocd_proj_remove-source.md index d9b07799237a5..536b4bda59011 100644 --- a/docs/user-guide/commands/argocd_proj_remove-source.md +++ b/docs/user-guide/commands/argocd_proj_remove-source.md @@ -15,21 +15,38 @@ argocd proj remove-source PROJECT URL [flags] ### Options inherited from parent commands ``` + --as string Username to impersonate for the operation + --as-group stringArray Group to impersonate for the operation, this flag can be repeated to specify multiple groups. --auth-token string Authentication token + --certificate-authority string Path to a cert file for the certificate authority + --client-certificate string Path to a client certificate file for TLS --client-crt string Client certificate file --client-crt-key string Client certificate key file + --client-key string Path to a client key file for TLS + --cluster string The name of the kubeconfig cluster to use --config string Path to Argo CD config (default "/home/user/.argocd/config") + --context string The name of the kubeconfig context to use + --core If set to true then CLI talks directly to Kubernetes instead of talking to Argo CD API server --grpc-web Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. --grpc-web-root-path string Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. Set web root. -H, --header strings Sets additional header to all requests made by Argo CD CLI. (Can be repeated multiple times to add multiple headers, also supports comma separated headers) + --http-retry-max int Maximum number of retries to establish http connection to Argo CD server --insecure Skip server certificate and domain verification + --insecure-skip-tls-verify If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure --logformat string Set the logging format. One of: text|json (default "text") --loglevel string Set the logging level. One of: debug|info|warn|error (default "info") + -n, --namespace string If present, the namespace scope for this CLI request + --password string Password for basic authentication to the API server --plaintext Disable TLS --port-forward Connect to a random argocd-server port using port forwarding --port-forward-namespace string Namespace name which should be used for port forwarding - --server string Argo CD server address + --request-timeout string The length of time to wait before giving up on a single server request. Non-zero values should contain a corresponding time unit (e.g. 1s, 2m, 3h). A value of zero means don't timeout requests. (default "0") + --server string The address and port of the Kubernetes API server --server-crt string Server certificate file + --tls-server-name string If provided, this name will be used to validate server certificate. If this is not provided, hostname used to contact the server is used. + --token string Bearer token for authentication to the API server + --user string The name of the kubeconfig user to use + --username string Username for basic authentication to the API server ``` ### SEE ALSO diff --git a/docs/user-guide/commands/argocd_proj_role.md b/docs/user-guide/commands/argocd_proj_role.md index e8d0dfe4f72b4..8ec4be8de09a6 100644 --- a/docs/user-guide/commands/argocd_proj_role.md +++ b/docs/user-guide/commands/argocd_proj_role.md @@ -15,21 +15,38 @@ argocd proj role [flags] ### Options inherited from parent commands ``` + --as string Username to impersonate for the operation + --as-group stringArray Group to impersonate for the operation, this flag can be repeated to specify multiple groups. --auth-token string Authentication token + --certificate-authority string Path to a cert file for the certificate authority + --client-certificate string Path to a client certificate file for TLS --client-crt string Client certificate file --client-crt-key string Client certificate key file + --client-key string Path to a client key file for TLS + --cluster string The name of the kubeconfig cluster to use --config string Path to Argo CD config (default "/home/user/.argocd/config") + --context string The name of the kubeconfig context to use + --core If set to true then CLI talks directly to Kubernetes instead of talking to Argo CD API server --grpc-web Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. --grpc-web-root-path string Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. Set web root. -H, --header strings Sets additional header to all requests made by Argo CD CLI. (Can be repeated multiple times to add multiple headers, also supports comma separated headers) + --http-retry-max int Maximum number of retries to establish http connection to Argo CD server --insecure Skip server certificate and domain verification + --insecure-skip-tls-verify If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure --logformat string Set the logging format. One of: text|json (default "text") --loglevel string Set the logging level. One of: debug|info|warn|error (default "info") + -n, --namespace string If present, the namespace scope for this CLI request + --password string Password for basic authentication to the API server --plaintext Disable TLS --port-forward Connect to a random argocd-server port using port forwarding --port-forward-namespace string Namespace name which should be used for port forwarding - --server string Argo CD server address + --request-timeout string The length of time to wait before giving up on a single server request. Non-zero values should contain a corresponding time unit (e.g. 1s, 2m, 3h). A value of zero means don't timeout requests. (default "0") + --server string The address and port of the Kubernetes API server --server-crt string Server certificate file + --tls-server-name string If provided, this name will be used to validate server certificate. If this is not provided, hostname used to contact the server is used. + --token string Bearer token for authentication to the API server + --user string The name of the kubeconfig user to use + --username string Username for basic authentication to the API server ``` ### SEE ALSO diff --git a/docs/user-guide/commands/argocd_proj_role_add-group.md b/docs/user-guide/commands/argocd_proj_role_add-group.md index 1b658d2236c7f..2cd6848b0d6c6 100644 --- a/docs/user-guide/commands/argocd_proj_role_add-group.md +++ b/docs/user-guide/commands/argocd_proj_role_add-group.md @@ -15,21 +15,38 @@ argocd proj role add-group PROJECT ROLE-NAME GROUP-CLAIM [flags] ### Options inherited from parent commands ``` + --as string Username to impersonate for the operation + --as-group stringArray Group to impersonate for the operation, this flag can be repeated to specify multiple groups. --auth-token string Authentication token + --certificate-authority string Path to a cert file for the certificate authority + --client-certificate string Path to a client certificate file for TLS --client-crt string Client certificate file --client-crt-key string Client certificate key file + --client-key string Path to a client key file for TLS + --cluster string The name of the kubeconfig cluster to use --config string Path to Argo CD config (default "/home/user/.argocd/config") + --context string The name of the kubeconfig context to use + --core If set to true then CLI talks directly to Kubernetes instead of talking to Argo CD API server --grpc-web Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. --grpc-web-root-path string Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. Set web root. -H, --header strings Sets additional header to all requests made by Argo CD CLI. (Can be repeated multiple times to add multiple headers, also supports comma separated headers) + --http-retry-max int Maximum number of retries to establish http connection to Argo CD server --insecure Skip server certificate and domain verification + --insecure-skip-tls-verify If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure --logformat string Set the logging format. One of: text|json (default "text") --loglevel string Set the logging level. One of: debug|info|warn|error (default "info") + -n, --namespace string If present, the namespace scope for this CLI request + --password string Password for basic authentication to the API server --plaintext Disable TLS --port-forward Connect to a random argocd-server port using port forwarding --port-forward-namespace string Namespace name which should be used for port forwarding - --server string Argo CD server address + --request-timeout string The length of time to wait before giving up on a single server request. Non-zero values should contain a corresponding time unit (e.g. 1s, 2m, 3h). A value of zero means don't timeout requests. (default "0") + --server string The address and port of the Kubernetes API server --server-crt string Server certificate file + --tls-server-name string If provided, this name will be used to validate server certificate. If this is not provided, hostname used to contact the server is used. + --token string Bearer token for authentication to the API server + --user string The name of the kubeconfig user to use + --username string Username for basic authentication to the API server ``` ### SEE ALSO diff --git a/docs/user-guide/commands/argocd_proj_role_add-policy.md b/docs/user-guide/commands/argocd_proj_role_add-policy.md index 07df0f82899c0..1a4fa5cc1b93e 100644 --- a/docs/user-guide/commands/argocd_proj_role_add-policy.md +++ b/docs/user-guide/commands/argocd_proj_role_add-policy.md @@ -18,21 +18,38 @@ argocd proj role add-policy PROJECT ROLE-NAME [flags] ### Options inherited from parent commands ``` + --as string Username to impersonate for the operation + --as-group stringArray Group to impersonate for the operation, this flag can be repeated to specify multiple groups. --auth-token string Authentication token + --certificate-authority string Path to a cert file for the certificate authority + --client-certificate string Path to a client certificate file for TLS --client-crt string Client certificate file --client-crt-key string Client certificate key file + --client-key string Path to a client key file for TLS + --cluster string The name of the kubeconfig cluster to use --config string Path to Argo CD config (default "/home/user/.argocd/config") + --context string The name of the kubeconfig context to use + --core If set to true then CLI talks directly to Kubernetes instead of talking to Argo CD API server --grpc-web Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. --grpc-web-root-path string Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. Set web root. -H, --header strings Sets additional header to all requests made by Argo CD CLI. (Can be repeated multiple times to add multiple headers, also supports comma separated headers) + --http-retry-max int Maximum number of retries to establish http connection to Argo CD server --insecure Skip server certificate and domain verification + --insecure-skip-tls-verify If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure --logformat string Set the logging format. One of: text|json (default "text") --loglevel string Set the logging level. One of: debug|info|warn|error (default "info") + -n, --namespace string If present, the namespace scope for this CLI request + --password string Password for basic authentication to the API server --plaintext Disable TLS --port-forward Connect to a random argocd-server port using port forwarding --port-forward-namespace string Namespace name which should be used for port forwarding - --server string Argo CD server address + --request-timeout string The length of time to wait before giving up on a single server request. Non-zero values should contain a corresponding time unit (e.g. 1s, 2m, 3h). A value of zero means don't timeout requests. (default "0") + --server string The address and port of the Kubernetes API server --server-crt string Server certificate file + --tls-server-name string If provided, this name will be used to validate server certificate. If this is not provided, hostname used to contact the server is used. + --token string Bearer token for authentication to the API server + --user string The name of the kubeconfig user to use + --username string Username for basic authentication to the API server ``` ### SEE ALSO diff --git a/docs/user-guide/commands/argocd_proj_role_create-token.md b/docs/user-guide/commands/argocd_proj_role_create-token.md index 37db97835dda5..db27971208702 100644 --- a/docs/user-guide/commands/argocd_proj_role_create-token.md +++ b/docs/user-guide/commands/argocd_proj_role_create-token.md @@ -9,7 +9,7 @@ argocd proj role create-token PROJECT ROLE-NAME [flags] ### Options ``` - -e, --expires-in string Duration before the token will expire, eg "12h", "7d". (Default: No expiration) + -e, --expires-in string Duration before the token will expire, e.g. "12h", "7d". (Default: No expiration) -h, --help help for create-token -i, --id string Token unique identifier. (Default: Random UUID) -t, --token-only Output token only - for use in scripts. @@ -18,21 +18,38 @@ argocd proj role create-token PROJECT ROLE-NAME [flags] ### Options inherited from parent commands ``` + --as string Username to impersonate for the operation + --as-group stringArray Group to impersonate for the operation, this flag can be repeated to specify multiple groups. --auth-token string Authentication token + --certificate-authority string Path to a cert file for the certificate authority + --client-certificate string Path to a client certificate file for TLS --client-crt string Client certificate file --client-crt-key string Client certificate key file + --client-key string Path to a client key file for TLS + --cluster string The name of the kubeconfig cluster to use --config string Path to Argo CD config (default "/home/user/.argocd/config") + --context string The name of the kubeconfig context to use + --core If set to true then CLI talks directly to Kubernetes instead of talking to Argo CD API server --grpc-web Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. --grpc-web-root-path string Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. Set web root. -H, --header strings Sets additional header to all requests made by Argo CD CLI. (Can be repeated multiple times to add multiple headers, also supports comma separated headers) + --http-retry-max int Maximum number of retries to establish http connection to Argo CD server --insecure Skip server certificate and domain verification + --insecure-skip-tls-verify If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure --logformat string Set the logging format. One of: text|json (default "text") --loglevel string Set the logging level. One of: debug|info|warn|error (default "info") + -n, --namespace string If present, the namespace scope for this CLI request + --password string Password for basic authentication to the API server --plaintext Disable TLS --port-forward Connect to a random argocd-server port using port forwarding --port-forward-namespace string Namespace name which should be used for port forwarding - --server string Argo CD server address + --request-timeout string The length of time to wait before giving up on a single server request. Non-zero values should contain a corresponding time unit (e.g. 1s, 2m, 3h). A value of zero means don't timeout requests. (default "0") + --server string The address and port of the Kubernetes API server --server-crt string Server certificate file + --tls-server-name string If provided, this name will be used to validate server certificate. If this is not provided, hostname used to contact the server is used. + --token string Bearer token for authentication to the API server + --user string The name of the kubeconfig user to use + --username string Username for basic authentication to the API server ``` ### SEE ALSO diff --git a/docs/user-guide/commands/argocd_proj_role_create.md b/docs/user-guide/commands/argocd_proj_role_create.md index 281657df4caed..f912a124f59e3 100644 --- a/docs/user-guide/commands/argocd_proj_role_create.md +++ b/docs/user-guide/commands/argocd_proj_role_create.md @@ -16,21 +16,38 @@ argocd proj role create PROJECT ROLE-NAME [flags] ### Options inherited from parent commands ``` + --as string Username to impersonate for the operation + --as-group stringArray Group to impersonate for the operation, this flag can be repeated to specify multiple groups. --auth-token string Authentication token + --certificate-authority string Path to a cert file for the certificate authority + --client-certificate string Path to a client certificate file for TLS --client-crt string Client certificate file --client-crt-key string Client certificate key file + --client-key string Path to a client key file for TLS + --cluster string The name of the kubeconfig cluster to use --config string Path to Argo CD config (default "/home/user/.argocd/config") + --context string The name of the kubeconfig context to use + --core If set to true then CLI talks directly to Kubernetes instead of talking to Argo CD API server --grpc-web Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. --grpc-web-root-path string Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. Set web root. -H, --header strings Sets additional header to all requests made by Argo CD CLI. (Can be repeated multiple times to add multiple headers, also supports comma separated headers) + --http-retry-max int Maximum number of retries to establish http connection to Argo CD server --insecure Skip server certificate and domain verification + --insecure-skip-tls-verify If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure --logformat string Set the logging format. One of: text|json (default "text") --loglevel string Set the logging level. One of: debug|info|warn|error (default "info") + -n, --namespace string If present, the namespace scope for this CLI request + --password string Password for basic authentication to the API server --plaintext Disable TLS --port-forward Connect to a random argocd-server port using port forwarding --port-forward-namespace string Namespace name which should be used for port forwarding - --server string Argo CD server address + --request-timeout string The length of time to wait before giving up on a single server request. Non-zero values should contain a corresponding time unit (e.g. 1s, 2m, 3h). A value of zero means don't timeout requests. (default "0") + --server string The address and port of the Kubernetes API server --server-crt string Server certificate file + --tls-server-name string If provided, this name will be used to validate server certificate. If this is not provided, hostname used to contact the server is used. + --token string Bearer token for authentication to the API server + --user string The name of the kubeconfig user to use + --username string Username for basic authentication to the API server ``` ### SEE ALSO diff --git a/docs/user-guide/commands/argocd_proj_role_delete-token.md b/docs/user-guide/commands/argocd_proj_role_delete-token.md index fda7565d24d51..1afa64f87376d 100644 --- a/docs/user-guide/commands/argocd_proj_role_delete-token.md +++ b/docs/user-guide/commands/argocd_proj_role_delete-token.md @@ -15,21 +15,38 @@ argocd proj role delete-token PROJECT ROLE-NAME ISSUED-AT [flags] ### Options inherited from parent commands ``` + --as string Username to impersonate for the operation + --as-group stringArray Group to impersonate for the operation, this flag can be repeated to specify multiple groups. --auth-token string Authentication token + --certificate-authority string Path to a cert file for the certificate authority + --client-certificate string Path to a client certificate file for TLS --client-crt string Client certificate file --client-crt-key string Client certificate key file + --client-key string Path to a client key file for TLS + --cluster string The name of the kubeconfig cluster to use --config string Path to Argo CD config (default "/home/user/.argocd/config") + --context string The name of the kubeconfig context to use + --core If set to true then CLI talks directly to Kubernetes instead of talking to Argo CD API server --grpc-web Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. --grpc-web-root-path string Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. Set web root. -H, --header strings Sets additional header to all requests made by Argo CD CLI. (Can be repeated multiple times to add multiple headers, also supports comma separated headers) + --http-retry-max int Maximum number of retries to establish http connection to Argo CD server --insecure Skip server certificate and domain verification + --insecure-skip-tls-verify If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure --logformat string Set the logging format. One of: text|json (default "text") --loglevel string Set the logging level. One of: debug|info|warn|error (default "info") + -n, --namespace string If present, the namespace scope for this CLI request + --password string Password for basic authentication to the API server --plaintext Disable TLS --port-forward Connect to a random argocd-server port using port forwarding --port-forward-namespace string Namespace name which should be used for port forwarding - --server string Argo CD server address + --request-timeout string The length of time to wait before giving up on a single server request. Non-zero values should contain a corresponding time unit (e.g. 1s, 2m, 3h). A value of zero means don't timeout requests. (default "0") + --server string The address and port of the Kubernetes API server --server-crt string Server certificate file + --tls-server-name string If provided, this name will be used to validate server certificate. If this is not provided, hostname used to contact the server is used. + --token string Bearer token for authentication to the API server + --user string The name of the kubeconfig user to use + --username string Username for basic authentication to the API server ``` ### SEE ALSO diff --git a/docs/user-guide/commands/argocd_proj_role_delete.md b/docs/user-guide/commands/argocd_proj_role_delete.md index 6f332f0cf30e3..7a34a01ae825c 100644 --- a/docs/user-guide/commands/argocd_proj_role_delete.md +++ b/docs/user-guide/commands/argocd_proj_role_delete.md @@ -15,21 +15,38 @@ argocd proj role delete PROJECT ROLE-NAME [flags] ### Options inherited from parent commands ``` + --as string Username to impersonate for the operation + --as-group stringArray Group to impersonate for the operation, this flag can be repeated to specify multiple groups. --auth-token string Authentication token + --certificate-authority string Path to a cert file for the certificate authority + --client-certificate string Path to a client certificate file for TLS --client-crt string Client certificate file --client-crt-key string Client certificate key file + --client-key string Path to a client key file for TLS + --cluster string The name of the kubeconfig cluster to use --config string Path to Argo CD config (default "/home/user/.argocd/config") + --context string The name of the kubeconfig context to use + --core If set to true then CLI talks directly to Kubernetes instead of talking to Argo CD API server --grpc-web Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. --grpc-web-root-path string Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. Set web root. -H, --header strings Sets additional header to all requests made by Argo CD CLI. (Can be repeated multiple times to add multiple headers, also supports comma separated headers) + --http-retry-max int Maximum number of retries to establish http connection to Argo CD server --insecure Skip server certificate and domain verification + --insecure-skip-tls-verify If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure --logformat string Set the logging format. One of: text|json (default "text") --loglevel string Set the logging level. One of: debug|info|warn|error (default "info") + -n, --namespace string If present, the namespace scope for this CLI request + --password string Password for basic authentication to the API server --plaintext Disable TLS --port-forward Connect to a random argocd-server port using port forwarding --port-forward-namespace string Namespace name which should be used for port forwarding - --server string Argo CD server address + --request-timeout string The length of time to wait before giving up on a single server request. Non-zero values should contain a corresponding time unit (e.g. 1s, 2m, 3h). A value of zero means don't timeout requests. (default "0") + --server string The address and port of the Kubernetes API server --server-crt string Server certificate file + --tls-server-name string If provided, this name will be used to validate server certificate. If this is not provided, hostname used to contact the server is used. + --token string Bearer token for authentication to the API server + --user string The name of the kubeconfig user to use + --username string Username for basic authentication to the API server ``` ### SEE ALSO diff --git a/docs/user-guide/commands/argocd_proj_role_get.md b/docs/user-guide/commands/argocd_proj_role_get.md index 42a31ec78822c..468e43b59205d 100644 --- a/docs/user-guide/commands/argocd_proj_role_get.md +++ b/docs/user-guide/commands/argocd_proj_role_get.md @@ -15,21 +15,38 @@ argocd proj role get PROJECT ROLE-NAME [flags] ### Options inherited from parent commands ``` + --as string Username to impersonate for the operation + --as-group stringArray Group to impersonate for the operation, this flag can be repeated to specify multiple groups. --auth-token string Authentication token + --certificate-authority string Path to a cert file for the certificate authority + --client-certificate string Path to a client certificate file for TLS --client-crt string Client certificate file --client-crt-key string Client certificate key file + --client-key string Path to a client key file for TLS + --cluster string The name of the kubeconfig cluster to use --config string Path to Argo CD config (default "/home/user/.argocd/config") + --context string The name of the kubeconfig context to use + --core If set to true then CLI talks directly to Kubernetes instead of talking to Argo CD API server --grpc-web Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. --grpc-web-root-path string Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. Set web root. -H, --header strings Sets additional header to all requests made by Argo CD CLI. (Can be repeated multiple times to add multiple headers, also supports comma separated headers) + --http-retry-max int Maximum number of retries to establish http connection to Argo CD server --insecure Skip server certificate and domain verification + --insecure-skip-tls-verify If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure --logformat string Set the logging format. One of: text|json (default "text") --loglevel string Set the logging level. One of: debug|info|warn|error (default "info") + -n, --namespace string If present, the namespace scope for this CLI request + --password string Password for basic authentication to the API server --plaintext Disable TLS --port-forward Connect to a random argocd-server port using port forwarding --port-forward-namespace string Namespace name which should be used for port forwarding - --server string Argo CD server address + --request-timeout string The length of time to wait before giving up on a single server request. Non-zero values should contain a corresponding time unit (e.g. 1s, 2m, 3h). A value of zero means don't timeout requests. (default "0") + --server string The address and port of the Kubernetes API server --server-crt string Server certificate file + --tls-server-name string If provided, this name will be used to validate server certificate. If this is not provided, hostname used to contact the server is used. + --token string Bearer token for authentication to the API server + --user string The name of the kubeconfig user to use + --username string Username for basic authentication to the API server ``` ### SEE ALSO diff --git a/docs/user-guide/commands/argocd_proj_role_list-tokens.md b/docs/user-guide/commands/argocd_proj_role_list-tokens.md index 73d9b25a4894d..9bcff465e9b8c 100644 --- a/docs/user-guide/commands/argocd_proj_role_list-tokens.md +++ b/docs/user-guide/commands/argocd_proj_role_list-tokens.md @@ -16,21 +16,38 @@ argocd proj role list-tokens PROJECT ROLE-NAME [flags] ### Options inherited from parent commands ``` + --as string Username to impersonate for the operation + --as-group stringArray Group to impersonate for the operation, this flag can be repeated to specify multiple groups. --auth-token string Authentication token + --certificate-authority string Path to a cert file for the certificate authority + --client-certificate string Path to a client certificate file for TLS --client-crt string Client certificate file --client-crt-key string Client certificate key file + --client-key string Path to a client key file for TLS + --cluster string The name of the kubeconfig cluster to use --config string Path to Argo CD config (default "/home/user/.argocd/config") + --context string The name of the kubeconfig context to use + --core If set to true then CLI talks directly to Kubernetes instead of talking to Argo CD API server --grpc-web Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. --grpc-web-root-path string Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. Set web root. -H, --header strings Sets additional header to all requests made by Argo CD CLI. (Can be repeated multiple times to add multiple headers, also supports comma separated headers) + --http-retry-max int Maximum number of retries to establish http connection to Argo CD server --insecure Skip server certificate and domain verification + --insecure-skip-tls-verify If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure --logformat string Set the logging format. One of: text|json (default "text") --loglevel string Set the logging level. One of: debug|info|warn|error (default "info") + -n, --namespace string If present, the namespace scope for this CLI request + --password string Password for basic authentication to the API server --plaintext Disable TLS --port-forward Connect to a random argocd-server port using port forwarding --port-forward-namespace string Namespace name which should be used for port forwarding - --server string Argo CD server address + --request-timeout string The length of time to wait before giving up on a single server request. Non-zero values should contain a corresponding time unit (e.g. 1s, 2m, 3h). A value of zero means don't timeout requests. (default "0") + --server string The address and port of the Kubernetes API server --server-crt string Server certificate file + --tls-server-name string If provided, this name will be used to validate server certificate. If this is not provided, hostname used to contact the server is used. + --token string Bearer token for authentication to the API server + --user string The name of the kubeconfig user to use + --username string Username for basic authentication to the API server ``` ### SEE ALSO diff --git a/docs/user-guide/commands/argocd_proj_role_list.md b/docs/user-guide/commands/argocd_proj_role_list.md index 76c793cdbe889..6ca61ab566c8a 100644 --- a/docs/user-guide/commands/argocd_proj_role_list.md +++ b/docs/user-guide/commands/argocd_proj_role_list.md @@ -16,21 +16,38 @@ argocd proj role list PROJECT [flags] ### Options inherited from parent commands ``` + --as string Username to impersonate for the operation + --as-group stringArray Group to impersonate for the operation, this flag can be repeated to specify multiple groups. --auth-token string Authentication token + --certificate-authority string Path to a cert file for the certificate authority + --client-certificate string Path to a client certificate file for TLS --client-crt string Client certificate file --client-crt-key string Client certificate key file + --client-key string Path to a client key file for TLS + --cluster string The name of the kubeconfig cluster to use --config string Path to Argo CD config (default "/home/user/.argocd/config") + --context string The name of the kubeconfig context to use + --core If set to true then CLI talks directly to Kubernetes instead of talking to Argo CD API server --grpc-web Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. --grpc-web-root-path string Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. Set web root. -H, --header strings Sets additional header to all requests made by Argo CD CLI. (Can be repeated multiple times to add multiple headers, also supports comma separated headers) + --http-retry-max int Maximum number of retries to establish http connection to Argo CD server --insecure Skip server certificate and domain verification + --insecure-skip-tls-verify If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure --logformat string Set the logging format. One of: text|json (default "text") --loglevel string Set the logging level. One of: debug|info|warn|error (default "info") + -n, --namespace string If present, the namespace scope for this CLI request + --password string Password for basic authentication to the API server --plaintext Disable TLS --port-forward Connect to a random argocd-server port using port forwarding --port-forward-namespace string Namespace name which should be used for port forwarding - --server string Argo CD server address + --request-timeout string The length of time to wait before giving up on a single server request. Non-zero values should contain a corresponding time unit (e.g. 1s, 2m, 3h). A value of zero means don't timeout requests. (default "0") + --server string The address and port of the Kubernetes API server --server-crt string Server certificate file + --tls-server-name string If provided, this name will be used to validate server certificate. If this is not provided, hostname used to contact the server is used. + --token string Bearer token for authentication to the API server + --user string The name of the kubeconfig user to use + --username string Username for basic authentication to the API server ``` ### SEE ALSO diff --git a/docs/user-guide/commands/argocd_proj_role_remove-group.md b/docs/user-guide/commands/argocd_proj_role_remove-group.md index 05c06a411985f..3e195d563439d 100644 --- a/docs/user-guide/commands/argocd_proj_role_remove-group.md +++ b/docs/user-guide/commands/argocd_proj_role_remove-group.md @@ -15,21 +15,38 @@ argocd proj role remove-group PROJECT ROLE-NAME GROUP-CLAIM [flags] ### Options inherited from parent commands ``` + --as string Username to impersonate for the operation + --as-group stringArray Group to impersonate for the operation, this flag can be repeated to specify multiple groups. --auth-token string Authentication token + --certificate-authority string Path to a cert file for the certificate authority + --client-certificate string Path to a client certificate file for TLS --client-crt string Client certificate file --client-crt-key string Client certificate key file + --client-key string Path to a client key file for TLS + --cluster string The name of the kubeconfig cluster to use --config string Path to Argo CD config (default "/home/user/.argocd/config") + --context string The name of the kubeconfig context to use + --core If set to true then CLI talks directly to Kubernetes instead of talking to Argo CD API server --grpc-web Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. --grpc-web-root-path string Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. Set web root. -H, --header strings Sets additional header to all requests made by Argo CD CLI. (Can be repeated multiple times to add multiple headers, also supports comma separated headers) + --http-retry-max int Maximum number of retries to establish http connection to Argo CD server --insecure Skip server certificate and domain verification + --insecure-skip-tls-verify If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure --logformat string Set the logging format. One of: text|json (default "text") --loglevel string Set the logging level. One of: debug|info|warn|error (default "info") + -n, --namespace string If present, the namespace scope for this CLI request + --password string Password for basic authentication to the API server --plaintext Disable TLS --port-forward Connect to a random argocd-server port using port forwarding --port-forward-namespace string Namespace name which should be used for port forwarding - --server string Argo CD server address + --request-timeout string The length of time to wait before giving up on a single server request. Non-zero values should contain a corresponding time unit (e.g. 1s, 2m, 3h). A value of zero means don't timeout requests. (default "0") + --server string The address and port of the Kubernetes API server --server-crt string Server certificate file + --tls-server-name string If provided, this name will be used to validate server certificate. If this is not provided, hostname used to contact the server is used. + --token string Bearer token for authentication to the API server + --user string The name of the kubeconfig user to use + --username string Username for basic authentication to the API server ``` ### SEE ALSO diff --git a/docs/user-guide/commands/argocd_proj_role_remove-policy.md b/docs/user-guide/commands/argocd_proj_role_remove-policy.md index dbd1d9fbee6be..c94fa5816f50b 100644 --- a/docs/user-guide/commands/argocd_proj_role_remove-policy.md +++ b/docs/user-guide/commands/argocd_proj_role_remove-policy.md @@ -18,21 +18,38 @@ argocd proj role remove-policy PROJECT ROLE-NAME [flags] ### Options inherited from parent commands ``` + --as string Username to impersonate for the operation + --as-group stringArray Group to impersonate for the operation, this flag can be repeated to specify multiple groups. --auth-token string Authentication token + --certificate-authority string Path to a cert file for the certificate authority + --client-certificate string Path to a client certificate file for TLS --client-crt string Client certificate file --client-crt-key string Client certificate key file + --client-key string Path to a client key file for TLS + --cluster string The name of the kubeconfig cluster to use --config string Path to Argo CD config (default "/home/user/.argocd/config") + --context string The name of the kubeconfig context to use + --core If set to true then CLI talks directly to Kubernetes instead of talking to Argo CD API server --grpc-web Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. --grpc-web-root-path string Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. Set web root. -H, --header strings Sets additional header to all requests made by Argo CD CLI. (Can be repeated multiple times to add multiple headers, also supports comma separated headers) + --http-retry-max int Maximum number of retries to establish http connection to Argo CD server --insecure Skip server certificate and domain verification + --insecure-skip-tls-verify If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure --logformat string Set the logging format. One of: text|json (default "text") --loglevel string Set the logging level. One of: debug|info|warn|error (default "info") + -n, --namespace string If present, the namespace scope for this CLI request + --password string Password for basic authentication to the API server --plaintext Disable TLS --port-forward Connect to a random argocd-server port using port forwarding --port-forward-namespace string Namespace name which should be used for port forwarding - --server string Argo CD server address + --request-timeout string The length of time to wait before giving up on a single server request. Non-zero values should contain a corresponding time unit (e.g. 1s, 2m, 3h). A value of zero means don't timeout requests. (default "0") + --server string The address and port of the Kubernetes API server --server-crt string Server certificate file + --tls-server-name string If provided, this name will be used to validate server certificate. If this is not provided, hostname used to contact the server is used. + --token string Bearer token for authentication to the API server + --user string The name of the kubeconfig user to use + --username string Username for basic authentication to the API server ``` ### SEE ALSO diff --git a/docs/user-guide/commands/argocd_proj_set.md b/docs/user-guide/commands/argocd_proj_set.md index b7b578b755422..36998cfd18440 100644 --- a/docs/user-guide/commands/argocd_proj_set.md +++ b/docs/user-guide/commands/argocd_proj_set.md @@ -25,21 +25,38 @@ argocd proj set PROJECT [flags] ### Options inherited from parent commands ``` + --as string Username to impersonate for the operation + --as-group stringArray Group to impersonate for the operation, this flag can be repeated to specify multiple groups. --auth-token string Authentication token + --certificate-authority string Path to a cert file for the certificate authority + --client-certificate string Path to a client certificate file for TLS --client-crt string Client certificate file --client-crt-key string Client certificate key file + --client-key string Path to a client key file for TLS + --cluster string The name of the kubeconfig cluster to use --config string Path to Argo CD config (default "/home/user/.argocd/config") + --context string The name of the kubeconfig context to use + --core If set to true then CLI talks directly to Kubernetes instead of talking to Argo CD API server --grpc-web Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. --grpc-web-root-path string Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. Set web root. -H, --header strings Sets additional header to all requests made by Argo CD CLI. (Can be repeated multiple times to add multiple headers, also supports comma separated headers) + --http-retry-max int Maximum number of retries to establish http connection to Argo CD server --insecure Skip server certificate and domain verification + --insecure-skip-tls-verify If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure --logformat string Set the logging format. One of: text|json (default "text") --loglevel string Set the logging level. One of: debug|info|warn|error (default "info") + -n, --namespace string If present, the namespace scope for this CLI request + --password string Password for basic authentication to the API server --plaintext Disable TLS --port-forward Connect to a random argocd-server port using port forwarding --port-forward-namespace string Namespace name which should be used for port forwarding - --server string Argo CD server address + --request-timeout string The length of time to wait before giving up on a single server request. Non-zero values should contain a corresponding time unit (e.g. 1s, 2m, 3h). A value of zero means don't timeout requests. (default "0") + --server string The address and port of the Kubernetes API server --server-crt string Server certificate file + --tls-server-name string If provided, this name will be used to validate server certificate. If this is not provided, hostname used to contact the server is used. + --token string Bearer token for authentication to the API server + --user string The name of the kubeconfig user to use + --username string Username for basic authentication to the API server ``` ### SEE ALSO diff --git a/docs/user-guide/commands/argocd_proj_windows.md b/docs/user-guide/commands/argocd_proj_windows.md index 79bbc46025e17..5f67720e55009 100644 --- a/docs/user-guide/commands/argocd_proj_windows.md +++ b/docs/user-guide/commands/argocd_proj_windows.md @@ -15,21 +15,38 @@ argocd proj windows [flags] ### Options inherited from parent commands ``` + --as string Username to impersonate for the operation + --as-group stringArray Group to impersonate for the operation, this flag can be repeated to specify multiple groups. --auth-token string Authentication token + --certificate-authority string Path to a cert file for the certificate authority + --client-certificate string Path to a client certificate file for TLS --client-crt string Client certificate file --client-crt-key string Client certificate key file + --client-key string Path to a client key file for TLS + --cluster string The name of the kubeconfig cluster to use --config string Path to Argo CD config (default "/home/user/.argocd/config") + --context string The name of the kubeconfig context to use + --core If set to true then CLI talks directly to Kubernetes instead of talking to Argo CD API server --grpc-web Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. --grpc-web-root-path string Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. Set web root. -H, --header strings Sets additional header to all requests made by Argo CD CLI. (Can be repeated multiple times to add multiple headers, also supports comma separated headers) + --http-retry-max int Maximum number of retries to establish http connection to Argo CD server --insecure Skip server certificate and domain verification + --insecure-skip-tls-verify If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure --logformat string Set the logging format. One of: text|json (default "text") --loglevel string Set the logging level. One of: debug|info|warn|error (default "info") + -n, --namespace string If present, the namespace scope for this CLI request + --password string Password for basic authentication to the API server --plaintext Disable TLS --port-forward Connect to a random argocd-server port using port forwarding --port-forward-namespace string Namespace name which should be used for port forwarding - --server string Argo CD server address + --request-timeout string The length of time to wait before giving up on a single server request. Non-zero values should contain a corresponding time unit (e.g. 1s, 2m, 3h). A value of zero means don't timeout requests. (default "0") + --server string The address and port of the Kubernetes API server --server-crt string Server certificate file + --tls-server-name string If provided, this name will be used to validate server certificate. If this is not provided, hostname used to contact the server is used. + --token string Bearer token for authentication to the API server + --user string The name of the kubeconfig user to use + --username string Username for basic authentication to the API server ``` ### SEE ALSO diff --git a/docs/user-guide/commands/argocd_proj_windows_add.md b/docs/user-guide/commands/argocd_proj_windows_add.md index b4e7bb7433df5..21c39e016f71a 100644 --- a/docs/user-guide/commands/argocd_proj_windows_add.md +++ b/docs/user-guide/commands/argocd_proj_windows_add.md @@ -22,21 +22,38 @@ argocd proj windows add PROJECT [flags] ### Options inherited from parent commands ``` + --as string Username to impersonate for the operation + --as-group stringArray Group to impersonate for the operation, this flag can be repeated to specify multiple groups. --auth-token string Authentication token + --certificate-authority string Path to a cert file for the certificate authority + --client-certificate string Path to a client certificate file for TLS --client-crt string Client certificate file --client-crt-key string Client certificate key file + --client-key string Path to a client key file for TLS + --cluster string The name of the kubeconfig cluster to use --config string Path to Argo CD config (default "/home/user/.argocd/config") + --context string The name of the kubeconfig context to use + --core If set to true then CLI talks directly to Kubernetes instead of talking to Argo CD API server --grpc-web Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. --grpc-web-root-path string Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. Set web root. -H, --header strings Sets additional header to all requests made by Argo CD CLI. (Can be repeated multiple times to add multiple headers, also supports comma separated headers) + --http-retry-max int Maximum number of retries to establish http connection to Argo CD server --insecure Skip server certificate and domain verification + --insecure-skip-tls-verify If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure --logformat string Set the logging format. One of: text|json (default "text") --loglevel string Set the logging level. One of: debug|info|warn|error (default "info") + -n, --namespace string If present, the namespace scope for this CLI request + --password string Password for basic authentication to the API server --plaintext Disable TLS --port-forward Connect to a random argocd-server port using port forwarding --port-forward-namespace string Namespace name which should be used for port forwarding - --server string Argo CD server address + --request-timeout string The length of time to wait before giving up on a single server request. Non-zero values should contain a corresponding time unit (e.g. 1s, 2m, 3h). A value of zero means don't timeout requests. (default "0") + --server string The address and port of the Kubernetes API server --server-crt string Server certificate file + --tls-server-name string If provided, this name will be used to validate server certificate. If this is not provided, hostname used to contact the server is used. + --token string Bearer token for authentication to the API server + --user string The name of the kubeconfig user to use + --username string Username for basic authentication to the API server ``` ### SEE ALSO diff --git a/docs/user-guide/commands/argocd_proj_windows_delete.md b/docs/user-guide/commands/argocd_proj_windows_delete.md index 66073712f8f9c..6944bed0640c0 100644 --- a/docs/user-guide/commands/argocd_proj_windows_delete.md +++ b/docs/user-guide/commands/argocd_proj_windows_delete.md @@ -15,21 +15,38 @@ argocd proj windows delete PROJECT ID [flags] ### Options inherited from parent commands ``` + --as string Username to impersonate for the operation + --as-group stringArray Group to impersonate for the operation, this flag can be repeated to specify multiple groups. --auth-token string Authentication token + --certificate-authority string Path to a cert file for the certificate authority + --client-certificate string Path to a client certificate file for TLS --client-crt string Client certificate file --client-crt-key string Client certificate key file + --client-key string Path to a client key file for TLS + --cluster string The name of the kubeconfig cluster to use --config string Path to Argo CD config (default "/home/user/.argocd/config") + --context string The name of the kubeconfig context to use + --core If set to true then CLI talks directly to Kubernetes instead of talking to Argo CD API server --grpc-web Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. --grpc-web-root-path string Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. Set web root. -H, --header strings Sets additional header to all requests made by Argo CD CLI. (Can be repeated multiple times to add multiple headers, also supports comma separated headers) + --http-retry-max int Maximum number of retries to establish http connection to Argo CD server --insecure Skip server certificate and domain verification + --insecure-skip-tls-verify If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure --logformat string Set the logging format. One of: text|json (default "text") --loglevel string Set the logging level. One of: debug|info|warn|error (default "info") + -n, --namespace string If present, the namespace scope for this CLI request + --password string Password for basic authentication to the API server --plaintext Disable TLS --port-forward Connect to a random argocd-server port using port forwarding --port-forward-namespace string Namespace name which should be used for port forwarding - --server string Argo CD server address + --request-timeout string The length of time to wait before giving up on a single server request. Non-zero values should contain a corresponding time unit (e.g. 1s, 2m, 3h). A value of zero means don't timeout requests. (default "0") + --server string The address and port of the Kubernetes API server --server-crt string Server certificate file + --tls-server-name string If provided, this name will be used to validate server certificate. If this is not provided, hostname used to contact the server is used. + --token string Bearer token for authentication to the API server + --user string The name of the kubeconfig user to use + --username string Username for basic authentication to the API server ``` ### SEE ALSO diff --git a/docs/user-guide/commands/argocd_proj_windows_disable-manual-sync.md b/docs/user-guide/commands/argocd_proj_windows_disable-manual-sync.md index b041cfc92e37f..a97b60a27a1af 100644 --- a/docs/user-guide/commands/argocd_proj_windows_disable-manual-sync.md +++ b/docs/user-guide/commands/argocd_proj_windows_disable-manual-sync.md @@ -19,21 +19,38 @@ argocd proj windows disable-manual-sync PROJECT ID [flags] ### Options inherited from parent commands ``` + --as string Username to impersonate for the operation + --as-group stringArray Group to impersonate for the operation, this flag can be repeated to specify multiple groups. --auth-token string Authentication token + --certificate-authority string Path to a cert file for the certificate authority + --client-certificate string Path to a client certificate file for TLS --client-crt string Client certificate file --client-crt-key string Client certificate key file + --client-key string Path to a client key file for TLS + --cluster string The name of the kubeconfig cluster to use --config string Path to Argo CD config (default "/home/user/.argocd/config") + --context string The name of the kubeconfig context to use + --core If set to true then CLI talks directly to Kubernetes instead of talking to Argo CD API server --grpc-web Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. --grpc-web-root-path string Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. Set web root. -H, --header strings Sets additional header to all requests made by Argo CD CLI. (Can be repeated multiple times to add multiple headers, also supports comma separated headers) + --http-retry-max int Maximum number of retries to establish http connection to Argo CD server --insecure Skip server certificate and domain verification + --insecure-skip-tls-verify If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure --logformat string Set the logging format. One of: text|json (default "text") --loglevel string Set the logging level. One of: debug|info|warn|error (default "info") + -n, --namespace string If present, the namespace scope for this CLI request + --password string Password for basic authentication to the API server --plaintext Disable TLS --port-forward Connect to a random argocd-server port using port forwarding --port-forward-namespace string Namespace name which should be used for port forwarding - --server string Argo CD server address + --request-timeout string The length of time to wait before giving up on a single server request. Non-zero values should contain a corresponding time unit (e.g. 1s, 2m, 3h). A value of zero means don't timeout requests. (default "0") + --server string The address and port of the Kubernetes API server --server-crt string Server certificate file + --tls-server-name string If provided, this name will be used to validate server certificate. If this is not provided, hostname used to contact the server is used. + --token string Bearer token for authentication to the API server + --user string The name of the kubeconfig user to use + --username string Username for basic authentication to the API server ``` ### SEE ALSO diff --git a/docs/user-guide/commands/argocd_proj_windows_enable-manual-sync.md b/docs/user-guide/commands/argocd_proj_windows_enable-manual-sync.md index e73b1f1e19a13..3d9c2eba8b60a 100644 --- a/docs/user-guide/commands/argocd_proj_windows_enable-manual-sync.md +++ b/docs/user-guide/commands/argocd_proj_windows_enable-manual-sync.md @@ -19,21 +19,38 @@ argocd proj windows enable-manual-sync PROJECT ID [flags] ### Options inherited from parent commands ``` + --as string Username to impersonate for the operation + --as-group stringArray Group to impersonate for the operation, this flag can be repeated to specify multiple groups. --auth-token string Authentication token + --certificate-authority string Path to a cert file for the certificate authority + --client-certificate string Path to a client certificate file for TLS --client-crt string Client certificate file --client-crt-key string Client certificate key file + --client-key string Path to a client key file for TLS + --cluster string The name of the kubeconfig cluster to use --config string Path to Argo CD config (default "/home/user/.argocd/config") + --context string The name of the kubeconfig context to use + --core If set to true then CLI talks directly to Kubernetes instead of talking to Argo CD API server --grpc-web Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. --grpc-web-root-path string Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. Set web root. -H, --header strings Sets additional header to all requests made by Argo CD CLI. (Can be repeated multiple times to add multiple headers, also supports comma separated headers) + --http-retry-max int Maximum number of retries to establish http connection to Argo CD server --insecure Skip server certificate and domain verification + --insecure-skip-tls-verify If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure --logformat string Set the logging format. One of: text|json (default "text") --loglevel string Set the logging level. One of: debug|info|warn|error (default "info") + -n, --namespace string If present, the namespace scope for this CLI request + --password string Password for basic authentication to the API server --plaintext Disable TLS --port-forward Connect to a random argocd-server port using port forwarding --port-forward-namespace string Namespace name which should be used for port forwarding - --server string Argo CD server address + --request-timeout string The length of time to wait before giving up on a single server request. Non-zero values should contain a corresponding time unit (e.g. 1s, 2m, 3h). A value of zero means don't timeout requests. (default "0") + --server string The address and port of the Kubernetes API server --server-crt string Server certificate file + --tls-server-name string If provided, this name will be used to validate server certificate. If this is not provided, hostname used to contact the server is used. + --token string Bearer token for authentication to the API server + --user string The name of the kubeconfig user to use + --username string Username for basic authentication to the API server ``` ### SEE ALSO diff --git a/docs/user-guide/commands/argocd_proj_windows_list.md b/docs/user-guide/commands/argocd_proj_windows_list.md index 0e678f1957f30..11f4b80347056 100644 --- a/docs/user-guide/commands/argocd_proj_windows_list.md +++ b/docs/user-guide/commands/argocd_proj_windows_list.md @@ -16,21 +16,38 @@ argocd proj windows list PROJECT [flags] ### Options inherited from parent commands ``` + --as string Username to impersonate for the operation + --as-group stringArray Group to impersonate for the operation, this flag can be repeated to specify multiple groups. --auth-token string Authentication token + --certificate-authority string Path to a cert file for the certificate authority + --client-certificate string Path to a client certificate file for TLS --client-crt string Client certificate file --client-crt-key string Client certificate key file + --client-key string Path to a client key file for TLS + --cluster string The name of the kubeconfig cluster to use --config string Path to Argo CD config (default "/home/user/.argocd/config") + --context string The name of the kubeconfig context to use + --core If set to true then CLI talks directly to Kubernetes instead of talking to Argo CD API server --grpc-web Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. --grpc-web-root-path string Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. Set web root. -H, --header strings Sets additional header to all requests made by Argo CD CLI. (Can be repeated multiple times to add multiple headers, also supports comma separated headers) + --http-retry-max int Maximum number of retries to establish http connection to Argo CD server --insecure Skip server certificate and domain verification + --insecure-skip-tls-verify If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure --logformat string Set the logging format. One of: text|json (default "text") --loglevel string Set the logging level. One of: debug|info|warn|error (default "info") + -n, --namespace string If present, the namespace scope for this CLI request + --password string Password for basic authentication to the API server --plaintext Disable TLS --port-forward Connect to a random argocd-server port using port forwarding --port-forward-namespace string Namespace name which should be used for port forwarding - --server string Argo CD server address + --request-timeout string The length of time to wait before giving up on a single server request. Non-zero values should contain a corresponding time unit (e.g. 1s, 2m, 3h). A value of zero means don't timeout requests. (default "0") + --server string The address and port of the Kubernetes API server --server-crt string Server certificate file + --tls-server-name string If provided, this name will be used to validate server certificate. If this is not provided, hostname used to contact the server is used. + --token string Bearer token for authentication to the API server + --user string The name of the kubeconfig user to use + --username string Username for basic authentication to the API server ``` ### SEE ALSO diff --git a/docs/user-guide/commands/argocd_proj_windows_update.md b/docs/user-guide/commands/argocd_proj_windows_update.md index 91a05d86fcac4..90a255d0919c9 100644 --- a/docs/user-guide/commands/argocd_proj_windows_update.md +++ b/docs/user-guide/commands/argocd_proj_windows_update.md @@ -24,21 +24,38 @@ argocd proj windows update PROJECT ID [flags] ### Options inherited from parent commands ``` + --as string Username to impersonate for the operation + --as-group stringArray Group to impersonate for the operation, this flag can be repeated to specify multiple groups. --auth-token string Authentication token + --certificate-authority string Path to a cert file for the certificate authority + --client-certificate string Path to a client certificate file for TLS --client-crt string Client certificate file --client-crt-key string Client certificate key file + --client-key string Path to a client key file for TLS + --cluster string The name of the kubeconfig cluster to use --config string Path to Argo CD config (default "/home/user/.argocd/config") + --context string The name of the kubeconfig context to use + --core If set to true then CLI talks directly to Kubernetes instead of talking to Argo CD API server --grpc-web Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. --grpc-web-root-path string Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. Set web root. -H, --header strings Sets additional header to all requests made by Argo CD CLI. (Can be repeated multiple times to add multiple headers, also supports comma separated headers) + --http-retry-max int Maximum number of retries to establish http connection to Argo CD server --insecure Skip server certificate and domain verification + --insecure-skip-tls-verify If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure --logformat string Set the logging format. One of: text|json (default "text") --loglevel string Set the logging level. One of: debug|info|warn|error (default "info") + -n, --namespace string If present, the namespace scope for this CLI request + --password string Password for basic authentication to the API server --plaintext Disable TLS --port-forward Connect to a random argocd-server port using port forwarding --port-forward-namespace string Namespace name which should be used for port forwarding - --server string Argo CD server address + --request-timeout string The length of time to wait before giving up on a single server request. Non-zero values should contain a corresponding time unit (e.g. 1s, 2m, 3h). A value of zero means don't timeout requests. (default "0") + --server string The address and port of the Kubernetes API server --server-crt string Server certificate file + --tls-server-name string If provided, this name will be used to validate server certificate. If this is not provided, hostname used to contact the server is used. + --token string Bearer token for authentication to the API server + --user string The name of the kubeconfig user to use + --username string Username for basic authentication to the API server ``` ### SEE ALSO diff --git a/docs/user-guide/commands/argocd_relogin.md b/docs/user-guide/commands/argocd_relogin.md index 0f6cb80cc7208..3a42d4cd48374 100644 --- a/docs/user-guide/commands/argocd_relogin.md +++ b/docs/user-guide/commands/argocd_relogin.md @@ -25,9 +25,11 @@ argocd relogin [flags] --client-crt string Client certificate file --client-crt-key string Client certificate key file --config string Path to Argo CD config (default "/home/user/.argocd/config") + --core If set to true then CLI talks directly to Kubernetes instead of talking to Argo CD API server --grpc-web Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. --grpc-web-root-path string Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. Set web root. -H, --header strings Sets additional header to all requests made by Argo CD CLI. (Can be repeated multiple times to add multiple headers, also supports comma separated headers) + --http-retry-max int Maximum number of retries to establish http connection to Argo CD server --insecure Skip server certificate and domain verification --logformat string Set the logging format. One of: text|json (default "text") --loglevel string Set the logging level. One of: debug|info|warn|error (default "info") diff --git a/docs/user-guide/commands/argocd_repo.md b/docs/user-guide/commands/argocd_repo.md index 43b47178043ad..68f6ef629f20e 100644 --- a/docs/user-guide/commands/argocd_repo.md +++ b/docs/user-guide/commands/argocd_repo.md @@ -9,7 +9,23 @@ argocd repo [flags] ### Options ``` - -h, --help help for repo + --as string Username to impersonate for the operation + --as-group stringArray Group to impersonate for the operation, this flag can be repeated to specify multiple groups. + --certificate-authority string Path to a cert file for the certificate authority + --client-certificate string Path to a client certificate file for TLS + --client-key string Path to a client key file for TLS + --cluster string The name of the kubeconfig cluster to use + --context string The name of the kubeconfig context to use + -h, --help help for repo + --insecure-skip-tls-verify If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure + --kubeconfig string Path to a kube config. Only required if out-of-cluster + -n, --namespace string If present, the namespace scope for this CLI request + --password string Password for basic authentication to the API server + --request-timeout string The length of time to wait before giving up on a single server request. Non-zero values should contain a corresponding time unit (e.g. 1s, 2m, 3h). A value of zero means don't timeout requests. (default "0") + --tls-server-name string If provided, this name will be used to validate server certificate. If this is not provided, hostname used to contact the server is used. + --token string Bearer token for authentication to the API server + --user string The name of the kubeconfig user to use + --username string Username for basic authentication to the API server ``` ### Options inherited from parent commands @@ -19,9 +35,11 @@ argocd repo [flags] --client-crt string Client certificate file --client-crt-key string Client certificate key file --config string Path to Argo CD config (default "/home/user/.argocd/config") + --core If set to true then CLI talks directly to Kubernetes instead of talking to Argo CD API server --grpc-web Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. --grpc-web-root-path string Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. Set web root. -H, --header strings Sets additional header to all requests made by Argo CD CLI. (Can be repeated multiple times to add multiple headers, also supports comma separated headers) + --http-retry-max int Maximum number of retries to establish http connection to Argo CD server --insecure Skip server certificate and domain verification --logformat string Set the logging format. One of: text|json (default "text") --loglevel string Set the logging level. One of: debug|info|warn|error (default "info") diff --git a/docs/user-guide/commands/argocd_repo_add.md b/docs/user-guide/commands/argocd_repo_add.md index 88a0844d97d11..78cec8ac66f48 100644 --- a/docs/user-guide/commands/argocd_repo_add.md +++ b/docs/user-guide/commands/argocd_repo_add.md @@ -51,34 +51,49 @@ argocd repo add REPOURL [flags] --insecure-ignore-host-key disables SSH strict host key checking (deprecated, use --insecure-skip-server-verification instead) --insecure-skip-server-verification disables server certificate and host key checks --name string name of the repository, mandatory for repositories of type helm - --password string password to the repository --proxy string use proxy to access repository --ssh-private-key-path string path to the private ssh key (e.g. ~/.ssh/id_rsa) --tls-client-cert-key-path string path to the TLS client cert's key path (must be PEM format) --tls-client-cert-path string path to the TLS client cert (must be PEM format) --type string type of the repository, "git" or "helm" (default "git") --upsert Override an existing repository with the same name even if the spec differs - --username string username to the repository ``` ### Options inherited from parent commands ``` + --as string Username to impersonate for the operation + --as-group stringArray Group to impersonate for the operation, this flag can be repeated to specify multiple groups. --auth-token string Authentication token + --certificate-authority string Path to a cert file for the certificate authority + --client-certificate string Path to a client certificate file for TLS --client-crt string Client certificate file --client-crt-key string Client certificate key file + --client-key string Path to a client key file for TLS + --cluster string The name of the kubeconfig cluster to use --config string Path to Argo CD config (default "/home/user/.argocd/config") + --context string The name of the kubeconfig context to use + --core If set to true then CLI talks directly to Kubernetes instead of talking to Argo CD API server --grpc-web Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. --grpc-web-root-path string Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. Set web root. -H, --header strings Sets additional header to all requests made by Argo CD CLI. (Can be repeated multiple times to add multiple headers, also supports comma separated headers) + --http-retry-max int Maximum number of retries to establish http connection to Argo CD server --insecure Skip server certificate and domain verification + --insecure-skip-tls-verify If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure --logformat string Set the logging format. One of: text|json (default "text") --loglevel string Set the logging level. One of: debug|info|warn|error (default "info") + -n, --namespace string If present, the namespace scope for this CLI request + --password string Password for basic authentication to the API server --plaintext Disable TLS --port-forward Connect to a random argocd-server port using port forwarding --port-forward-namespace string Namespace name which should be used for port forwarding - --server string Argo CD server address + --request-timeout string The length of time to wait before giving up on a single server request. Non-zero values should contain a corresponding time unit (e.g. 1s, 2m, 3h). A value of zero means don't timeout requests. (default "0") + --server string The address and port of the Kubernetes API server --server-crt string Server certificate file + --tls-server-name string If provided, this name will be used to validate server certificate. If this is not provided, hostname used to contact the server is used. + --token string Bearer token for authentication to the API server + --user string The name of the kubeconfig user to use + --username string Username for basic authentication to the API server ``` ### SEE ALSO diff --git a/docs/user-guide/commands/argocd_repo_get.md b/docs/user-guide/commands/argocd_repo_get.md index 34d80f9515b05..1e7bdcd0bab37 100644 --- a/docs/user-guide/commands/argocd_repo_get.md +++ b/docs/user-guide/commands/argocd_repo_get.md @@ -17,21 +17,38 @@ argocd repo get [flags] ### Options inherited from parent commands ``` + --as string Username to impersonate for the operation + --as-group stringArray Group to impersonate for the operation, this flag can be repeated to specify multiple groups. --auth-token string Authentication token + --certificate-authority string Path to a cert file for the certificate authority + --client-certificate string Path to a client certificate file for TLS --client-crt string Client certificate file --client-crt-key string Client certificate key file + --client-key string Path to a client key file for TLS + --cluster string The name of the kubeconfig cluster to use --config string Path to Argo CD config (default "/home/user/.argocd/config") + --context string The name of the kubeconfig context to use + --core If set to true then CLI talks directly to Kubernetes instead of talking to Argo CD API server --grpc-web Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. --grpc-web-root-path string Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. Set web root. -H, --header strings Sets additional header to all requests made by Argo CD CLI. (Can be repeated multiple times to add multiple headers, also supports comma separated headers) + --http-retry-max int Maximum number of retries to establish http connection to Argo CD server --insecure Skip server certificate and domain verification + --insecure-skip-tls-verify If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure --logformat string Set the logging format. One of: text|json (default "text") --loglevel string Set the logging level. One of: debug|info|warn|error (default "info") + -n, --namespace string If present, the namespace scope for this CLI request + --password string Password for basic authentication to the API server --plaintext Disable TLS --port-forward Connect to a random argocd-server port using port forwarding --port-forward-namespace string Namespace name which should be used for port forwarding - --server string Argo CD server address + --request-timeout string The length of time to wait before giving up on a single server request. Non-zero values should contain a corresponding time unit (e.g. 1s, 2m, 3h). A value of zero means don't timeout requests. (default "0") + --server string The address and port of the Kubernetes API server --server-crt string Server certificate file + --tls-server-name string If provided, this name will be used to validate server certificate. If this is not provided, hostname used to contact the server is used. + --token string Bearer token for authentication to the API server + --user string The name of the kubeconfig user to use + --username string Username for basic authentication to the API server ``` ### SEE ALSO diff --git a/docs/user-guide/commands/argocd_repo_list.md b/docs/user-guide/commands/argocd_repo_list.md index 09db6debb2fa2..b1305ca84a161 100644 --- a/docs/user-guide/commands/argocd_repo_list.md +++ b/docs/user-guide/commands/argocd_repo_list.md @@ -17,21 +17,38 @@ argocd repo list [flags] ### Options inherited from parent commands ``` + --as string Username to impersonate for the operation + --as-group stringArray Group to impersonate for the operation, this flag can be repeated to specify multiple groups. --auth-token string Authentication token + --certificate-authority string Path to a cert file for the certificate authority + --client-certificate string Path to a client certificate file for TLS --client-crt string Client certificate file --client-crt-key string Client certificate key file + --client-key string Path to a client key file for TLS + --cluster string The name of the kubeconfig cluster to use --config string Path to Argo CD config (default "/home/user/.argocd/config") + --context string The name of the kubeconfig context to use + --core If set to true then CLI talks directly to Kubernetes instead of talking to Argo CD API server --grpc-web Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. --grpc-web-root-path string Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. Set web root. -H, --header strings Sets additional header to all requests made by Argo CD CLI. (Can be repeated multiple times to add multiple headers, also supports comma separated headers) + --http-retry-max int Maximum number of retries to establish http connection to Argo CD server --insecure Skip server certificate and domain verification + --insecure-skip-tls-verify If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure --logformat string Set the logging format. One of: text|json (default "text") --loglevel string Set the logging level. One of: debug|info|warn|error (default "info") + -n, --namespace string If present, the namespace scope for this CLI request + --password string Password for basic authentication to the API server --plaintext Disable TLS --port-forward Connect to a random argocd-server port using port forwarding --port-forward-namespace string Namespace name which should be used for port forwarding - --server string Argo CD server address + --request-timeout string The length of time to wait before giving up on a single server request. Non-zero values should contain a corresponding time unit (e.g. 1s, 2m, 3h). A value of zero means don't timeout requests. (default "0") + --server string The address and port of the Kubernetes API server --server-crt string Server certificate file + --tls-server-name string If provided, this name will be used to validate server certificate. If this is not provided, hostname used to contact the server is used. + --token string Bearer token for authentication to the API server + --user string The name of the kubeconfig user to use + --username string Username for basic authentication to the API server ``` ### SEE ALSO diff --git a/docs/user-guide/commands/argocd_repo_rm.md b/docs/user-guide/commands/argocd_repo_rm.md index aaf276ef2aba3..f90e3e8cd6cb5 100644 --- a/docs/user-guide/commands/argocd_repo_rm.md +++ b/docs/user-guide/commands/argocd_repo_rm.md @@ -15,21 +15,38 @@ argocd repo rm REPO [flags] ### Options inherited from parent commands ``` + --as string Username to impersonate for the operation + --as-group stringArray Group to impersonate for the operation, this flag can be repeated to specify multiple groups. --auth-token string Authentication token + --certificate-authority string Path to a cert file for the certificate authority + --client-certificate string Path to a client certificate file for TLS --client-crt string Client certificate file --client-crt-key string Client certificate key file + --client-key string Path to a client key file for TLS + --cluster string The name of the kubeconfig cluster to use --config string Path to Argo CD config (default "/home/user/.argocd/config") + --context string The name of the kubeconfig context to use + --core If set to true then CLI talks directly to Kubernetes instead of talking to Argo CD API server --grpc-web Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. --grpc-web-root-path string Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. Set web root. -H, --header strings Sets additional header to all requests made by Argo CD CLI. (Can be repeated multiple times to add multiple headers, also supports comma separated headers) + --http-retry-max int Maximum number of retries to establish http connection to Argo CD server --insecure Skip server certificate and domain verification + --insecure-skip-tls-verify If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure --logformat string Set the logging format. One of: text|json (default "text") --loglevel string Set the logging level. One of: debug|info|warn|error (default "info") + -n, --namespace string If present, the namespace scope for this CLI request + --password string Password for basic authentication to the API server --plaintext Disable TLS --port-forward Connect to a random argocd-server port using port forwarding --port-forward-namespace string Namespace name which should be used for port forwarding - --server string Argo CD server address + --request-timeout string The length of time to wait before giving up on a single server request. Non-zero values should contain a corresponding time unit (e.g. 1s, 2m, 3h). A value of zero means don't timeout requests. (default "0") + --server string The address and port of the Kubernetes API server --server-crt string Server certificate file + --tls-server-name string If provided, this name will be used to validate server certificate. If this is not provided, hostname used to contact the server is used. + --token string Bearer token for authentication to the API server + --user string The name of the kubeconfig user to use + --username string Username for basic authentication to the API server ``` ### SEE ALSO diff --git a/docs/user-guide/commands/argocd_repocreds.md b/docs/user-guide/commands/argocd_repocreds.md index ce31bca402ef5..d18a3f3cc9f76 100644 --- a/docs/user-guide/commands/argocd_repocreds.md +++ b/docs/user-guide/commands/argocd_repocreds.md @@ -9,7 +9,23 @@ argocd repocreds [flags] ### Options ``` - -h, --help help for repocreds + --as string Username to impersonate for the operation + --as-group stringArray Group to impersonate for the operation, this flag can be repeated to specify multiple groups. + --certificate-authority string Path to a cert file for the certificate authority + --client-certificate string Path to a client certificate file for TLS + --client-key string Path to a client key file for TLS + --cluster string The name of the kubeconfig cluster to use + --context string The name of the kubeconfig context to use + -h, --help help for repocreds + --insecure-skip-tls-verify If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure + --kubeconfig string Path to a kube config. Only required if out-of-cluster + -n, --namespace string If present, the namespace scope for this CLI request + --password string Password for basic authentication to the API server + --request-timeout string The length of time to wait before giving up on a single server request. Non-zero values should contain a corresponding time unit (e.g. 1s, 2m, 3h). A value of zero means don't timeout requests. (default "0") + --tls-server-name string If provided, this name will be used to validate server certificate. If this is not provided, hostname used to contact the server is used. + --token string Bearer token for authentication to the API server + --user string The name of the kubeconfig user to use + --username string Username for basic authentication to the API server ``` ### Options inherited from parent commands @@ -19,9 +35,11 @@ argocd repocreds [flags] --client-crt string Client certificate file --client-crt-key string Client certificate key file --config string Path to Argo CD config (default "/home/user/.argocd/config") + --core If set to true then CLI talks directly to Kubernetes instead of talking to Argo CD API server --grpc-web Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. --grpc-web-root-path string Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. Set web root. -H, --header strings Sets additional header to all requests made by Argo CD CLI. (Can be repeated multiple times to add multiple headers, also supports comma separated headers) + --http-retry-max int Maximum number of retries to establish http connection to Argo CD server --insecure Skip server certificate and domain verification --logformat string Set the logging format. One of: text|json (default "text") --loglevel string Set the logging level. One of: debug|info|warn|error (default "info") diff --git a/docs/user-guide/commands/argocd_repocreds_add.md b/docs/user-guide/commands/argocd_repocreds_add.md index 8b71da8f75367..1c1e23e7d1dbd 100644 --- a/docs/user-guide/commands/argocd_repocreds_add.md +++ b/docs/user-guide/commands/argocd_repocreds_add.md @@ -32,33 +32,48 @@ argocd repocreds add REPOURL [flags] --github-app-installation-id int installation id of the GitHub Application --github-app-private-key-path string private key of the GitHub Application -h, --help help for add - --password string password to the repository --ssh-private-key-path string path to the private ssh key (e.g. ~/.ssh/id_rsa) --tls-client-cert-key-path string path to the TLS client cert's key path (must be PEM format) --tls-client-cert-path string path to the TLS client cert (must be PEM format) --type string type of the repository, "git" or "helm" (default "git") --upsert Override an existing repository with the same name even if the spec differs - --username string username to the repository ``` ### Options inherited from parent commands ``` + --as string Username to impersonate for the operation + --as-group stringArray Group to impersonate for the operation, this flag can be repeated to specify multiple groups. --auth-token string Authentication token + --certificate-authority string Path to a cert file for the certificate authority + --client-certificate string Path to a client certificate file for TLS --client-crt string Client certificate file --client-crt-key string Client certificate key file + --client-key string Path to a client key file for TLS + --cluster string The name of the kubeconfig cluster to use --config string Path to Argo CD config (default "/home/user/.argocd/config") + --context string The name of the kubeconfig context to use + --core If set to true then CLI talks directly to Kubernetes instead of talking to Argo CD API server --grpc-web Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. --grpc-web-root-path string Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. Set web root. -H, --header strings Sets additional header to all requests made by Argo CD CLI. (Can be repeated multiple times to add multiple headers, also supports comma separated headers) + --http-retry-max int Maximum number of retries to establish http connection to Argo CD server --insecure Skip server certificate and domain verification + --insecure-skip-tls-verify If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure --logformat string Set the logging format. One of: text|json (default "text") --loglevel string Set the logging level. One of: debug|info|warn|error (default "info") + -n, --namespace string If present, the namespace scope for this CLI request + --password string Password for basic authentication to the API server --plaintext Disable TLS --port-forward Connect to a random argocd-server port using port forwarding --port-forward-namespace string Namespace name which should be used for port forwarding - --server string Argo CD server address + --request-timeout string The length of time to wait before giving up on a single server request. Non-zero values should contain a corresponding time unit (e.g. 1s, 2m, 3h). A value of zero means don't timeout requests. (default "0") + --server string The address and port of the Kubernetes API server --server-crt string Server certificate file + --tls-server-name string If provided, this name will be used to validate server certificate. If this is not provided, hostname used to contact the server is used. + --token string Bearer token for authentication to the API server + --user string The name of the kubeconfig user to use + --username string Username for basic authentication to the API server ``` ### SEE ALSO diff --git a/docs/user-guide/commands/argocd_repocreds_list.md b/docs/user-guide/commands/argocd_repocreds_list.md index bbb7c627ec452..adf279eb77e17 100644 --- a/docs/user-guide/commands/argocd_repocreds_list.md +++ b/docs/user-guide/commands/argocd_repocreds_list.md @@ -16,21 +16,38 @@ argocd repocreds list [flags] ### Options inherited from parent commands ``` + --as string Username to impersonate for the operation + --as-group stringArray Group to impersonate for the operation, this flag can be repeated to specify multiple groups. --auth-token string Authentication token + --certificate-authority string Path to a cert file for the certificate authority + --client-certificate string Path to a client certificate file for TLS --client-crt string Client certificate file --client-crt-key string Client certificate key file + --client-key string Path to a client key file for TLS + --cluster string The name of the kubeconfig cluster to use --config string Path to Argo CD config (default "/home/user/.argocd/config") + --context string The name of the kubeconfig context to use + --core If set to true then CLI talks directly to Kubernetes instead of talking to Argo CD API server --grpc-web Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. --grpc-web-root-path string Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. Set web root. -H, --header strings Sets additional header to all requests made by Argo CD CLI. (Can be repeated multiple times to add multiple headers, also supports comma separated headers) + --http-retry-max int Maximum number of retries to establish http connection to Argo CD server --insecure Skip server certificate and domain verification + --insecure-skip-tls-verify If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure --logformat string Set the logging format. One of: text|json (default "text") --loglevel string Set the logging level. One of: debug|info|warn|error (default "info") + -n, --namespace string If present, the namespace scope for this CLI request + --password string Password for basic authentication to the API server --plaintext Disable TLS --port-forward Connect to a random argocd-server port using port forwarding --port-forward-namespace string Namespace name which should be used for port forwarding - --server string Argo CD server address + --request-timeout string The length of time to wait before giving up on a single server request. Non-zero values should contain a corresponding time unit (e.g. 1s, 2m, 3h). A value of zero means don't timeout requests. (default "0") + --server string The address and port of the Kubernetes API server --server-crt string Server certificate file + --tls-server-name string If provided, this name will be used to validate server certificate. If this is not provided, hostname used to contact the server is used. + --token string Bearer token for authentication to the API server + --user string The name of the kubeconfig user to use + --username string Username for basic authentication to the API server ``` ### SEE ALSO diff --git a/docs/user-guide/commands/argocd_repocreds_rm.md b/docs/user-guide/commands/argocd_repocreds_rm.md index 23efd77f15faf..13b1523016839 100644 --- a/docs/user-guide/commands/argocd_repocreds_rm.md +++ b/docs/user-guide/commands/argocd_repocreds_rm.md @@ -15,21 +15,38 @@ argocd repocreds rm CREDSURL [flags] ### Options inherited from parent commands ``` + --as string Username to impersonate for the operation + --as-group stringArray Group to impersonate for the operation, this flag can be repeated to specify multiple groups. --auth-token string Authentication token + --certificate-authority string Path to a cert file for the certificate authority + --client-certificate string Path to a client certificate file for TLS --client-crt string Client certificate file --client-crt-key string Client certificate key file + --client-key string Path to a client key file for TLS + --cluster string The name of the kubeconfig cluster to use --config string Path to Argo CD config (default "/home/user/.argocd/config") + --context string The name of the kubeconfig context to use + --core If set to true then CLI talks directly to Kubernetes instead of talking to Argo CD API server --grpc-web Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. --grpc-web-root-path string Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. Set web root. -H, --header strings Sets additional header to all requests made by Argo CD CLI. (Can be repeated multiple times to add multiple headers, also supports comma separated headers) + --http-retry-max int Maximum number of retries to establish http connection to Argo CD server --insecure Skip server certificate and domain verification + --insecure-skip-tls-verify If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure --logformat string Set the logging format. One of: text|json (default "text") --loglevel string Set the logging level. One of: debug|info|warn|error (default "info") + -n, --namespace string If present, the namespace scope for this CLI request + --password string Password for basic authentication to the API server --plaintext Disable TLS --port-forward Connect to a random argocd-server port using port forwarding --port-forward-namespace string Namespace name which should be used for port forwarding - --server string Argo CD server address + --request-timeout string The length of time to wait before giving up on a single server request. Non-zero values should contain a corresponding time unit (e.g. 1s, 2m, 3h). A value of zero means don't timeout requests. (default "0") + --server string The address and port of the Kubernetes API server --server-crt string Server certificate file + --tls-server-name string If provided, this name will be used to validate server certificate. If this is not provided, hostname used to contact the server is used. + --token string Bearer token for authentication to the API server + --user string The name of the kubeconfig user to use + --username string Username for basic authentication to the API server ``` ### SEE ALSO diff --git a/docs/user-guide/commands/argocd_version.md b/docs/user-guide/commands/argocd_version.md index 3d52ccd8a1ad4..74b44bbe945ba 100644 --- a/docs/user-guide/commands/argocd_version.md +++ b/docs/user-guide/commands/argocd_version.md @@ -26,10 +26,26 @@ argocd version [flags] ### Options ``` - --client client version only (no server required) - -h, --help help for version - -o, --output string Output format. One of: json|yaml|wide|short (default "wide") - --short print just the version number + --as string Username to impersonate for the operation + --as-group stringArray Group to impersonate for the operation, this flag can be repeated to specify multiple groups. + --certificate-authority string Path to a cert file for the certificate authority + --client client version only (no server required) + --client-certificate string Path to a client certificate file for TLS + --client-key string Path to a client key file for TLS + --cluster string The name of the kubeconfig cluster to use + --context string The name of the kubeconfig context to use + -h, --help help for version + --insecure-skip-tls-verify If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure + --kubeconfig string Path to a kube config. Only required if out-of-cluster + -n, --namespace string If present, the namespace scope for this CLI request + -o, --output string Output format. One of: json|yaml|wide|short (default "wide") + --password string Password for basic authentication to the API server + --request-timeout string The length of time to wait before giving up on a single server request. Non-zero values should contain a corresponding time unit (e.g. 1s, 2m, 3h). A value of zero means don't timeout requests. (default "0") + --short print just the version number + --tls-server-name string If provided, this name will be used to validate server certificate. If this is not provided, hostname used to contact the server is used. + --token string Bearer token for authentication to the API server + --user string The name of the kubeconfig user to use + --username string Username for basic authentication to the API server ``` ### Options inherited from parent commands @@ -39,9 +55,11 @@ argocd version [flags] --client-crt string Client certificate file --client-crt-key string Client certificate key file --config string Path to Argo CD config (default "/home/user/.argocd/config") + --core If set to true then CLI talks directly to Kubernetes instead of talking to Argo CD API server --grpc-web Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. --grpc-web-root-path string Enables gRPC-web protocol. Useful if Argo CD server is behind proxy which does not support HTTP2. Set web root. -H, --header strings Sets additional header to all requests made by Argo CD CLI. (Can be repeated multiple times to add multiple headers, also supports comma separated headers) + --http-retry-max int Maximum number of retries to establish http connection to Argo CD server --insecure Skip server certificate and domain verification --logformat string Set the logging format. One of: text|json (default "text") --loglevel string Set the logging level. One of: debug|info|warn|error (default "info") diff --git a/docs/user-guide/gpg-verification.md b/docs/user-guide/gpg-verification.md index 946118de6bb3e..07f9f474647b3 100644 --- a/docs/user-guide/gpg-verification.md +++ b/docs/user-guide/gpg-verification.md @@ -195,7 +195,7 @@ argocd proj add-signature-key myproj 4AEE18F83AFDEB23 #### Removing a key ID from the list of allowed keys -Similarily, you can remove a key ID from the list of allowed GnuPG keys for a +Similarly, you can remove a key ID from the list of allowed GnuPG keys for a project using the `argocd proj remove-signature-key` command, i.e. to remove the key added above from project `myproj`, use the command: diff --git a/docs/user-guide/kustomize.md b/docs/user-guide/kustomize.md index 77cc64358cd2a..1d56a4dc09143 100644 --- a/docs/user-guide/kustomize.md +++ b/docs/user-guide/kustomize.md @@ -7,7 +7,7 @@ The following configuration options are available for Kustomize: * `images` is a list of Kustomize image overrides * `commonLabels` is a string map of an additional labels * `commonAnnotations` is a string map of an additional annotations - + To use Kustomize with an overlay, point your path to the overlay. !!! tip @@ -15,7 +15,7 @@ To use Kustomize with an overlay, point your path to the overlay. ## Private Remote Bases -If you have remote bases that are either (a) HTTPS and need username/password (b) SSH and need SSH private key, then they'll inherit that from the app's repo. +If you have remote bases that are either (a) HTTPS and need username/password (b) SSH and need SSH private key, then they'll inherit that from the app's repo. This will work if the remote bases uses the same credentials/private key. It will not work if they use different ones. For security reasons your app only ever knows about its own repo (not other team's or users repos), and so you won't be able to access other private repos, even if Argo CD knows about them. @@ -35,14 +35,14 @@ metadata: app.kubernetes.io/name: argocd-cm app.kubernetes.io/part-of: argocd data: - kustomize.buildOptions: --load_restrictor none + kustomize.buildOptions: --load_restrictor LoadRestrictionsNone kustomize.buildOptions.v3.9.1: --output /tmp ``` ## Custom Kustomize versions Argo CD supports using multiple kustomize versions simultaneously and specifies required version per application. To add additional versions make sure required versions are [bundled](../operator-manual/custom_tools.md) and then -use `kustomize.path.` fields of `argocd-cm` ConfigMap to register bundled additional versions. +use `kustomize.path.` fields of `argocd-cm` ConfigMap to register bundled additional versions. ```yaml apiVersion: v1 diff --git a/docs/user-guide/parameters.md b/docs/user-guide/parameters.md index d055a9233b14c..897ed36df3778 100644 --- a/docs/user-guide/parameters.md +++ b/docs/user-guide/parameters.md @@ -75,7 +75,7 @@ kustomize: The `.argocd-source` is trying to solve two following main use cases: -- Provide the unifed way to "override" application parameters in Git and enable the "write back" feature +- Provide the unified way to "override" application parameters in Git and enable the "write back" feature for projects like [argocd-image-updater](https://github.com/argoproj-labs/argocd-image-updater). - Support "discovering" applications in the Git repository by projects like [applicationset](https://github.com/argoproj-labs/applicationset) (see [git files generator](https://github.com/argoproj-labs/applicationset/blob/master/examples/git-files-discovery.yaml)) diff --git a/docs/user-guide/private-repositories.md b/docs/user-guide/private-repositories.md index 73f0288d1bf6d..ef9aada5fc6dd 100644 --- a/docs/user-guide/private-repositories.md +++ b/docs/user-guide/private-repositories.md @@ -47,8 +47,8 @@ or UI: Instead of using username and password you might use access token. Following instructions of your Git hosting service to generate the token: -* [Github](https://help.github.com/en/articles/creating-a-personal-access-token-for-the-command-line) -* [Gitlab](https://docs.gitlab.com/ee/user/project/deploy_tokens/) +* [GitHub](https://help.github.com/en/articles/creating-a-personal-access-token-for-the-command-line) +* [GitLab](https://docs.gitlab.com/ee/user/project/deploy_tokens/) * [Bitbucket](https://confluence.atlassian.com/bitbucketserver/personal-access-tokens-939515499.html) Then, connect the repository using any non-empty string as username and the access token value as a password. diff --git a/go.mod b/go.mod index 5755b4ea68789..6442e7ab66093 100644 --- a/go.mod +++ b/go.mod @@ -7,8 +7,8 @@ require ( github.com/TomOnTime/utfutil v0.0.0-20180511104225-09c41003ee1d github.com/alicebob/miniredis v2.5.0+incompatible github.com/alicebob/miniredis/v2 v2.14.2 - github.com/argoproj/gitops-engine v0.3.1-0.20210617175936-b067bd7463e7 - github.com/argoproj/pkg v0.9.1-0.20210512035321-be5ba22dca5b + github.com/argoproj/gitops-engine v0.3.1-0.20210709004906-a4c77d5c70fb + github.com/argoproj/pkg v0.9.1 github.com/bombsimon/logrusr v1.0.0 github.com/bradleyfalzon/ghinstallation v1.1.1 github.com/casbin/casbin v1.9.1 @@ -40,6 +40,7 @@ require ( github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4 github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0 github.com/grpc-ecosystem/grpc-gateway v1.16.0 + github.com/hashicorp/go-retryablehttp v0.7.0 github.com/improbable-eng/grpc-web v0.0.0-20181111100011-16092bd1d58a github.com/itchyny/gojq v0.12.3 github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 @@ -61,11 +62,11 @@ require ( github.com/undefinedlabs/go-mpatch v1.0.6 github.com/vmihailenco/msgpack/v5 v5.1.0 // indirect github.com/yuin/gopher-lua v0.0.0-20200816102855-ee81675732da - golang.org/x/crypto v0.0.0-20210220033148-5ea612d1eb83 - golang.org/x/net v0.0.0-20210224082022-3d97a244fca7 - golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d + golang.org/x/crypto v0.0.0-20210616213533-5ff15b29337e + golang.org/x/net v0.0.0-20210614182718-04defd469f4e + golang.org/x/oauth2 v0.0.0-20210628180205-a41e5a781914 golang.org/x/sync v0.0.0-20210220032951-036812b2e83c - golang.org/x/term v0.0.0-20210220032956-6a3ed077a48d + golang.org/x/term v0.0.0-20210615171337-6886f2dfbf5b google.golang.org/genproto v0.0.0-20201110150050-8816d57aaa9a google.golang.org/grpc v1.33.1 gopkg.in/go-playground/webhooks.v5 v5.11.0 diff --git a/go.sum b/go.sum index 4b4976011ad95..dfa6d5c428771 100644 --- a/go.sum +++ b/go.sum @@ -10,20 +10,30 @@ cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6T cloud.google.com/go v0.51.0/go.mod h1:hWtGJ6gnXH+KgDv+V0zFGDvpi07n3z8ZNj3T1RW0Gcw= 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 h1:3ithwDMr7/3vpAMXiH+ZQnYbuIsh+OPhUPMFC9enmn0= 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 h1:Dg9iHVQfrhq82rUNu9ZxUDrJLaxFUe/HlCVaLyRruq8= +cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY= 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/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/firestore v1.1.0/go.mod h1:ulACoGHTpvq5r8rxGJ4ddJZBZqakUQqClKRT5SZwBmk= 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/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= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= dmitri.shuralyov.com/gpu/mtl v0.0.0-20201218220906-28db891af037/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= github.com/Azure/azure-sdk-for-go v43.0.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= @@ -86,10 +96,10 @@ github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239 h1:kFOfPq6dUM1hTo4JG6LR5AXSUEsOjtdm0kw0FtQtMJA= github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c= github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= -github.com/argoproj/gitops-engine v0.3.1-0.20210617175936-b067bd7463e7 h1:fFenR8EqAJRV9HBRQEd37fntfYXxH9xkVAB4+qJBZwY= -github.com/argoproj/gitops-engine v0.3.1-0.20210617175936-b067bd7463e7/go.mod h1:EdFe8qIOqsmbyxRhtIydU4BUeyZ4VTsY6R3XVQhU9LA= -github.com/argoproj/pkg v0.9.1-0.20210512035321-be5ba22dca5b h1:qtlM7ioAFP40LPN7A5ZqquVmAtv08LLSZTcCNYUQx8s= -github.com/argoproj/pkg v0.9.1-0.20210512035321-be5ba22dca5b/go.mod h1:ra+bQPmbVAoEL+gYSKesuigt4m49i3Qa3mE/xQcjCiA= +github.com/argoproj/gitops-engine v0.3.1-0.20210709004906-a4c77d5c70fb h1:zwnkwh45K57emwKikePwtK4BLc3IuplxYxqMzZ4XTNY= +github.com/argoproj/gitops-engine v0.3.1-0.20210709004906-a4c77d5c70fb/go.mod h1:EdFe8qIOqsmbyxRhtIydU4BUeyZ4VTsY6R3XVQhU9LA= +github.com/argoproj/pkg v0.9.1 h1:osfOS3QkzfRf+W43lbCZb0o0bzrBweQhL+U3rgEg+5M= +github.com/argoproj/pkg v0.9.1/go.mod h1:ra+bQPmbVAoEL+gYSKesuigt4m49i3Qa3mE/xQcjCiA= github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= @@ -341,6 +351,7 @@ github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfb 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 h1:jlYHihg//f7RRwuPfptm04yp4s7O6Kw8EZiVYIGcH0g= github.com/golang/mock v1.5.0/go.mod h1:CWnOUgYIOo4TcNZ0wHX3YZCqsaM1I1Jvs6v3mP3KVu8= @@ -357,7 +368,9 @@ github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5a 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.4 h1:L8R9j+yAqZuZjsqh/z+F1NCffTKKLShY6zXTItVIZ8M= github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= @@ -371,11 +384,14 @@ github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/ github.com/google/gofuzz v1.1.0 h1:Hsa8mG0dQ46ij8Sl2AYJDUv1oA9/d6Vk+3LG99Oe02g= github.com/google/gofuzz v1.1.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= +github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= github.com/google/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/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 h1:El6M4kTTCOh6aBiKaUGG7oYTSPP8MxqL4YI3kZKwcP4= github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510/go.mod h1:pupxD2MaaD3pAXIBCelhxNneeOaAeabZDe5s4K6zSpQ= @@ -408,10 +424,15 @@ github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFb github.com/hashicorp/consul/api v1.1.0/go.mod h1:VmuI/Lkw1nC05EYQWNKwWGbkg+FbDBtguAZLlVdkD9Q= github.com/hashicorp/consul/sdk v0.1.1/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= +github.com/hashicorp/go-cleanhttp v0.5.1 h1:dH3aiDG9Jvb5r5+bYHsikaOUIpcM0xvgMXVoDkXMzJM= github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= +github.com/hashicorp/go-hclog v0.9.2 h1:CG6TE5H9/JXsFWJCfoIVpKFIkFe6ysEuHirp4DxCsHI= +github.com/hashicorp/go-hclog v0.9.2/go.mod h1:5CU+agLiy3J7N7QjHK5d05KxGsuXiQLrjA0H7acj2lQ= github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= +github.com/hashicorp/go-retryablehttp v0.7.0 h1:eu1EI/mbirUgP5C8hVsTNaGZreBDlYiwC1FZWkvQPQ4= +github.com/hashicorp/go-retryablehttp v0.7.0/go.mod h1:vAew36LZh98gCBJNLH42IQ1ER/9wtLZZ8meHqQvEYWY= github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU= github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU= github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4= @@ -747,7 +768,9 @@ github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q github.com/xlab/treeprint v0.0.0-20181112141820-a009c3971eca h1:1CFlNzQhALwjS9mBAUkycX616GzgsuYUOCHA5+HSlXI= github.com/xlab/treeprint v0.0.0-20181112141820-a009c3971eca/go.mod h1:ce1O1j6UtZfjr22oyGxGLbauSBp2YVXpARAosm7dHBg= github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= +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/gopher-lua v0.0.0-20200816102855-ee81675732da h1:NimzV1aGyq29m5ukMK0AMWEhFaL/lrEOaephfuoiARg= github.com/yuin/gopher-lua v0.0.0-20200816102855-ee81675732da/go.mod h1:E1AXubJBdNmFERAOucpDIxNzeGfLzg0mYh+UfMWdChA= @@ -763,6 +786,7 @@ 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.opentelemetry.io/otel v0.13.0 h1:2isEnyzjjJZq6r2EKMsFj4TxiQiexsM04AVhwbR/oBA= go.opentelemetry.io/otel v0.13.0/go.mod h1:dlSNewoRYikTkotEnxdmuBHgzT+k/idJSfDv/FxEnOY= go.starlark.net v0.0.0-20200306205701-8dd3e2ee1dd5 h1:+FNtrFTmVw0YZGpBGX56XDee331t6JAXeK2bcyhLOOc= @@ -797,8 +821,9 @@ golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8U golang.org/x/crypto v0.0.0-20200302210943-78000ba7a073/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20201002170205-7f63de1d35b0/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20210220033148-5ea612d1eb83 h1:/ZScEX8SfEmUGRHs0gxpqteO5nfNW6axyZbBdw9A12g= golang.org/x/crypto v0.0.0-20210220033148-5ea612d1eb83/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= +golang.org/x/crypto v0.0.0-20210616213533-5ff15b29337e h1:gsTQYXdTw2Gq7RBsWvlQ91b+aEQ6bXFUngBGuR8sPpI= +golang.org/x/crypto v0.0.0-20210616213533-5ff15b29337e/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= @@ -861,6 +886,7 @@ golang.org/x/net v0.0.0-20190522155817-f3200d17e092/go.mod h1:HSz+uSET+XFnRR8LxR golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= @@ -873,7 +899,13 @@ golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLL golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20201006153459-a7d1128ccaa0/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= @@ -881,20 +913,25 @@ golang.org/x/net v0.0.0-20201022231255-08b38378de70/go.mod h1:sp8m0HH+o8qH0wwXwY golang.org/x/net v0.0.0-20201024042810-be3efd7ff127/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-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210224082022-3d97a244fca7 h1:OgUuv8lsRpBibGNbSizVwKWlysjaNzmC9gYMhPVfqFM= golang.org/x/net v0.0.0-20210224082022-3d97a244fca7/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20210614182718-04defd469f4e h1:XpT3nA5TvE525Ne3hInMh6+GETgn27Zfm9dxsThnX2Q= +golang.org/x/net v0.0.0-20210614182718-04defd469f4e/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= 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 h1:TzXSXBo42m9gQenoE3b9BGiEpg5IG2JkU5FkPIawgtw= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20210628180205-a41e5a781914 h1:3B43BWw0xEBsLZ/NO1VALz6fppU3481pik+2Ksv45z8= +golang.org/x/oauth2 v0.0.0-20210628180205-a41e5a781914/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= 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-20210220032951-036812b2e83c h1:5KslGYwFpkhGh+Q16bwMP3cOontH8FOep7tGV86Y7SQ= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -948,8 +985,14 @@ golang.org/x/sys v0.0.0-20200217220822-9197077df867/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200519105757-fe76b779f299/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200831180312-196b9ba8737a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200909081042-eff7692f9009/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200916030750-2334cc1a136f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -957,19 +1000,23 @@ golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210225134936-a50acf3fe073/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210301091718-77cc2087c03b h1:kHlr0tATeLRMEiZJu5CknOw/E8V6h69sXXQFGoPtjcc= golang.org/x/sys v0.0.0-20210301091718-77cc2087c03b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1 h1:SrN+KX8Art/Sf4HNj6Zcz06G7VEz+7w9tdXTPOZ7+l4= +golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/term v0.0.0-20210220032956-6a3ed077a48d h1:SZxvLBoTP5yHO3Frd4z4vrF+DBX9vMVanchswa69toE= golang.org/x/term v0.0.0-20210220032956-6a3ed077a48d/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/term v0.0.0-20210615171337-6886f2dfbf5b h1:9zKuko04nR4gjZ4+DNjHqRlAJqbJETHwiNKDqTfOjfE= +golang.org/x/term v0.0.0-20210615171337-6886f2dfbf5b/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= 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 h1:0YWbFKbhXG/wIiuHDSKpS0Iy7FSA+u45VtBMfQcFTTc= golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.6 h1:aRYxNxv6iGQlyVaZmk6ZgYEDa+Jg18DxebPSrd6bg1M= +golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -1021,9 +1068,19 @@ golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapK 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-20200505023115-26f46d2f7ef8/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.0 h1:po9/4sTYwZU9lPhi1tOrb4hCv3qrhiQ77LZfGa2OjwY= golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= @@ -1050,7 +1107,13 @@ google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsb google.golang.org/api v0.15.1-0.20200106000736-b8fc810ca6b5/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/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= @@ -1077,13 +1140,24 @@ google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvx 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-20201110150050-8816d57aaa9a h1:pOwg4OoaRYScjmR4LlLgdtnyoHYTSAVhhqe5uPdpII8= google.golang.org/genproto v0.0.0-20201110150050-8816d57aaa9a/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/grpc v1.15.0 h1:Az/KuahOM4NAidTEuJCv/RonAA7rYsTPkqXVjr+8OOw= google.golang.org/grpc v1.15.0/go.mod h1:0JHn/cJsOMiMfNA9+DeHDlAU7KAAB5GDlYFpa9MZMio= +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= @@ -1140,6 +1214,7 @@ honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWh 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= k8s.io/api v0.21.0 h1:gu5iGF4V6tfVCQ/R+8Hc0h7H1JuEhzyEi9S4R5LM8+Y= k8s.io/api v0.21.0/go.mod h1:+YbrhBBGgsxbF6o6Kj4KJPJnBmAKuXDeS3E18bgHNVU= k8s.io/apiextensions-apiserver v0.21.0 h1:Nd4uBuweg6ImzbxkC1W7xUNZcCV/8Vt10iTdTIVF3hw= diff --git a/hack/update-manifests.sh b/hack/update-manifests.sh index 4e53fbd242448..0d4e37e9c6ecf 100755 --- a/hack/update-manifests.sh +++ b/hack/update-manifests.sh @@ -44,3 +44,5 @@ $KUSTOMIZE build "${SRCROOT}/manifests/ha/cluster-install" >> "${SRCROOT}/manife echo "${AUTOGENMSG}" > "${SRCROOT}/manifests/ha/namespace-install.yaml" $KUSTOMIZE build "${SRCROOT}/manifests/ha/namespace-install" >> "${SRCROOT}/manifests/ha/namespace-install.yaml" +echo "${AUTOGENMSG}" > "${SRCROOT}/manifests/core-install.yaml" +$KUSTOMIZE build "${SRCROOT}/manifests/core-install" >> "${SRCROOT}/manifests/core-install.yaml" \ No newline at end of file diff --git a/manifests/base/repo-server/argocd-repo-server-network-policy.yaml b/manifests/base/repo-server/argocd-repo-server-network-policy.yaml index ea0d841388f77..2b3fb72b557b5 100644 --- a/manifests/base/repo-server/argocd-repo-server-network-policy.yaml +++ b/manifests/base/repo-server/argocd-repo-server-network-policy.yaml @@ -16,6 +16,9 @@ spec: - podSelector: matchLabels: app.kubernetes.io/name: argocd-application-controller + - podSelector: + matchLabels: + app.kubernetes.io/name: argocd-notifications-controller ports: - protocol: TCP port: 8081 diff --git a/manifests/base/server/argocd-server-deployment.yaml b/manifests/base/server/argocd-server-deployment.yaml index b02dc1bd25123..de3346c0fa438 100644 --- a/manifests/base/server/argocd-server-deployment.yaml +++ b/manifests/base/server/argocd-server-deployment.yaml @@ -20,10 +20,7 @@ spec: - name: argocd-server image: quay.io/argoproj/argocd:latest imagePullPolicy: Always - command: - - argocd-server - - --staticassets - - /shared/app + command: [argocd-server] env: - name: ARGOCD_SERVER_INSECURE valueFrom: diff --git a/manifests/core-install.yaml b/manifests/core-install.yaml new file mode 100644 index 0000000000000..0820a5ff95bc3 --- /dev/null +++ b/manifests/core-install.yaml @@ -0,0 +1,3292 @@ +# This is an auto-generated file. DO NOT EDIT +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + labels: + app.kubernetes.io/name: applications.argoproj.io + app.kubernetes.io/part-of: argocd + name: applications.argoproj.io +spec: + group: argoproj.io + names: + kind: Application + listKind: ApplicationList + plural: applications + shortNames: + - app + - apps + singular: application + scope: Namespaced + versions: + - additionalPrinterColumns: + - jsonPath: .status.sync.status + name: Sync Status + type: string + - jsonPath: .status.health.status + name: Health Status + type: string + - jsonPath: .status.sync.revision + name: Revision + priority: 10 + type: string + name: v1alpha1 + schema: + openAPIV3Schema: + description: Application is a definition of Application resource. + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + kind: + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + metadata: + type: object + operation: + description: Operation contains information about a requested or running + operation + properties: + info: + description: Info is a list of informational items for this operation + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + initiatedBy: + description: InitiatedBy contains information about who initiated + the operations + properties: + automated: + description: Automated is set to true if operation was initiated + automatically by the application controller. + type: boolean + username: + description: Username contains the name of a user who started + operation + type: string + type: object + retry: + description: Retry controls the strategy to apply if a sync fails + properties: + backoff: + description: Backoff controls how to backoff on subsequent retries + of failed syncs + properties: + duration: + description: Duration is the amount to back off. Default unit + is seconds, but could also be a duration (e.g. "2m", "1h") + type: string + factor: + description: Factor is a factor to multiply the base duration + after each failed retry + format: int64 + type: integer + maxDuration: + description: MaxDuration is the maximum amount of time allowed + for the backoff strategy + type: string + type: object + limit: + description: Limit is the maximum number of attempts for retrying + a failed sync. If set to 0, no retries will be performed. + format: int64 + type: integer + type: object + sync: + description: Sync contains parameters for the operation + properties: + dryRun: + description: DryRun specifies to perform a `kubectl apply --dry-run` + without actually performing the sync + type: boolean + manifests: + description: Manifests is an optional field that overrides sync + source with a local directory for development + items: + type: string + type: array + prune: + description: Prune specifies to delete resources from the cluster + that are no longer tracked in git + type: boolean + resources: + description: Resources describes which resources shall be part + of the sync + items: + description: SyncOperationResource contains resources to sync. + properties: + group: + type: string + kind: + type: string + name: + type: string + namespace: + type: string + required: + - kind + - name + type: object + type: array + revision: + description: Revision is the revision (Git) or chart version (Helm) + which to sync the application to If omitted, will use the revision + specified in app spec. + type: string + source: + description: Source overrides the source definition set in the + application. This is typically set in a Rollback operation and + is nil during a Sync operation + properties: + chart: + description: Chart is a Helm chart name, and must be specified + for applications sourced from a Helm repo. + type: string + directory: + description: Directory holds path/directory specific options + properties: + exclude: + description: Exclude contains a glob pattern to match + paths against that should be explicitly excluded from + being used during manifest generation + type: string + include: + description: Include contains a glob pattern to match + paths against that should be explicitly included during + manifest generation + type: string + jsonnet: + description: Jsonnet holds options specific to Jsonnet + properties: + extVars: + description: ExtVars is a list of Jsonnet External + Variables + items: + description: JsonnetVar represents a variable to + be passed to jsonnet during manifest generation + properties: + code: + type: boolean + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + libs: + description: Additional library search dirs + items: + type: string + type: array + tlas: + description: TLAS is a list of Jsonnet Top-level Arguments + items: + description: JsonnetVar represents a variable to + be passed to jsonnet during manifest generation + properties: + code: + type: boolean + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + type: object + recurse: + description: Recurse specifies whether to scan a directory + recursively for manifests + type: boolean + type: object + helm: + description: Helm holds helm specific options + properties: + fileParameters: + description: FileParameters are file parameters to the + helm template + items: + description: HelmFileParameter is a file parameter that's + passed to helm template during manifest generation + properties: + name: + description: Name is the name of the Helm parameter + type: string + path: + description: Path is the path to the file containing + the values for the Helm parameter + type: string + type: object + type: array + parameters: + description: Parameters is a list of Helm parameters which + are passed to the helm template command upon manifest + generation + items: + description: HelmParameter is a parameter that's passed + to helm template during manifest generation + properties: + forceString: + description: ForceString determines whether to tell + Helm to interpret booleans and numbers as strings + type: boolean + name: + description: Name is the name of the Helm parameter + type: string + value: + description: Value is the value for the Helm parameter + type: string + type: object + type: array + releaseName: + description: ReleaseName is the Helm release name to use. + If omitted it will use the application name + type: string + valueFiles: + description: ValuesFiles is a list of Helm value files + to use when generating a template + items: + type: string + type: array + values: + description: Values specifies Helm values to be passed + to helm template, typically defined as a block + type: string + version: + description: Version is the Helm version to use for templating + (either "2" or "3") + type: string + type: object + ksonnet: + description: Ksonnet holds ksonnet specific options + properties: + environment: + description: Environment is a ksonnet application environment + name + type: string + parameters: + description: Parameters are a list of ksonnet component + parameter override values + items: + description: KsonnetParameter is a ksonnet component + parameter + properties: + component: + type: string + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + type: object + kustomize: + description: Kustomize holds kustomize specific options + properties: + commonAnnotations: + additionalProperties: + type: string + description: CommonAnnotations is a list of additional + annotations to add to rendered manifests + type: object + commonLabels: + additionalProperties: + type: string + description: CommonLabels is a list of additional labels + to add to rendered manifests + type: object + forceCommonAnnotations: + description: ForceCommonAnnotations specifies whether + to force applying common annotations to resources for + Kustomize apps + type: boolean + forceCommonLabels: + description: ForceCommonLabels specifies whether to force + applying common labels to resources for Kustomize apps + type: boolean + images: + description: Images is a list of Kustomize image override + specifications + items: + description: KustomizeImage represents a Kustomize image + definition in the format [old_image_name=]: + type: string + type: array + namePrefix: + description: NamePrefix is a prefix appended to resources + for Kustomize apps + type: string + nameSuffix: + description: NameSuffix is a suffix appended to resources + for Kustomize apps + type: string + version: + description: Version controls which version of Kustomize + to use for rendering manifests + type: string + type: object + path: + description: Path is a directory path within the Git repository, + and is only valid for applications sourced from Git. + type: string + plugin: + description: ConfigManagementPlugin holds config management + plugin specific options + properties: + env: + description: Env is a list of environment variable entries + items: + description: EnvEntry represents an entry in the application's + environment + properties: + name: + description: Name is the name of the variable, usually + expressed in uppercase + type: string + value: + description: Value is the value of the variable + type: string + required: + - name + - value + type: object + type: array + name: + type: string + type: object + repoURL: + description: RepoURL is the URL to the repository (Git or + Helm) that contains the application manifests + type: string + targetRevision: + description: TargetRevision defines the revision of the source + to sync the application to. In case of Git, this can be + commit, tag, or branch. If omitted, will equal to HEAD. + In case of Helm, this is a semver tag for the Chart's version. + type: string + required: + - repoURL + type: object + syncOptions: + description: SyncOptions provide per-sync sync-options, e.g. Validate=false + items: + type: string + type: array + syncStrategy: + description: SyncStrategy describes how to perform the sync + properties: + apply: + description: Apply will perform a `kubectl apply` to perform + the sync. + properties: + force: + description: Force indicates whether or not to supply + the --force flag to `kubectl apply`. The --force flag + deletes and re-create the resource, when PATCH encounters + conflict and has retried for 5 times. + type: boolean + type: object + hook: + description: Hook will submit any referenced resources to + perform the sync. This is the default strategy + properties: + force: + description: Force indicates whether or not to supply + the --force flag to `kubectl apply`. The --force flag + deletes and re-create the resource, when PATCH encounters + conflict and has retried for 5 times. + type: boolean + type: object + type: object + type: object + type: object + spec: + description: ApplicationSpec represents desired application state. Contains + link to repository with application definition and additional parameters + link definition revision. + properties: + destination: + description: Destination is a reference to the target Kubernetes server + and namespace + properties: + name: + description: Name is an alternate way of specifying the target + cluster by its symbolic name + type: string + namespace: + description: Namespace specifies the target namespace for the + application's resources. The namespace will only be set for + namespace-scoped resources that have not set a value for .metadata.namespace + type: string + server: + description: Server specifies the URL of the target cluster and + must be set to the Kubernetes control plane API + type: string + type: object + ignoreDifferences: + description: IgnoreDifferences is a list of resources and their fields + which should be ignored during comparison + items: + description: ResourceIgnoreDifferences contains resource filter + and list of json paths which should be ignored during comparison + with live state. + properties: + group: + type: string + jqPathExpressions: + items: + type: string + type: array + jsonPointers: + items: + type: string + type: array + kind: + type: string + name: + type: string + namespace: + type: string + required: + - kind + type: object + type: array + info: + description: Info contains a list of information (URLs, email addresses, + and plain text) that relates to the application + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + project: + description: Project is a reference to the project this application + belongs to. The empty string means that application belongs to the + 'default' project. + type: string + revisionHistoryLimit: + description: RevisionHistoryLimit limits the number of items kept + in the application's revision history, which is used for informational + purposes as well as for rollbacks to previous versions. This should + only be changed in exceptional circumstances. Setting to zero will + store no history. This will reduce storage used. Increasing will + increase the space used to store the history, so we do not recommend + increasing it. Default is 10. + format: int64 + type: integer + source: + description: Source is a reference to the location of the application's + manifests or chart + properties: + chart: + description: Chart is a Helm chart name, and must be specified + for applications sourced from a Helm repo. + type: string + directory: + description: Directory holds path/directory specific options + properties: + exclude: + description: Exclude contains a glob pattern to match paths + against that should be explicitly excluded from being used + during manifest generation + type: string + include: + description: Include contains a glob pattern to match paths + against that should be explicitly included during manifest + generation + type: string + jsonnet: + description: Jsonnet holds options specific to Jsonnet + properties: + extVars: + description: ExtVars is a list of Jsonnet External Variables + items: + description: JsonnetVar represents a variable to be + passed to jsonnet during manifest generation + properties: + code: + type: boolean + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + libs: + description: Additional library search dirs + items: + type: string + type: array + tlas: + description: TLAS is a list of Jsonnet Top-level Arguments + items: + description: JsonnetVar represents a variable to be + passed to jsonnet during manifest generation + properties: + code: + type: boolean + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + type: object + recurse: + description: Recurse specifies whether to scan a directory + recursively for manifests + type: boolean + type: object + helm: + description: Helm holds helm specific options + properties: + fileParameters: + description: FileParameters are file parameters to the helm + template + items: + description: HelmFileParameter is a file parameter that's + passed to helm template during manifest generation + properties: + name: + description: Name is the name of the Helm parameter + type: string + path: + description: Path is the path to the file containing + the values for the Helm parameter + type: string + type: object + type: array + parameters: + description: Parameters is a list of Helm parameters which + are passed to the helm template command upon manifest generation + items: + description: HelmParameter is a parameter that's passed + to helm template during manifest generation + properties: + forceString: + description: ForceString determines whether to tell + Helm to interpret booleans and numbers as strings + type: boolean + name: + description: Name is the name of the Helm parameter + type: string + value: + description: Value is the value for the Helm parameter + type: string + type: object + type: array + releaseName: + description: ReleaseName is the Helm release name to use. + If omitted it will use the application name + type: string + valueFiles: + description: ValuesFiles is a list of Helm value files to + use when generating a template + items: + type: string + type: array + values: + description: Values specifies Helm values to be passed to + helm template, typically defined as a block + type: string + version: + description: Version is the Helm version to use for templating + (either "2" or "3") + type: string + type: object + ksonnet: + description: Ksonnet holds ksonnet specific options + properties: + environment: + description: Environment is a ksonnet application environment + name + type: string + parameters: + description: Parameters are a list of ksonnet component parameter + override values + items: + description: KsonnetParameter is a ksonnet component parameter + properties: + component: + type: string + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + type: object + kustomize: + description: Kustomize holds kustomize specific options + properties: + commonAnnotations: + additionalProperties: + type: string + description: CommonAnnotations is a list of additional annotations + to add to rendered manifests + type: object + commonLabels: + additionalProperties: + type: string + description: CommonLabels is a list of additional labels to + add to rendered manifests + type: object + forceCommonAnnotations: + description: ForceCommonAnnotations specifies whether to force + applying common annotations to resources for Kustomize apps + type: boolean + forceCommonLabels: + description: ForceCommonLabels specifies whether to force + applying common labels to resources for Kustomize apps + type: boolean + images: + description: Images is a list of Kustomize image override + specifications + items: + description: KustomizeImage represents a Kustomize image + definition in the format [old_image_name=]: + type: string + type: array + namePrefix: + description: NamePrefix is a prefix appended to resources + for Kustomize apps + type: string + nameSuffix: + description: NameSuffix is a suffix appended to resources + for Kustomize apps + type: string + version: + description: Version controls which version of Kustomize to + use for rendering manifests + type: string + type: object + path: + description: Path is a directory path within the Git repository, + and is only valid for applications sourced from Git. + type: string + plugin: + description: ConfigManagementPlugin holds config management plugin + specific options + properties: + env: + description: Env is a list of environment variable entries + items: + description: EnvEntry represents an entry in the application's + environment + properties: + name: + description: Name is the name of the variable, usually + expressed in uppercase + type: string + value: + description: Value is the value of the variable + type: string + required: + - name + - value + type: object + type: array + name: + type: string + type: object + repoURL: + description: RepoURL is the URL to the repository (Git or Helm) + that contains the application manifests + type: string + targetRevision: + description: TargetRevision defines the revision of the source + to sync the application to. In case of Git, this can be commit, + tag, or branch. If omitted, will equal to HEAD. In case of Helm, + this is a semver tag for the Chart's version. + type: string + required: + - repoURL + type: object + syncPolicy: + description: SyncPolicy controls when and how a sync will be performed + properties: + automated: + description: Automated will keep an application synced to the + target revision + properties: + allowEmpty: + description: 'AllowEmpty allows apps have zero live resources + (default: false)' + type: boolean + prune: + description: 'Prune specifies whether to delete resources + from the cluster that are not found in the sources anymore + as part of automated sync (default: false)' + type: boolean + selfHeal: + description: 'SelfHeal specifes whether to revert resources + back to their desired state upon modification in the cluster + (default: false)' + type: boolean + type: object + retry: + description: Retry controls failed sync retry behavior + properties: + backoff: + description: Backoff controls how to backoff on subsequent + retries of failed syncs + properties: + duration: + description: Duration is the amount to back off. Default + unit is seconds, but could also be a duration (e.g. + "2m", "1h") + type: string + factor: + description: Factor is a factor to multiply the base duration + after each failed retry + format: int64 + type: integer + maxDuration: + description: MaxDuration is the maximum amount of time + allowed for the backoff strategy + type: string + type: object + limit: + description: Limit is the maximum number of attempts for retrying + a failed sync. If set to 0, no retries will be performed. + format: int64 + type: integer + type: object + syncOptions: + description: Options allow you to specify whole app sync-options + items: + type: string + type: array + type: object + required: + - destination + - project + - source + type: object + status: + description: ApplicationStatus contains status information for the application + properties: + conditions: + description: Conditions is a list of currently observed application + conditions + items: + description: ApplicationCondition contains details about an application + condition, which is usally an error or warning + properties: + lastTransitionTime: + description: LastTransitionTime is the time the condition was + last observed + format: date-time + type: string + message: + description: Message contains human-readable message indicating + details about condition + type: string + type: + description: Type is an application condition type + type: string + required: + - message + - type + type: object + type: array + health: + description: Health contains information about the application's current + health status + properties: + message: + description: Message is a human-readable informational message + describing the health status + type: string + status: + description: Status holds the status code of the application or + resource + type: string + type: object + history: + description: History contains information about the application's + sync history + items: + description: RevisionHistory contains history information about + a previous sync + properties: + deployStartedAt: + description: DeployStartedAt holds the time the sync operation + started + format: date-time + type: string + deployedAt: + description: DeployedAt holds the time the sync operation completed + format: date-time + type: string + id: + description: ID is an auto incrementing identifier of the RevisionHistory + format: int64 + type: integer + revision: + description: Revision holds the revision the sync was performed + against + type: string + source: + description: Source is a reference to the application source + used for the sync operation + properties: + chart: + description: Chart is a Helm chart name, and must be specified + for applications sourced from a Helm repo. + type: string + directory: + description: Directory holds path/directory specific options + properties: + exclude: + description: Exclude contains a glob pattern to match + paths against that should be explicitly excluded from + being used during manifest generation + type: string + include: + description: Include contains a glob pattern to match + paths against that should be explicitly included during + manifest generation + type: string + jsonnet: + description: Jsonnet holds options specific to Jsonnet + properties: + extVars: + description: ExtVars is a list of Jsonnet External + Variables + items: + description: JsonnetVar represents a variable + to be passed to jsonnet during manifest generation + properties: + code: + type: boolean + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + libs: + description: Additional library search dirs + items: + type: string + type: array + tlas: + description: TLAS is a list of Jsonnet Top-level + Arguments + items: + description: JsonnetVar represents a variable + to be passed to jsonnet during manifest generation + properties: + code: + type: boolean + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + type: object + recurse: + description: Recurse specifies whether to scan a directory + recursively for manifests + type: boolean + type: object + helm: + description: Helm holds helm specific options + properties: + fileParameters: + description: FileParameters are file parameters to the + helm template + items: + description: HelmFileParameter is a file parameter + that's passed to helm template during manifest generation + properties: + name: + description: Name is the name of the Helm parameter + type: string + path: + description: Path is the path to the file containing + the values for the Helm parameter + type: string + type: object + type: array + parameters: + description: Parameters is a list of Helm parameters + which are passed to the helm template command upon + manifest generation + items: + description: HelmParameter is a parameter that's passed + to helm template during manifest generation + properties: + forceString: + description: ForceString determines whether to + tell Helm to interpret booleans and numbers + as strings + type: boolean + name: + description: Name is the name of the Helm parameter + type: string + value: + description: Value is the value for the Helm parameter + type: string + type: object + type: array + releaseName: + description: ReleaseName is the Helm release name to + use. If omitted it will use the application name + type: string + valueFiles: + description: ValuesFiles is a list of Helm value files + to use when generating a template + items: + type: string + type: array + values: + description: Values specifies Helm values to be passed + to helm template, typically defined as a block + type: string + version: + description: Version is the Helm version to use for + templating (either "2" or "3") + type: string + type: object + ksonnet: + description: Ksonnet holds ksonnet specific options + properties: + environment: + description: Environment is a ksonnet application environment + name + type: string + parameters: + description: Parameters are a list of ksonnet component + parameter override values + items: + description: KsonnetParameter is a ksonnet component + parameter + properties: + component: + type: string + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + type: object + kustomize: + description: Kustomize holds kustomize specific options + properties: + commonAnnotations: + additionalProperties: + type: string + description: CommonAnnotations is a list of additional + annotations to add to rendered manifests + type: object + commonLabels: + additionalProperties: + type: string + description: CommonLabels is a list of additional labels + to add to rendered manifests + type: object + forceCommonAnnotations: + description: ForceCommonAnnotations specifies whether + to force applying common annotations to resources + for Kustomize apps + type: boolean + forceCommonLabels: + description: ForceCommonLabels specifies whether to + force applying common labels to resources for Kustomize + apps + type: boolean + images: + description: Images is a list of Kustomize image override + specifications + items: + description: KustomizeImage represents a Kustomize + image definition in the format [old_image_name=]: + type: string + type: array + namePrefix: + description: NamePrefix is a prefix appended to resources + for Kustomize apps + type: string + nameSuffix: + description: NameSuffix is a suffix appended to resources + for Kustomize apps + type: string + version: + description: Version controls which version of Kustomize + to use for rendering manifests + type: string + type: object + path: + description: Path is a directory path within the Git repository, + and is only valid for applications sourced from Git. + type: string + plugin: + description: ConfigManagementPlugin holds config management + plugin specific options + properties: + env: + description: Env is a list of environment variable entries + items: + description: EnvEntry represents an entry in the application's + environment + properties: + name: + description: Name is the name of the variable, + usually expressed in uppercase + type: string + value: + description: Value is the value of the variable + type: string + required: + - name + - value + type: object + type: array + name: + type: string + type: object + repoURL: + description: RepoURL is the URL to the repository (Git or + Helm) that contains the application manifests + type: string + targetRevision: + description: TargetRevision defines the revision of the + source to sync the application to. In case of Git, this + can be commit, tag, or branch. If omitted, will equal + to HEAD. In case of Helm, this is a semver tag for the + Chart's version. + type: string + required: + - repoURL + type: object + required: + - deployedAt + - id + - revision + type: object + type: array + observedAt: + description: 'ObservedAt indicates when the application state was + updated without querying latest git state Deprecated: controller + no longer updates ObservedAt field' + format: date-time + type: string + operationState: + description: OperationState contains information about any ongoing + operations, such as a sync + properties: + finishedAt: + description: FinishedAt contains time of operation completion + format: date-time + type: string + message: + description: Message holds any pertinent messages when attempting + to perform operation (typically errors). + type: string + operation: + description: Operation is the original requested operation + properties: + info: + description: Info is a list of informational items for this + operation + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + initiatedBy: + description: InitiatedBy contains information about who initiated + the operations + properties: + automated: + description: Automated is set to true if operation was + initiated automatically by the application controller. + type: boolean + username: + description: Username contains the name of a user who + started operation + type: string + type: object + retry: + description: Retry controls the strategy to apply if a sync + fails + properties: + backoff: + description: Backoff controls how to backoff on subsequent + retries of failed syncs + properties: + duration: + description: Duration is the amount to back off. Default + unit is seconds, but could also be a duration (e.g. + "2m", "1h") + type: string + factor: + description: Factor is a factor to multiply the base + duration after each failed retry + format: int64 + type: integer + maxDuration: + description: MaxDuration is the maximum amount of + time allowed for the backoff strategy + type: string + type: object + limit: + description: Limit is the maximum number of attempts for + retrying a failed sync. If set to 0, no retries will + be performed. + format: int64 + type: integer + type: object + sync: + description: Sync contains parameters for the operation + properties: + dryRun: + description: DryRun specifies to perform a `kubectl apply + --dry-run` without actually performing the sync + type: boolean + manifests: + description: Manifests is an optional field that overrides + sync source with a local directory for development + items: + type: string + type: array + prune: + description: Prune specifies to delete resources from + the cluster that are no longer tracked in git + type: boolean + resources: + description: Resources describes which resources shall + be part of the sync + items: + description: SyncOperationResource contains resources + to sync. + properties: + group: + type: string + kind: + type: string + name: + type: string + namespace: + type: string + required: + - kind + - name + type: object + type: array + revision: + description: Revision is the revision (Git) or chart version + (Helm) which to sync the application to If omitted, + will use the revision specified in app spec. + type: string + source: + description: Source overrides the source definition set + in the application. This is typically set in a Rollback + operation and is nil during a Sync operation + properties: + chart: + description: Chart is a Helm chart name, and must + be specified for applications sourced from a Helm + repo. + type: string + directory: + description: Directory holds path/directory specific + options + properties: + exclude: + description: Exclude contains a glob pattern to + match paths against that should be explicitly + excluded from being used during manifest generation + type: string + include: + description: Include contains a glob pattern to + match paths against that should be explicitly + included during manifest generation + type: string + jsonnet: + description: Jsonnet holds options specific to + Jsonnet + properties: + extVars: + description: ExtVars is a list of Jsonnet + External Variables + items: + description: JsonnetVar represents a variable + to be passed to jsonnet during manifest + generation + properties: + code: + type: boolean + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + libs: + description: Additional library search dirs + items: + type: string + type: array + tlas: + description: TLAS is a list of Jsonnet Top-level + Arguments + items: + description: JsonnetVar represents a variable + to be passed to jsonnet during manifest + generation + properties: + code: + type: boolean + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + type: object + recurse: + description: Recurse specifies whether to scan + a directory recursively for manifests + type: boolean + type: object + helm: + description: Helm holds helm specific options + properties: + fileParameters: + description: FileParameters are file parameters + to the helm template + items: + description: HelmFileParameter is a file parameter + that's passed to helm template during manifest + generation + properties: + name: + description: Name is the name of the Helm + parameter + type: string + path: + description: Path is the path to the file + containing the values for the Helm parameter + type: string + type: object + type: array + parameters: + description: Parameters is a list of Helm parameters + which are passed to the helm template command + upon manifest generation + items: + description: HelmParameter is a parameter that's + passed to helm template during manifest generation + properties: + forceString: + description: ForceString determines whether + to tell Helm to interpret booleans and + numbers as strings + type: boolean + name: + description: Name is the name of the Helm + parameter + type: string + value: + description: Value is the value for the + Helm parameter + type: string + type: object + type: array + releaseName: + description: ReleaseName is the Helm release name + to use. If omitted it will use the application + name + type: string + valueFiles: + description: ValuesFiles is a list of Helm value + files to use when generating a template + items: + type: string + type: array + values: + description: Values specifies Helm values to be + passed to helm template, typically defined as + a block + type: string + version: + description: Version is the Helm version to use + for templating (either "2" or "3") + type: string + type: object + ksonnet: + description: Ksonnet holds ksonnet specific options + properties: + environment: + description: Environment is a ksonnet application + environment name + type: string + parameters: + description: Parameters are a list of ksonnet + component parameter override values + items: + description: KsonnetParameter is a ksonnet component + parameter + properties: + component: + type: string + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + type: object + kustomize: + description: Kustomize holds kustomize specific options + properties: + commonAnnotations: + additionalProperties: + type: string + description: CommonAnnotations is a list of additional + annotations to add to rendered manifests + type: object + commonLabels: + additionalProperties: + type: string + description: CommonLabels is a list of additional + labels to add to rendered manifests + type: object + forceCommonAnnotations: + description: ForceCommonAnnotations specifies + whether to force applying common annotations + to resources for Kustomize apps + type: boolean + forceCommonLabels: + description: ForceCommonLabels specifies whether + to force applying common labels to resources + for Kustomize apps + type: boolean + images: + description: Images is a list of Kustomize image + override specifications + items: + description: KustomizeImage represents a Kustomize + image definition in the format [old_image_name=]: + type: string + type: array + namePrefix: + description: NamePrefix is a prefix appended to + resources for Kustomize apps + type: string + nameSuffix: + description: NameSuffix is a suffix appended to + resources for Kustomize apps + type: string + version: + description: Version controls which version of + Kustomize to use for rendering manifests + type: string + type: object + path: + description: Path is a directory path within the Git + repository, and is only valid for applications sourced + from Git. + type: string + plugin: + description: ConfigManagementPlugin holds config management + plugin specific options + properties: + env: + description: Env is a list of environment variable + entries + items: + description: EnvEntry represents an entry in + the application's environment + properties: + name: + description: Name is the name of the variable, + usually expressed in uppercase + type: string + value: + description: Value is the value of the variable + type: string + required: + - name + - value + type: object + type: array + name: + type: string + type: object + repoURL: + description: RepoURL is the URL to the repository + (Git or Helm) that contains the application manifests + type: string + targetRevision: + description: TargetRevision defines the revision of + the source to sync the application to. In case of + Git, this can be commit, tag, or branch. If omitted, + will equal to HEAD. In case of Helm, this is a semver + tag for the Chart's version. + type: string + required: + - repoURL + type: object + syncOptions: + description: SyncOptions provide per-sync sync-options, + e.g. Validate=false + items: + type: string + type: array + syncStrategy: + description: SyncStrategy describes how to perform the + sync + properties: + apply: + description: Apply will perform a `kubectl apply` + to perform the sync. + properties: + force: + description: Force indicates whether or not to + supply the --force flag to `kubectl apply`. + The --force flag deletes and re-create the resource, + when PATCH encounters conflict and has retried + for 5 times. + type: boolean + type: object + hook: + description: Hook will submit any referenced resources + to perform the sync. This is the default strategy + properties: + force: + description: Force indicates whether or not to + supply the --force flag to `kubectl apply`. + The --force flag deletes and re-create the resource, + when PATCH encounters conflict and has retried + for 5 times. + type: boolean + type: object + type: object + type: object + type: object + phase: + description: Phase is the current phase of the operation + type: string + retryCount: + description: RetryCount contains time of operation retries + format: int64 + type: integer + startedAt: + description: StartedAt contains time of operation start + format: date-time + type: string + syncResult: + description: SyncResult is the result of a Sync operation + properties: + resources: + description: Resources contains a list of sync result items + for each individual resource in a sync operation + items: + description: ResourceResult holds the operation result details + of a specific resource + properties: + group: + description: Group specifies the API group of the resource + type: string + hookPhase: + description: HookPhase contains the state of any operation + associated with this resource OR hook This can also + contain values for non-hook resources. + type: string + hookType: + description: HookType specifies the type of the hook. + Empty for non-hook resources + type: string + kind: + description: Kind specifies the API kind of the resource + type: string + message: + description: Message contains an informational or error + message for the last sync OR operation + type: string + name: + description: Name specifies the name of the resource + type: string + namespace: + description: Namespace specifies the target namespace + of the resource + type: string + status: + description: Status holds the final result of the sync. + Will be empty if the resources is yet to be applied/pruned + and is always zero-value for hooks + type: string + syncPhase: + description: SyncPhase indicates the particular phase + of the sync that this result was acquired in + type: string + version: + description: Version specifies the API version of the + resource + type: string + required: + - group + - kind + - name + - namespace + - version + type: object + type: array + revision: + description: Revision holds the revision this sync operation + was performed to + type: string + source: + description: Source records the application source information + of the sync, used for comparing auto-sync + properties: + chart: + description: Chart is a Helm chart name, and must be specified + for applications sourced from a Helm repo. + type: string + directory: + description: Directory holds path/directory specific options + properties: + exclude: + description: Exclude contains a glob pattern to match + paths against that should be explicitly excluded + from being used during manifest generation + type: string + include: + description: Include contains a glob pattern to match + paths against that should be explicitly included + during manifest generation + type: string + jsonnet: + description: Jsonnet holds options specific to Jsonnet + properties: + extVars: + description: ExtVars is a list of Jsonnet External + Variables + items: + description: JsonnetVar represents a variable + to be passed to jsonnet during manifest generation + properties: + code: + type: boolean + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + libs: + description: Additional library search dirs + items: + type: string + type: array + tlas: + description: TLAS is a list of Jsonnet Top-level + Arguments + items: + description: JsonnetVar represents a variable + to be passed to jsonnet during manifest generation + properties: + code: + type: boolean + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + type: object + recurse: + description: Recurse specifies whether to scan a directory + recursively for manifests + type: boolean + type: object + helm: + description: Helm holds helm specific options + properties: + fileParameters: + description: FileParameters are file parameters to + the helm template + items: + description: HelmFileParameter is a file parameter + that's passed to helm template during manifest + generation + properties: + name: + description: Name is the name of the Helm parameter + type: string + path: + description: Path is the path to the file containing + the values for the Helm parameter + type: string + type: object + type: array + parameters: + description: Parameters is a list of Helm parameters + which are passed to the helm template command upon + manifest generation + items: + description: HelmParameter is a parameter that's + passed to helm template during manifest generation + properties: + forceString: + description: ForceString determines whether + to tell Helm to interpret booleans and numbers + as strings + type: boolean + name: + description: Name is the name of the Helm parameter + type: string + value: + description: Value is the value for the Helm + parameter + type: string + type: object + type: array + releaseName: + description: ReleaseName is the Helm release name + to use. If omitted it will use the application name + type: string + valueFiles: + description: ValuesFiles is a list of Helm value files + to use when generating a template + items: + type: string + type: array + values: + description: Values specifies Helm values to be passed + to helm template, typically defined as a block + type: string + version: + description: Version is the Helm version to use for + templating (either "2" or "3") + type: string + type: object + ksonnet: + description: Ksonnet holds ksonnet specific options + properties: + environment: + description: Environment is a ksonnet application + environment name + type: string + parameters: + description: Parameters are a list of ksonnet component + parameter override values + items: + description: KsonnetParameter is a ksonnet component + parameter + properties: + component: + type: string + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + type: object + kustomize: + description: Kustomize holds kustomize specific options + properties: + commonAnnotations: + additionalProperties: + type: string + description: CommonAnnotations is a list of additional + annotations to add to rendered manifests + type: object + commonLabels: + additionalProperties: + type: string + description: CommonLabels is a list of additional + labels to add to rendered manifests + type: object + forceCommonAnnotations: + description: ForceCommonAnnotations specifies whether + to force applying common annotations to resources + for Kustomize apps + type: boolean + forceCommonLabels: + description: ForceCommonLabels specifies whether to + force applying common labels to resources for Kustomize + apps + type: boolean + images: + description: Images is a list of Kustomize image override + specifications + items: + description: KustomizeImage represents a Kustomize + image definition in the format [old_image_name=]: + type: string + type: array + namePrefix: + description: NamePrefix is a prefix appended to resources + for Kustomize apps + type: string + nameSuffix: + description: NameSuffix is a suffix appended to resources + for Kustomize apps + type: string + version: + description: Version controls which version of Kustomize + to use for rendering manifests + type: string + type: object + path: + description: Path is a directory path within the Git repository, + and is only valid for applications sourced from Git. + type: string + plugin: + description: ConfigManagementPlugin holds config management + plugin specific options + properties: + env: + description: Env is a list of environment variable + entries + items: + description: EnvEntry represents an entry in the + application's environment + properties: + name: + description: Name is the name of the variable, + usually expressed in uppercase + type: string + value: + description: Value is the value of the variable + type: string + required: + - name + - value + type: object + type: array + name: + type: string + type: object + repoURL: + description: RepoURL is the URL to the repository (Git + or Helm) that contains the application manifests + type: string + targetRevision: + description: TargetRevision defines the revision of the + source to sync the application to. In case of Git, this + can be commit, tag, or branch. If omitted, will equal + to HEAD. In case of Helm, this is a semver tag for the + Chart's version. + type: string + required: + - repoURL + type: object + required: + - revision + type: object + required: + - operation + - phase + - startedAt + type: object + reconciledAt: + description: ReconciledAt indicates when the application state was + reconciled using the latest git version + format: date-time + type: string + resources: + description: Resources is a list of Kubernetes resources managed by + this application + items: + description: 'ResourceStatus holds the current sync and health status + of a resource TODO: describe members of this type' + properties: + group: + type: string + health: + description: HealthStatus contains information about the currently + observed health state of an application or resource + properties: + message: + description: Message is a human-readable informational message + describing the health status + type: string + status: + description: Status holds the status code of the application + or resource + type: string + type: object + hook: + type: boolean + kind: + type: string + name: + type: string + namespace: + type: string + requiresPruning: + type: boolean + status: + description: SyncStatusCode is a type which represents possible + comparison results + type: string + version: + type: string + type: object + type: array + sourceType: + description: SourceType specifies the type of this application + type: string + summary: + description: Summary contains a list of URLs and container images + used by this application + properties: + externalURLs: + description: ExternalURLs holds all external URLs of application + child resources. + items: + type: string + type: array + images: + description: Images holds all images of application child resources. + items: + type: string + type: array + type: object + sync: + description: Sync contains information about the application's current + sync status + properties: + comparedTo: + description: ComparedTo contains information about what has been + compared + properties: + destination: + description: Destination is a reference to the application's + destination used for comparison + properties: + name: + description: Name is an alternate way of specifying the + target cluster by its symbolic name + type: string + namespace: + description: Namespace specifies the target namespace + for the application's resources. The namespace will + only be set for namespace-scoped resources that have + not set a value for .metadata.namespace + type: string + server: + description: Server specifies the URL of the target cluster + and must be set to the Kubernetes control plane API + type: string + type: object + source: + description: Source is a reference to the application's source + used for comparison + properties: + chart: + description: Chart is a Helm chart name, and must be specified + for applications sourced from a Helm repo. + type: string + directory: + description: Directory holds path/directory specific options + properties: + exclude: + description: Exclude contains a glob pattern to match + paths against that should be explicitly excluded + from being used during manifest generation + type: string + include: + description: Include contains a glob pattern to match + paths against that should be explicitly included + during manifest generation + type: string + jsonnet: + description: Jsonnet holds options specific to Jsonnet + properties: + extVars: + description: ExtVars is a list of Jsonnet External + Variables + items: + description: JsonnetVar represents a variable + to be passed to jsonnet during manifest generation + properties: + code: + type: boolean + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + libs: + description: Additional library search dirs + items: + type: string + type: array + tlas: + description: TLAS is a list of Jsonnet Top-level + Arguments + items: + description: JsonnetVar represents a variable + to be passed to jsonnet during manifest generation + properties: + code: + type: boolean + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + type: object + recurse: + description: Recurse specifies whether to scan a directory + recursively for manifests + type: boolean + type: object + helm: + description: Helm holds helm specific options + properties: + fileParameters: + description: FileParameters are file parameters to + the helm template + items: + description: HelmFileParameter is a file parameter + that's passed to helm template during manifest + generation + properties: + name: + description: Name is the name of the Helm parameter + type: string + path: + description: Path is the path to the file containing + the values for the Helm parameter + type: string + type: object + type: array + parameters: + description: Parameters is a list of Helm parameters + which are passed to the helm template command upon + manifest generation + items: + description: HelmParameter is a parameter that's + passed to helm template during manifest generation + properties: + forceString: + description: ForceString determines whether + to tell Helm to interpret booleans and numbers + as strings + type: boolean + name: + description: Name is the name of the Helm parameter + type: string + value: + description: Value is the value for the Helm + parameter + type: string + type: object + type: array + releaseName: + description: ReleaseName is the Helm release name + to use. If omitted it will use the application name + type: string + valueFiles: + description: ValuesFiles is a list of Helm value files + to use when generating a template + items: + type: string + type: array + values: + description: Values specifies Helm values to be passed + to helm template, typically defined as a block + type: string + version: + description: Version is the Helm version to use for + templating (either "2" or "3") + type: string + type: object + ksonnet: + description: Ksonnet holds ksonnet specific options + properties: + environment: + description: Environment is a ksonnet application + environment name + type: string + parameters: + description: Parameters are a list of ksonnet component + parameter override values + items: + description: KsonnetParameter is a ksonnet component + parameter + properties: + component: + type: string + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + type: object + kustomize: + description: Kustomize holds kustomize specific options + properties: + commonAnnotations: + additionalProperties: + type: string + description: CommonAnnotations is a list of additional + annotations to add to rendered manifests + type: object + commonLabels: + additionalProperties: + type: string + description: CommonLabels is a list of additional + labels to add to rendered manifests + type: object + forceCommonAnnotations: + description: ForceCommonAnnotations specifies whether + to force applying common annotations to resources + for Kustomize apps + type: boolean + forceCommonLabels: + description: ForceCommonLabels specifies whether to + force applying common labels to resources for Kustomize + apps + type: boolean + images: + description: Images is a list of Kustomize image override + specifications + items: + description: KustomizeImage represents a Kustomize + image definition in the format [old_image_name=]: + type: string + type: array + namePrefix: + description: NamePrefix is a prefix appended to resources + for Kustomize apps + type: string + nameSuffix: + description: NameSuffix is a suffix appended to resources + for Kustomize apps + type: string + version: + description: Version controls which version of Kustomize + to use for rendering manifests + type: string + type: object + path: + description: Path is a directory path within the Git repository, + and is only valid for applications sourced from Git. + type: string + plugin: + description: ConfigManagementPlugin holds config management + plugin specific options + properties: + env: + description: Env is a list of environment variable + entries + items: + description: EnvEntry represents an entry in the + application's environment + properties: + name: + description: Name is the name of the variable, + usually expressed in uppercase + type: string + value: + description: Value is the value of the variable + type: string + required: + - name + - value + type: object + type: array + name: + type: string + type: object + repoURL: + description: RepoURL is the URL to the repository (Git + or Helm) that contains the application manifests + type: string + targetRevision: + description: TargetRevision defines the revision of the + source to sync the application to. In case of Git, this + can be commit, tag, or branch. If omitted, will equal + to HEAD. In case of Helm, this is a semver tag for the + Chart's version. + type: string + required: + - repoURL + type: object + required: + - destination + - source + type: object + revision: + description: Revision contains information about the revision + the comparison has been performed to + type: string + status: + description: Status is the sync state of the comparison + type: string + required: + - status + type: object + type: object + required: + - metadata + - spec + type: object + served: true + storage: true + subresources: {} +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + labels: + app.kubernetes.io/name: appprojects.argoproj.io + app.kubernetes.io/part-of: argocd + name: appprojects.argoproj.io +spec: + group: argoproj.io + names: + kind: AppProject + listKind: AppProjectList + plural: appprojects + shortNames: + - appproj + - appprojs + singular: appproject + scope: Namespaced + versions: + - name: v1alpha1 + schema: + openAPIV3Schema: + description: 'AppProject provides a logical grouping of applications, providing + controls for: * where the apps may deploy to (cluster whitelist) * what + may be deployed (repository whitelist, resource whitelist/blacklist) * who + can access these applications (roles, OIDC group claims bindings) * and + what they can do (RBAC policies) * automation access to these roles (JWT + tokens)' + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + kind: + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + metadata: + type: object + spec: + description: AppProjectSpec is the specification of an AppProject + properties: + clusterResourceBlacklist: + description: ClusterResourceBlacklist contains list of blacklisted + cluster level resources + items: + description: GroupKind specifies a Group and a Kind, but does not + force a version. This is useful for identifying concepts during + lookup stages without having partially valid types + properties: + group: + type: string + kind: + type: string + required: + - group + - kind + type: object + type: array + clusterResourceWhitelist: + description: ClusterResourceWhitelist contains list of whitelisted + cluster level resources + items: + description: GroupKind specifies a Group and a Kind, but does not + force a version. This is useful for identifying concepts during + lookup stages without having partially valid types + properties: + group: + type: string + kind: + type: string + required: + - group + - kind + type: object + type: array + description: + description: Description contains optional project description + type: string + destinations: + description: Destinations contains list of destinations available + for deployment + items: + description: ApplicationDestination holds information about the + application's destination + properties: + name: + description: Name is an alternate way of specifying the target + cluster by its symbolic name + type: string + namespace: + description: Namespace specifies the target namespace for the + application's resources. The namespace will only be set for + namespace-scoped resources that have not set a value for .metadata.namespace + type: string + server: + description: Server specifies the URL of the target cluster + and must be set to the Kubernetes control plane API + type: string + type: object + type: array + namespaceResourceBlacklist: + description: NamespaceResourceBlacklist contains list of blacklisted + namespace level resources + items: + description: GroupKind specifies a Group and a Kind, but does not + force a version. This is useful for identifying concepts during + lookup stages without having partially valid types + properties: + group: + type: string + kind: + type: string + required: + - group + - kind + type: object + type: array + namespaceResourceWhitelist: + description: NamespaceResourceWhitelist contains list of whitelisted + namespace level resources + items: + description: GroupKind specifies a Group and a Kind, but does not + force a version. This is useful for identifying concepts during + lookup stages without having partially valid types + properties: + group: + type: string + kind: + type: string + required: + - group + - kind + type: object + type: array + orphanedResources: + description: OrphanedResources specifies if controller should monitor + orphaned resources of apps in this project + properties: + ignore: + description: Ignore contains a list of resources that are to be + excluded from orphaned resources monitoring + items: + description: OrphanedResourceKey is a reference to a resource + to be ignored from + properties: + group: + type: string + kind: + type: string + name: + type: string + type: object + type: array + warn: + description: Warn indicates if warning condition should be created + for apps which have orphaned resources + type: boolean + type: object + roles: + description: Roles are user defined RBAC roles associated with this + project + items: + description: ProjectRole represents a role that has access to a + project + properties: + description: + description: Description is a description of the role + type: string + groups: + description: Groups are a list of OIDC group claims bound to + this role + items: + type: string + type: array + jwtTokens: + description: JWTTokens are a list of generated JWT tokens bound + to this role + items: + description: JWTToken holds the issuedAt and expiresAt values + of a token + properties: + exp: + format: int64 + type: integer + iat: + format: int64 + type: integer + id: + type: string + required: + - iat + type: object + type: array + name: + description: Name is a name for this role + type: string + policies: + description: Policies Stores a list of casbin formatted strings + that define access policies for the role in the project + items: + type: string + type: array + required: + - name + type: object + type: array + signatureKeys: + description: SignatureKeys contains a list of PGP key IDs that commits + in Git must be signed with in order to be allowed for sync + items: + description: SignatureKey is the specification of a key required + to verify commit signatures with + properties: + keyID: + description: The ID of the key in hexadecimal notation + type: string + required: + - keyID + type: object + type: array + sourceRepos: + description: SourceRepos contains list of repository URLs which can + be used for deployment + items: + type: string + type: array + syncWindows: + description: SyncWindows controls when syncs can be run for apps in + this project + items: + description: SyncWindow contains the kind, time, duration and attributes + that are used to assign the syncWindows to apps + properties: + applications: + description: Applications contains a list of applications that + the window will apply to + items: + type: string + type: array + clusters: + description: Clusters contains a list of clusters that the window + will apply to + items: + type: string + type: array + duration: + description: Duration is the amount of time the sync window + will be open + type: string + kind: + description: Kind defines if the window allows or blocks syncs + type: string + manualSync: + description: ManualSync enables manual syncs when they would + otherwise be blocked + type: boolean + namespaces: + description: Namespaces contains a list of namespaces that the + window will apply to + items: + type: string + type: array + schedule: + description: Schedule is the time the window will begin, specified + in cron format + type: string + type: object + type: array + type: object + status: + description: AppProjectStatus contains status information for AppProject + CRs + properties: + jwtTokensByRole: + additionalProperties: + description: JWTTokens represents a list of JWT tokens + properties: + items: + items: + description: JWTToken holds the issuedAt and expiresAt values + of a token + properties: + exp: + format: int64 + type: integer + iat: + format: int64 + type: integer + id: + type: string + required: + - iat + type: object + type: array + type: object + description: JWTTokensByRole contains a list of JWT tokens issued + for a given role + type: object + type: object + required: + - metadata + - spec + type: object + served: true + storage: true +--- +apiVersion: v1 +kind: ServiceAccount +metadata: + labels: + app.kubernetes.io/component: application-controller + app.kubernetes.io/name: argocd-application-controller + app.kubernetes.io/part-of: argocd + name: argocd-application-controller +--- +apiVersion: v1 +kind: ServiceAccount +metadata: + labels: + app.kubernetes.io/component: redis + app.kubernetes.io/name: argocd-redis + app.kubernetes.io/part-of: argocd + name: argocd-redis +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: Role +metadata: + labels: + app.kubernetes.io/component: application-controller + app.kubernetes.io/name: argocd-application-controller + app.kubernetes.io/part-of: argocd + name: argocd-application-controller +rules: +- apiGroups: + - "" + resources: + - secrets + - configmaps + verbs: + - get + - list + - watch +- apiGroups: + - argoproj.io + resources: + - applications + - appprojects + verbs: + - create + - get + - list + - watch + - update + - patch + - delete +- apiGroups: + - "" + resources: + - events + verbs: + - create + - list +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + labels: + app.kubernetes.io/component: application-controller + app.kubernetes.io/name: argocd-application-controller + app.kubernetes.io/part-of: argocd + name: argocd-application-controller +rules: +- apiGroups: + - '*' + resources: + - '*' + verbs: + - '*' +- nonResourceURLs: + - '*' + verbs: + - '*' +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + labels: + app.kubernetes.io/component: server + app.kubernetes.io/name: argocd-server + app.kubernetes.io/part-of: argocd + name: argocd-server +rules: +- apiGroups: + - '*' + resources: + - '*' + verbs: + - delete + - get + - patch +- apiGroups: + - "" + resources: + - events + verbs: + - list +- apiGroups: + - "" + resources: + - pods + - pods/log + verbs: + - get +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: RoleBinding +metadata: + labels: + app.kubernetes.io/component: application-controller + app.kubernetes.io/name: argocd-application-controller + app.kubernetes.io/part-of: argocd + name: argocd-application-controller +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: Role + name: argocd-application-controller +subjects: +- kind: ServiceAccount + name: argocd-application-controller +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: RoleBinding +metadata: + labels: + app.kubernetes.io/component: redis + app.kubernetes.io/name: argocd-redis + app.kubernetes.io/part-of: argocd + name: argocd-redis +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: Role + name: argocd-redis +subjects: +- kind: ServiceAccount + name: argocd-redis +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + labels: + app.kubernetes.io/component: application-controller + app.kubernetes.io/name: argocd-application-controller + app.kubernetes.io/part-of: argocd + name: argocd-application-controller +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: argocd-application-controller +subjects: +- kind: ServiceAccount + name: argocd-application-controller + namespace: argocd +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + labels: + app.kubernetes.io/component: server + app.kubernetes.io/name: argocd-server + app.kubernetes.io/part-of: argocd + name: argocd-server +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: argocd-server +subjects: +- kind: ServiceAccount + name: argocd-server + namespace: argocd +--- +apiVersion: v1 +kind: ConfigMap +metadata: + labels: + app.kubernetes.io/name: argocd-cm + app.kubernetes.io/part-of: argocd + name: argocd-cm +--- +apiVersion: v1 +kind: ConfigMap +metadata: + labels: + app.kubernetes.io/name: argocd-cmd-params-cm + app.kubernetes.io/part-of: argocd + name: argocd-cmd-params-cm +--- +apiVersion: v1 +kind: ConfigMap +metadata: + labels: + app.kubernetes.io/name: argocd-gpg-keys-cm + app.kubernetes.io/part-of: argocd + name: argocd-gpg-keys-cm +--- +apiVersion: v1 +kind: ConfigMap +metadata: + labels: + app.kubernetes.io/name: argocd-rbac-cm + app.kubernetes.io/part-of: argocd + name: argocd-rbac-cm +--- +apiVersion: v1 +data: + ssh_known_hosts: | + bitbucket.org ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAubiN81eDcafrgMeLzaFPsw2kNvEcqTKl/VqLat/MaB33pZy0y3rJZtnqwR2qOOvbwKZYKiEO1O6VqNEBxKvJJelCq0dTXWT5pbO2gDXC6h6QDXCaHo6pOHGPUy+YBaGQRGuSusMEASYiWunYN0vCAI8QaXnWMXNMdFP3jHAJH0eDsoiGnLPBlBp4TNm6rYI74nMzgz3B9IikW4WVK+dc8KZJZWYjAuORU3jc1c/NPskD2ASinf8v3xnfXeukU0sJ5N6m5E8VLjObPEO+mN2t/FZTMZLiFqPWc/ALSqnMnnhwrNi2rbfg/rd/IpL8Le3pSBne8+seeFVBoGqzHM9yXw== + github.com ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAq2A7hRGmdnm9tUDbO9IDSwBK6TbQa+PXYPCPy6rbTrTtw7PHkccKrpp0yVhp5HdEIcKr6pLlVDBfOLX9QUsyCOV0wzfjIJNlGEYsdlLJizHhbn2mUjvSAHQqZETYP81eFzLQNnPHt4EVVUh7VfDESU84KezmD5QlWpXLmvU31/yMf+Se8xhHTvKSCZIFImWwoG6mbUoWf9nzpIoaSjB+weqqUUmpaaasXVal72J+UX2B+2RPW3RcT0eOzQgqlJL3RKrTJvdsjE3JEAvGq3lGHSZXy28G3skua2SmVi/w4yCE6gbODqnTWlg7+wC604ydGXA8VJiS5ap43JXiUFFAaQ== + gitlab.com ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBFSMqzJeV9rUzU4kWitGjeR4PWSa29SPqJ1fVkhtj3Hw9xjLVXVYrU9QlYWrOLXBpQ6KWjbjTDTdDkoohFzgbEY= + gitlab.com ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAfuCHKVTjquxvt6CM6tdG4SLp1Btn/nOeHHE5UOzRdf + gitlab.com ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCsj2bNKTBSpIYDEGk9KxsGh3mySTRgMtXL583qmBpzeQ+jqCMRgBqB98u3z++J1sKlXHWfM9dyhSevkMwSbhoR8XIq/U0tCNyokEi/ueaBMCvbcTHhO7FcwzY92WK4Yt0aGROY5qX2UKSeOvuP4D6TPqKF1onrSzH9bx9XUf2lEdWT/ia1NEKjunUqu1xOB/StKDHMoX4/OKyIzuS0q/T1zOATthvasJFoPrAjkohTyaDUz2LN5JoH839hViyEG82yB+MjcFV5MU3N1l1QL3cVUCh93xSaua1N85qivl+siMkPGbO5xR/En4iEY6K2XPASUEMaieWVNTRCtJ4S8H+9 + ssh.dev.azure.com ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC7Hr1oTWqNqOlzGJOfGJ4NakVyIzf1rXYd4d7wo6jBlkLvCA4odBlL0mDUyZ0/QUfTTqeu+tm22gOsv+VrVTMk6vwRU75gY/y9ut5Mb3bR5BV58dKXyq9A9UeB5Cakehn5Zgm6x1mKoVyf+FFn26iYqXJRgzIZZcZ5V6hrE0Qg39kZm4az48o0AUbf6Sp4SLdvnuMa2sVNwHBboS7EJkm57XQPVU3/QpyNLHbWDdzwtrlS+ez30S3AdYhLKEOxAG8weOnyrtLJAUen9mTkol8oII1edf7mWWbWVf0nBmly21+nZcmCTISQBtdcyPaEno7fFQMDD26/s0lfKob4Kw8H + vs-ssh.visualstudio.com ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC7Hr1oTWqNqOlzGJOfGJ4NakVyIzf1rXYd4d7wo6jBlkLvCA4odBlL0mDUyZ0/QUfTTqeu+tm22gOsv+VrVTMk6vwRU75gY/y9ut5Mb3bR5BV58dKXyq9A9UeB5Cakehn5Zgm6x1mKoVyf+FFn26iYqXJRgzIZZcZ5V6hrE0Qg39kZm4az48o0AUbf6Sp4SLdvnuMa2sVNwHBboS7EJkm57XQPVU3/QpyNLHbWDdzwtrlS+ez30S3AdYhLKEOxAG8weOnyrtLJAUen9mTkol8oII1edf7mWWbWVf0nBmly21+nZcmCTISQBtdcyPaEno7fFQMDD26/s0lfKob4Kw8H +kind: ConfigMap +metadata: + labels: + app.kubernetes.io/name: argocd-ssh-known-hosts-cm + app.kubernetes.io/part-of: argocd + name: argocd-ssh-known-hosts-cm +--- +apiVersion: v1 +data: null +kind: ConfigMap +metadata: + labels: + app.kubernetes.io/name: argocd-tls-certs-cm + app.kubernetes.io/part-of: argocd + name: argocd-tls-certs-cm +--- +apiVersion: v1 +kind: Secret +metadata: + labels: + app.kubernetes.io/name: argocd-secret + app.kubernetes.io/part-of: argocd + name: argocd-secret +type: Opaque +--- +apiVersion: v1 +kind: Service +metadata: + labels: + app.kubernetes.io/component: metrics + app.kubernetes.io/name: argocd-metrics + app.kubernetes.io/part-of: argocd + name: argocd-metrics +spec: + ports: + - name: metrics + port: 8082 + protocol: TCP + targetPort: 8082 + selector: + app.kubernetes.io/name: argocd-application-controller +--- +apiVersion: v1 +kind: Service +metadata: + labels: + app.kubernetes.io/component: redis + app.kubernetes.io/name: argocd-redis + app.kubernetes.io/part-of: argocd + name: argocd-redis +spec: + ports: + - name: tcp-redis + port: 6379 + targetPort: 6379 + selector: + app.kubernetes.io/name: argocd-redis +--- +apiVersion: v1 +kind: Service +metadata: + labels: + app.kubernetes.io/component: repo-server + app.kubernetes.io/name: argocd-repo-server + app.kubernetes.io/part-of: argocd + name: argocd-repo-server +spec: + ports: + - name: server + port: 8081 + protocol: TCP + targetPort: 8081 + - name: metrics + port: 8084 + protocol: TCP + targetPort: 8084 + selector: + app.kubernetes.io/name: argocd-repo-server +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + app.kubernetes.io/component: redis + app.kubernetes.io/name: argocd-redis + app.kubernetes.io/part-of: argocd + name: argocd-redis +spec: + selector: + matchLabels: + app.kubernetes.io/name: argocd-redis + template: + metadata: + labels: + app.kubernetes.io/name: argocd-redis + spec: + affinity: + podAntiAffinity: + preferredDuringSchedulingIgnoredDuringExecution: + - podAffinityTerm: + labelSelector: + matchLabels: + app.kubernetes.io/name: argocd-redis + topologyKey: kubernetes.io/hostname + weight: 100 + - podAffinityTerm: + labelSelector: + matchLabels: + app.kubernetes.io/part-of: argocd + topologyKey: kubernetes.io/hostname + weight: 5 + containers: + - args: + - --save + - "" + - --appendonly + - "no" + image: redis:6.2.4-alpine + imagePullPolicy: Always + name: redis + ports: + - containerPort: 6379 + securityContext: + runAsNonRoot: true + runAsUser: 999 + serviceAccountName: argocd-redis +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + app.kubernetes.io/component: repo-server + app.kubernetes.io/name: argocd-repo-server + app.kubernetes.io/part-of: argocd + name: argocd-repo-server +spec: + selector: + matchLabels: + app.kubernetes.io/name: argocd-repo-server + template: + metadata: + labels: + app.kubernetes.io/name: argocd-repo-server + spec: + affinity: + podAntiAffinity: + preferredDuringSchedulingIgnoredDuringExecution: + - podAffinityTerm: + labelSelector: + matchLabels: + app.kubernetes.io/name: argocd-repo-server + topologyKey: kubernetes.io/hostname + weight: 100 + - podAffinityTerm: + labelSelector: + matchLabels: + app.kubernetes.io/part-of: argocd + topologyKey: kubernetes.io/hostname + weight: 5 + automountServiceAccountToken: false + containers: + - command: + - uid_entrypoint.sh + - argocd-repo-server + - --redis + - argocd-redis:6379 + env: + - name: ARGOCD_RECONCILIATION_TIMEOUT + valueFrom: + configMapKeyRef: + key: timeout.reconciliation + name: argocd-cm + optional: true + - name: ARGOCD_REPO_SERVER_LOGFORMAT + valueFrom: + configMapKeyRef: + key: reposerver.log.format + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_REPO_SERVER_LOGLEVEL + valueFrom: + configMapKeyRef: + key: reposerver.log.level + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_REPO_SERVER_PARALLELISM_LIMIT + valueFrom: + configMapKeyRef: + key: reposerver.parallelism.limit + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_REPO_SERVER_DISABLE_TLS + valueFrom: + configMapKeyRef: + key: reposerver.disable.tls + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_TLS_MIN_VERSION + valueFrom: + configMapKeyRef: + key: reposerver.tls.minversion + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_TLS_MAX_VERSION + valueFrom: + configMapKeyRef: + key: reposerver.tls.maxversion + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_TLS_CIPHERS + valueFrom: + configMapKeyRef: + key: reposerver.tls.ciphers + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_REPO_CACHE_EXPIRATION + valueFrom: + configMapKeyRef: + key: reposerver.repo.cache.expiration + name: argocd-cmd-params-cm + optional: true + - name: REDIS_SERVER + valueFrom: + configMapKeyRef: + key: redis.server + name: argocd-cmd-params-cm + optional: true + - name: REDISDB + valueFrom: + configMapKeyRef: + key: redis.db + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_DEFAULT_CACHE_EXPIRATION + valueFrom: + configMapKeyRef: + key: reposerver.default.cache.expiration + name: argocd-cmd-params-cm + optional: true + image: quay.io/argoproj/argocd:latest + imagePullPolicy: Always + livenessProbe: + failureThreshold: 3 + httpGet: + path: /healthz?full=true + port: 8084 + initialDelaySeconds: 30 + periodSeconds: 5 + name: argocd-repo-server + ports: + - containerPort: 8081 + - containerPort: 8084 + readinessProbe: + httpGet: + path: /healthz + port: 8084 + initialDelaySeconds: 5 + periodSeconds: 10 + securityContext: + allowPrivilegeEscalation: false + capabilities: + drop: + - all + readOnlyRootFilesystem: true + runAsNonRoot: true + volumeMounts: + - mountPath: /app/config/ssh + name: ssh-known-hosts + - mountPath: /app/config/tls + name: tls-certs + - mountPath: /app/config/gpg/source + name: gpg-keys + - mountPath: /app/config/gpg/keys + name: gpg-keyring + - mountPath: /app/config/reposerver/tls + name: argocd-repo-server-tls + - mountPath: /tmp + name: tmp + volumes: + - configMap: + name: argocd-ssh-known-hosts-cm + name: ssh-known-hosts + - configMap: + name: argocd-tls-certs-cm + name: tls-certs + - configMap: + name: argocd-gpg-keys-cm + name: gpg-keys + - emptyDir: {} + name: gpg-keyring + - emptyDir: {} + name: tmp + - name: argocd-repo-server-tls + secret: + items: + - key: tls.crt + path: tls.crt + - key: tls.key + path: tls.key + - key: ca.crt + path: ca.crt + optional: true + secretName: argocd-repo-server-tls +--- +apiVersion: apps/v1 +kind: StatefulSet +metadata: + labels: + app.kubernetes.io/component: application-controller + app.kubernetes.io/name: argocd-application-controller + app.kubernetes.io/part-of: argocd + name: argocd-application-controller +spec: + replicas: 1 + selector: + matchLabels: + app.kubernetes.io/name: argocd-application-controller + serviceName: argocd-application-controller + template: + metadata: + labels: + app.kubernetes.io/name: argocd-application-controller + spec: + affinity: + podAntiAffinity: + preferredDuringSchedulingIgnoredDuringExecution: + - podAffinityTerm: + labelSelector: + matchLabels: + app.kubernetes.io/name: argocd-application-controller + topologyKey: kubernetes.io/hostname + weight: 100 + - podAffinityTerm: + labelSelector: + matchLabels: + app.kubernetes.io/part-of: argocd + topologyKey: kubernetes.io/hostname + weight: 5 + containers: + - command: + - argocd-application-controller + env: + - name: ARGOCD_RECONCILIATION_TIMEOUT + valueFrom: + configMapKeyRef: + key: timeout.reconciliation + name: argocd-cm + optional: true + - name: ARGOCD_APPLICATION_CONTROLLER_REPO_SERVER + valueFrom: + configMapKeyRef: + key: repo.server + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_APPLICATION_CONTROLLER_REPO_SERVER_TIMEOUT_SECONDS + valueFrom: + configMapKeyRef: + key: controller.repo.server.timeout.seconds + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_APPLICATION_CONTROLLER_STATUS_PROCESSORS + valueFrom: + configMapKeyRef: + key: controller.status.processors + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_APPLICATION_CONTROLLER_OPERATION_PROCESSORS + valueFrom: + configMapKeyRef: + key: controller.operation.processors + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_APPLICATION_CONTROLLER_LOGFORMAT + valueFrom: + configMapKeyRef: + key: controller.log.format + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_APPLICATION_CONTROLLER_LOGLEVEL + valueFrom: + configMapKeyRef: + key: controller.log.level + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_APPLICATION_CONTROLLER_METRICS_CACHE_EXPIRATION + valueFrom: + configMapKeyRef: + key: controller.metrics.cache.expiration + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_APPLICATION_CONTROLLER_SELF_HEAL_TIMEOUT_SECONDS + valueFrom: + configMapKeyRef: + key: controller.self.heal.timeout.seconds + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_APPLICATION_CONTROLLER_REPO_SERVER_PLAINTEXT + valueFrom: + configMapKeyRef: + key: controller.repo.server.plaintext + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_APPLICATION_CONTROLLER_REPO_SERVER_STRICT_TLS + valueFrom: + configMapKeyRef: + key: controller.repo.server.strict.tls + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_APP_STATE_CACHE_EXPIRATION + valueFrom: + configMapKeyRef: + key: controller.app.state.cache.expiration + name: argocd-cmd-params-cm + optional: true + - name: REDIS_SERVER + valueFrom: + configMapKeyRef: + key: redis.server + name: argocd-cmd-params-cm + optional: true + - name: REDISDB + valueFrom: + configMapKeyRef: + key: redis.db + name: argocd-cmd-params-cm + optional: true + - name: ARGOCD_DEFAULT_CACHE_EXPIRATION + valueFrom: + configMapKeyRef: + key: controller.default.cache.expiration + name: argocd-cmd-params-cm + optional: true + image: quay.io/argoproj/argocd:latest + imagePullPolicy: Always + livenessProbe: + httpGet: + path: /healthz + port: 8082 + initialDelaySeconds: 5 + periodSeconds: 10 + name: argocd-application-controller + ports: + - containerPort: 8082 + readinessProbe: + httpGet: + path: /healthz + port: 8082 + initialDelaySeconds: 5 + periodSeconds: 10 + securityContext: + allowPrivilegeEscalation: false + capabilities: + drop: + - all + readOnlyRootFilesystem: true + runAsNonRoot: true + volumeMounts: + - mountPath: /app/config/controller/tls + name: argocd-repo-server-tls + - mountPath: /home/argocd + name: argocd-home + workingDir: /home/argocd + serviceAccountName: argocd-application-controller + volumes: + - emptyDir: {} + name: argocd-home + - name: argocd-repo-server-tls + secret: + items: + - key: tls.crt + path: tls.crt + - key: tls.key + path: tls.key + - key: ca.crt + path: ca.crt + optional: true + secretName: argocd-repo-server-tls +--- +apiVersion: networking.k8s.io/v1 +kind: NetworkPolicy +metadata: + name: argocd-application-controller-network-policy +spec: + ingress: + - from: + - namespaceSelector: {} + ports: + - port: 8082 + podSelector: + matchLabels: + app.kubernetes.io/name: argocd-application-controller + policyTypes: + - Ingress +--- +apiVersion: networking.k8s.io/v1 +kind: NetworkPolicy +metadata: + name: argocd-redis-network-policy +spec: + ingress: + - from: + - podSelector: + matchLabels: + app.kubernetes.io/name: argocd-server + - podSelector: + matchLabels: + app.kubernetes.io/name: argocd-repo-server + - podSelector: + matchLabels: + app.kubernetes.io/name: argocd-application-controller + ports: + - port: 6379 + protocol: TCP + podSelector: + matchLabels: + app.kubernetes.io/name: argocd-redis + policyTypes: + - Ingress +--- +apiVersion: networking.k8s.io/v1 +kind: NetworkPolicy +metadata: + name: argocd-repo-server-network-policy +spec: + ingress: + - from: + - podSelector: + matchLabels: + app.kubernetes.io/name: argocd-server + - podSelector: + matchLabels: + app.kubernetes.io/name: argocd-application-controller + - podSelector: + matchLabels: + app.kubernetes.io/name: argocd-notifications-controller + ports: + - port: 8081 + protocol: TCP + - from: + - namespaceSelector: {} + ports: + - port: 8084 + podSelector: + matchLabels: + app.kubernetes.io/name: argocd-repo-server + policyTypes: + - Ingress diff --git a/manifests/core-install/kustomization.yaml b/manifests/core-install/kustomization.yaml new file mode 100644 index 0000000000000..e6b768c6512ac --- /dev/null +++ b/manifests/core-install/kustomization.yaml @@ -0,0 +1,10 @@ +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization + +resources: +- ../crds +- ../cluster-rbac +- ../base/config +- ../base/application-controller +- ../base/repo-server +- ../base/redis \ No newline at end of file diff --git a/manifests/crds/appproject-crd.yaml b/manifests/crds/appproject-crd.yaml index a048c656238d6..cb8307d9fcffd 100644 --- a/manifests/crds/appproject-crd.yaml +++ b/manifests/crds/appproject-crd.yaml @@ -198,7 +198,7 @@ spec: description: Name is a name for this role type: string policies: - description: Policies Stores a list of casbin formated strings + description: Policies Stores a list of casbin formatted strings that define access policies for the role in the project items: type: string diff --git a/manifests/ha/base/overlays/argocd-server-deployment.yaml b/manifests/ha/base/overlays/argocd-server-deployment.yaml index 6d57900335315..0b09752afa3a0 100644 --- a/manifests/ha/base/overlays/argocd-server-deployment.yaml +++ b/manifests/ha/base/overlays/argocd-server-deployment.yaml @@ -27,7 +27,5 @@ spec: value: '2' command: - argocd-server - - --staticassets - - /shared/app - --redis - "argocd-redis-ha-haproxy:6379" diff --git a/manifests/ha/install.yaml b/manifests/ha/install.yaml index 1035c73dab97e..c541c173aeeed 100644 --- a/manifests/ha/install.yaml +++ b/manifests/ha/install.yaml @@ -2562,7 +2562,7 @@ spec: description: Name is a name for this role type: string policies: - description: Policies Stores a list of casbin formated strings + description: Policies Stores a list of casbin formatted strings that define access policies for the role in the project items: type: string @@ -4139,8 +4139,6 @@ spec: containers: - command: - argocd-server - - --staticassets - - /shared/app - --redis - argocd-redis-ha-haproxy:6379 env: @@ -4773,6 +4771,9 @@ spec: - podSelector: matchLabels: app.kubernetes.io/name: argocd-application-controller + - podSelector: + matchLabels: + app.kubernetes.io/name: argocd-notifications-controller ports: - port: 8081 protocol: TCP diff --git a/manifests/ha/namespace-install.yaml b/manifests/ha/namespace-install.yaml index 726e3f868c7c2..f9eeeafe4a945 100644 --- a/manifests/ha/namespace-install.yaml +++ b/manifests/ha/namespace-install.yaml @@ -1382,8 +1382,6 @@ spec: containers: - command: - argocd-server - - --staticassets - - /shared/app - --redis - argocd-redis-ha-haproxy:6379 env: @@ -2016,6 +2014,9 @@ spec: - podSelector: matchLabels: app.kubernetes.io/name: argocd-application-controller + - podSelector: + matchLabels: + app.kubernetes.io/name: argocd-notifications-controller ports: - port: 8081 protocol: TCP diff --git a/manifests/install.yaml b/manifests/install.yaml index 96c9e0365c7eb..b5495757c1e62 100644 --- a/manifests/install.yaml +++ b/manifests/install.yaml @@ -2562,7 +2562,7 @@ spec: description: Name is a name for this role type: string policies: - description: Policies Stores a list of casbin formated strings + description: Policies Stores a list of casbin formatted strings that define access policies for the role in the project items: type: string @@ -3468,8 +3468,6 @@ spec: containers: - command: - argocd-server - - --staticassets - - /shared/app env: - name: ARGOCD_SERVER_INSECURE valueFrom: @@ -3925,6 +3923,9 @@ spec: - podSelector: matchLabels: app.kubernetes.io/name: argocd-application-controller + - podSelector: + matchLabels: + app.kubernetes.io/name: argocd-notifications-controller ports: - port: 8081 protocol: TCP diff --git a/manifests/namespace-install.yaml b/manifests/namespace-install.yaml index 364f5cc937b30..6ce8b71695a74 100644 --- a/manifests/namespace-install.yaml +++ b/manifests/namespace-install.yaml @@ -711,8 +711,6 @@ spec: containers: - command: - argocd-server - - --staticassets - - /shared/app env: - name: ARGOCD_SERVER_INSECURE valueFrom: @@ -1168,6 +1166,9 @@ spec: - podSelector: matchLabels: app.kubernetes.io/name: argocd-application-controller + - podSelector: + matchLabels: + app.kubernetes.io/name: argocd-notifications-controller ports: - port: 8081 protocol: TCP diff --git a/mkdocs.yml b/mkdocs.yml index 303e646f4347f..533d73472d4e9 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -31,6 +31,7 @@ nav: - Operator Manual: - operator-manual/index.md - operator-manual/architecture.md + - operator-manual/installation.md - operator-manual/declarative-setup.md - operator-manual/ingress.md - User Management: @@ -63,7 +64,6 @@ nav: - operator-manual/server-commands/argocd-repo-server.md - operator-manual/server-commands/argocd-dex.md - operator-manual/server-commands/additional-configuration-method.md - - argocd-util Tools: operator-manual/server-commands/argocd-util.md - Upgrading: - operator-manual/upgrading/overview.md - operator-manual/upgrading/2.0-2.1.md @@ -110,6 +110,7 @@ nav: - Developer Guide: - developer-guide/index.md - developer-guide/contributing.md + - developer-guide/release-process-and-cadence.md - developer-guide/running-locally.md - developer-guide/debugging-remote-environment.md - developer-guide/use-gitpod.md diff --git a/pkg/apiclient/apiclient.go b/pkg/apiclient/apiclient.go index 5d5a7fe2e719a..290623f91a262 100644 --- a/pkg/apiclient/apiclient.go +++ b/pkg/apiclient/apiclient.go @@ -21,6 +21,7 @@ import ( "github.com/golang/protobuf/ptypes/empty" grpc_middleware "github.com/grpc-ecosystem/go-grpc-middleware" grpc_retry "github.com/grpc-ecosystem/go-grpc-middleware/retry" + retryablehttp "github.com/hashicorp/go-retryablehttp" log "github.com/sirupsen/logrus" "golang.org/x/oauth2" "google.golang.org/grpc" @@ -112,9 +113,11 @@ type ClientOptions struct { UserAgent string GRPCWeb bool GRPCWebRootPath string + Core bool PortForward bool PortForwardNamespace string Headers []string + HttpRetryMax int KubeOverrides *clientcmd.ConfigOverrides } @@ -199,7 +202,7 @@ func NewClient(opts *ClientOptions) (Client, error) { if opts.KubeOverrides == nil { opts.KubeOverrides = &clientcmd.ConfigOverrides{} } - port, err := kube.PortForward("app.kubernetes.io/name=argocd-server", 8080, opts.PortForwardNamespace, opts.KubeOverrides) + port, err := kube.PortForward(8080, opts.PortForwardNamespace, opts.KubeOverrides, "app.kubernetes.io/name=argocd-server") if err != nil { return nil, err } @@ -255,7 +258,15 @@ func NewClient(opts *ClientOptions) (Client, error) { if opts.GRPCWebRootPath != "" { c.GRPCWebRootPath = opts.GRPCWebRootPath } - c.httpClient = &http.Client{} + + if opts.HttpRetryMax > 0 { + retryClient := retryablehttp.NewClient() + retryClient.RetryMax = opts.HttpRetryMax + c.httpClient = retryClient.StandardClient() + } else { + c.httpClient = &http.Client{} + } + if !c.PlainText { tlsConfig, err := c.tlsConfig() if err != nil { @@ -268,10 +279,11 @@ func NewClient(opts *ClientOptions) (Client, error) { if !c.GRPCWeb { //test if we need to set it to true //if a call to grpc failed, then try again with GRPCWeb - conn, versionIf := c.NewVersionClientOrDie() - defer argoio.Close(conn) - - _, err := versionIf.Version(context.Background(), &empty.Empty{}) + conn, versionIf, err := c.NewVersionClient() + if err == nil { + defer argoio.Close(conn) + _, err = versionIf.Version(context.Background(), &empty.Empty{}) + } if err != nil { c.GRPCWeb = true conn, versionIf := c.NewVersionClientOrDie() diff --git a/pkg/apiclient/repository/repository.pb.go b/pkg/apiclient/repository/repository.pb.go index 6f1489c28776d..1d78c363e2a53 100644 --- a/pkg/apiclient/repository/repository.pb.go +++ b/pkg/apiclient/repository/repository.pb.go @@ -745,7 +745,7 @@ type RepositoryServiceClient interface { // ListRepositories gets a list of all configured repositories ListRepositories(ctx context.Context, in *RepoQuery, opts ...grpc.CallOption) (*v1alpha1.RepositoryList, error) ListRefs(ctx context.Context, in *RepoQuery, opts ...grpc.CallOption) (*apiclient.Refs, error) - // ListApps returns list of apps in the repe + // ListApps returns list of apps in the repo ListApps(ctx context.Context, in *RepoAppsQuery, opts ...grpc.CallOption) (*RepoAppsResponse, error) // GetAppDetails returns application details by given path GetAppDetails(ctx context.Context, in *RepoAppDetailsQuery, opts ...grpc.CallOption) (*apiclient.RepoAppDetailsResponse, error) @@ -914,7 +914,7 @@ type RepositoryServiceServer interface { // ListRepositories gets a list of all configured repositories ListRepositories(context.Context, *RepoQuery) (*v1alpha1.RepositoryList, error) ListRefs(context.Context, *RepoQuery) (*apiclient.Refs, error) - // ListApps returns list of apps in the repe + // ListApps returns list of apps in the repo ListApps(context.Context, *RepoAppsQuery) (*RepoAppsResponse, error) // GetAppDetails returns application details by given path GetAppDetails(context.Context, *RepoAppDetailsQuery) (*apiclient.RepoAppDetailsResponse, error) diff --git a/pkg/apis/application/v1alpha1/app_project_types.go b/pkg/apis/application/v1alpha1/app_project_types.go index 3eefef42cf4ff..8986ace4cbe3f 100644 --- a/pkg/apis/application/v1alpha1/app_project_types.go +++ b/pkg/apis/application/v1alpha1/app_project_types.go @@ -275,7 +275,7 @@ func (p *AppProject) normalizePolicy(policy string) string { return normalizedPolicy } -// ProjectPoliciesString returns a Casbin formated string of a project's policies for each role +// ProjectPoliciesString returns a Casbin formatted string of a project's policies for each role func (proj *AppProject) ProjectPoliciesString() string { var policies []string for _, role := range proj.Spec.Roles { diff --git a/pkg/apis/application/v1alpha1/generated.pb.go b/pkg/apis/application/v1alpha1/generated.pb.go index 134539653736b..6acb12c86aafe 100644 --- a/pkg/apis/application/v1alpha1/generated.pb.go +++ b/pkg/apis/application/v1alpha1/generated.pb.go @@ -2660,425 +2660,423 @@ func init() { } var fileDescriptor_030104ce3b95bcac = []byte{ - // 6678 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x7d, 0x6b, 0x70, 0x1c, 0xd9, - 0x55, 0xf0, 0xf6, 0x8c, 0x1e, 0x33, 0x47, 0x0f, 0x5b, 0xd7, 0x5e, 0xaf, 0xe2, 0x6f, 0x63, 0xb9, - 0x7a, 0x2b, 0xc9, 0x7e, 0x5f, 0x12, 0xe9, 0x5b, 0xb3, 0x84, 0x25, 0x1b, 0x12, 0x34, 0x92, 0x6c, - 0xcb, 0x96, 0x6d, 0xed, 0x91, 0xd6, 0x26, 0x0f, 0xc2, 0xb6, 0x7a, 0xee, 0x8c, 0xda, 0x9a, 0xe9, - 0x9e, 0xed, 0xee, 0x91, 0x35, 0x09, 0x79, 0x56, 0x20, 0x5b, 0xe4, 0xb1, 0xa9, 0x24, 0x3f, 0x92, - 0x82, 0x82, 0xf0, 0x28, 0xaa, 0xf8, 0x11, 0x1e, 0xbf, 0x80, 0x02, 0xfe, 0xe4, 0x57, 0x80, 0x2a, - 0x48, 0x15, 0x54, 0x12, 0x48, 0x21, 0x12, 0x03, 0xc5, 0xa3, 0x0a, 0x28, 0x20, 0x7f, 0xf0, 0x2f, - 0xea, 0xbe, 0x6f, 0xf7, 0xcc, 0x58, 0x92, 0xd5, 0x76, 0x52, 0x29, 0xfe, 0x69, 0xce, 0x39, 0x7d, - 0xce, 0xb9, 0xaf, 0x73, 0xcf, 0x3d, 0xe7, 0xdc, 0x2b, 0x58, 0x6b, 0x06, 0xe9, 0x76, 0x77, 0x6b, - 0xde, 0x8f, 0xda, 0x0b, 0x5e, 0xdc, 0x8c, 0x3a, 0x71, 0x74, 0x9b, 0xff, 0xf1, 0x66, 0xbf, 0xbe, - 0xb0, 0x7b, 0x61, 0xa1, 0xb3, 0xd3, 0x5c, 0xf0, 0x3a, 0x41, 0xb2, 0xe0, 0x75, 0x3a, 0xad, 0xc0, - 0xf7, 0xd2, 0x20, 0x0a, 0x17, 0x76, 0x9f, 0xf1, 0x5a, 0x9d, 0x6d, 0xef, 0x99, 0x85, 0x26, 0x0d, - 0x69, 0xec, 0xa5, 0xb4, 0x3e, 0xdf, 0x89, 0xa3, 0x34, 0x22, 0x6f, 0x33, 0xdc, 0xe6, 0x15, 0x37, - 0xfe, 0xc7, 0x4f, 0xf9, 0xf5, 0xf9, 0xdd, 0x0b, 0xf3, 0x9d, 0x9d, 0xe6, 0x3c, 0xe3, 0x36, 0x6f, - 0x71, 0x9b, 0x57, 0xdc, 0xce, 0xbe, 0xd9, 0xd2, 0xa5, 0x19, 0x35, 0xa3, 0x05, 0xce, 0x74, 0xab, - 0xdb, 0xe0, 0xbf, 0xf8, 0x0f, 0xfe, 0x97, 0x10, 0x76, 0xd6, 0xdd, 0x79, 0x2e, 0x99, 0x0f, 0x22, - 0xa6, 0xde, 0x82, 0x1f, 0xc5, 0x74, 0x61, 0xb7, 0x4f, 0xa1, 0xb3, 0xcf, 0x1a, 0x9a, 0xb6, 0xe7, - 0x6f, 0x07, 0x21, 0x8d, 0x7b, 0xa6, 0x4d, 0x6d, 0x9a, 0x7a, 0x83, 0xbe, 0x5a, 0x18, 0xf6, 0x55, - 0xdc, 0x0d, 0xd3, 0xa0, 0x4d, 0xfb, 0x3e, 0x78, 0xcb, 0x41, 0x1f, 0x24, 0xfe, 0x36, 0x6d, 0x7b, - 0xf9, 0xef, 0xdc, 0x97, 0x61, 0x6a, 0xf1, 0xd6, 0xc6, 0x62, 0x37, 0xdd, 0x5e, 0x8a, 0xc2, 0x46, - 0xd0, 0x24, 0x3f, 0x0c, 0x13, 0x7e, 0xab, 0x9b, 0xa4, 0x34, 0xbe, 0xee, 0xb5, 0xe9, 0xac, 0x73, - 0xde, 0x79, 0xba, 0x5a, 0x3b, 0xf5, 0xd5, 0xfd, 0xb9, 0xc7, 0xee, 0xee, 0xcf, 0x4d, 0x2c, 0x19, - 0x14, 0xda, 0x74, 0xe4, 0xff, 0xc2, 0x78, 0x1c, 0xb5, 0xe8, 0x22, 0x5e, 0x9f, 0x2d, 0xf1, 0x4f, - 0x4e, 0xc8, 0x4f, 0xc6, 0x51, 0x80, 0x51, 0xe1, 0xdd, 0xaf, 0x97, 0x00, 0x16, 0x3b, 0x9d, 0xf5, - 0x38, 0xba, 0x4d, 0xfd, 0x94, 0xbc, 0x04, 0x15, 0xd6, 0x0b, 0x75, 0x2f, 0xf5, 0xb8, 0xb4, 0x89, - 0x0b, 0xff, 0x7f, 0x5e, 0x34, 0x66, 0xde, 0x6e, 0x8c, 0x19, 0x39, 0x46, 0x3d, 0xbf, 0xfb, 0xcc, - 0xfc, 0x8d, 0x2d, 0xf6, 0xfd, 0x35, 0x9a, 0x7a, 0x35, 0x22, 0x85, 0x81, 0x81, 0xa1, 0xe6, 0x4a, - 0x42, 0x18, 0x49, 0x3a, 0xd4, 0xe7, 0x8a, 0x4d, 0x5c, 0x58, 0x9b, 0x3f, 0xce, 0x14, 0x99, 0x37, - 0x9a, 0x6f, 0x74, 0xa8, 0x5f, 0x9b, 0x94, 0x92, 0x47, 0xd8, 0x2f, 0xe4, 0x72, 0xc8, 0x2e, 0x8c, - 0x25, 0xa9, 0x97, 0x76, 0x93, 0xd9, 0x32, 0x97, 0x78, 0xbd, 0x30, 0x89, 0x9c, 0x6b, 0x6d, 0x5a, - 0xca, 0x1c, 0x13, 0xbf, 0x51, 0x4a, 0x73, 0xff, 0xc6, 0x81, 0x69, 0x43, 0xbc, 0x16, 0x24, 0x29, - 0x79, 0x4f, 0x5f, 0xe7, 0xce, 0x1f, 0xae, 0x73, 0xd9, 0xd7, 0xbc, 0x6b, 0x4f, 0x4a, 0x61, 0x15, - 0x05, 0xb1, 0x3a, 0xb6, 0x0d, 0xa3, 0x41, 0x4a, 0xdb, 0xc9, 0x6c, 0xe9, 0x7c, 0xf9, 0xe9, 0x89, - 0x0b, 0x97, 0x8b, 0x6a, 0x67, 0x6d, 0x4a, 0x0a, 0x1d, 0x5d, 0x65, 0xec, 0x51, 0x48, 0x71, 0xbf, - 0x0b, 0x76, 0xfb, 0x58, 0x87, 0x93, 0x67, 0x60, 0x22, 0x89, 0xba, 0xb1, 0x4f, 0x91, 0x76, 0xa2, - 0x64, 0xd6, 0x39, 0x5f, 0x66, 0x53, 0x8f, 0xcd, 0xd4, 0x0d, 0x03, 0x46, 0x9b, 0x86, 0x7c, 0xda, - 0x81, 0xc9, 0x3a, 0x4d, 0xd2, 0x20, 0xe4, 0xf2, 0x95, 0xf2, 0x9b, 0xc7, 0x56, 0x5e, 0x01, 0x97, - 0x0d, 0xf3, 0xda, 0x69, 0xd9, 0x90, 0x49, 0x0b, 0x98, 0x60, 0x46, 0x3e, 0x5b, 0x71, 0x75, 0x9a, - 0xf8, 0x71, 0xd0, 0x61, 0xbf, 0xf9, 0x9c, 0xb1, 0x56, 0xdc, 0xb2, 0x41, 0xa1, 0x4d, 0x47, 0x42, - 0x18, 0x65, 0x2b, 0x2a, 0x99, 0x1d, 0xe1, 0xfa, 0xaf, 0x1e, 0x4f, 0x7f, 0xd9, 0xa9, 0x6c, 0xb1, - 0x9a, 0xde, 0x67, 0xbf, 0x12, 0x14, 0x62, 0xc8, 0xa7, 0x1c, 0x98, 0x95, 0x2b, 0x1e, 0xa9, 0xe8, - 0xd0, 0x5b, 0xdb, 0x41, 0x4a, 0x5b, 0x41, 0x92, 0xce, 0x8e, 0x72, 0x1d, 0x16, 0x0e, 0x37, 0xb7, - 0x2e, 0xc5, 0x51, 0xb7, 0x73, 0x35, 0x08, 0xeb, 0xb5, 0xf3, 0x52, 0xd2, 0xec, 0xd2, 0x10, 0xc6, - 0x38, 0x54, 0x24, 0xf9, 0x9c, 0x03, 0x67, 0x43, 0xaf, 0x4d, 0x93, 0x8e, 0xc7, 0x86, 0x56, 0xa0, - 0x6b, 0x2d, 0xcf, 0xdf, 0xe1, 0x1a, 0x8d, 0x3d, 0x98, 0x46, 0xae, 0xd4, 0xe8, 0xec, 0xf5, 0xa1, - 0xac, 0xf1, 0x3e, 0x62, 0xc9, 0xaf, 0x3a, 0x30, 0x13, 0xc5, 0x9d, 0x6d, 0x2f, 0xa4, 0x75, 0x85, - 0x4d, 0x66, 0xc7, 0xf9, 0xd2, 0x7b, 0xef, 0xf1, 0x86, 0xe8, 0x46, 0x9e, 0xed, 0xb5, 0x28, 0x0c, - 0xd2, 0x28, 0xde, 0xa0, 0x69, 0x1a, 0x84, 0xcd, 0xa4, 0xf6, 0xf8, 0xdd, 0xfd, 0xb9, 0x99, 0x3e, - 0x2a, 0xec, 0xd7, 0x87, 0xbc, 0x1f, 0x26, 0x92, 0x5e, 0xe8, 0xdf, 0x0a, 0xc2, 0x7a, 0x74, 0x27, - 0x99, 0xad, 0x14, 0xb1, 0x7c, 0x37, 0x34, 0x43, 0xb9, 0x00, 0x8d, 0x00, 0xb4, 0xa5, 0x0d, 0x1e, - 0x38, 0x33, 0x95, 0xaa, 0x45, 0x0f, 0x9c, 0x99, 0x4c, 0xf7, 0x11, 0x4b, 0x3e, 0xee, 0xc0, 0x54, - 0x12, 0x34, 0x43, 0x2f, 0xed, 0xc6, 0xf4, 0x2a, 0xed, 0x25, 0xb3, 0xc0, 0x15, 0xb9, 0x72, 0xcc, - 0x5e, 0xb1, 0x58, 0xd6, 0x1e, 0x97, 0x3a, 0x4e, 0xd9, 0xd0, 0x04, 0xb3, 0x72, 0x07, 0x2d, 0x34, - 0x33, 0xad, 0x27, 0x8a, 0x5d, 0x68, 0x66, 0x52, 0x0f, 0x15, 0xe9, 0xfe, 0x71, 0x09, 0x4e, 0xe6, - 0xf7, 0x20, 0xf2, 0xeb, 0x0e, 0x9c, 0xb8, 0x7d, 0x27, 0xdd, 0x8c, 0x76, 0x68, 0x98, 0xd4, 0x7a, - 0xcc, 0x52, 0x70, 0xeb, 0x3b, 0x71, 0xc1, 0x2f, 0x76, 0xb7, 0x9b, 0xbf, 0x92, 0x95, 0xb2, 0x12, - 0xa6, 0x71, 0xaf, 0xf6, 0x84, 0x6c, 0xcf, 0x89, 0x2b, 0xb7, 0x36, 0x6d, 0x2c, 0xe6, 0x95, 0x3a, - 0xfb, 0x09, 0x07, 0x4e, 0x0f, 0x62, 0x41, 0x4e, 0x42, 0x79, 0x87, 0xf6, 0x84, 0x83, 0x83, 0xec, - 0x4f, 0xf2, 0x93, 0x30, 0xba, 0xeb, 0xb5, 0xba, 0x54, 0x3a, 0x0a, 0x97, 0x8e, 0xd7, 0x10, 0xad, - 0x19, 0x0a, 0xae, 0x6f, 0x2d, 0x3d, 0xe7, 0xb8, 0x7f, 0x5e, 0x86, 0x09, 0x6b, 0xab, 0x78, 0x04, - 0xce, 0x4f, 0x94, 0x71, 0x7e, 0xae, 0x15, 0xb6, 0xcb, 0x0d, 0xf5, 0x7e, 0xee, 0xe4, 0xbc, 0x9f, - 0x1b, 0xc5, 0x89, 0xbc, 0xaf, 0xfb, 0x43, 0x52, 0xa8, 0x46, 0x1d, 0xe6, 0xdc, 0xb2, 0x5d, 0x74, - 0xa4, 0x88, 0x21, 0xbc, 0xa1, 0xd8, 0xd5, 0xa6, 0xee, 0xee, 0xcf, 0x55, 0xf5, 0x4f, 0x34, 0x82, - 0xdc, 0x6f, 0x38, 0x70, 0xda, 0xd2, 0x71, 0x29, 0x0a, 0xeb, 0x01, 0x1f, 0xda, 0xf3, 0x30, 0x92, - 0xf6, 0x3a, 0xca, 0x83, 0xd6, 0x3d, 0xb5, 0xd9, 0xeb, 0x50, 0xe4, 0x18, 0xe6, 0x33, 0xb7, 0x69, - 0x92, 0x78, 0x4d, 0x9a, 0xf7, 0x99, 0xaf, 0x09, 0x30, 0x2a, 0x3c, 0x89, 0x81, 0xb4, 0xbc, 0x24, - 0xdd, 0x8c, 0xbd, 0x30, 0xe1, 0xec, 0x37, 0x83, 0x36, 0x95, 0x1d, 0xfc, 0xff, 0x0e, 0x37, 0x63, - 0xd8, 0x17, 0xb5, 0x33, 0x77, 0xf7, 0xe7, 0xc8, 0x5a, 0x1f, 0x27, 0x1c, 0xc0, 0xdd, 0xfd, 0x9c, - 0x03, 0x67, 0x06, 0xbb, 0x35, 0xe4, 0xf5, 0x30, 0x96, 0xd0, 0x78, 0x97, 0xc6, 0xb2, 0x75, 0x66, - 0x48, 0x38, 0x14, 0x25, 0x96, 0x2c, 0x40, 0x55, 0x9b, 0x5c, 0xd9, 0xc6, 0x19, 0x49, 0x5a, 0x35, - 0x76, 0xda, 0xd0, 0xb0, 0x4e, 0x63, 0x3f, 0xa4, 0x13, 0xa4, 0x3b, 0x8d, 0x9f, 0x37, 0x38, 0xc6, - 0xfd, 0x5b, 0x07, 0x4e, 0x58, 0x5a, 0x3d, 0x02, 0x2f, 0x37, 0xcc, 0x7a, 0xb9, 0xab, 0x85, 0xcd, - 0xe7, 0x21, 0x6e, 0xee, 0x57, 0xc6, 0x60, 0xc6, 0x9e, 0xf5, 0xdc, 0x1c, 0xf3, 0x03, 0x16, 0xed, - 0x44, 0x2f, 0xe2, 0x9a, 0xec, 0x73, 0x73, 0xc0, 0x12, 0x60, 0x54, 0x78, 0xd6, 0x89, 0x1d, 0x2f, - 0xdd, 0x96, 0x1d, 0xae, 0x3b, 0x71, 0xdd, 0x4b, 0xb7, 0x91, 0x63, 0xc8, 0xdb, 0x61, 0x3a, 0xf5, - 0xe2, 0x26, 0x4d, 0x91, 0xee, 0x06, 0x89, 0x5a, 0x2f, 0xd5, 0xda, 0x19, 0x49, 0x3b, 0xbd, 0x99, - 0xc1, 0x62, 0x8e, 0x9a, 0xbc, 0x0c, 0x23, 0xdb, 0xb4, 0xd5, 0x96, 0x7e, 0xcd, 0x46, 0x71, 0x2b, - 0x9c, 0xb7, 0xf5, 0x32, 0x6d, 0xb5, 0x6b, 0x15, 0xa6, 0x32, 0xfb, 0x0b, 0xb9, 0x28, 0xf2, 0x33, - 0x0e, 0x54, 0x77, 0xba, 0x49, 0x1a, 0xb5, 0x83, 0xf7, 0xd1, 0xd9, 0x0a, 0x17, 0xfc, 0x13, 0x05, - 0x0b, 0xbe, 0xaa, 0xf8, 0x8b, 0xf5, 0xae, 0x7f, 0xa2, 0x91, 0x4c, 0x3e, 0x00, 0xe3, 0x3b, 0x49, - 0x14, 0x86, 0x94, 0x79, 0x2a, 0x4c, 0x89, 0x9b, 0x45, 0x2b, 0x21, 0xb8, 0xd7, 0x26, 0xd8, 0xd8, - 0xca, 0x1f, 0xa8, 0x64, 0xf2, 0x6e, 0xa8, 0x07, 0x31, 0xf5, 0xd3, 0x28, 0xee, 0xcd, 0xc2, 0x43, - 0xe9, 0x86, 0x65, 0xc5, 0x5f, 0x74, 0x83, 0xfe, 0x89, 0x46, 0x32, 0xe9, 0xc1, 0x58, 0xa7, 0xd5, - 0x6d, 0x06, 0xe1, 0xec, 0x04, 0xd7, 0xe1, 0xc5, 0x82, 0x75, 0x58, 0xe7, 0xcc, 0x6b, 0xc0, 0x8c, - 0x8a, 0xf8, 0x1b, 0xa5, 0x40, 0xf2, 0x14, 0x8c, 0xfa, 0xdb, 0x5e, 0x9c, 0xce, 0x4e, 0xf2, 0x39, - 0xab, 0x17, 0xd1, 0x12, 0x03, 0xa2, 0xc0, 0xb9, 0xbf, 0x5c, 0x82, 0xb3, 0xc3, 0x1b, 0x26, 0x56, - 0x93, 0xdf, 0x8d, 0x13, 0x61, 0x9f, 0x2b, 0xf6, 0x6a, 0xe2, 0x60, 0x54, 0x78, 0xf2, 0x11, 0x07, - 0xc6, 0x6f, 0xcb, 0x11, 0x2f, 0x3d, 0x94, 0x11, 0xbf, 0x22, 0x47, 0x5c, 0xeb, 0x70, 0x45, 0x8d, - 0xba, 0x94, 0xcb, 0xd4, 0xa5, 0x7b, 0x7e, 0xab, 0x5b, 0x57, 0x96, 0x51, 0x93, 0xae, 0x08, 0x30, - 0x2a, 0x3c, 0x23, 0x0d, 0x42, 0x41, 0x3a, 0x92, 0x25, 0x5d, 0x0d, 0x25, 0xa9, 0xc4, 0xbb, 0x1f, - 0x1d, 0x85, 0xc7, 0x07, 0x2e, 0x3e, 0x32, 0x0f, 0xc0, 0x7d, 0x96, 0x8b, 0x01, 0x3b, 0x60, 0x8a, - 0x53, 0xf5, 0x34, 0x73, 0x31, 0x6e, 0x6a, 0x28, 0x5a, 0x14, 0xe4, 0x43, 0x00, 0x1d, 0x2f, 0xf6, - 0xda, 0x34, 0xa5, 0xb1, 0xb2, 0x93, 0x57, 0x8f, 0xd7, 0x4b, 0x4c, 0x8f, 0x75, 0xc5, 0xd3, 0xf8, - 0x38, 0x1a, 0x94, 0xa0, 0x25, 0x92, 0x9d, 0xa1, 0x63, 0xda, 0xa2, 0x5e, 0x42, 0xaf, 0x9b, 0xed, - 0x43, 0x9f, 0xa1, 0xd1, 0xa0, 0xd0, 0xa6, 0x63, 0xfb, 0x18, 0x6f, 0x45, 0x22, 0xfb, 0x4a, 0xef, - 0x63, 0xbc, 0x9d, 0x09, 0x4a, 0x2c, 0x79, 0xd5, 0x81, 0xe9, 0x46, 0xd0, 0xa2, 0x46, 0xba, 0x3c, - 0xf1, 0xde, 0x38, 0x7e, 0x23, 0x2f, 0xda, 0x7c, 0x8d, 0x05, 0xce, 0x80, 0x13, 0xcc, 0x89, 0x67, - 0xc3, 0xbc, 0x4b, 0x63, 0x6e, 0xba, 0xc7, 0xb2, 0xc3, 0x7c, 0x53, 0x80, 0x51, 0xe1, 0xc9, 0xcf, - 0x3b, 0x40, 0xe8, 0x5e, 0x4a, 0xe3, 0xd0, 0x6b, 0x99, 0xf1, 0x9b, 0x1d, 0x2f, 0xaa, 0x01, 0x2b, - 0x36, 0xef, 0xda, 0x59, 0xa9, 0x07, 0x59, 0xe9, 0x13, 0x89, 0x03, 0xd4, 0x70, 0xbf, 0x58, 0x82, - 0xd9, 0x61, 0x2b, 0x82, 0x24, 0x6c, 0xde, 0xa7, 0x37, 0xbd, 0x38, 0x91, 0x87, 0x8b, 0x63, 0x9e, - 0x51, 0x25, 0xdf, 0x9b, 0x5e, 0x6c, 0xaf, 0x20, 0x2e, 0x00, 0x95, 0x24, 0x72, 0x1b, 0x46, 0xd2, - 0x96, 0x57, 0x50, 0x50, 0xcb, 0x92, 0x68, 0x5c, 0xc0, 0xb5, 0xc5, 0x04, 0xb9, 0x0c, 0xf2, 0x24, - 0x8c, 0xb4, 0x82, 0x2d, 0xe6, 0x2a, 0xb3, 0x25, 0xc6, 0xf7, 0xbc, 0xb5, 0x60, 0x2b, 0x41, 0x0e, - 0x75, 0xbf, 0xee, 0x0c, 0xe8, 0x1b, 0xb9, 0x25, 0xb0, 0x29, 0x4f, 0xc3, 0xdd, 0x20, 0x8e, 0xc2, - 0x36, 0x0d, 0xd3, 0x7c, 0xa0, 0x76, 0xc5, 0xa0, 0xd0, 0xa6, 0x23, 0x1f, 0x75, 0x06, 0xac, 0xd5, - 0x63, 0x46, 0x28, 0xa5, 0x4a, 0x87, 0x5e, 0xae, 0xee, 0xbf, 0x8f, 0x0d, 0xb0, 0xce, 0x7a, 0xbb, - 0x25, 0x17, 0x00, 0x98, 0xaf, 0xb7, 0x1e, 0xd3, 0x46, 0xb0, 0x27, 0x5b, 0xa6, 0x59, 0x5e, 0xd7, - 0x18, 0xb4, 0xa8, 0xd4, 0x37, 0x1b, 0xdd, 0x06, 0xfb, 0xa6, 0xd4, 0xff, 0x8d, 0xc0, 0xa0, 0x45, - 0x45, 0x9e, 0x85, 0xb1, 0xa0, 0xed, 0x35, 0xa9, 0xea, 0xff, 0x27, 0xd9, 0xd2, 0x5f, 0xe5, 0x90, - 0x7b, 0xfb, 0x73, 0xd3, 0x5a, 0x21, 0x0e, 0x42, 0x49, 0x4b, 0x7e, 0xcd, 0x81, 0x49, 0x3f, 0x6a, - 0xb7, 0xa3, 0x70, 0xcd, 0xdb, 0xa2, 0x2d, 0x15, 0x80, 0xbb, 0xfd, 0xb0, 0x9c, 0x91, 0xf9, 0x25, - 0x4b, 0x98, 0x38, 0xfe, 0xea, 0xb0, 0xa2, 0x8d, 0xc2, 0x8c, 0x56, 0xb6, 0x85, 0x18, 0x3d, 0xc0, - 0x42, 0xfc, 0x9e, 0x03, 0x33, 0xe2, 0xdb, 0xc5, 0x30, 0x8c, 0x52, 0x19, 0x17, 0x15, 0x11, 0xb4, - 0xe8, 0x21, 0x37, 0xcb, 0x92, 0x28, 0xda, 0xf6, 0x1a, 0xa9, 0xe6, 0x4c, 0x1f, 0x1e, 0xfb, 0x95, - 0x24, 0x97, 0x60, 0xa6, 0x11, 0xc5, 0x3e, 0xb5, 0x3b, 0x82, 0xbb, 0xa5, 0x15, 0xc3, 0xe8, 0x62, - 0x9e, 0x00, 0xfb, 0xbf, 0x21, 0x37, 0xe1, 0x8c, 0x05, 0xb4, 0xfb, 0xa1, 0xc2, 0xb9, 0x9d, 0x93, - 0xdc, 0xce, 0x5c, 0x1c, 0x48, 0x85, 0x43, 0xbe, 0x3e, 0xfb, 0x0e, 0x98, 0xe9, 0x1b, 0xbf, 0x01, - 0xb1, 0x87, 0xd3, 0x76, 0xec, 0xa1, 0x6a, 0x85, 0x0c, 0xce, 0x2e, 0xc3, 0x99, 0xc1, 0x3d, 0x75, - 0x14, 0x2e, 0xee, 0x2f, 0x3a, 0xf0, 0xc4, 0x10, 0x27, 0x4b, 0x1f, 0xba, 0x9c, 0x61, 0x87, 0x2e, - 0xe2, 0x41, 0x99, 0x86, 0xbb, 0xd2, 0x58, 0x5c, 0x3c, 0xde, 0x8c, 0x58, 0x09, 0x77, 0xc5, 0x40, - 0x8f, 0xdf, 0xdd, 0x9f, 0x2b, 0xaf, 0x84, 0xbb, 0xc8, 0x78, 0xbb, 0x9f, 0x1f, 0xcb, 0x9c, 0xeb, - 0x36, 0x54, 0x28, 0x81, 0x2b, 0x2a, 0x4f, 0x75, 0x37, 0x0a, 0x9e, 0x8b, 0xd6, 0xb9, 0x55, 0x24, - 0x08, 0xa4, 0x38, 0xf2, 0x09, 0x87, 0xc7, 0xe4, 0xd5, 0x79, 0x57, 0xfa, 0x7d, 0x0f, 0x27, 0x45, - 0x60, 0x47, 0xfa, 0x15, 0x10, 0x6d, 0xe9, 0x6c, 0x25, 0x77, 0x44, 0x48, 0x2c, 0xef, 0xfd, 0xa9, - 0xa8, 0xbd, 0xc2, 0x93, 0x3d, 0x80, 0xa4, 0x17, 0xfa, 0xeb, 0x51, 0x2b, 0xf0, 0x7b, 0x32, 0x08, - 0x52, 0x40, 0x5c, 0x57, 0xf0, 0x13, 0x2e, 0xa0, 0xf9, 0x8d, 0x96, 0x2c, 0xf2, 0x25, 0x07, 0x66, - 0x82, 0x66, 0x18, 0xc5, 0x74, 0x39, 0x68, 0x34, 0x68, 0x4c, 0x43, 0x9f, 0x2a, 0x2f, 0xe9, 0xd6, - 0xf1, 0x34, 0x50, 0x21, 0xc9, 0xd5, 0x3c, 0x7b, 0xb3, 0xc4, 0xfb, 0x50, 0xd8, 0xaf, 0x0c, 0xa9, - 0xc3, 0x48, 0x10, 0x36, 0x22, 0x69, 0xd8, 0x6a, 0xc7, 0x53, 0x6a, 0x35, 0x6c, 0x44, 0x66, 0xad, - 0xb0, 0x5f, 0xc8, 0xb9, 0x93, 0x35, 0x38, 0x1d, 0xcb, 0x73, 0xf2, 0xe5, 0x20, 0x61, 0xa7, 0x8d, - 0xb5, 0xa0, 0x1d, 0xa4, 0xdc, 0x28, 0x95, 0x6b, 0xb3, 0x77, 0xf7, 0xe7, 0x4e, 0xe3, 0x00, 0x3c, - 0x0e, 0xfc, 0xca, 0x7d, 0xa5, 0x9a, 0x0d, 0x06, 0x88, 0x50, 0xd7, 0x07, 0xa0, 0x1a, 0xeb, 0xe4, - 0x82, 0xf0, 0x8c, 0xd6, 0x8a, 0xe9, 0x63, 0x19, 0x63, 0xd3, 0x51, 0x1a, 0x93, 0x46, 0x30, 0x12, - 0x99, 0x87, 0xc4, 0x46, 0x5e, 0x2e, 0x8b, 0x02, 0xe6, 0x97, 0x94, 0x6a, 0xc2, 0x89, 0xbd, 0xd0, - 0x47, 0x2e, 0x83, 0xc4, 0x30, 0xb6, 0x4d, 0xbd, 0x56, 0xba, 0x2d, 0xa3, 0x5d, 0x57, 0x8e, 0xeb, - 0xb0, 0x32, 0x5e, 0xf9, 0x48, 0xa2, 0x80, 0xa2, 0x94, 0x44, 0xf6, 0x60, 0x7c, 0x5b, 0x0c, 0x82, - 0xdc, 0xdb, 0xaf, 0x1d, 0xb7, 0x73, 0x33, 0x23, 0x6b, 0xd6, 0xaf, 0x04, 0xa0, 0x12, 0x47, 0x7e, - 0xd6, 0x01, 0xf0, 0x55, 0x08, 0x51, 0x2d, 0x1f, 0x2c, 0xcc, 0xee, 0xe8, 0xe8, 0xa4, 0x71, 0x8d, - 0x34, 0x28, 0x41, 0x4b, 0x32, 0x79, 0x09, 0x26, 0x63, 0xea, 0x47, 0xa1, 0x1f, 0xb4, 0x68, 0x7d, - 0x31, 0xe5, 0x87, 0x8c, 0xa3, 0x85, 0x1a, 0x4f, 0x32, 0xff, 0x04, 0x2d, 0x1e, 0x98, 0xe1, 0x48, - 0x5e, 0x71, 0x60, 0x5a, 0x87, 0x51, 0xd9, 0x80, 0x50, 0x19, 0x4e, 0x5a, 0x2b, 0x28, 0x68, 0xcb, - 0x79, 0xd6, 0x08, 0x3b, 0x4c, 0x65, 0x61, 0x98, 0x93, 0x4b, 0xde, 0x05, 0x10, 0x6d, 0xf1, 0x90, - 0x25, 0x6b, 0x6a, 0xe5, 0xc8, 0x4d, 0x9d, 0x16, 0xd1, 0x77, 0xc5, 0x01, 0x2d, 0x6e, 0xe4, 0x2a, - 0x80, 0x58, 0x36, 0x9b, 0xbd, 0x0e, 0xe5, 0x21, 0xa3, 0x6a, 0xed, 0x8d, 0xaa, 0xf3, 0x37, 0x34, - 0xe6, 0xde, 0xfe, 0x5c, 0xff, 0x59, 0x9c, 0xc7, 0x8a, 0xad, 0xcf, 0xc9, 0xfb, 0x61, 0x3c, 0xe9, - 0xb6, 0xdb, 0x9e, 0x0e, 0xfd, 0xac, 0x17, 0xb7, 0x23, 0x0a, 0xbe, 0x66, 0x6e, 0x4a, 0x00, 0x2a, - 0x89, 0x6e, 0x08, 0xa4, 0x9f, 0x9e, 0x3c, 0x0b, 0x93, 0xea, 0x54, 0xf7, 0x22, 0xae, 0xa9, 0x60, - 0x01, 0x1f, 0xfc, 0x15, 0x0b, 0x8e, 0x19, 0x2a, 0xe2, 0x6a, 0xcf, 0xbb, 0xc4, 0xe9, 0xc1, 0x78, - 0xde, 0xca, 0xcf, 0x76, 0xff, 0xbb, 0x94, 0xf1, 0x08, 0x36, 0x63, 0x4a, 0x49, 0x04, 0xa3, 0x61, - 0x54, 0xd7, 0x46, 0xef, 0x4a, 0x31, 0x46, 0xef, 0x7a, 0x54, 0xb7, 0xb2, 0xde, 0xec, 0x57, 0x82, - 0x42, 0x0e, 0x4f, 0x0b, 0xaa, 0xfc, 0x29, 0x47, 0x48, 0x27, 0xa8, 0x48, 0xc9, 0x3a, 0x2d, 0x78, - 0xc3, 0x16, 0x84, 0x59, 0xb9, 0x64, 0x07, 0x46, 0xb7, 0xa3, 0x24, 0x15, 0x67, 0x95, 0x63, 0x7b, - 0x61, 0x97, 0xa3, 0x24, 0xe5, 0x5b, 0x98, 0x6e, 0x36, 0x83, 0x24, 0x28, 0x64, 0xb8, 0xff, 0xe8, - 0x64, 0x42, 0x43, 0xb7, 0xbc, 0xd4, 0xdf, 0x5e, 0xd9, 0x65, 0xe7, 0xc7, 0xab, 0x99, 0xb4, 0xc6, - 0x8f, 0xd8, 0x69, 0x8d, 0x7b, 0xfb, 0x73, 0x6f, 0x18, 0x56, 0x86, 0x74, 0x87, 0x71, 0x98, 0xe7, - 0x2c, 0xac, 0x0c, 0xc8, 0x87, 0x1d, 0x98, 0xb0, 0xd4, 0x93, 0x1b, 0x4a, 0x81, 0x11, 0x76, 0xed, - 0x5c, 0x59, 0x40, 0xb4, 0x45, 0xba, 0x9f, 0x75, 0x60, 0xbc, 0xe6, 0xf9, 0x3b, 0x51, 0xa3, 0x41, - 0xde, 0x04, 0x95, 0x7a, 0x57, 0x26, 0x90, 0x44, 0xfb, 0x74, 0x5e, 0x60, 0x59, 0xc2, 0x51, 0x53, - 0xb0, 0x39, 0xdc, 0xf0, 0xfc, 0x34, 0x8a, 0xb9, 0xda, 0x65, 0x31, 0x87, 0x2f, 0x72, 0x08, 0x4a, - 0x0c, 0x3b, 0xa4, 0xb7, 0xbd, 0x3d, 0xf5, 0x71, 0x3e, 0x2e, 0x75, 0xcd, 0xa0, 0xd0, 0xa6, 0x73, - 0xff, 0x64, 0x14, 0xc6, 0x65, 0xa6, 0xf6, 0xd0, 0xb9, 0x16, 0xe5, 0xc5, 0x97, 0x86, 0x7a, 0xf1, - 0x09, 0x8c, 0xf9, 0xbc, 0xc8, 0x4b, 0x6e, 0xa5, 0xc7, 0x8c, 0xd0, 0x49, 0x05, 0x45, 0xdd, 0x98, - 0x51, 0x4b, 0xfc, 0x46, 0x29, 0x8a, 0x7c, 0xc6, 0x81, 0x13, 0x7e, 0x14, 0x86, 0xd4, 0x37, 0x76, - 0x7e, 0xa4, 0x88, 0x5c, 0xe4, 0x52, 0x96, 0xa9, 0x49, 0x09, 0xe7, 0x10, 0x98, 0x17, 0x4f, 0x9e, - 0x87, 0x29, 0xd1, 0x67, 0x37, 0x33, 0xe7, 0x63, 0x93, 0x9d, 0xb7, 0x91, 0x98, 0xa5, 0x25, 0xf3, - 0x22, 0xce, 0xc0, 0xd3, 0x55, 0xe2, 0x8c, 0x2c, 0x43, 0xa3, 0x3a, 0x9f, 0x95, 0xa0, 0x45, 0x41, - 0x62, 0x20, 0x31, 0x6d, 0xc4, 0x34, 0xd9, 0x46, 0xfa, 0x72, 0x97, 0x26, 0x29, 0xdf, 0x63, 0xc6, - 0x1f, 0x2c, 0x73, 0x87, 0x7d, 0x9c, 0x70, 0x00, 0x77, 0xb2, 0x23, 0x1d, 0xdd, 0x4a, 0x11, 0xcb, - 0x49, 0x0e, 0xf3, 0x50, 0x7f, 0x77, 0x0e, 0x46, 0x93, 0x6d, 0x2f, 0xae, 0xf3, 0xbd, 0xad, 0x5c, - 0xab, 0x32, 0x5b, 0xb2, 0xc1, 0x00, 0x28, 0xe0, 0xee, 0x77, 0x1d, 0x38, 0xa9, 0xe6, 0x8a, 0xe7, - 0x6f, 0x53, 0xf6, 0x2d, 0x79, 0x3b, 0x4c, 0x6b, 0x7f, 0x72, 0x29, 0xea, 0xca, 0x00, 0x56, 0xd9, - 0xc4, 0x3f, 0x31, 0x83, 0xc5, 0x1c, 0x35, 0x59, 0x80, 0x2a, 0x53, 0x59, 0x7c, 0x2a, 0xd6, 0x9f, - 0xf6, 0x59, 0x17, 0xd7, 0x57, 0xe5, 0x57, 0x86, 0x86, 0x44, 0x30, 0xd3, 0xf2, 0x92, 0x94, 0x6b, - 0xc0, 0xdc, 0xcb, 0x07, 0x4c, 0xa0, 0xf2, 0x1a, 0x9b, 0xb5, 0x3c, 0x23, 0xec, 0xe7, 0xed, 0x7e, - 0x63, 0x04, 0xa6, 0x32, 0x4b, 0x84, 0x99, 0x97, 0x6e, 0xc2, 0xf6, 0x40, 0x7d, 0xd6, 0xd6, 0xe6, - 0xe5, 0x45, 0x09, 0x47, 0x4d, 0xc1, 0xa8, 0x3b, 0x5e, 0x92, 0xdc, 0x89, 0xe2, 0xba, 0x5c, 0xd3, - 0x9a, 0x7a, 0x5d, 0xc2, 0x51, 0x53, 0x30, 0x43, 0xb3, 0x45, 0xbd, 0x98, 0xc6, 0xbc, 0xe6, 0x20, - 0x6f, 0x68, 0x6a, 0x06, 0x85, 0x36, 0x1d, 0x5f, 0x9d, 0x69, 0x2b, 0x59, 0x6a, 0x05, 0x34, 0x4c, - 0x85, 0x9a, 0xc5, 0xac, 0xce, 0xcd, 0xb5, 0x0d, 0x9b, 0xa9, 0x59, 0x9d, 0x39, 0x04, 0xe6, 0xc5, - 0x93, 0x8f, 0x39, 0x30, 0xe5, 0xdd, 0x49, 0x4c, 0x49, 0x2a, 0x5f, 0x9e, 0xc7, 0xb6, 0x56, 0x99, - 0x2a, 0xd7, 0xda, 0x0c, 0x5b, 0xe7, 0x19, 0x10, 0x66, 0x85, 0x92, 0x2f, 0xf0, 0xa8, 0x39, 0xf5, - 0xd7, 0xe3, 0x68, 0x37, 0xa8, 0xab, 0x31, 0x94, 0x7e, 0xf0, 0x31, 0xdd, 0xae, 0x95, 0x3e, 0xbe, - 0x62, 0x79, 0xf7, 0xc3, 0x71, 0x80, 0x0e, 0xee, 0x5f, 0x97, 0x61, 0xc2, 0x5a, 0x95, 0x03, 0x4d, - 0xac, 0xf3, 0x7d, 0x66, 0x62, 0x4b, 0x47, 0x30, 0xb1, 0x1f, 0x82, 0xaa, 0xaf, 0x0c, 0x45, 0x31, - 0x25, 0xb4, 0x79, 0xf3, 0x63, 0x6c, 0x85, 0x06, 0xa1, 0x91, 0x49, 0x2e, 0xc1, 0x8c, 0xc5, 0x46, - 0x1a, 0x99, 0x11, 0x6e, 0x64, 0x74, 0xc4, 0x61, 0x31, 0x4f, 0x80, 0xfd, 0xdf, 0x90, 0x67, 0x98, - 0x7b, 0x13, 0xc8, 0x76, 0x89, 0xe3, 0x9c, 0x2c, 0x4f, 0x5d, 0x5c, 0x5f, 0x55, 0x60, 0xb4, 0x69, - 0xdc, 0x6f, 0x38, 0x7a, 0x70, 0x1f, 0x41, 0x6d, 0xc3, 0xed, 0x6c, 0x6d, 0xc3, 0x4a, 0x21, 0xdd, - 0x3c, 0xa4, 0xae, 0xe1, 0x3a, 0x8c, 0x2f, 0x45, 0xed, 0xb6, 0x17, 0xd6, 0xc9, 0xeb, 0x60, 0xdc, - 0x17, 0x7f, 0xca, 0xf3, 0x02, 0x4f, 0x76, 0x4b, 0x2c, 0x2a, 0x1c, 0x79, 0x12, 0x46, 0xbc, 0xb8, - 0xa9, 0xce, 0x08, 0x3c, 0x3b, 0xb2, 0x18, 0x37, 0x13, 0xe4, 0x50, 0xf7, 0x73, 0x25, 0x80, 0xa5, - 0xa8, 0xdd, 0xf1, 0x62, 0x5a, 0xdf, 0x8c, 0xfe, 0x37, 0x58, 0x28, 0x5c, 0xc7, 0x4f, 0x3a, 0x40, - 0x58, 0xaf, 0x44, 0x21, 0x0d, 0x4d, 0x46, 0x86, 0xed, 0x97, 0xbe, 0x82, 0xca, 0xcd, 0xc7, 0xac, - 0x01, 0x85, 0x40, 0x43, 0x73, 0x08, 0x77, 0xf2, 0x29, 0x15, 0x6c, 0x2e, 0x67, 0xf3, 0xf0, 0x3c, - 0xb9, 0x27, 0x63, 0xcf, 0xee, 0xe7, 0x4b, 0x70, 0x46, 0x98, 0xad, 0x6b, 0x5e, 0xe8, 0x35, 0x69, - 0x9b, 0x69, 0x75, 0xd8, 0xb0, 0xb3, 0xcf, 0xfc, 0x98, 0x40, 0xa5, 0xdd, 0x8f, 0x3b, 0x39, 0xc5, - 0xa4, 0x12, 0xd3, 0x68, 0x35, 0x0c, 0x52, 0xe4, 0xcc, 0x49, 0x02, 0x15, 0x75, 0x29, 0x42, 0x1a, - 0x9b, 0x82, 0x04, 0xe9, 0x75, 0x77, 0x49, 0xb2, 0x47, 0x2d, 0xc8, 0xfd, 0x8a, 0x03, 0x79, 0x23, - 0xca, 0x1d, 0x7d, 0x51, 0x38, 0x97, 0x77, 0xf4, 0xb3, 0x75, 0x6e, 0x47, 0x28, 0x1b, 0x7b, 0x0f, - 0x4c, 0x78, 0x69, 0x4a, 0xdb, 0x1d, 0xe1, 0x75, 0x96, 0x1f, 0x2c, 0xb2, 0x71, 0x2d, 0xaa, 0x07, - 0x8d, 0x80, 0x7b, 0x9b, 0x36, 0x3b, 0xf7, 0x05, 0xa8, 0xa8, 0x60, 0xfe, 0x21, 0x06, 0xf3, 0xa9, - 0x4c, 0x6e, 0x62, 0xc8, 0x74, 0xb9, 0x57, 0x82, 0x01, 0xbb, 0x20, 0x6b, 0xb2, 0xb1, 0x17, 0x99, - 0x26, 0x1f, 0xcd, 0x66, 0x90, 0x3d, 0x91, 0xc8, 0x10, 0x47, 0xe8, 0x77, 0x16, 0xbd, 0x8b, 0x9b, - 0xdc, 0xc6, 0x84, 0xd4, 0x4f, 0xe7, 0x37, 0xc8, 0x05, 0x00, 0x63, 0xe6, 0x65, 0xb9, 0x81, 0x0e, - 0xc2, 0x99, 0xdd, 0x00, 0x2d, 0x2a, 0xe6, 0xd4, 0x05, 0x61, 0x92, 0x7a, 0xad, 0xd6, 0xe5, 0x20, - 0x4c, 0xe5, 0x31, 0x45, 0x9b, 0x80, 0x55, 0x83, 0x42, 0x9b, 0xee, 0xec, 0x5b, 0xac, 0x71, 0x39, - 0x4a, 0x8e, 0xe8, 0x93, 0x25, 0x98, 0xbe, 0x14, 0x76, 0xd7, 0x2f, 0xad, 0x77, 0xb7, 0x5a, 0x81, - 0x7f, 0x95, 0xf6, 0xd8, 0xa0, 0xed, 0xd0, 0xde, 0xea, 0xb2, 0xec, 0x76, 0x3d, 0x68, 0x57, 0x19, - 0x10, 0x05, 0x8e, 0xa9, 0xd9, 0x08, 0xc2, 0x26, 0x8d, 0x3b, 0x71, 0x20, 0xbd, 0x71, 0x4b, 0xcd, - 0x8b, 0x06, 0x85, 0x36, 0x1d, 0xe3, 0x1d, 0xdd, 0x09, 0x69, 0x9c, 0xb7, 0x1f, 0x37, 0x18, 0x10, - 0x05, 0x8e, 0x11, 0xa5, 0x71, 0x37, 0x49, 0x65, 0x8f, 0x69, 0xa2, 0x4d, 0x06, 0x44, 0x81, 0x63, - 0xd3, 0x23, 0xe9, 0x6e, 0xf1, 0x00, 0x5b, 0x2e, 0xd5, 0xb9, 0x21, 0xc0, 0xa8, 0xf0, 0x8c, 0x74, - 0x87, 0xf6, 0x96, 0xd9, 0x6e, 0x9a, 0xab, 0x9b, 0xb8, 0x2a, 0xc0, 0xa8, 0xf0, 0xee, 0x3f, 0x38, - 0x40, 0xb2, 0xdd, 0xf1, 0x08, 0x36, 0xe4, 0x97, 0xb3, 0x1b, 0xf2, 0x31, 0x63, 0xa1, 0x59, 0xf5, - 0x87, 0xec, 0xcb, 0xbf, 0xe2, 0xc0, 0xa4, 0x1d, 0x16, 0x27, 0xcd, 0x9c, 0x21, 0xba, 0x91, 0x35, - 0x44, 0xf7, 0xf6, 0xe7, 0x7e, 0x6c, 0xd0, 0x9d, 0xbd, 0x66, 0x90, 0x46, 0x9d, 0xe4, 0xcd, 0x34, - 0x6c, 0x06, 0x21, 0xe5, 0x41, 0x1f, 0x11, 0x4e, 0xcf, 0xc4, 0xdc, 0x97, 0xa2, 0x3a, 0x7d, 0x00, - 0x4b, 0xe6, 0xfe, 0xa6, 0x03, 0x33, 0x7d, 0xc5, 0x26, 0x47, 0x29, 0x8a, 0xec, 0x2f, 0x79, 0x2c, - 0x1d, 0xa9, 0xe4, 0x31, 0x5b, 0x12, 0x55, 0x3e, 0xa8, 0x24, 0xca, 0xbd, 0x25, 0xf4, 0xcd, 0x94, - 0xf1, 0x1c, 0xc2, 0x4a, 0x1e, 0x58, 0xbb, 0xe9, 0x7e, 0xca, 0x81, 0xa9, 0x4c, 0x71, 0x54, 0x41, - 0xb6, 0x97, 0x2f, 0xe3, 0x88, 0xa7, 0x80, 0xe2, 0x20, 0x14, 0x31, 0xa2, 0x8a, 0xb5, 0x8c, 0x0d, - 0x0a, 0x6d, 0x3a, 0xf7, 0xb3, 0x25, 0xa8, 0xa8, 0x68, 0xe2, 0x21, 0x54, 0xf9, 0x84, 0x03, 0x53, - 0xfa, 0x2c, 0xcf, 0x3d, 0xfc, 0x42, 0x4a, 0x50, 0x98, 0x06, 0x3a, 0x4f, 0xc8, 0x3c, 0x7c, 0x7d, - 0xd4, 0x40, 0x5b, 0x18, 0x66, 0x65, 0x93, 0x9b, 0x00, 0x49, 0x2f, 0x49, 0x69, 0xdb, 0x3a, 0x6b, - 0xb8, 0xd6, 0x72, 0x9e, 0xf7, 0xa3, 0x98, 0xb2, 0xc5, 0x7b, 0x3d, 0xaa, 0xd3, 0x0d, 0x4d, 0x69, - 0x2c, 0xb7, 0x81, 0xa1, 0xc5, 0xc9, 0xfd, 0xad, 0x12, 0x9c, 0xcc, 0xab, 0x44, 0xde, 0x0d, 0x93, - 0x4a, 0xba, 0x75, 0xb7, 0x52, 0x85, 0x50, 0x27, 0xd1, 0xc2, 0xdd, 0xdb, 0x9f, 0x9b, 0xeb, 0xbf, - 0x5c, 0x3a, 0x6f, 0x93, 0x60, 0x86, 0x99, 0x08, 0xa8, 0xc8, 0x10, 0x50, 0xad, 0xb7, 0xd8, 0xe9, - 0xc8, 0xa8, 0x88, 0x15, 0x50, 0xb1, 0xb1, 0x98, 0xa3, 0x26, 0xeb, 0x70, 0xda, 0x82, 0x5c, 0xa7, - 0x41, 0x73, 0x7b, 0x2b, 0x8a, 0x45, 0x11, 0x7f, 0xb9, 0xf6, 0xa4, 0xe4, 0x72, 0x1a, 0x07, 0xd0, - 0xe0, 0xc0, 0x2f, 0xc9, 0x9b, 0xa0, 0xe2, 0x7b, 0x1d, 0xcf, 0x0f, 0xd2, 0x9e, 0x3c, 0x3c, 0x69, - 0xc3, 0xb7, 0x24, 0xe1, 0xa8, 0x29, 0xdc, 0x6b, 0x30, 0x72, 0xc8, 0x19, 0x74, 0x28, 0x47, 0xe2, - 0x05, 0xa8, 0x30, 0x76, 0xcc, 0xd0, 0x15, 0xc5, 0x32, 0x82, 0x8a, 0xba, 0xd3, 0x41, 0x5c, 0x28, - 0x07, 0x9e, 0x8a, 0x59, 0xe9, 0x66, 0xad, 0x26, 0x49, 0x97, 0xbb, 0x49, 0x0c, 0x49, 0x9e, 0x82, - 0x32, 0xdd, 0xeb, 0xe4, 0x83, 0x53, 0x2b, 0x7b, 0x9d, 0x20, 0xa6, 0x09, 0x23, 0xa2, 0x7b, 0x1d, - 0x72, 0x16, 0x4a, 0x41, 0x5d, 0xee, 0x80, 0x20, 0x69, 0x4a, 0xab, 0xcb, 0x58, 0x0a, 0xea, 0xee, - 0x1e, 0x54, 0xf5, 0x25, 0x12, 0xb2, 0xa3, 0x36, 0x06, 0xa7, 0x88, 0xf0, 0xbf, 0xe2, 0x3b, 0x64, - 0x4b, 0xe8, 0x02, 0x98, 0xc2, 0xb5, 0xa2, 0xec, 0xcb, 0x79, 0x18, 0xf1, 0x23, 0x59, 0xc1, 0x5a, - 0x31, 0x6c, 0xf8, 0x8e, 0xc0, 0x31, 0xee, 0x2d, 0x98, 0xbe, 0x1a, 0x46, 0x77, 0x42, 0xb6, 0x53, - 0x5f, 0x0c, 0x68, 0xab, 0xce, 0x18, 0x37, 0xd8, 0x1f, 0x79, 0xff, 0x83, 0x63, 0x51, 0xe0, 0xf4, - 0x4d, 0x8b, 0xd2, 0xb0, 0x9b, 0x16, 0xee, 0xcf, 0x39, 0x70, 0x32, 0x5f, 0xa4, 0xf6, 0x3d, 0x3b, - 0x12, 0x7d, 0x98, 0x29, 0xa3, 0xaa, 0xa0, 0x6e, 0x74, 0x44, 0xbe, 0xf5, 0x39, 0x98, 0xdc, 0xea, - 0x06, 0xad, 0xba, 0xfc, 0x2d, 0xf5, 0xd1, 0x75, 0x5e, 0x35, 0x0b, 0x87, 0x19, 0x4a, 0xe6, 0x58, - 0x6e, 0x05, 0xa1, 0x17, 0xf7, 0xd6, 0xcd, 0xbe, 0xa1, 0xcd, 0x53, 0x4d, 0x63, 0xd0, 0xa2, 0x72, - 0xff, 0xb2, 0x0c, 0xe6, 0x36, 0x0b, 0x09, 0x64, 0x3a, 0xdf, 0x29, 0x22, 0xce, 0xb6, 0xd1, 0x0b, - 0x7d, 0x73, 0x6f, 0xa6, 0x92, 0xcb, 0xe6, 0x7f, 0xdc, 0x61, 0x2e, 0x6d, 0x90, 0x06, 0x1e, 0x37, - 0x16, 0xf2, 0x64, 0xb7, 0x5e, 0x50, 0xc6, 0x77, 0x55, 0x70, 0x8e, 0x62, 0xdb, 0x49, 0xd6, 0xc2, - 0xd0, 0x96, 0x4c, 0x5e, 0x92, 0x31, 0xf2, 0x72, 0x61, 0xc5, 0x20, 0x95, 0x5c, 0x60, 0xbc, 0x03, - 0xa3, 0x31, 0x4d, 0x63, 0x55, 0x86, 0x73, 0xf5, 0xb8, 0x19, 0xc3, 0x34, 0xee, 0x6d, 0xa4, 0xec, - 0xf4, 0xd8, 0xb4, 0x3c, 0x39, 0x0e, 0x46, 0x21, 0xc8, 0x4d, 0x80, 0xf4, 0xf7, 0xc5, 0x11, 0xc3, - 0xce, 0x0b, 0x50, 0xf5, 0xba, 0x69, 0xd4, 0x66, 0xdd, 0xc4, 0x87, 0xa7, 0x62, 0x05, 0xd6, 0x15, - 0x02, 0x0d, 0x8d, 0xfb, 0xea, 0x28, 0xe4, 0xf2, 0xeb, 0x64, 0xcf, 0xbe, 0x89, 0xe5, 0x14, 0x7b, - 0x13, 0x4b, 0x2b, 0x33, 0xe8, 0x36, 0x16, 0x69, 0xc2, 0x68, 0x67, 0xdb, 0x4b, 0xd4, 0x1a, 0x7d, - 0x41, 0x75, 0xd3, 0x3a, 0x03, 0xde, 0xdb, 0x9f, 0xfb, 0xf1, 0xc3, 0x39, 0xae, 0x6c, 0xae, 0x2e, - 0x88, 0x62, 0x43, 0x23, 0x9a, 0xf3, 0x40, 0xc1, 0xdf, 0x76, 0x5d, 0xcb, 0x07, 0x1c, 0xc2, 0x3f, - 0xe2, 0x88, 0xa2, 0x2c, 0xa4, 0x49, 0xb7, 0x95, 0xca, 0xd9, 0xf0, 0x42, 0x81, 0xab, 0x4c, 0x30, - 0x36, 0xd5, 0x59, 0xe2, 0x37, 0x5a, 0x42, 0xc9, 0xbb, 0xa1, 0x9a, 0xa4, 0x5e, 0x9c, 0x3e, 0x60, - 0x2d, 0x87, 0xee, 0xf4, 0x0d, 0xc5, 0x04, 0x0d, 0x3f, 0xf2, 0x2e, 0x80, 0x46, 0x10, 0x06, 0xc9, - 0xf6, 0x03, 0xa6, 0xb6, 0xb8, 0xe2, 0x17, 0x35, 0x07, 0xb4, 0xb8, 0x31, 0xeb, 0xc6, 0xe7, 0xb6, - 0x88, 0xc1, 0x56, 0xf8, 0x5e, 0xaa, 0xad, 0x1b, 0x6a, 0x0c, 0x5a, 0x54, 0xee, 0x07, 0xe1, 0x54, - 0xfe, 0x16, 0xb4, 0x3c, 0xcb, 0x36, 0xe3, 0xa8, 0xdb, 0xc9, 0xef, 0x25, 0xfc, 0x96, 0x2c, 0x0a, - 0x1c, 0xb3, 0xf1, 0x3b, 0x41, 0x58, 0xcf, 0xdb, 0xf8, 0xab, 0x41, 0x58, 0x47, 0x8e, 0x39, 0xc4, - 0x15, 0xb5, 0x3f, 0x70, 0xe0, 0xfc, 0x41, 0x97, 0xb5, 0xc9, 0x93, 0x30, 0x72, 0xc7, 0x8b, 0x43, - 0x79, 0xfd, 0x84, 0xdb, 0x8e, 0x5b, 0x5e, 0x1c, 0x22, 0x87, 0x92, 0x1e, 0x8c, 0x89, 0xfa, 0x35, - 0xe9, 0x1d, 0xbf, 0x50, 0xec, 0xd5, 0x71, 0x76, 0x18, 0xd4, 0xe1, 0x25, 0x51, 0x3b, 0x87, 0x52, - 0xa0, 0xfb, 0xaa, 0x03, 0xe4, 0xc6, 0x2e, 0x8d, 0xe3, 0xa0, 0x6e, 0x55, 0xdc, 0x91, 0x67, 0x61, - 0xf2, 0xf6, 0xc6, 0x8d, 0xeb, 0xeb, 0x51, 0x10, 0xf2, 0xc2, 0x71, 0xab, 0xce, 0xe3, 0x8a, 0x05, - 0xc7, 0x0c, 0x15, 0x59, 0x82, 0x99, 0xdb, 0x2f, 0xb3, 0x2d, 0x67, 0x65, 0xaf, 0x13, 0xd3, 0x24, - 0xd1, 0x0f, 0x2e, 0x54, 0x45, 0x26, 0xed, 0xca, 0x0b, 0x39, 0x24, 0xf6, 0xd3, 0xbb, 0x5f, 0x2e, - 0xc1, 0x84, 0xf5, 0x3e, 0xc1, 0x21, 0xfc, 0x91, 0xdc, 0x93, 0x0a, 0xa5, 0x43, 0x3e, 0xa9, 0xf0, - 0x34, 0x54, 0x3a, 0x51, 0x2b, 0xf0, 0x03, 0x7d, 0xc2, 0x9b, 0xe4, 0xe9, 0x36, 0x09, 0x43, 0x8d, - 0x25, 0x77, 0xa0, 0xaa, 0x2f, 0x1a, 0xcb, 0x1a, 0xb1, 0xa2, 0x3c, 0x32, 0xbd, 0xd6, 0xcc, 0x05, - 0x62, 0x23, 0x8b, 0xb8, 0x30, 0xc6, 0x27, 0xaa, 0x4a, 0x26, 0xf0, 0xa2, 0x03, 0x3e, 0x83, 0x13, - 0x94, 0x18, 0xf7, 0x5f, 0x46, 0xa1, 0xca, 0xce, 0xbf, 0x4b, 0x31, 0xad, 0x27, 0xe4, 0xb5, 0x50, - 0xee, 0xc6, 0x2d, 0xd9, 0x59, 0x3a, 0x2e, 0xc5, 0xce, 0xc6, 0x0c, 0x9e, 0xd9, 0x1d, 0x4a, 0x47, - 0x4a, 0x4a, 0x96, 0x0f, 0x4c, 0x4a, 0x3e, 0x0f, 0x53, 0x49, 0xb2, 0xbd, 0x1e, 0x07, 0xbb, 0x5e, - 0xca, 0xe6, 0x9c, 0x0c, 0xe2, 0x98, 0x2c, 0xd0, 0xc6, 0x65, 0x83, 0xc4, 0x2c, 0x2d, 0xb9, 0x04, - 0x33, 0x26, 0x35, 0x48, 0xe3, 0x94, 0xc7, 0x6c, 0x44, 0x78, 0x47, 0x27, 0x61, 0x4c, 0x32, 0x51, - 0x12, 0x60, 0xff, 0x37, 0x64, 0x19, 0x4e, 0x66, 0x80, 0x4c, 0x11, 0x11, 0xfb, 0x99, 0x95, 0x7c, - 0x4e, 0x66, 0xf8, 0x30, 0x5d, 0xfa, 0xbe, 0x20, 0xd7, 0xe0, 0x94, 0x18, 0x5f, 0x7e, 0x41, 0x5d, - 0xb7, 0x68, 0x9c, 0x33, 0xfa, 0x3f, 0x92, 0xd1, 0xa9, 0x4b, 0xfd, 0x24, 0x38, 0xe8, 0x3b, 0x36, - 0x43, 0x35, 0x78, 0x75, 0x59, 0x1a, 0x36, 0x3d, 0x43, 0x35, 0x9b, 0xd5, 0x3a, 0xda, 0x74, 0xe4, - 0x9d, 0xf0, 0x84, 0xf9, 0x29, 0x42, 0x7e, 0x62, 0xb7, 0x5f, 0x96, 0xe9, 0xf7, 0x39, 0xc9, 0xe2, - 0x89, 0x4b, 0x03, 0xc9, 0xea, 0x38, 0xec, 0x7b, 0xb2, 0x05, 0x67, 0x35, 0x6a, 0x85, 0xad, 0xde, - 0x4e, 0x1c, 0x24, 0xb4, 0xe6, 0x25, 0xf4, 0xc5, 0xb8, 0xc5, 0xcb, 0xcd, 0xaa, 0xe6, 0x91, 0x85, - 0x4b, 0x41, 0x7a, 0x79, 0x10, 0x25, 0xae, 0xe1, 0x7d, 0xb8, 0x30, 0xe7, 0x82, 0x86, 0xde, 0x56, - 0x8b, 0xde, 0x58, 0x5a, 0xe5, 0x17, 0x07, 0x2d, 0xe7, 0x62, 0x45, 0x21, 0xd0, 0xd0, 0x68, 0xd7, - 0x7e, 0x72, 0xa8, 0x6b, 0xff, 0x2d, 0x07, 0xa6, 0xf4, 0x64, 0x7f, 0x04, 0x01, 0xba, 0x56, 0x36, - 0x40, 0x77, 0xe9, 0xb8, 0x5e, 0x9d, 0xd4, 0x7c, 0xc8, 0x41, 0xec, 0x0f, 0xab, 0x00, 0xfc, 0xd9, - 0x9a, 0x80, 0x97, 0x87, 0x9e, 0x87, 0x91, 0x98, 0x76, 0xa2, 0xbc, 0xe5, 0x63, 0x14, 0xc8, 0x31, - 0xdf, 0xbf, 0xcb, 0x79, 0x50, 0x92, 0x7a, 0xf4, 0x7b, 0x9b, 0xa4, 0xde, 0x80, 0xc7, 0x83, 0x30, - 0xa1, 0x7e, 0x37, 0x96, 0x1b, 0xdd, 0xe5, 0x28, 0xd1, 0xd6, 0xa1, 0x52, 0x7b, 0xad, 0x64, 0xf4, - 0xf8, 0xea, 0x20, 0x22, 0x1c, 0xfc, 0x2d, 0xeb, 0x52, 0x85, 0x90, 0xf7, 0x50, 0x4c, 0x78, 0x40, - 0xc2, 0x51, 0x53, 0x98, 0x05, 0xb1, 0xd6, 0x50, 0x17, 0x4d, 0x72, 0x0b, 0x62, 0xed, 0xe2, 0x06, - 0x1a, 0x9a, 0xc1, 0x56, 0xb1, 0x5a, 0x90, 0x55, 0x84, 0x23, 0x5b, 0x45, 0xb5, 0x3e, 0x27, 0x86, - 0x3e, 0x72, 0xa0, 0x36, 0xeb, 0xc9, 0xa1, 0x9b, 0xf5, 0xdb, 0x61, 0x3a, 0x08, 0xb7, 0x69, 0x1c, - 0xa4, 0xb4, 0xce, 0xd7, 0xc2, 0xec, 0x14, 0xef, 0x08, 0x1d, 0xb9, 0x5a, 0xcd, 0x60, 0x31, 0x47, - 0x9d, 0x35, 0x2a, 0xd3, 0x87, 0x30, 0x2a, 0x43, 0x4c, 0xf9, 0x89, 0x62, 0x4c, 0xf9, 0xc9, 0xe3, - 0x9b, 0xf2, 0x99, 0x87, 0x6a, 0xca, 0x49, 0x21, 0xa6, 0xfc, 0x29, 0x18, 0xed, 0xc4, 0xd1, 0x5e, - 0x6f, 0xf6, 0x54, 0xd6, 0x9b, 0x5e, 0x67, 0x40, 0x14, 0x38, 0xf7, 0x95, 0x12, 0x3c, 0x6e, 0xcc, - 0x17, 0x9b, 0x34, 0x41, 0x83, 0x2d, 0x60, 0x7e, 0xc5, 0x4f, 0x14, 0x7d, 0x58, 0x91, 0x50, 0x13, - 0x54, 0xd5, 0x18, 0xb4, 0xa8, 0x78, 0x40, 0x91, 0xc6, 0xbc, 0x7e, 0x34, 0x6f, 0xdb, 0x96, 0x24, - 0x1c, 0x35, 0x05, 0x7f, 0xc8, 0x8e, 0xc6, 0xa9, 0xcc, 0x00, 0xe5, 0x2b, 0xa2, 0x96, 0x0c, 0x0a, - 0x6d, 0x3a, 0xe6, 0x03, 0xfa, 0x6a, 0x5d, 0x31, 0xfb, 0x36, 0x29, 0x7c, 0x40, 0xbd, 0x94, 0x34, - 0x56, 0xa9, 0xc3, 0x23, 0xc7, 0xa3, 0xfd, 0xea, 0xf0, 0x48, 0x80, 0xa6, 0x70, 0xff, 0xcb, 0x81, - 0xd7, 0x0c, 0xec, 0x8a, 0x47, 0xb0, 0x67, 0xed, 0x65, 0xf7, 0xac, 0x8d, 0xe3, 0xef, 0x59, 0x7d, - 0xad, 0x18, 0xb2, 0x7f, 0xfd, 0x95, 0x03, 0xd3, 0x86, 0xfe, 0x11, 0x34, 0x35, 0x28, 0xf4, 0x49, - 0x3a, 0xa3, 0xba, 0xa8, 0x6b, 0xcc, 0xb4, 0xed, 0x5b, 0xbc, 0x6d, 0xe2, 0x40, 0xb5, 0xe8, 0xab, - 0x37, 0x5f, 0x0e, 0x38, 0x99, 0xf4, 0x60, 0x8c, 0xdf, 0x83, 0x4d, 0x8a, 0x39, 0xd8, 0x65, 0xe5, - 0xf3, 0xd8, 0xa6, 0x39, 0xd8, 0xf1, 0x9f, 0x09, 0x4a, 0x81, 0xbc, 0xba, 0x39, 0x48, 0x98, 0x11, - 0xac, 0xcb, 0x18, 0xac, 0xa9, 0x6e, 0x96, 0x70, 0xd4, 0x14, 0x6e, 0x1b, 0x66, 0xb3, 0xcc, 0x97, - 0x69, 0x83, 0xc7, 0xcf, 0x0e, 0xd5, 0xcc, 0x05, 0xa8, 0x7a, 0xfc, 0xab, 0xb5, 0xae, 0x97, 0x7f, - 0xf8, 0x65, 0x51, 0x21, 0xd0, 0xd0, 0xb8, 0xbf, 0xe1, 0xc0, 0xa9, 0x01, 0x8d, 0x29, 0x30, 0xf6, - 0x9c, 0x1a, 0x2b, 0x30, 0xe4, 0x31, 0x9e, 0x3a, 0x6d, 0x78, 0x2a, 0x42, 0x63, 0x05, 0x74, 0x96, - 0x05, 0x18, 0x15, 0xde, 0xfd, 0x57, 0x07, 0x4e, 0x64, 0x75, 0x4d, 0xc8, 0x15, 0x20, 0xa2, 0x31, - 0xcb, 0x41, 0xe2, 0x47, 0xbb, 0x34, 0xee, 0xb1, 0x96, 0x0b, 0xad, 0xf5, 0x95, 0xf8, 0xc5, 0x3e, - 0x0a, 0x1c, 0xf0, 0x15, 0xf9, 0x14, 0x2f, 0x28, 0x52, 0xbd, 0xad, 0x66, 0xca, 0xcd, 0x22, 0x67, - 0x8a, 0x19, 0x4c, 0xfb, 0x58, 0xac, 0x45, 0xa2, 0x2d, 0xdf, 0xfd, 0xf6, 0x08, 0xe8, 0xe4, 0x14, - 0x8f, 0x05, 0x14, 0x14, 0x49, 0xc9, 0xbc, 0x0e, 0x54, 0x3e, 0xc2, 0xeb, 0x40, 0x23, 0xf7, 0x3b, - 0xf8, 0x8b, 0xbc, 0xad, 0x71, 0x30, 0x2d, 0xa3, 0xbf, 0x69, 0x50, 0x68, 0xd3, 0x31, 0x4d, 0x5a, - 0xc1, 0x2e, 0x15, 0x1f, 0x8d, 0x65, 0x35, 0x59, 0x53, 0x08, 0x34, 0x34, 0x4c, 0x93, 0x7a, 0xd0, - 0x68, 0xc8, 0xe3, 0x9f, 0xd6, 0x84, 0xf5, 0x0e, 0x72, 0x0c, 0xa3, 0xd8, 0x8e, 0xa2, 0x1d, 0xe9, - 0xd4, 0x69, 0x8a, 0xcb, 0x51, 0xb4, 0x83, 0x1c, 0xc3, 0xdc, 0x90, 0x30, 0x8a, 0xdb, 0x5e, 0x2b, - 0x78, 0x1f, 0xad, 0x6b, 0x29, 0xd2, 0x99, 0xd3, 0x6e, 0xc8, 0xf5, 0x7e, 0x12, 0x1c, 0xf4, 0x1d, - 0x9b, 0x81, 0x9d, 0x98, 0xd6, 0x03, 0x3f, 0xb5, 0xb9, 0x41, 0x76, 0x06, 0xae, 0xf7, 0x51, 0xe0, - 0x80, 0xaf, 0xc8, 0x22, 0x9c, 0x50, 0xc9, 0x45, 0x55, 0xb1, 0x22, 0x3c, 0x3c, 0xed, 0x5c, 0x63, - 0x16, 0x8d, 0x79, 0x7a, 0x66, 0x6d, 0xda, 0xb2, 0x6e, 0x88, 0xfb, 0x7e, 0x96, 0xb5, 0x51, 0xf5, - 0x44, 0xa8, 0x29, 0xdc, 0xdf, 0x2e, 0xb1, 0xdd, 0x71, 0xc8, 0x35, 0xcf, 0x47, 0x16, 0xb9, 0xcb, - 0xce, 0xc8, 0x91, 0x43, 0xcc, 0xc8, 0x67, 0x61, 0xf2, 0x76, 0x12, 0x85, 0x3a, 0x2a, 0x36, 0x3a, - 0x34, 0x2a, 0x66, 0x51, 0x0d, 0x8e, 0x8a, 0x8d, 0x1d, 0x31, 0x2a, 0xf6, 0xa7, 0xa3, 0x70, 0x46, - 0xe7, 0x83, 0x69, 0x7a, 0x27, 0x8a, 0x77, 0x82, 0xb0, 0xc9, 0x73, 0xa8, 0x5f, 0x72, 0x60, 0x52, - 0x4c, 0x6f, 0x79, 0x21, 0x5e, 0xe4, 0x0c, 0x1b, 0x05, 0xdd, 0x59, 0xca, 0x08, 0x9b, 0xdf, 0xb4, - 0x04, 0xe5, 0x5e, 0x27, 0xb0, 0x51, 0x98, 0xd1, 0x88, 0x7c, 0x00, 0x40, 0x15, 0x58, 0x34, 0x0a, - 0x7a, 0x59, 0x4b, 0xe9, 0x87, 0xb4, 0x61, 0x5c, 0xc9, 0x4d, 0x2d, 0x04, 0x2d, 0x81, 0xe4, 0x15, - 0x07, 0xc6, 0x5a, 0xa2, 0x6f, 0x44, 0x02, 0xe8, 0xa5, 0x87, 0xd2, 0x37, 0x76, 0xaf, 0xe8, 0x6d, - 0x59, 0xf6, 0x87, 0x94, 0x4f, 0x10, 0xc6, 0x83, 0xb0, 0xc9, 0x86, 0x55, 0x06, 0x12, 0xdf, 0x30, - 0xa8, 0xfe, 0x60, 0x2d, 0xf2, 0xea, 0x35, 0xaf, 0xe5, 0x85, 0x3e, 0x8d, 0x57, 0x05, 0xb9, 0xfd, - 0xb2, 0x0f, 0x07, 0xa0, 0x62, 0xd4, 0x77, 0x29, 0x6f, 0xf4, 0x30, 0x97, 0xf2, 0xce, 0xbe, 0x03, - 0x66, 0xfa, 0x06, 0xf3, 0x48, 0x4f, 0x15, 0xfc, 0x28, 0x4c, 0x3c, 0xe0, 0xa7, 0xee, 0x1f, 0x8d, - 0x99, 0x3d, 0xe6, 0x7a, 0x54, 0x17, 0x57, 0xc3, 0x62, 0x33, 0xa2, 0xd2, 0x55, 0x2c, 0x70, 0x8a, - 0x58, 0xaf, 0x03, 0x69, 0x20, 0xda, 0x22, 0xd9, 0x1c, 0xed, 0x78, 0x31, 0x0d, 0x1f, 0xf6, 0x1c, - 0x5d, 0xd7, 0x42, 0xd0, 0x12, 0x48, 0xb6, 0x33, 0x19, 0xca, 0x8b, 0xc7, 0xcf, 0x50, 0x32, 0xef, - 0x75, 0xe0, 0x15, 0x9e, 0xcf, 0x38, 0x30, 0x1d, 0x66, 0x66, 0xae, 0xcc, 0x52, 0x6d, 0x3e, 0x8c, - 0x55, 0x21, 0xae, 0xe4, 0x66, 0x61, 0x98, 0x93, 0x3f, 0x68, 0x07, 0x1a, 0x3d, 0xe2, 0x0e, 0x64, - 0xee, 0x98, 0x8e, 0x0d, 0xbb, 0x63, 0x4a, 0x42, 0x7d, 0xbb, 0x7c, 0xbc, 0xf0, 0xdb, 0xe5, 0x30, - 0xe0, 0x66, 0xf9, 0x2d, 0xa8, 0xfa, 0x31, 0xf5, 0xd2, 0x07, 0xbc, 0x68, 0xcc, 0xdf, 0x63, 0x5b, - 0x52, 0x0c, 0xd0, 0xf0, 0x72, 0xff, 0xa2, 0x0c, 0x27, 0x55, 0x8f, 0xa8, 0xec, 0x0d, 0xdb, 0xce, - 0x84, 0x5c, 0xe3, 0x8b, 0xea, 0xed, 0xec, 0xb2, 0x42, 0xa0, 0xa1, 0x61, 0xee, 0x53, 0x37, 0xa1, - 0x37, 0x3a, 0x34, 0x5c, 0x0b, 0xb6, 0x12, 0xde, 0xe3, 0x56, 0x09, 0xd8, 0x8b, 0x06, 0x85, 0x36, - 0x1d, 0xf3, 0x9d, 0x85, 0x1b, 0x9b, 0xe4, 0x93, 0xa1, 0xd2, 0x3d, 0x46, 0x85, 0x27, 0x5f, 0x1c, - 0xf8, 0x4c, 0x44, 0x31, 0x65, 0x00, 0x7d, 0x49, 0xab, 0x23, 0xbe, 0x0f, 0xf1, 0xaa, 0x03, 0x27, - 0x76, 0x32, 0xf5, 0x27, 0xca, 0x24, 0x1f, 0xb3, 0x0c, 0x33, 0x5b, 0xd4, 0x62, 0xa6, 0x70, 0x16, - 0x9e, 0x60, 0x5e, 0xba, 0xfb, 0x1f, 0x0e, 0xd8, 0xe6, 0xe9, 0x70, 0x8e, 0x90, 0xf5, 0xf0, 0x4f, - 0xe9, 0x80, 0x87, 0x7f, 0x94, 0xcf, 0x54, 0x3e, 0x9c, 0x8f, 0x3e, 0x72, 0x04, 0x1f, 0x7d, 0x74, - 0xa8, 0x93, 0xf5, 0x5a, 0x28, 0x77, 0x83, 0xba, 0x74, 0xb3, 0x4d, 0x42, 0x6a, 0x75, 0x19, 0x19, - 0xdc, 0xfd, 0xfd, 0x51, 0x73, 0xac, 0x96, 0xd9, 0xeb, 0x1f, 0x88, 0x66, 0x37, 0x74, 0x55, 0xad, - 0x68, 0xf9, 0xf5, 0xbe, 0xaa, 0xda, 0xb7, 0x1d, 0xbd, 0x38, 0x41, 0x74, 0xd0, 0xb0, 0xa2, 0xda, - 0xf1, 0x03, 0x2a, 0x13, 0x6e, 0x43, 0x85, 0x9d, 0x44, 0x78, 0x7c, 0xac, 0x92, 0x51, 0xaa, 0x72, - 0x59, 0xc2, 0xef, 0xed, 0xcf, 0xbd, 0xf5, 0xe8, 0x6a, 0xa9, 0xaf, 0x51, 0xf3, 0x27, 0x09, 0x54, - 0xd9, 0xdf, 0xbc, 0x88, 0x42, 0x9e, 0x71, 0x5e, 0xd4, 0xb6, 0x48, 0x21, 0x0a, 0xa9, 0xd0, 0x30, - 0x72, 0x48, 0x08, 0x55, 0xfe, 0x44, 0x0d, 0x17, 0x2a, 0x8e, 0x42, 0xeb, 0xba, 0x94, 0x41, 0x21, - 0xee, 0xed, 0xcf, 0x3d, 0x7f, 0x74, 0xa1, 0xfa, 0x73, 0x34, 0x22, 0xdc, 0xbf, 0x2f, 0x9b, 0xb9, - 0x2b, 0x8b, 0xa9, 0x7f, 0x20, 0xe6, 0xee, 0x73, 0xb9, 0xb9, 0x7b, 0xbe, 0x6f, 0xee, 0x4e, 0x9b, - 0x67, 0x5c, 0x32, 0xb3, 0xf1, 0x51, 0x6f, 0xb0, 0x07, 0x1f, 0xbb, 0xb9, 0x67, 0xf1, 0x72, 0x37, - 0x88, 0x69, 0xb2, 0x1e, 0x77, 0xc3, 0x20, 0x6c, 0xf2, 0xe9, 0x58, 0xb1, 0x3d, 0x8b, 0x0c, 0x1a, - 0xf3, 0xf4, 0xee, 0x97, 0x79, 0xce, 0xd1, 0xaa, 0xc7, 0x62, 0xa3, 0xdc, 0xe2, 0xaf, 0xfc, 0x88, - 0x8a, 0x50, 0x3d, 0xca, 0xe2, 0x69, 0x1f, 0x81, 0x23, 0x77, 0x60, 0x7c, 0x4b, 0xbc, 0x34, 0x50, - 0xcc, 0x8d, 0x26, 0xf9, 0x6c, 0x01, 0xbf, 0x3b, 0xaa, 0xde, 0x30, 0xb8, 0x67, 0xfe, 0x44, 0x25, - 0xcd, 0xfd, 0xa5, 0x32, 0x9c, 0xc8, 0xbd, 0x41, 0xc3, 0xce, 0xe7, 0x71, 0xb6, 0x12, 0x5e, 0x9f, - 0xcf, 0x75, 0x0d, 0xbc, 0xa6, 0x20, 0xef, 0x05, 0xa8, 0xd3, 0x4e, 0x2b, 0xea, 0x71, 0xc7, 0x65, - 0xe4, 0xc8, 0x8e, 0x8b, 0xf6, 0x75, 0x97, 0x35, 0x17, 0xb4, 0x38, 0xca, 0x32, 0xd8, 0x51, 0xf1, - 0x8e, 0x42, 0xb6, 0x0c, 0xd6, 0xba, 0xd8, 0x37, 0xf6, 0x68, 0x2f, 0xf6, 0x05, 0x70, 0x42, 0xa8, - 0xa8, 0xab, 0x9e, 0x1e, 0xa0, 0xb8, 0xe9, 0x14, 0x9b, 0x51, 0xcb, 0x59, 0x36, 0x98, 0xe7, 0xeb, - 0x7e, 0xba, 0xc4, 0xdc, 0x37, 0xd1, 0xd9, 0xd7, 0x54, 0x2c, 0xfb, 0xf5, 0x30, 0xe6, 0x75, 0xd3, - 0xed, 0xa8, 0xef, 0xe5, 0x87, 0x45, 0x0e, 0x45, 0x89, 0x25, 0x6b, 0x30, 0x52, 0xf7, 0x52, 0xf5, - 0x6c, 0xfd, 0x51, 0x94, 0x33, 0x81, 0x2b, 0x2f, 0xa5, 0xc8, 0xb9, 0x90, 0x27, 0x61, 0x24, 0xf5, - 0x9a, 0x99, 0x27, 0x29, 0x37, 0xbd, 0x66, 0x82, 0x1c, 0x6a, 0xef, 0x2e, 0x23, 0x07, 0xec, 0x2e, - 0xcf, 0x5b, 0xff, 0x50, 0xc1, 0x4a, 0x92, 0xf4, 0xff, 0x13, 0x04, 0x51, 0x98, 0x9f, 0xa1, 0x75, - 0x7f, 0x08, 0x26, 0xed, 0x7f, 0x92, 0x70, 0xa8, 0x8b, 0x48, 0xee, 0x3f, 0x8f, 0xc0, 0x54, 0xa6, - 0x32, 0x2e, 0x33, 0xcb, 0x9d, 0x03, 0x67, 0x39, 0xcf, 0x69, 0x75, 0x43, 0x2a, 0xeb, 0x1e, 0xad, - 0x9c, 0x56, 0x37, 0xa4, 0x28, 0x70, 0x6c, 0x54, 0xea, 0x71, 0x0f, 0xbb, 0xa1, 0x0c, 0xa2, 0xeb, - 0x51, 0x59, 0xe6, 0x50, 0x94, 0x58, 0x76, 0x80, 0x9d, 0x4c, 0xb8, 0x51, 0x14, 0x36, 0x42, 0xae, - 0x9a, 0x2b, 0x45, 0xbc, 0x96, 0x25, 0xab, 0x40, 0xf9, 0x81, 0xde, 0x86, 0x60, 0x46, 0x22, 0xf9, - 0x98, 0x63, 0xbf, 0x13, 0x36, 0x56, 0x44, 0xf2, 0x27, 0x5f, 0x78, 0x28, 0x56, 0xd0, 0xfd, 0x9f, - 0x0b, 0x4b, 0xf4, 0x02, 0x1e, 0x7f, 0x38, 0x0b, 0x18, 0x06, 0x2c, 0xde, 0x37, 0x42, 0xb5, 0xed, - 0x85, 0x41, 0x83, 0x26, 0xa9, 0xf8, 0x07, 0x27, 0x55, 0x71, 0x7a, 0xba, 0xa6, 0x80, 0x68, 0xf0, - 0xfc, 0xdf, 0x08, 0xf1, 0x86, 0x89, 0x43, 0x4c, 0xd5, 0xfa, 0x37, 0x42, 0x06, 0x8c, 0x36, 0x8d, - 0xfb, 0x3b, 0x0e, 0x3c, 0x3e, 0xb0, 0x33, 0xbe, 0x7f, 0xa3, 0x95, 0xee, 0xef, 0x96, 0xe0, 0xd4, - 0x80, 0xca, 0x51, 0xd2, 0x7b, 0x68, 0xcf, 0xc9, 0xc9, 0xd2, 0xd4, 0xa9, 0xa1, 0x73, 0xe3, 0x68, - 0xdb, 0x90, 0xd9, 0x0a, 0xca, 0x8f, 0x74, 0x2b, 0x70, 0xbf, 0x5c, 0x02, 0xeb, 0xe1, 0x43, 0xf2, - 0x41, 0xbb, 0x48, 0xda, 0x29, 0xaa, 0xa0, 0x57, 0x30, 0xd7, 0x45, 0xd6, 0xa2, 0xd7, 0x06, 0xd5, - 0x5c, 0xe7, 0xe7, 0x6b, 0xe9, 0xe0, 0xf9, 0x4a, 0x5a, 0xaa, 0x1a, 0xbd, 0x5c, 0x7c, 0x35, 0x7a, - 0xb5, 0xaf, 0x12, 0xfd, 0x17, 0x1c, 0x31, 0xd3, 0x72, 0x4d, 0x32, 0x16, 0xd6, 0xb9, 0x8f, 0x85, - 0x7d, 0x13, 0x54, 0x12, 0xda, 0x6a, 0x30, 0xcf, 0x4e, 0x5a, 0x62, 0x3d, 0x27, 0x36, 0x24, 0x1c, - 0x35, 0x05, 0xbf, 0x58, 0xdb, 0x6a, 0x45, 0x77, 0x56, 0xda, 0x9d, 0xb4, 0x27, 0x6d, 0xb2, 0xb9, - 0x58, 0xab, 0x31, 0x68, 0x51, 0xb9, 0xff, 0xe9, 0x88, 0xe1, 0x94, 0x3e, 0xfa, 0x73, 0xb9, 0x0b, - 0x8f, 0x87, 0x77, 0x6f, 0x7f, 0x1a, 0xc0, 0xd7, 0x4f, 0x10, 0x14, 0xf3, 0x1e, 0xa2, 0x79, 0xd2, - 0xc0, 0x7e, 0xa4, 0x4f, 0xc1, 0xd0, 0x92, 0x97, 0x59, 0x3c, 0xe5, 0x83, 0x16, 0x8f, 0xfb, 0x6f, - 0x0e, 0x64, 0x36, 0x0b, 0xd2, 0x81, 0x51, 0xa6, 0x41, 0xaf, 0x98, 0x07, 0x13, 0x6c, 0xd6, 0x6c, - 0x61, 0xc9, 0x69, 0xc1, 0xff, 0x44, 0x21, 0x88, 0xb4, 0xa4, 0x77, 0x5e, 0x2a, 0xe2, 0x51, 0x0f, - 0x5b, 0x20, 0xf3, 0xef, 0xe5, 0xbf, 0x8c, 0xd0, 0x9e, 0xbe, 0xfb, 0x1c, 0xcc, 0xf4, 0x29, 0xc5, - 0x6f, 0x14, 0x45, 0xea, 0x95, 0x08, 0x6b, 0x06, 0xf2, 0xfb, 0x8d, 0x28, 0x70, 0xcc, 0xc1, 0x3f, - 0x99, 0x67, 0x4f, 0xbe, 0xe0, 0xc0, 0x4c, 0x92, 0xe7, 0xf7, 0xb0, 0xfa, 0x4e, 0x47, 0xae, 0xfa, - 0x50, 0xd8, 0xaf, 0x84, 0xfb, 0x67, 0xd2, 0x3c, 0x89, 0x7f, 0xb1, 0xa5, 0x37, 0x17, 0x67, 0xe8, - 0xe6, 0xc2, 0x96, 0x98, 0xbf, 0x4d, 0xeb, 0xdd, 0x56, 0x5f, 0x29, 0xcd, 0x86, 0x84, 0xa3, 0xa6, - 0xc8, 0xbc, 0x8b, 0x56, 0x3e, 0xf0, 0x5d, 0xb4, 0x67, 0x61, 0xd2, 0x7e, 0x09, 0x85, 0x87, 0xd0, - 0x64, 0xf2, 0xc1, 0x7e, 0x34, 0x05, 0x33, 0x54, 0xb9, 0x77, 0xb5, 0x46, 0x0f, 0x7c, 0x57, 0xeb, - 0x69, 0xa8, 0xc8, 0xff, 0x58, 0xa5, 0xe2, 0xbb, 0xa2, 0x4e, 0x47, 0xc2, 0x50, 0x63, 0x99, 0x81, - 0x68, 0x7b, 0x61, 0xd7, 0x6b, 0xb1, 0x1e, 0x92, 0x35, 0x79, 0x7a, 0x65, 0x5d, 0xd3, 0x18, 0xb4, - 0xa8, 0xdc, 0x7f, 0x72, 0x20, 0xff, 0x52, 0x51, 0xa6, 0xb2, 0xcf, 0x39, 0xb0, 0xb2, 0x2f, 0x5b, - 0xe0, 0x54, 0x3a, 0x54, 0x81, 0x93, 0x5d, 0x7b, 0x54, 0xbe, 0x6f, 0xed, 0xd1, 0xeb, 0xcc, 0x35, - 0x76, 0x51, 0xa4, 0x34, 0x31, 0xe8, 0x0a, 0x3b, 0x71, 0x61, 0xcc, 0xf7, 0x74, 0xe1, 0xf4, 0xa4, - 0x70, 0x94, 0x96, 0x16, 0x39, 0x91, 0xc4, 0xd4, 0xe6, 0xbf, 0xfa, 0x9d, 0x73, 0x8f, 0x7d, 0xed, - 0x3b, 0xe7, 0x1e, 0xfb, 0xe6, 0x77, 0xce, 0x3d, 0xf6, 0xe1, 0xbb, 0xe7, 0x9c, 0xaf, 0xde, 0x3d, - 0xe7, 0x7c, 0xed, 0xee, 0x39, 0xe7, 0x9b, 0x77, 0xcf, 0x39, 0xdf, 0xbe, 0x7b, 0xce, 0xf9, 0xcc, - 0xdf, 0x9d, 0x7b, 0xec, 0x5d, 0x15, 0x35, 0x57, 0xff, 0x27, 0x00, 0x00, 0xff, 0xff, 0x21, 0xbe, - 0xad, 0xd2, 0xb0, 0x75, 0x00, 0x00, + // 6644 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x7d, 0x6b, 0x6c, 0x24, 0xd9, + 0x55, 0xf0, 0x56, 0xb7, 0x1f, 0xdd, 0xc7, 0x8f, 0x19, 0xdf, 0x79, 0xac, 0x33, 0xdf, 0x66, 0x3c, + 0xaa, 0x55, 0x92, 0xfd, 0x48, 0x62, 0xb3, 0xc3, 0x12, 0x96, 0x6c, 0x48, 0x70, 0xdb, 0xf3, 0xf0, + 0x8c, 0x67, 0xc6, 0x7b, 0xec, 0x99, 0x21, 0x0f, 0xc2, 0x96, 0xab, 0x6f, 0xb7, 0x6b, 0xdc, 0x5d, + 0xd5, 0x5b, 0x55, 0xed, 0x71, 0x27, 0xe4, 0x85, 0x02, 0x59, 0x91, 0xc7, 0xae, 0x92, 0xfc, 0x48, + 0x24, 0x04, 0xe1, 0x21, 0x24, 0x7e, 0x44, 0xc0, 0x2f, 0x40, 0xc0, 0x9f, 0xfc, 0x0a, 0x42, 0x82, + 0x48, 0xa0, 0x24, 0x10, 0x61, 0x92, 0x21, 0x88, 0x87, 0x04, 0x08, 0xc8, 0x1f, 0xe6, 0x17, 0xba, + 0xef, 0x5b, 0xd5, 0xdd, 0x63, 0x7b, 0x5c, 0x33, 0x89, 0x22, 0xfe, 0xb9, 0xcf, 0x39, 0x75, 0xce, + 0xb9, 0xaf, 0x73, 0xcf, 0x3d, 0xe7, 0xdc, 0x6b, 0x58, 0x6d, 0x06, 0xe9, 0x56, 0x77, 0x73, 0xde, + 0x8f, 0xda, 0x0b, 0x5e, 0xdc, 0x8c, 0x3a, 0x71, 0x74, 0x87, 0xff, 0xf1, 0x56, 0xbf, 0xbe, 0xb0, + 0x73, 0x7e, 0xa1, 0xb3, 0xdd, 0x5c, 0xf0, 0x3a, 0x41, 0xb2, 0xe0, 0x75, 0x3a, 0xad, 0xc0, 0xf7, + 0xd2, 0x20, 0x0a, 0x17, 0x76, 0x9e, 0xf5, 0x5a, 0x9d, 0x2d, 0xef, 0xd9, 0x85, 0x26, 0x0d, 0x69, + 0xec, 0xa5, 0xb4, 0x3e, 0xdf, 0x89, 0xa3, 0x34, 0x22, 0xef, 0x30, 0xdc, 0xe6, 0x15, 0x37, 0xfe, + 0xc7, 0xcf, 0xf9, 0xf5, 0xf9, 0x9d, 0xf3, 0xf3, 0x9d, 0xed, 0xe6, 0x3c, 0xe3, 0x36, 0x6f, 0x71, + 0x9b, 0x57, 0xdc, 0xce, 0xbc, 0xd5, 0xd2, 0xa5, 0x19, 0x35, 0xa3, 0x05, 0xce, 0x74, 0xb3, 0xdb, + 0xe0, 0xbf, 0xf8, 0x0f, 0xfe, 0x97, 0x10, 0x76, 0xc6, 0xdd, 0x7e, 0x3e, 0x99, 0x0f, 0x22, 0xa6, + 0xde, 0x82, 0x1f, 0xc5, 0x74, 0x61, 0xa7, 0x4f, 0xa1, 0x33, 0xcf, 0x19, 0x9a, 0xb6, 0xe7, 0x6f, + 0x05, 0x21, 0x8d, 0x7b, 0xa6, 0x4d, 0x6d, 0x9a, 0x7a, 0x83, 0xbe, 0x5a, 0x18, 0xf6, 0x55, 0xdc, + 0x0d, 0xd3, 0xa0, 0x4d, 0xfb, 0x3e, 0x78, 0xdb, 0x7e, 0x1f, 0x24, 0xfe, 0x16, 0x6d, 0x7b, 0xf9, + 0xef, 0xdc, 0x97, 0x61, 0x6a, 0xf1, 0xf6, 0xfa, 0x62, 0x37, 0xdd, 0x5a, 0x8a, 0xc2, 0x46, 0xd0, + 0x24, 0x3f, 0x0e, 0x13, 0x7e, 0xab, 0x9b, 0xa4, 0x34, 0xbe, 0xee, 0xb5, 0xe9, 0xac, 0x73, 0xce, + 0x79, 0xa6, 0x5a, 0x3b, 0xf1, 0xd5, 0xbd, 0xb9, 0x27, 0xee, 0xed, 0xcd, 0x4d, 0x2c, 0x19, 0x14, + 0xda, 0x74, 0xe4, 0xff, 0xc3, 0x78, 0x1c, 0xb5, 0xe8, 0x22, 0x5e, 0x9f, 0x2d, 0xf1, 0x4f, 0x8e, + 0xc9, 0x4f, 0xc6, 0x51, 0x80, 0x51, 0xe1, 0xdd, 0xaf, 0x97, 0x00, 0x16, 0x3b, 0x9d, 0xb5, 0x38, + 0xba, 0x43, 0xfd, 0x94, 0xbc, 0x04, 0x15, 0xd6, 0x0b, 0x75, 0x2f, 0xf5, 0xb8, 0xb4, 0x89, 0xf3, + 0x3f, 0x3a, 0x2f, 0x1a, 0x33, 0x6f, 0x37, 0xc6, 0x8c, 0x1c, 0xa3, 0x9e, 0xdf, 0x79, 0x76, 0xfe, + 0xc6, 0x26, 0xfb, 0xfe, 0x1a, 0x4d, 0xbd, 0x1a, 0x91, 0xc2, 0xc0, 0xc0, 0x50, 0x73, 0x25, 0x21, + 0x8c, 0x24, 0x1d, 0xea, 0x73, 0xc5, 0x26, 0xce, 0xaf, 0xce, 0x1f, 0x65, 0x8a, 0xcc, 0x1b, 0xcd, + 0xd7, 0x3b, 0xd4, 0xaf, 0x4d, 0x4a, 0xc9, 0x23, 0xec, 0x17, 0x72, 0x39, 0x64, 0x07, 0xc6, 0x92, + 0xd4, 0x4b, 0xbb, 0xc9, 0x6c, 0x99, 0x4b, 0xbc, 0x5e, 0x98, 0x44, 0xce, 0xb5, 0x36, 0x2d, 0x65, + 0x8e, 0x89, 0xdf, 0x28, 0xa5, 0xb9, 0x7f, 0xe7, 0xc0, 0xb4, 0x21, 0x5e, 0x0d, 0x92, 0x94, 0xbc, + 0xaf, 0xaf, 0x73, 0xe7, 0x0f, 0xd6, 0xb9, 0xec, 0x6b, 0xde, 0xb5, 0xc7, 0xa5, 0xb0, 0x8a, 0x82, + 0x58, 0x1d, 0xdb, 0x86, 0xd1, 0x20, 0xa5, 0xed, 0x64, 0xb6, 0x74, 0xae, 0xfc, 0xcc, 0xc4, 0xf9, + 0xcb, 0x45, 0xb5, 0xb3, 0x36, 0x25, 0x85, 0x8e, 0xae, 0x30, 0xf6, 0x28, 0xa4, 0xb8, 0xdf, 0x03, + 0xbb, 0x7d, 0xac, 0xc3, 0xc9, 0xb3, 0x30, 0x91, 0x44, 0xdd, 0xd8, 0xa7, 0x48, 0x3b, 0x51, 0x32, + 0xeb, 0x9c, 0x2b, 0xb3, 0xa9, 0xc7, 0x66, 0xea, 0xba, 0x01, 0xa3, 0x4d, 0x43, 0x3e, 0xe3, 0xc0, + 0x64, 0x9d, 0x26, 0x69, 0x10, 0x72, 0xf9, 0x4a, 0xf9, 0x8d, 0x23, 0x2b, 0xaf, 0x80, 0xcb, 0x86, + 0x79, 0xed, 0xa4, 0x6c, 0xc8, 0xa4, 0x05, 0x4c, 0x30, 0x23, 0x9f, 0xad, 0xb8, 0x3a, 0x4d, 0xfc, + 0x38, 0xe8, 0xb0, 0xdf, 0x7c, 0xce, 0x58, 0x2b, 0x6e, 0xd9, 0xa0, 0xd0, 0xa6, 0x23, 0x21, 0x8c, + 0xb2, 0x15, 0x95, 0xcc, 0x8e, 0x70, 0xfd, 0x57, 0x8e, 0xa6, 0xbf, 0xec, 0x54, 0xb6, 0x58, 0x4d, + 0xef, 0xb3, 0x5f, 0x09, 0x0a, 0x31, 0xe4, 0xd3, 0x0e, 0xcc, 0xca, 0x15, 0x8f, 0x54, 0x74, 0xe8, + 0xed, 0xad, 0x20, 0xa5, 0xad, 0x20, 0x49, 0x67, 0x47, 0xb9, 0x0e, 0x0b, 0x07, 0x9b, 0x5b, 0x97, + 0xe2, 0xa8, 0xdb, 0xb9, 0x1a, 0x84, 0xf5, 0xda, 0x39, 0x29, 0x69, 0x76, 0x69, 0x08, 0x63, 0x1c, + 0x2a, 0x92, 0x7c, 0xce, 0x81, 0x33, 0xa1, 0xd7, 0xa6, 0x49, 0xc7, 0x63, 0x43, 0x2b, 0xd0, 0xb5, + 0x96, 0xe7, 0x6f, 0x73, 0x8d, 0xc6, 0x1e, 0x4e, 0x23, 0x57, 0x6a, 0x74, 0xe6, 0xfa, 0x50, 0xd6, + 0xf8, 0x00, 0xb1, 0xe4, 0x37, 0x1d, 0x98, 0x89, 0xe2, 0xce, 0x96, 0x17, 0xd2, 0xba, 0xc2, 0x26, + 0xb3, 0xe3, 0x7c, 0xe9, 0xbd, 0xff, 0x68, 0x43, 0x74, 0x23, 0xcf, 0xf6, 0x5a, 0x14, 0x06, 0x69, + 0x14, 0xaf, 0xd3, 0x34, 0x0d, 0xc2, 0x66, 0x52, 0x3b, 0x75, 0x6f, 0x6f, 0x6e, 0xa6, 0x8f, 0x0a, + 0xfb, 0xf5, 0x21, 0x1f, 0x84, 0x89, 0xa4, 0x17, 0xfa, 0xb7, 0x83, 0xb0, 0x1e, 0xdd, 0x4d, 0x66, + 0x2b, 0x45, 0x2c, 0xdf, 0x75, 0xcd, 0x50, 0x2e, 0x40, 0x23, 0x00, 0x6d, 0x69, 0x83, 0x07, 0xce, + 0x4c, 0xa5, 0x6a, 0xd1, 0x03, 0x67, 0x26, 0xd3, 0x03, 0xc4, 0x92, 0x4f, 0x38, 0x30, 0x95, 0x04, + 0xcd, 0xd0, 0x4b, 0xbb, 0x31, 0xbd, 0x4a, 0x7b, 0xc9, 0x2c, 0x70, 0x45, 0xae, 0x1c, 0xb1, 0x57, + 0x2c, 0x96, 0xb5, 0x53, 0x52, 0xc7, 0x29, 0x1b, 0x9a, 0x60, 0x56, 0xee, 0xa0, 0x85, 0x66, 0xa6, + 0xf5, 0x44, 0xb1, 0x0b, 0xcd, 0x4c, 0xea, 0xa1, 0x22, 0xdd, 0x3f, 0x2b, 0xc1, 0xf1, 0xfc, 0x1e, + 0x44, 0x7e, 0xdb, 0x81, 0x63, 0x77, 0xee, 0xa6, 0x1b, 0xd1, 0x36, 0x0d, 0x93, 0x5a, 0x8f, 0x59, + 0x0a, 0x6e, 0x7d, 0x27, 0xce, 0xfb, 0xc5, 0xee, 0x76, 0xf3, 0x57, 0xb2, 0x52, 0x2e, 0x84, 0x69, + 0xdc, 0xab, 0x3d, 0x29, 0xdb, 0x73, 0xec, 0xca, 0xed, 0x0d, 0x1b, 0x8b, 0x79, 0xa5, 0xce, 0x7c, + 0xd2, 0x81, 0x93, 0x83, 0x58, 0x90, 0xe3, 0x50, 0xde, 0xa6, 0x3d, 0xe1, 0xe0, 0x20, 0xfb, 0x93, + 0xfc, 0x2c, 0x8c, 0xee, 0x78, 0xad, 0x2e, 0x95, 0x8e, 0xc2, 0xa5, 0xa3, 0x35, 0x44, 0x6b, 0x86, + 0x82, 0xeb, 0xdb, 0x4b, 0xcf, 0x3b, 0xee, 0x5f, 0x96, 0x61, 0xc2, 0xda, 0x2a, 0x1e, 0x83, 0xf3, + 0x13, 0x65, 0x9c, 0x9f, 0x6b, 0x85, 0xed, 0x72, 0x43, 0xbd, 0x9f, 0xbb, 0x39, 0xef, 0xe7, 0x46, + 0x71, 0x22, 0x1f, 0xe8, 0xfe, 0x90, 0x14, 0xaa, 0x51, 0x87, 0x39, 0xb7, 0x6c, 0x17, 0x1d, 0x29, + 0x62, 0x08, 0x6f, 0x28, 0x76, 0xb5, 0xa9, 0x7b, 0x7b, 0x73, 0x55, 0xfd, 0x13, 0x8d, 0x20, 0xf7, + 0x1b, 0x0e, 0x9c, 0xb4, 0x74, 0x5c, 0x8a, 0xc2, 0x7a, 0xc0, 0x87, 0xf6, 0x1c, 0x8c, 0xa4, 0xbd, + 0x8e, 0xf2, 0xa0, 0x75, 0x4f, 0x6d, 0xf4, 0x3a, 0x14, 0x39, 0x86, 0xf9, 0xcc, 0x6d, 0x9a, 0x24, + 0x5e, 0x93, 0xe6, 0x7d, 0xe6, 0x6b, 0x02, 0x8c, 0x0a, 0x4f, 0x62, 0x20, 0x2d, 0x2f, 0x49, 0x37, + 0x62, 0x2f, 0x4c, 0x38, 0xfb, 0x8d, 0xa0, 0x4d, 0x65, 0x07, 0xff, 0xc8, 0xc1, 0x66, 0x0c, 0xfb, + 0xa2, 0x76, 0xfa, 0xde, 0xde, 0x1c, 0x59, 0xed, 0xe3, 0x84, 0x03, 0xb8, 0xbb, 0x9f, 0x73, 0xe0, + 0xf4, 0x60, 0xb7, 0x86, 0xbc, 0x11, 0xc6, 0x12, 0x1a, 0xef, 0xd0, 0x58, 0xb6, 0xce, 0x0c, 0x09, + 0x87, 0xa2, 0xc4, 0x92, 0x05, 0xa8, 0x6a, 0x93, 0x2b, 0xdb, 0x38, 0x23, 0x49, 0xab, 0xc6, 0x4e, + 0x1b, 0x1a, 0xd6, 0x69, 0xec, 0x87, 0x74, 0x82, 0x74, 0xa7, 0xf1, 0xf3, 0x06, 0xc7, 0xb8, 0x7f, + 0xef, 0xc0, 0x31, 0x4b, 0xab, 0xc7, 0xe0, 0xe5, 0x86, 0x59, 0x2f, 0x77, 0xa5, 0xb0, 0xf9, 0x3c, + 0xc4, 0xcd, 0xfd, 0xca, 0x18, 0xcc, 0xd8, 0xb3, 0x9e, 0x9b, 0x63, 0x7e, 0xc0, 0xa2, 0x9d, 0xe8, + 0x26, 0xae, 0xca, 0x3e, 0x37, 0x07, 0x2c, 0x01, 0x46, 0x85, 0x67, 0x9d, 0xd8, 0xf1, 0xd2, 0x2d, + 0xd9, 0xe1, 0xba, 0x13, 0xd7, 0xbc, 0x74, 0x0b, 0x39, 0x86, 0xbc, 0x13, 0xa6, 0x53, 0x2f, 0x6e, + 0xd2, 0x14, 0xe9, 0x4e, 0x90, 0xa8, 0xf5, 0x52, 0xad, 0x9d, 0x96, 0xb4, 0xd3, 0x1b, 0x19, 0x2c, + 0xe6, 0xa8, 0xc9, 0xcb, 0x30, 0xb2, 0x45, 0x5b, 0x6d, 0xe9, 0xd7, 0xac, 0x17, 0xb7, 0xc2, 0x79, + 0x5b, 0x2f, 0xd3, 0x56, 0xbb, 0x56, 0x61, 0x2a, 0xb3, 0xbf, 0x90, 0x8b, 0x22, 0xbf, 0xe8, 0x40, + 0x75, 0xbb, 0x9b, 0xa4, 0x51, 0x3b, 0xf8, 0x00, 0x9d, 0xad, 0x70, 0xc1, 0x3f, 0x53, 0xb0, 0xe0, + 0xab, 0x8a, 0xbf, 0x58, 0xef, 0xfa, 0x27, 0x1a, 0xc9, 0xe4, 0x43, 0x30, 0xbe, 0x9d, 0x44, 0x61, + 0x48, 0x99, 0xa7, 0xc2, 0x94, 0xb8, 0x55, 0xb4, 0x12, 0x82, 0x7b, 0x6d, 0x82, 0x8d, 0xad, 0xfc, + 0x81, 0x4a, 0x26, 0xef, 0x86, 0x7a, 0x10, 0x53, 0x3f, 0x8d, 0xe2, 0xde, 0x2c, 0x3c, 0x92, 0x6e, + 0x58, 0x56, 0xfc, 0x45, 0x37, 0xe8, 0x9f, 0x68, 0x24, 0x93, 0x1e, 0x8c, 0x75, 0x5a, 0xdd, 0x66, + 0x10, 0xce, 0x4e, 0x70, 0x1d, 0x6e, 0x16, 0xac, 0xc3, 0x1a, 0x67, 0x5e, 0x03, 0x66, 0x54, 0xc4, + 0xdf, 0x28, 0x05, 0x92, 0xa7, 0x61, 0xd4, 0xdf, 0xf2, 0xe2, 0x74, 0x76, 0x92, 0xcf, 0x59, 0xbd, + 0x88, 0x96, 0x18, 0x10, 0x05, 0xce, 0xfd, 0xf5, 0x12, 0x9c, 0x19, 0xde, 0x30, 0xb1, 0x9a, 0xfc, + 0x6e, 0x9c, 0x08, 0xfb, 0x5c, 0xb1, 0x57, 0x13, 0x07, 0xa3, 0xc2, 0x93, 0x8f, 0x39, 0x30, 0x7e, + 0x47, 0x8e, 0x78, 0xe9, 0x91, 0x8c, 0xf8, 0x15, 0x39, 0xe2, 0x5a, 0x87, 0x2b, 0x6a, 0xd4, 0xa5, + 0x5c, 0xa6, 0x2e, 0xdd, 0xf5, 0x5b, 0xdd, 0xba, 0xb2, 0x8c, 0x9a, 0xf4, 0x82, 0x00, 0xa3, 0xc2, + 0x33, 0xd2, 0x20, 0x14, 0xa4, 0x23, 0x59, 0xd2, 0x95, 0x50, 0x92, 0x4a, 0xbc, 0xfb, 0xdd, 0x32, + 0x9c, 0x1a, 0xb8, 0xf8, 0xc8, 0x3c, 0x00, 0xf7, 0x59, 0x2e, 0x06, 0xec, 0x80, 0x29, 0x4e, 0xd5, + 0xd3, 0xcc, 0xc5, 0xb8, 0xa5, 0xa1, 0x68, 0x51, 0x90, 0x8f, 0x00, 0x74, 0xbc, 0xd8, 0x6b, 0xd3, + 0x94, 0xc6, 0xca, 0x4e, 0x5e, 0x3d, 0x5a, 0x2f, 0x31, 0x3d, 0xd6, 0x14, 0x4f, 0xe3, 0xe3, 0x68, + 0x50, 0x82, 0x96, 0x48, 0x76, 0x86, 0x8e, 0x69, 0x8b, 0x7a, 0x09, 0xbd, 0x6e, 0xb6, 0x0f, 0x7d, + 0x86, 0x46, 0x83, 0x42, 0x9b, 0x8e, 0xed, 0x63, 0xbc, 0x15, 0x89, 0xec, 0x2b, 0xbd, 0x8f, 0xf1, + 0x76, 0x26, 0x28, 0xb1, 0xe4, 0x55, 0x07, 0xa6, 0x1b, 0x41, 0x8b, 0x1a, 0xe9, 0xf2, 0xc4, 0x7b, + 0xe3, 0xe8, 0x8d, 0xbc, 0x68, 0xf3, 0x35, 0x16, 0x38, 0x03, 0x4e, 0x30, 0x27, 0x9e, 0x0d, 0xf3, + 0x0e, 0x8d, 0xb9, 0xe9, 0x1e, 0xcb, 0x0e, 0xf3, 0x2d, 0x01, 0x46, 0x85, 0x77, 0xbf, 0x58, 0x82, + 0xd9, 0x61, 0x73, 0x8e, 0x24, 0x6c, 0x66, 0xa5, 0xb7, 0xbc, 0x38, 0x91, 0xee, 0xfb, 0x11, 0x4f, + 0x81, 0x92, 0xef, 0x2d, 0x2f, 0xb6, 0xe7, 0x28, 0x17, 0x80, 0x4a, 0x12, 0xb9, 0x03, 0x23, 0x69, + 0xcb, 0x2b, 0x28, 0x6c, 0x64, 0x49, 0x34, 0x4e, 0xd6, 0xea, 0x62, 0x82, 0x5c, 0x06, 0x79, 0x0a, + 0x46, 0x5a, 0xc1, 0x26, 0x73, 0x46, 0xd9, 0x24, 0xe6, 0xbb, 0xca, 0x6a, 0xb0, 0x99, 0x20, 0x87, + 0xba, 0x5f, 0x77, 0x06, 0xf4, 0x8d, 0x34, 0xba, 0x6c, 0x52, 0xd1, 0x70, 0x27, 0x88, 0xa3, 0xb0, + 0x4d, 0xc3, 0x34, 0x1f, 0x0a, 0xbd, 0x60, 0x50, 0x68, 0xd3, 0x91, 0x5f, 0x70, 0x06, 0xac, 0x86, + 0x23, 0xc6, 0x00, 0xa5, 0x4a, 0x07, 0x5e, 0x10, 0xee, 0x7f, 0x8c, 0x0d, 0xb0, 0x7f, 0x7a, 0x43, + 0x23, 0xe7, 0x01, 0x98, 0x37, 0xb5, 0x16, 0xd3, 0x46, 0xb0, 0x2b, 0x5b, 0xa6, 0x59, 0x5e, 0xd7, + 0x18, 0xb4, 0xa8, 0xd4, 0x37, 0xeb, 0xdd, 0x06, 0xfb, 0xa6, 0xd4, 0xff, 0x8d, 0xc0, 0xa0, 0x45, + 0x45, 0x9e, 0x83, 0xb1, 0xa0, 0xed, 0x35, 0xa9, 0xea, 0xff, 0xa7, 0xd8, 0xe2, 0x5a, 0xe1, 0x90, + 0xfb, 0x7b, 0x73, 0xd3, 0x5a, 0x21, 0x0e, 0x42, 0x49, 0x4b, 0x7e, 0xcb, 0x81, 0x49, 0x3f, 0x6a, + 0xb7, 0xa3, 0x70, 0xd5, 0xdb, 0xa4, 0x2d, 0x15, 0xe2, 0xba, 0xf3, 0xa8, 0xb6, 0xfb, 0xf9, 0x25, + 0x4b, 0x98, 0x38, 0x60, 0xea, 0xc0, 0x9d, 0x8d, 0xc2, 0x8c, 0x56, 0xf6, 0x1a, 0x1c, 0x7d, 0xf0, + 0x1a, 0x24, 0x7f, 0xe8, 0xc0, 0x8c, 0xf8, 0x76, 0x31, 0x0c, 0xa3, 0x54, 0x46, 0x1e, 0x45, 0x8c, + 0x2a, 0x7a, 0xc4, 0xcd, 0xb2, 0x24, 0x8a, 0xb6, 0xbd, 0x4e, 0xaa, 0x39, 0xd3, 0x87, 0xc7, 0x7e, + 0x25, 0xc9, 0x25, 0x98, 0x69, 0x44, 0xb1, 0x4f, 0xed, 0x8e, 0xe0, 0x8e, 0x5f, 0xc5, 0x30, 0xba, + 0x98, 0x27, 0xc0, 0xfe, 0x6f, 0xc8, 0x2d, 0x38, 0x6d, 0x01, 0xed, 0x7e, 0xa8, 0x70, 0x6e, 0x67, + 0x25, 0xb7, 0xd3, 0x17, 0x07, 0x52, 0xe1, 0x90, 0xaf, 0xcf, 0xbc, 0x0b, 0x66, 0xfa, 0xc6, 0x6f, + 0xc0, 0xe9, 0xfe, 0xa4, 0x7d, 0xba, 0xaf, 0x5a, 0x87, 0xf2, 0x33, 0xcb, 0x70, 0x7a, 0x70, 0x4f, + 0x1d, 0x86, 0x8b, 0xfb, 0xab, 0x0e, 0x3c, 0x39, 0xc4, 0x8d, 0xd1, 0xc7, 0x1a, 0x67, 0xd8, 0xb1, + 0x86, 0x78, 0x50, 0xa6, 0xe1, 0x8e, 0x34, 0x16, 0x17, 0x8f, 0x36, 0x23, 0x2e, 0x84, 0x3b, 0x62, + 0xa0, 0xc7, 0xef, 0xed, 0xcd, 0x95, 0x2f, 0x84, 0x3b, 0xc8, 0x78, 0xbb, 0x9f, 0x1f, 0xcb, 0x9c, + 0x9c, 0xd6, 0xd5, 0x61, 0x9d, 0x2b, 0x2a, 0xcf, 0x4d, 0x37, 0x0a, 0x9e, 0x8b, 0xd6, 0xc9, 0x50, + 0x84, 0xe0, 0xa5, 0x38, 0xf2, 0x49, 0x87, 0x47, 0xbd, 0xd5, 0x89, 0x52, 0x7a, 0x56, 0x8f, 0x26, + 0x08, 0x6f, 0xc7, 0xd2, 0x15, 0x10, 0x6d, 0xe9, 0x6c, 0x25, 0x77, 0x44, 0xd0, 0x29, 0xef, 0x5f, + 0xa9, 0xb8, 0xb8, 0xc2, 0x93, 0x5d, 0x80, 0xa4, 0x17, 0xfa, 0x6b, 0x51, 0x2b, 0xf0, 0x7b, 0x32, + 0xcc, 0x50, 0x40, 0xe4, 0x54, 0xf0, 0x13, 0x4e, 0x96, 0xf9, 0x8d, 0x96, 0x2c, 0xf2, 0x25, 0x07, + 0x66, 0x82, 0x66, 0x18, 0xc5, 0x74, 0x39, 0x68, 0x34, 0x68, 0x4c, 0x43, 0x9f, 0x2a, 0x3f, 0xe4, + 0xf6, 0xd1, 0x34, 0x50, 0x41, 0xbf, 0x95, 0x3c, 0x7b, 0xb3, 0xc4, 0xfb, 0x50, 0xd8, 0xaf, 0x0c, + 0xa9, 0xc3, 0x48, 0x10, 0x36, 0x22, 0x69, 0xd8, 0x6a, 0x47, 0x53, 0x6a, 0x25, 0x6c, 0x44, 0x66, + 0xad, 0xb0, 0x5f, 0xc8, 0xb9, 0x93, 0x55, 0x38, 0x19, 0xcb, 0x93, 0xe8, 0xe5, 0x20, 0x61, 0xfe, + 0xfc, 0x6a, 0xd0, 0x0e, 0x52, 0x6e, 0x94, 0xca, 0xb5, 0xd9, 0x7b, 0x7b, 0x73, 0x27, 0x71, 0x00, + 0x1e, 0x07, 0x7e, 0xe5, 0xbe, 0x52, 0xcd, 0x1e, 0xb7, 0x45, 0x30, 0xe9, 0x43, 0x50, 0x8d, 0x75, + 0xf8, 0x5e, 0x78, 0x46, 0xab, 0xc5, 0xf4, 0xb1, 0x8c, 0x62, 0xe9, 0x38, 0x88, 0x09, 0xd4, 0x1b, + 0x89, 0xcc, 0x43, 0x62, 0x23, 0x2f, 0x97, 0x45, 0x01, 0xf3, 0x4b, 0x4a, 0x35, 0x01, 0xbb, 0x5e, + 0xe8, 0x23, 0x97, 0x41, 0x62, 0x18, 0xdb, 0xa2, 0x5e, 0x2b, 0xdd, 0x92, 0xf1, 0xa4, 0x2b, 0x47, + 0xf5, 0x69, 0x19, 0xaf, 0x7c, 0xac, 0x4e, 0x40, 0x51, 0x4a, 0x22, 0xbb, 0x30, 0xbe, 0x25, 0x06, + 0x41, 0xee, 0xed, 0xd7, 0x8e, 0xda, 0xb9, 0x99, 0x91, 0x35, 0xeb, 0x57, 0x02, 0x50, 0x89, 0x23, + 0xbf, 0xe4, 0x00, 0xf8, 0x2a, 0x48, 0xa7, 0x96, 0x0f, 0x16, 0x66, 0x77, 0x74, 0xfc, 0xcf, 0xb8, + 0x46, 0x1a, 0x94, 0xa0, 0x25, 0x99, 0xbc, 0x04, 0x93, 0x31, 0xf5, 0xa3, 0xd0, 0x0f, 0x5a, 0xb4, + 0xbe, 0x98, 0x72, 0x37, 0xfe, 0x70, 0xc1, 0xbc, 0xe3, 0xcc, 0x3f, 0x41, 0x8b, 0x07, 0x66, 0x38, + 0x92, 0x57, 0x1c, 0x98, 0xd6, 0x81, 0x4a, 0x36, 0x20, 0x54, 0x06, 0x6c, 0x56, 0x0b, 0x0a, 0x8b, + 0x72, 0x9e, 0x35, 0xc2, 0x8e, 0x2b, 0x59, 0x18, 0xe6, 0xe4, 0x92, 0xf7, 0x00, 0x44, 0x9b, 0x3c, + 0x28, 0xc8, 0x9a, 0x5a, 0x39, 0x74, 0x53, 0xa7, 0x45, 0x7c, 0x5b, 0x71, 0x40, 0x8b, 0x1b, 0xb9, + 0x0a, 0x20, 0x96, 0xcd, 0x46, 0xaf, 0x43, 0x79, 0x50, 0xa6, 0x5a, 0x7b, 0xb3, 0xea, 0xfc, 0x75, + 0x8d, 0xb9, 0xbf, 0x37, 0xd7, 0x7f, 0xda, 0xe5, 0xd1, 0x58, 0xeb, 0x73, 0xf2, 0x41, 0x18, 0x4f, + 0xba, 0xed, 0xb6, 0xa7, 0x83, 0x2b, 0x6b, 0xc5, 0xed, 0x88, 0x82, 0xaf, 0x99, 0x9b, 0x12, 0x80, + 0x4a, 0xa2, 0x1b, 0x02, 0xe9, 0xa7, 0x27, 0xcf, 0xc1, 0x24, 0xdd, 0x4d, 0x69, 0x1c, 0x7a, 0xad, + 0x9b, 0xb8, 0xaa, 0x8e, 0xe3, 0x7c, 0xf0, 0x2f, 0x58, 0x70, 0xcc, 0x50, 0x11, 0x57, 0x7b, 0xde, + 0x25, 0x4e, 0x0f, 0xc6, 0xf3, 0x56, 0x7e, 0xb6, 0xfb, 0x3f, 0xa5, 0x8c, 0x47, 0xb0, 0x11, 0x53, + 0x4a, 0x22, 0x18, 0x0d, 0xa3, 0xba, 0x36, 0x7a, 0x57, 0x8a, 0x31, 0x7a, 0xd7, 0xa3, 0xba, 0x95, + 0x57, 0x66, 0xbf, 0x12, 0x14, 0x72, 0x78, 0xe2, 0x4d, 0x65, 0x28, 0x39, 0x42, 0x3a, 0x41, 0x45, + 0x4a, 0xd6, 0x89, 0xb7, 0x1b, 0xb6, 0x20, 0xcc, 0xca, 0x25, 0xdb, 0x30, 0xba, 0x15, 0x25, 0xa9, + 0x38, 0xab, 0x1c, 0xd9, 0x0b, 0xbb, 0x1c, 0x25, 0x29, 0xdf, 0xc2, 0x74, 0xb3, 0x19, 0x24, 0x41, + 0x21, 0xc3, 0xfd, 0x27, 0x27, 0x13, 0x7c, 0xb9, 0xed, 0xa5, 0xfe, 0xd6, 0x85, 0x1d, 0x76, 0x7e, + 0xbc, 0x9a, 0x49, 0x1c, 0xfc, 0x84, 0x9d, 0x38, 0xb8, 0xbf, 0x37, 0xf7, 0xa6, 0x61, 0x85, 0x3e, + 0x77, 0x19, 0x87, 0x79, 0xce, 0xc2, 0xca, 0x31, 0x7c, 0xd4, 0x81, 0x09, 0x4b, 0x3d, 0xb9, 0xa1, + 0x14, 0x18, 0xc3, 0xd6, 0xce, 0x95, 0x05, 0x44, 0x5b, 0xa4, 0xfb, 0x59, 0x07, 0xc6, 0x6b, 0x9e, + 0xbf, 0x1d, 0x35, 0x1a, 0xe4, 0x2d, 0x50, 0xa9, 0x77, 0x65, 0x8a, 0x46, 0xb4, 0x4f, 0x47, 0xde, + 0x97, 0x25, 0x1c, 0x35, 0x05, 0x9b, 0xc3, 0x0d, 0xcf, 0x4f, 0xa3, 0x98, 0xab, 0x5d, 0x16, 0x73, + 0xf8, 0x22, 0x87, 0xa0, 0xc4, 0xb0, 0x43, 0x7a, 0xdb, 0xdb, 0x55, 0x1f, 0xe7, 0x23, 0x3f, 0xd7, + 0x0c, 0x0a, 0x6d, 0x3a, 0xf7, 0xb5, 0x31, 0x18, 0x97, 0xb9, 0xd0, 0x03, 0x67, 0x33, 0x94, 0x17, + 0x5f, 0x1a, 0xea, 0xc5, 0x27, 0x30, 0xe6, 0xf3, 0x32, 0x2a, 0xb9, 0x95, 0x1e, 0x31, 0x06, 0x26, + 0x15, 0x14, 0x95, 0x59, 0x46, 0x2d, 0xf1, 0x1b, 0xa5, 0x28, 0xf2, 0x9a, 0x03, 0xc7, 0xfc, 0x28, + 0x0c, 0xa9, 0x6f, 0xec, 0xfc, 0x48, 0x11, 0xd9, 0xbe, 0xa5, 0x2c, 0x53, 0x93, 0x74, 0xcd, 0x21, + 0x30, 0x2f, 0x9e, 0xbc, 0x00, 0x53, 0xa2, 0xcf, 0x6e, 0x65, 0xce, 0xc7, 0x26, 0xff, 0x6d, 0x23, + 0x31, 0x4b, 0x4b, 0xe6, 0x45, 0x9c, 0x81, 0x27, 0x84, 0xc4, 0x19, 0x59, 0x06, 0x1f, 0x75, 0xc6, + 0x28, 0x41, 0x8b, 0x82, 0xc4, 0x40, 0x62, 0xda, 0x88, 0x69, 0xb2, 0x85, 0xf4, 0xe5, 0x2e, 0x4d, + 0x52, 0xbe, 0xc7, 0x8c, 0x3f, 0x5c, 0x6e, 0x0c, 0xfb, 0x38, 0xe1, 0x00, 0xee, 0x64, 0x5b, 0x3a, + 0xba, 0x95, 0x22, 0x96, 0x93, 0x1c, 0xe6, 0xa1, 0xfe, 0xee, 0x1c, 0x8c, 0x26, 0x5b, 0x5e, 0x5c, + 0xe7, 0x7b, 0x5b, 0xb9, 0x56, 0x65, 0xb6, 0x64, 0x9d, 0x01, 0x50, 0xc0, 0xc9, 0x32, 0x1c, 0xcf, + 0x65, 0xef, 0x13, 0xbe, 0x7b, 0x55, 0x6a, 0xb3, 0x92, 0xdd, 0xf1, 0x5c, 0xde, 0x3f, 0xc1, 0xbe, + 0x2f, 0xdc, 0xef, 0x39, 0xa0, 0xc8, 0x96, 0x3c, 0x7f, 0x8b, 0x32, 0x0d, 0xc8, 0x3b, 0x61, 0x5a, + 0x7b, 0xa5, 0x4b, 0x51, 0x57, 0x86, 0xc1, 0xca, 0x26, 0x4e, 0x89, 0x19, 0x2c, 0xe6, 0xa8, 0xc9, + 0x02, 0x54, 0x59, 0xc3, 0xc5, 0xa7, 0x62, 0x15, 0x6b, 0xcf, 0x77, 0x71, 0x6d, 0x45, 0x7e, 0x65, + 0x68, 0x48, 0x04, 0x33, 0x2d, 0x2f, 0x49, 0xb9, 0x06, 0xcc, 0x49, 0x7d, 0xc8, 0x44, 0x27, 0xaf, + 0x85, 0x59, 0xcd, 0x33, 0xc2, 0x7e, 0xde, 0xee, 0x37, 0x46, 0x60, 0x2a, 0xb3, 0xd0, 0x98, 0x91, + 0xea, 0x26, 0x6c, 0x27, 0xd5, 0x27, 0x76, 0x6d, 0xa4, 0x6e, 0x4a, 0x38, 0x6a, 0x0a, 0x46, 0xdd, + 0xf1, 0x92, 0xe4, 0x6e, 0x14, 0xd7, 0xa5, 0x65, 0xd0, 0xd4, 0x6b, 0x12, 0x8e, 0x9a, 0x82, 0x99, + 0xab, 0x4d, 0xea, 0xc5, 0x34, 0xe6, 0xb5, 0x01, 0x79, 0x73, 0x55, 0x33, 0x28, 0xb4, 0xe9, 0xf8, + 0x1a, 0x4f, 0x5b, 0xc9, 0x52, 0x2b, 0xa0, 0x61, 0x2a, 0xd4, 0x2c, 0x66, 0x8d, 0x6f, 0xac, 0xae, + 0xdb, 0x4c, 0xcd, 0x1a, 0xcf, 0x21, 0x30, 0x2f, 0x9e, 0x7c, 0xdc, 0x81, 0x29, 0xef, 0x6e, 0x62, + 0x4a, 0x47, 0xf9, 0x22, 0x3f, 0xb2, 0xcd, 0xcb, 0x54, 0xa3, 0xd6, 0x66, 0x98, 0xb5, 0xc8, 0x80, + 0x30, 0x2b, 0x94, 0x7c, 0xc1, 0x01, 0x42, 0x77, 0xa9, 0xbf, 0x16, 0x47, 0x3b, 0x41, 0x5d, 0x8d, + 0xa1, 0xf4, 0xa6, 0x8f, 0xe8, 0xbc, 0x5d, 0xe8, 0xe3, 0x2b, 0x8c, 0x44, 0x3f, 0x1c, 0x07, 0xe8, + 0xe0, 0xfe, 0x6d, 0x19, 0x26, 0xac, 0xb5, 0x3d, 0xd0, 0x50, 0x3b, 0x3f, 0x60, 0x86, 0xba, 0x74, + 0x08, 0x43, 0xfd, 0x11, 0xa8, 0xfa, 0xca, 0x50, 0x14, 0x53, 0xea, 0x9a, 0x37, 0x3f, 0xc6, 0x56, + 0x68, 0x10, 0x1a, 0x99, 0xe4, 0x12, 0xcc, 0x58, 0x6c, 0xa4, 0x91, 0x19, 0xe1, 0x46, 0x46, 0xc7, + 0x2d, 0x16, 0xf3, 0x04, 0xd8, 0xff, 0x0d, 0x79, 0x96, 0x39, 0x49, 0x81, 0x6c, 0x97, 0x38, 0x14, + 0xca, 0x32, 0xd2, 0xc5, 0xb5, 0x15, 0x05, 0x46, 0x9b, 0xc6, 0xfd, 0x86, 0xa3, 0x07, 0xf7, 0x31, + 0xd4, 0x20, 0xdc, 0xc9, 0xd6, 0x20, 0x5c, 0x28, 0xa4, 0x9b, 0x87, 0xd4, 0x1f, 0x5c, 0x87, 0xf1, + 0xa5, 0xa8, 0xdd, 0xf6, 0xc2, 0x3a, 0x79, 0x03, 0x8c, 0xfb, 0xe2, 0x4f, 0x79, 0xea, 0xe0, 0x49, + 0x69, 0x89, 0x45, 0x85, 0x23, 0x4f, 0xc1, 0x88, 0x17, 0x37, 0xd5, 0x49, 0x83, 0xe7, 0x58, 0x16, + 0xe3, 0x66, 0x82, 0x1c, 0xea, 0x7e, 0xae, 0x04, 0xb0, 0x14, 0xb5, 0x3b, 0x5e, 0x4c, 0xeb, 0x1b, + 0xd1, 0xff, 0x85, 0x1c, 0x85, 0x03, 0xfa, 0x29, 0x07, 0x08, 0xeb, 0x95, 0x28, 0xa4, 0xa1, 0xc9, + 0xeb, 0xb0, 0xfd, 0xd2, 0x57, 0x50, 0xb9, 0xf9, 0x98, 0x35, 0xa0, 0x10, 0x68, 0x68, 0x0e, 0xe0, + 0x94, 0x3e, 0xad, 0x42, 0xd6, 0xe5, 0x6c, 0xbe, 0x9c, 0xe7, 0x38, 0x65, 0x04, 0xdb, 0xfd, 0x7c, + 0x09, 0x4e, 0x0b, 0xb3, 0x75, 0xcd, 0x0b, 0xbd, 0x26, 0x6d, 0x33, 0xad, 0x0e, 0x1a, 0xbc, 0xf6, + 0x99, 0x37, 0x14, 0xa8, 0xf4, 0xf8, 0x51, 0x27, 0xa7, 0x98, 0x54, 0x62, 0x1a, 0xad, 0x84, 0x41, + 0x8a, 0x9c, 0x39, 0x49, 0xa0, 0xa2, 0x2e, 0x2f, 0x48, 0x63, 0x53, 0x90, 0x20, 0xbd, 0xee, 0x2e, + 0x49, 0xf6, 0xa8, 0x05, 0xb9, 0x5f, 0x71, 0x20, 0x6f, 0x44, 0xf9, 0x71, 0x41, 0x14, 0xb8, 0xe5, + 0x8f, 0x0b, 0xd9, 0x7a, 0xb4, 0x43, 0x94, 0x77, 0xbd, 0x0f, 0x26, 0xbc, 0x34, 0xa5, 0xed, 0x8e, + 0xf0, 0x5d, 0xcb, 0x0f, 0x17, 0x1f, 0xb9, 0x16, 0xd5, 0x83, 0x46, 0xc0, 0x7d, 0x56, 0x9b, 0x9d, + 0xfb, 0x22, 0x54, 0x54, 0x4a, 0xe0, 0x00, 0x83, 0xf9, 0x74, 0x26, 0xc3, 0x31, 0x64, 0xba, 0xdc, + 0x2f, 0xc1, 0x80, 0x5d, 0x90, 0x35, 0xd9, 0xd8, 0x8b, 0x4c, 0x93, 0x0f, 0x67, 0x33, 0xc8, 0xae, + 0x48, 0x87, 0x88, 0x83, 0xf8, 0xbb, 0x8b, 0xde, 0xc5, 0x4d, 0x86, 0x64, 0x42, 0xea, 0xa7, 0xb3, + 0x24, 0xe4, 0x3c, 0x80, 0x31, 0xf3, 0xb2, 0x2c, 0x40, 0x87, 0xf2, 0xcc, 0x6e, 0x80, 0x16, 0x15, + 0x73, 0xea, 0x82, 0x30, 0x49, 0xbd, 0x56, 0xeb, 0x72, 0x10, 0xa6, 0xf2, 0xb0, 0xa3, 0x4d, 0xc0, + 0x8a, 0x41, 0xa1, 0x4d, 0x77, 0xe6, 0x6d, 0xd6, 0xb8, 0x1c, 0x26, 0xd3, 0xf4, 0xa9, 0x12, 0x4c, + 0x5f, 0x0a, 0xbb, 0x6b, 0x97, 0xd6, 0xba, 0x9b, 0xad, 0xc0, 0xbf, 0x4a, 0x7b, 0x6c, 0xd0, 0xb6, + 0x69, 0x6f, 0x65, 0x59, 0x76, 0xbb, 0x1e, 0xb4, 0xab, 0x0c, 0x88, 0x02, 0xc7, 0xd4, 0x6c, 0x04, + 0x61, 0x93, 0xc6, 0x9d, 0x38, 0x90, 0xde, 0xb8, 0xa5, 0xe6, 0x45, 0x83, 0x42, 0x9b, 0x8e, 0xf1, + 0x8e, 0xee, 0x86, 0x34, 0xce, 0xdb, 0x8f, 0x1b, 0x0c, 0x88, 0x02, 0xc7, 0x88, 0xd2, 0xb8, 0x9b, + 0xa4, 0xb2, 0xc7, 0x34, 0xd1, 0x06, 0x03, 0xa2, 0xc0, 0xb1, 0xe9, 0x91, 0x74, 0x37, 0x79, 0x98, + 0x2e, 0x97, 0x30, 0x5d, 0x17, 0x60, 0x54, 0x78, 0x46, 0xba, 0x4d, 0x7b, 0xcb, 0x6c, 0x37, 0xcd, + 0xd5, 0x37, 0x5c, 0x15, 0x60, 0x54, 0x78, 0xf7, 0x1f, 0x1d, 0x20, 0xd9, 0xee, 0x78, 0x0c, 0x1b, + 0xf2, 0xcb, 0xd9, 0x0d, 0xf9, 0x88, 0x11, 0xd5, 0xac, 0xfa, 0x43, 0xf6, 0xe5, 0xdf, 0x70, 0x60, + 0xd2, 0x0e, 0xae, 0x93, 0x66, 0xce, 0x10, 0xdd, 0xc8, 0x1a, 0xa2, 0xfb, 0x7b, 0x73, 0x3f, 0x35, + 0xe8, 0x6e, 0x5d, 0x33, 0x48, 0xa3, 0x4e, 0xf2, 0x56, 0x1a, 0x36, 0x83, 0x90, 0xf2, 0xd0, 0x91, + 0x08, 0xca, 0x67, 0x22, 0xf7, 0x4b, 0x51, 0x9d, 0x3e, 0x84, 0x25, 0x73, 0x6f, 0xc3, 0x4c, 0x5f, + 0x51, 0xcb, 0x01, 0x8c, 0xce, 0xbe, 0x25, 0x8b, 0xee, 0xa7, 0x1d, 0x98, 0xca, 0xd4, 0x04, 0x15, + 0x64, 0xca, 0xf8, 0xaa, 0x88, 0x78, 0x5e, 0x26, 0x0e, 0x42, 0x11, 0xb8, 0xa9, 0x58, 0xab, 0xc2, + 0xa0, 0xd0, 0xa6, 0x73, 0x3f, 0x5b, 0x82, 0x8a, 0x0a, 0xf1, 0x1d, 0x40, 0x95, 0x4f, 0x3a, 0x30, + 0xa5, 0x8f, 0xc6, 0xdc, 0x61, 0x2e, 0xa4, 0x2e, 0x84, 0x69, 0xa0, 0x93, 0x77, 0xcc, 0x61, 0xd6, + 0x9e, 0x3b, 0xda, 0xc2, 0x30, 0x2b, 0x9b, 0xdc, 0x02, 0x48, 0x7a, 0x49, 0x4a, 0xdb, 0x96, 0xeb, + 0xee, 0x5a, 0xab, 0x63, 0xde, 0x8f, 0x62, 0xca, 0xd6, 0xc2, 0xf5, 0xa8, 0x4e, 0xd7, 0x35, 0xa5, + 0x31, 0x84, 0x06, 0x86, 0x16, 0x27, 0xf7, 0x77, 0x4b, 0x70, 0x3c, 0xaf, 0x12, 0x79, 0x2f, 0x4c, + 0x2a, 0xe9, 0xd6, 0x95, 0x42, 0x15, 0xd7, 0x9c, 0x44, 0x0b, 0x77, 0x7f, 0x6f, 0x6e, 0xae, 0xff, + 0x4e, 0xe5, 0xbc, 0x4d, 0x82, 0x19, 0x66, 0x22, 0x3e, 0x21, 0xe3, 0x32, 0xb5, 0xde, 0x62, 0xa7, + 0x23, 0x83, 0x0c, 0x56, 0x7c, 0xc2, 0xc6, 0x62, 0x8e, 0x9a, 0xac, 0xc1, 0x49, 0x0b, 0x72, 0x9d, + 0x06, 0xcd, 0xad, 0xcd, 0x28, 0x16, 0xb5, 0xeb, 0xe5, 0xda, 0x53, 0x92, 0xcb, 0x49, 0x1c, 0x40, + 0x83, 0x03, 0xbf, 0x24, 0x6f, 0x81, 0x8a, 0xef, 0x75, 0x3c, 0x3f, 0x48, 0x7b, 0xf2, 0x2c, 0xa2, + 0xed, 0xc8, 0x92, 0x84, 0xa3, 0xa6, 0x70, 0xaf, 0xc1, 0xc8, 0x01, 0x67, 0xd0, 0x81, 0xf6, 0xe5, + 0x17, 0xa1, 0xc2, 0xd8, 0x31, 0xbb, 0x51, 0x14, 0xcb, 0x08, 0x2a, 0xea, 0x2a, 0x03, 0x71, 0xa1, + 0x1c, 0x78, 0x2a, 0x04, 0xa4, 0x9b, 0xb5, 0x92, 0x24, 0x5d, 0xee, 0x75, 0x30, 0x24, 0x79, 0x1a, + 0xca, 0x74, 0xb7, 0x93, 0x8f, 0xf5, 0x5c, 0xd8, 0xed, 0x04, 0x31, 0x4d, 0x18, 0x11, 0xdd, 0xed, + 0x90, 0x33, 0x50, 0x0a, 0xea, 0x72, 0x43, 0x01, 0x49, 0x53, 0x5a, 0x59, 0xc6, 0x52, 0x50, 0x77, + 0x77, 0xa1, 0xaa, 0xef, 0x4e, 0x90, 0x6d, 0x65, 0x67, 0x9d, 0x22, 0x62, 0xf2, 0x8a, 0xef, 0x10, + 0x0b, 0xdb, 0x05, 0x30, 0xd5, 0x64, 0x45, 0xd9, 0x97, 0x73, 0x30, 0xe2, 0x47, 0xb2, 0x70, 0xb3, + 0x62, 0xd8, 0x70, 0x03, 0xcb, 0x31, 0xee, 0x6d, 0x98, 0xbe, 0x1a, 0x46, 0x77, 0x43, 0xb6, 0xf1, + 0x5d, 0x0c, 0x68, 0xab, 0xce, 0x18, 0x37, 0xd8, 0x1f, 0xf9, 0xed, 0x9c, 0x63, 0x51, 0xe0, 0xf4, + 0x05, 0x83, 0xd2, 0xb0, 0x0b, 0x06, 0xee, 0x2f, 0x3b, 0x70, 0x3c, 0x5f, 0x39, 0xf6, 0x7d, 0x3b, + 0x61, 0x7c, 0x94, 0x29, 0xa3, 0x4a, 0x93, 0x6e, 0x74, 0x44, 0x12, 0xf4, 0x79, 0x98, 0xdc, 0xec, + 0x06, 0xad, 0xba, 0xfc, 0x2d, 0xf5, 0xd1, 0xc5, 0x57, 0x35, 0x0b, 0x87, 0x19, 0x4a, 0xe6, 0xa7, + 0x6d, 0x06, 0xa1, 0x17, 0xf7, 0xd6, 0xcc, 0xbe, 0xa1, 0xcd, 0x53, 0x4d, 0x63, 0xd0, 0xa2, 0x72, + 0xff, 0xba, 0x0c, 0xe6, 0x12, 0x07, 0x09, 0x64, 0x8e, 0xdd, 0x29, 0x22, 0x6c, 0xb5, 0xde, 0x0b, + 0x7d, 0x73, 0x5d, 0xa4, 0x92, 0x4b, 0xb1, 0x7f, 0xc2, 0x61, 0x1e, 0x62, 0x90, 0x06, 0x1e, 0x37, + 0x16, 0xf2, 0xa0, 0xb4, 0x56, 0x50, 0x1a, 0x76, 0x45, 0x70, 0x8e, 0x62, 0xdb, 0xe7, 0xd4, 0xc2, + 0xd0, 0x96, 0x4c, 0x5e, 0x92, 0x81, 0xeb, 0x72, 0x61, 0x15, 0x1a, 0x95, 0x5c, 0xb4, 0xba, 0x03, + 0xa3, 0x31, 0x4d, 0x63, 0x55, 0x1b, 0x73, 0xf5, 0xa8, 0x69, 0xbc, 0x34, 0xee, 0xad, 0xa7, 0xec, + 0x30, 0xd6, 0xb4, 0x1c, 0x23, 0x0e, 0x46, 0x21, 0xc8, 0x4d, 0x80, 0xf4, 0xf7, 0xc5, 0x21, 0xa3, + 0xb8, 0x0b, 0x50, 0xf5, 0xba, 0x69, 0xd4, 0x66, 0xdd, 0xc4, 0x87, 0xa7, 0x62, 0xc5, 0xa9, 0x15, + 0x02, 0x0d, 0x8d, 0xfb, 0xea, 0x28, 0xe4, 0x92, 0xde, 0x64, 0xd7, 0xbe, 0x80, 0xe4, 0x14, 0x7b, + 0x01, 0x49, 0x2b, 0x33, 0xe8, 0x12, 0x12, 0x69, 0xc2, 0x68, 0x67, 0xcb, 0x4b, 0xd4, 0x1a, 0x7d, + 0x51, 0x75, 0xd3, 0x1a, 0x03, 0xde, 0xdf, 0x9b, 0xfb, 0xe9, 0x83, 0xf9, 0x81, 0x6c, 0xae, 0x2e, + 0x88, 0x0a, 0x40, 0x23, 0x9a, 0xf3, 0x40, 0xc1, 0xdf, 0xf6, 0x04, 0xcb, 0xfb, 0x9c, 0x69, 0x3f, + 0xe6, 0x88, 0x4a, 0x29, 0xa4, 0x49, 0xb7, 0x95, 0xca, 0xd9, 0xf0, 0x62, 0x81, 0xab, 0x4c, 0x30, + 0x36, 0x25, 0x53, 0xe2, 0x37, 0x5a, 0x42, 0xc9, 0x7b, 0xa1, 0x9a, 0xa4, 0x5e, 0x9c, 0x3e, 0x64, + 0x81, 0x85, 0xee, 0xf4, 0x75, 0xc5, 0x04, 0x0d, 0x3f, 0xf2, 0x1e, 0x80, 0x46, 0x10, 0x06, 0xc9, + 0xd6, 0x43, 0xe6, 0x9b, 0xb8, 0xe2, 0x17, 0x35, 0x07, 0xb4, 0xb8, 0x31, 0xeb, 0xc6, 0xe7, 0xb6, + 0x08, 0x69, 0x56, 0xf8, 0x5e, 0xaa, 0xad, 0x1b, 0x6a, 0x0c, 0x5a, 0x54, 0xee, 0x87, 0xe1, 0x44, + 0xfe, 0xf2, 0xaf, 0x3c, 0x1a, 0x36, 0xe3, 0xa8, 0xdb, 0xc9, 0xef, 0x25, 0xfc, 0x72, 0x28, 0x0a, + 0x1c, 0xb3, 0xf1, 0xdb, 0x41, 0x58, 0xcf, 0xdb, 0xf8, 0xab, 0x41, 0x58, 0x47, 0x8e, 0x39, 0xc0, + 0xcd, 0xac, 0x3f, 0x76, 0xe0, 0xdc, 0x7e, 0x77, 0x94, 0xd9, 0xb1, 0xff, 0xae, 0x17, 0x87, 0xf2, + 0xd6, 0x05, 0xb7, 0x1d, 0xb7, 0xbd, 0x38, 0x44, 0x0e, 0x25, 0x3d, 0x18, 0x13, 0x45, 0x65, 0xd2, + 0x3b, 0x7e, 0xb1, 0xd8, 0x1b, 0xd3, 0xec, 0x6c, 0xa5, 0xa3, 0x35, 0xa2, 0xa0, 0x0d, 0xa5, 0x40, + 0xf7, 0x55, 0x07, 0xc8, 0x8d, 0x1d, 0x1a, 0xc7, 0x41, 0xdd, 0x2a, 0x83, 0x23, 0xcf, 0xc1, 0xe4, + 0x9d, 0xf5, 0x1b, 0xd7, 0xd7, 0xa2, 0x20, 0xe4, 0xd5, 0xdc, 0x56, 0xf1, 0xc5, 0x15, 0x0b, 0x8e, + 0x19, 0x2a, 0xb2, 0x04, 0x33, 0x77, 0x5e, 0x66, 0x5b, 0xce, 0x85, 0xdd, 0x4e, 0x4c, 0x93, 0x44, + 0xbf, 0x33, 0x50, 0x15, 0x89, 0xa9, 0x2b, 0x2f, 0xe6, 0x90, 0xd8, 0x4f, 0xef, 0x7e, 0xb9, 0x04, + 0x13, 0xd6, 0xb5, 0xfc, 0x03, 0xf8, 0x23, 0xb9, 0x97, 0x04, 0x4a, 0x07, 0x7c, 0x49, 0xe0, 0x19, + 0xa8, 0x74, 0xa2, 0x56, 0xe0, 0x07, 0xba, 0x4c, 0x7b, 0x92, 0x67, 0xaf, 0x24, 0x0c, 0x35, 0x96, + 0xdc, 0x85, 0xaa, 0xbe, 0x5f, 0x2b, 0x0b, 0xb7, 0x8a, 0xf2, 0xc8, 0xf4, 0x5a, 0x33, 0xf7, 0x66, + 0x8d, 0x2c, 0xe2, 0xc2, 0x18, 0x9f, 0xa8, 0x2a, 0x36, 0xcf, 0x2b, 0x01, 0xf8, 0x0c, 0x4e, 0x50, + 0x62, 0xdc, 0x7f, 0x1d, 0x85, 0x2a, 0xd2, 0x4e, 0xb4, 0x14, 0xd3, 0x7a, 0x42, 0x5e, 0x0f, 0xe5, + 0x6e, 0xdc, 0x92, 0x9d, 0xa5, 0xc3, 0x3c, 0x37, 0x71, 0x15, 0x19, 0x3c, 0xb3, 0x3b, 0x94, 0x0e, + 0x95, 0xe3, 0x2b, 0xef, 0x9b, 0xe3, 0x7b, 0x01, 0xa6, 0x92, 0x64, 0x6b, 0x2d, 0x0e, 0x76, 0xbc, + 0x94, 0xcd, 0x39, 0x19, 0x13, 0x31, 0x49, 0x95, 0xf5, 0xcb, 0x06, 0x89, 0x59, 0x5a, 0x72, 0x09, + 0x66, 0x4c, 0xa6, 0x8d, 0xc6, 0x29, 0x0f, 0x81, 0x88, 0x68, 0x89, 0xce, 0x69, 0x98, 0xdc, 0x9c, + 0x24, 0xc0, 0xfe, 0x6f, 0xc8, 0x32, 0x1c, 0xcf, 0x00, 0x99, 0x22, 0x22, 0x94, 0xa2, 0x93, 0xc2, + 0x19, 0x3e, 0x4c, 0x97, 0xbe, 0x2f, 0xc8, 0x35, 0x38, 0x21, 0xc6, 0x97, 0xdf, 0xcb, 0xd6, 0x2d, + 0x1a, 0xe7, 0x8c, 0xfe, 0x9f, 0x64, 0x74, 0xe2, 0x52, 0x3f, 0x09, 0x0e, 0xfa, 0x8e, 0xcd, 0x50, + 0x0d, 0x5e, 0x59, 0x96, 0x86, 0x4d, 0xcf, 0x50, 0xcd, 0x66, 0xa5, 0x8e, 0x36, 0x1d, 0x79, 0x37, + 0x3c, 0x69, 0x7e, 0x8a, 0x08, 0x9a, 0xd8, 0xed, 0x97, 0x65, 0x4e, 0x7c, 0x4e, 0xb2, 0x78, 0xf2, + 0xd2, 0x40, 0xb2, 0x3a, 0x0e, 0xfb, 0x9e, 0x6c, 0xc2, 0x19, 0x8d, 0xba, 0xc0, 0x56, 0x6f, 0x27, + 0x0e, 0x12, 0x5a, 0xf3, 0x12, 0x7a, 0x33, 0x6e, 0xf1, 0x2c, 0x7a, 0xd5, 0xbc, 0x2d, 0x70, 0x29, + 0x48, 0x2f, 0x0f, 0xa2, 0xc4, 0x55, 0x7c, 0x00, 0x17, 0xe6, 0x5c, 0xd0, 0xd0, 0xdb, 0x6c, 0xd1, + 0x1b, 0x4b, 0x2b, 0xfc, 0xbe, 0x9c, 0xe5, 0x5c, 0x5c, 0x50, 0x08, 0x34, 0x34, 0xda, 0xb5, 0x9f, + 0x1c, 0xea, 0xda, 0x7f, 0xcb, 0x81, 0x29, 0x3d, 0xd9, 0x1f, 0x43, 0xbc, 0xab, 0x95, 0x8d, 0x77, + 0x5d, 0x3a, 0xaa, 0x57, 0x27, 0x35, 0x1f, 0x72, 0x10, 0xfb, 0x93, 0x2a, 0x00, 0x7f, 0xad, 0x25, + 0xe0, 0x35, 0x9b, 0xe7, 0x60, 0x24, 0xa6, 0x9d, 0x28, 0x6f, 0xf9, 0x18, 0x05, 0x72, 0xcc, 0x0f, + 0xee, 0x72, 0x1e, 0x94, 0xf3, 0x1d, 0xfd, 0xfe, 0xe6, 0x7c, 0xd7, 0xe1, 0x54, 0x10, 0x26, 0xd4, + 0xef, 0xc6, 0x72, 0xa3, 0xbb, 0x1c, 0x25, 0xda, 0x3a, 0x54, 0x6a, 0xaf, 0x97, 0x8c, 0x4e, 0xad, + 0x0c, 0x22, 0xc2, 0xc1, 0xdf, 0xb2, 0x2e, 0x55, 0x08, 0x79, 0x39, 0xc4, 0x84, 0x07, 0x24, 0x1c, + 0x35, 0x85, 0x59, 0x10, 0xab, 0x0d, 0x75, 0xfb, 0x23, 0xb7, 0x20, 0x56, 0x2f, 0xae, 0xa3, 0xa1, + 0x19, 0x6c, 0x15, 0xab, 0x05, 0x59, 0x45, 0x38, 0xb4, 0x55, 0x54, 0xeb, 0x73, 0x62, 0xe8, 0xdd, + 0x7e, 0xb5, 0x59, 0x4f, 0x0e, 0xdd, 0xac, 0xdf, 0x09, 0xd3, 0x41, 0xb8, 0x45, 0xe3, 0x20, 0xa5, + 0x75, 0xbe, 0x16, 0x66, 0xa7, 0x78, 0x47, 0xe8, 0xc8, 0xd5, 0x4a, 0x06, 0x8b, 0x39, 0xea, 0xac, + 0x51, 0x99, 0x3e, 0x80, 0x51, 0x19, 0x62, 0xca, 0x8f, 0x15, 0x63, 0xca, 0x8f, 0x1f, 0xdd, 0x94, + 0xcf, 0x3c, 0x52, 0x53, 0x4e, 0x0a, 0x31, 0xe5, 0x4f, 0xc3, 0x68, 0x27, 0x8e, 0x76, 0x7b, 0xb3, + 0x27, 0xb2, 0xde, 0xf4, 0x1a, 0x03, 0xa2, 0xc0, 0xb9, 0xaf, 0x94, 0xe0, 0x94, 0x31, 0x5f, 0x6c, + 0xd2, 0x04, 0x0d, 0xb6, 0x80, 0xf9, 0xbd, 0x3b, 0x51, 0x43, 0x61, 0x45, 0x42, 0x4d, 0x50, 0x55, + 0x63, 0xd0, 0xa2, 0xe2, 0x01, 0x45, 0x1a, 0xf3, 0xa2, 0xce, 0xbc, 0x6d, 0x5b, 0x92, 0x70, 0xd4, + 0x14, 0xfc, 0xfd, 0x36, 0x1a, 0xa7, 0x32, 0xa1, 0x92, 0x2f, 0x30, 0x5a, 0x32, 0x28, 0xb4, 0xe9, + 0x98, 0x0f, 0xe8, 0xab, 0x75, 0xc5, 0xec, 0xdb, 0xa4, 0xf0, 0x01, 0xf5, 0x52, 0xd2, 0x58, 0xa5, + 0x0e, 0x8f, 0x1c, 0x8f, 0xf6, 0xab, 0xc3, 0x23, 0x01, 0x9a, 0xc2, 0xfd, 0x6f, 0x07, 0x5e, 0x37, + 0xb0, 0x2b, 0x1e, 0xc3, 0x9e, 0xb5, 0x9b, 0xdd, 0xb3, 0xd6, 0x8f, 0xbe, 0x67, 0xf5, 0xb5, 0x62, + 0xc8, 0xfe, 0xf5, 0x37, 0x0e, 0x4c, 0x1b, 0xfa, 0xc7, 0xd0, 0xd4, 0xa0, 0xd0, 0x97, 0xd8, 0x8c, + 0xea, 0xa2, 0xd8, 0x30, 0xd3, 0xb6, 0x6f, 0xf1, 0xb6, 0x89, 0x03, 0xd5, 0xa2, 0xaf, 0x9e, 0x3a, + 0xd9, 0xe7, 0x64, 0xd2, 0x83, 0x31, 0x7e, 0x39, 0x35, 0x29, 0xe6, 0x60, 0x97, 0x95, 0xcf, 0x63, + 0x9b, 0xe6, 0x60, 0xc7, 0x7f, 0x26, 0x28, 0x05, 0xf2, 0x92, 0xe3, 0x20, 0x61, 0x46, 0xb0, 0x2e, + 0x63, 0xb0, 0xa6, 0xe4, 0x58, 0xc2, 0x51, 0x53, 0xb8, 0x6d, 0x98, 0xcd, 0x32, 0x5f, 0xa6, 0x0d, + 0x1e, 0x3f, 0x3b, 0x50, 0x33, 0x17, 0xa0, 0xea, 0xf1, 0xaf, 0x56, 0xbb, 0x5e, 0xfe, 0xbd, 0x93, + 0x45, 0x85, 0x40, 0x43, 0xe3, 0xfe, 0x8e, 0x03, 0x27, 0x06, 0x34, 0xa6, 0xc0, 0xd8, 0x73, 0x6a, + 0xac, 0xc0, 0x90, 0x37, 0x68, 0xea, 0xb4, 0xe1, 0xa9, 0x08, 0x8d, 0x15, 0xd0, 0x59, 0x16, 0x60, + 0x54, 0x78, 0xf7, 0xdf, 0x1c, 0x38, 0x96, 0xd5, 0x35, 0x21, 0x57, 0x80, 0x88, 0xc6, 0x2c, 0x07, + 0x89, 0x1f, 0xed, 0xd0, 0xb8, 0xc7, 0x5a, 0x2e, 0xb4, 0x3e, 0x23, 0x39, 0x91, 0xc5, 0x3e, 0x0a, + 0x1c, 0xf0, 0x15, 0xf9, 0x34, 0xaf, 0xcf, 0x51, 0xbd, 0xad, 0x66, 0xca, 0xad, 0x22, 0x67, 0x8a, + 0x19, 0x4c, 0xfb, 0x58, 0xac, 0x45, 0xa2, 0x2d, 0xdf, 0xfd, 0xf6, 0x08, 0xe8, 0xe4, 0x14, 0x8f, + 0x05, 0x14, 0x14, 0x49, 0xc9, 0x3c, 0x8a, 0x53, 0x3e, 0xc4, 0xa3, 0x38, 0x23, 0x0f, 0x3a, 0xf8, + 0x8b, 0x17, 0x5a, 0x8c, 0x83, 0x69, 0x19, 0xfd, 0x0d, 0x83, 0x42, 0x9b, 0x8e, 0x69, 0xd2, 0x0a, + 0x76, 0xa8, 0xf8, 0x68, 0x2c, 0xab, 0xc9, 0xaa, 0x42, 0xa0, 0xa1, 0x61, 0x9a, 0xd4, 0x83, 0x46, + 0x43, 0x1e, 0xff, 0xb4, 0x26, 0xac, 0x77, 0x90, 0x63, 0x18, 0xc5, 0x56, 0x14, 0x6d, 0x4b, 0xa7, + 0x4e, 0x53, 0x5c, 0x8e, 0xa2, 0x6d, 0xe4, 0x18, 0xe6, 0x86, 0x84, 0x51, 0xdc, 0xf6, 0x5a, 0xc1, + 0x07, 0x68, 0x5d, 0x4b, 0x91, 0xce, 0x9c, 0x76, 0x43, 0xae, 0xf7, 0x93, 0xe0, 0xa0, 0xef, 0xd8, + 0x0c, 0xec, 0xc4, 0xb4, 0x1e, 0xf8, 0xa9, 0xcd, 0x0d, 0xb2, 0x33, 0x70, 0xad, 0x8f, 0x02, 0x07, + 0x7c, 0x45, 0x16, 0xe1, 0x98, 0x4a, 0x2e, 0xaa, 0x02, 0x10, 0xe1, 0xe1, 0x69, 0xe7, 0x1a, 0xb3, + 0x68, 0xcc, 0xd3, 0x33, 0x6b, 0xd3, 0x96, 0x65, 0x38, 0xdc, 0xf7, 0xb3, 0xac, 0x8d, 0x2a, 0xcf, + 0x41, 0x4d, 0xe1, 0xfe, 0x5e, 0x89, 0xed, 0x8e, 0x43, 0xee, 0x5e, 0x3e, 0xb6, 0xc8, 0x5d, 0x76, + 0x46, 0x8e, 0x1c, 0x60, 0x46, 0x3e, 0x07, 0x93, 0x77, 0x92, 0x28, 0xd4, 0x51, 0xb1, 0xd1, 0xa1, + 0x51, 0x31, 0x8b, 0x6a, 0x70, 0x54, 0x6c, 0xec, 0x90, 0x51, 0xb1, 0x3f, 0x1f, 0x85, 0xd3, 0x3a, + 0x1f, 0x4c, 0xd3, 0xbb, 0x51, 0xbc, 0x1d, 0x84, 0x4d, 0x9e, 0x43, 0xfd, 0x92, 0x03, 0x93, 0x62, + 0x7a, 0xcb, 0x5b, 0xea, 0x22, 0x67, 0xd8, 0x28, 0xe8, 0x22, 0x51, 0x46, 0xd8, 0xfc, 0x86, 0x25, + 0x28, 0xf7, 0x64, 0x80, 0x8d, 0xc2, 0x8c, 0x46, 0xe4, 0x43, 0x00, 0xea, 0x29, 0xa5, 0x46, 0x41, + 0x0f, 0x4a, 0x29, 0xfd, 0x90, 0x36, 0x8c, 0x2b, 0xb9, 0xa1, 0x85, 0xa0, 0x25, 0x90, 0xbc, 0xe2, + 0xc0, 0x58, 0x4b, 0xf4, 0x8d, 0x48, 0x00, 0xbd, 0xf4, 0x48, 0xfa, 0xc6, 0xee, 0x15, 0xbd, 0x2d, + 0xcb, 0xfe, 0x90, 0xf2, 0x09, 0xc2, 0x78, 0x10, 0x36, 0xd9, 0xb0, 0xca, 0x40, 0xe2, 0x9b, 0x06, + 0xd5, 0x1f, 0xac, 0x46, 0x5e, 0xbd, 0xe6, 0xb5, 0xbc, 0xd0, 0xa7, 0xf1, 0x8a, 0x20, 0xb7, 0x1f, + 0xb4, 0xe1, 0x00, 0x54, 0x8c, 0xfa, 0x6e, 0xca, 0x8d, 0x1e, 0xe4, 0xa6, 0xdc, 0x99, 0x77, 0xc1, + 0x4c, 0xdf, 0x60, 0x1e, 0xea, 0xfd, 0x80, 0x9f, 0x84, 0x89, 0x87, 0xfc, 0xd4, 0xfd, 0xd3, 0x31, + 0xb3, 0xc7, 0x5c, 0x8f, 0xea, 0xe2, 0xbe, 0x56, 0x6c, 0x46, 0x54, 0xba, 0x8a, 0x05, 0x4e, 0x11, + 0xeb, 0x51, 0x1c, 0x0d, 0x44, 0x5b, 0x24, 0x9b, 0xa3, 0x1d, 0x2f, 0xa6, 0xe1, 0xa3, 0x9e, 0xa3, + 0x6b, 0x5a, 0x08, 0x5a, 0x02, 0xc9, 0x56, 0x26, 0x43, 0x79, 0xf1, 0xe8, 0x19, 0x4a, 0xe6, 0xbd, + 0x0e, 0xbc, 0x57, 0xf3, 0x9a, 0x03, 0xd3, 0x61, 0x66, 0xe6, 0xca, 0x2c, 0xd5, 0xc6, 0xa3, 0x58, + 0x15, 0xe2, 0x9e, 0x6c, 0x16, 0x86, 0x39, 0xf9, 0x83, 0x76, 0xa0, 0xd1, 0x43, 0xee, 0x40, 0xe6, + 0xe2, 0xe7, 0xd8, 0xb0, 0x8b, 0x9f, 0x24, 0xd4, 0x57, 0xbe, 0xc7, 0x0b, 0xbf, 0xf2, 0x0d, 0x03, + 0xae, 0x7b, 0xdf, 0x86, 0xaa, 0x1f, 0x53, 0x2f, 0x7d, 0xc8, 0xdb, 0xbf, 0xfc, 0x19, 0xb2, 0x25, + 0xc5, 0x00, 0x0d, 0x2f, 0xf7, 0xaf, 0xca, 0x70, 0x5c, 0xf5, 0x88, 0xca, 0xde, 0xb0, 0xed, 0x4c, + 0xc8, 0x35, 0xbe, 0xa8, 0xde, 0xce, 0x2e, 0x2b, 0x04, 0x1a, 0x1a, 0xe6, 0x3e, 0x75, 0x13, 0x7a, + 0xa3, 0x43, 0xc3, 0xd5, 0x60, 0x33, 0xe1, 0x3d, 0x6e, 0x95, 0x80, 0xdd, 0x34, 0x28, 0xb4, 0xe9, + 0x98, 0xef, 0x2c, 0xdc, 0xd8, 0x24, 0x9f, 0x0c, 0x95, 0xee, 0x31, 0x2a, 0x3c, 0xf9, 0xe2, 0xc0, + 0xb7, 0x1b, 0x8a, 0x29, 0x03, 0xe8, 0x4b, 0x5a, 0x1d, 0xf2, 0xd1, 0x86, 0x57, 0x1d, 0x38, 0xb6, + 0x9d, 0xa9, 0x3f, 0x51, 0x26, 0xf9, 0x88, 0x55, 0x8d, 0xd9, 0xa2, 0x16, 0x33, 0x85, 0xb3, 0xf0, + 0x04, 0xf3, 0xd2, 0xdd, 0xff, 0x74, 0xc0, 0x36, 0x4f, 0x07, 0x73, 0x84, 0xac, 0xd7, 0x78, 0x4a, + 0xfb, 0xbc, 0xc6, 0xa3, 0x7c, 0xa6, 0xf2, 0xc1, 0x7c, 0xf4, 0x91, 0x43, 0xf8, 0xe8, 0xa3, 0x43, + 0x9d, 0xac, 0xd7, 0x43, 0xb9, 0x1b, 0xd4, 0xa5, 0x9b, 0x6d, 0x12, 0x52, 0x2b, 0xcb, 0xc8, 0xe0, + 0xee, 0x1f, 0x8d, 0x9a, 0x63, 0xb5, 0xcc, 0x5e, 0xff, 0x50, 0x34, 0xbb, 0xa1, 0x8b, 0x54, 0x45, + 0xcb, 0xaf, 0xf7, 0x15, 0xa9, 0xbe, 0xe3, 0xf0, 0xc5, 0x09, 0xa2, 0x83, 0x86, 0xd5, 0xa8, 0x8e, + 0xef, 0x53, 0x99, 0x70, 0x07, 0x2a, 0xec, 0x24, 0xc2, 0xe3, 0x63, 0x95, 0x8c, 0x52, 0x95, 0xcb, + 0x12, 0x7e, 0x7f, 0x6f, 0xee, 0xed, 0x87, 0x57, 0x4b, 0x7d, 0x8d, 0x9a, 0x3f, 0x49, 0xa0, 0xca, + 0xfe, 0xe6, 0x45, 0x14, 0xf2, 0x8c, 0x73, 0x53, 0xdb, 0x22, 0x85, 0x28, 0xa4, 0x42, 0xc3, 0xc8, + 0x21, 0x21, 0x54, 0xf9, 0xbb, 0x31, 0x5c, 0xa8, 0x38, 0x0a, 0xad, 0xe9, 0x52, 0x06, 0x85, 0xb8, + 0xbf, 0x37, 0xf7, 0xc2, 0xe1, 0x85, 0xea, 0xcf, 0xd1, 0x88, 0x70, 0xbf, 0x5b, 0x36, 0x73, 0x57, + 0xd6, 0x26, 0xff, 0x50, 0xcc, 0xdd, 0xe7, 0x73, 0x73, 0xf7, 0x5c, 0xdf, 0xdc, 0x9d, 0x36, 0x6f, + 0xab, 0x64, 0x66, 0xe3, 0xe3, 0xde, 0x60, 0xf7, 0x3f, 0x76, 0x73, 0xcf, 0xe2, 0xe5, 0x6e, 0x10, + 0xd3, 0x64, 0x2d, 0xee, 0x86, 0x41, 0xd8, 0xe4, 0xd3, 0xb1, 0x62, 0x7b, 0x16, 0x19, 0x34, 0xe6, + 0xe9, 0xdd, 0x2f, 0xf3, 0x9c, 0xa3, 0x55, 0x8f, 0xc5, 0x46, 0xb9, 0xc5, 0x9f, 0xde, 0x11, 0x15, + 0xa1, 0x7a, 0x94, 0xc5, 0x7b, 0x3b, 0x02, 0x47, 0xee, 0xc2, 0xf8, 0xa6, 0xb8, 0xfe, 0x5f, 0xcc, + 0x05, 0x21, 0xf9, 0x96, 0x00, 0xbf, 0x8a, 0xa9, 0x1e, 0x16, 0xb8, 0x6f, 0xfe, 0x44, 0x25, 0xcd, + 0xfd, 0xb5, 0x32, 0x1c, 0xcb, 0x3d, 0x0c, 0xc3, 0xce, 0xe7, 0xea, 0x15, 0xa0, 0x7c, 0x30, 0x5d, + 0xbf, 0x76, 0xab, 0x29, 0xc8, 0xfb, 0x01, 0xea, 0xb4, 0xd3, 0x8a, 0x7a, 0xdc, 0x71, 0x19, 0x39, + 0xb4, 0xe3, 0xa2, 0x7d, 0xdd, 0x65, 0xcd, 0x05, 0x2d, 0x8e, 0xb2, 0x0c, 0x76, 0x54, 0x3c, 0x6e, + 0x90, 0x2d, 0x83, 0xb5, 0xee, 0xc9, 0x8d, 0x3d, 0xde, 0x7b, 0x72, 0x01, 0x1c, 0x13, 0x2a, 0xea, + 0xaa, 0xa7, 0x87, 0x28, 0x6e, 0x3a, 0xc1, 0x66, 0xd4, 0x72, 0x96, 0x0d, 0xe6, 0xf9, 0xba, 0x9f, + 0x29, 0x31, 0xf7, 0x4d, 0x74, 0xf6, 0x35, 0x15, 0xcb, 0x7e, 0x23, 0x8c, 0x79, 0xdd, 0x74, 0x2b, + 0xea, 0x7b, 0x8e, 0x61, 0x91, 0x43, 0x51, 0x62, 0xc9, 0x2a, 0x8c, 0xd4, 0xbd, 0x54, 0xbd, 0xd6, + 0x7e, 0x18, 0xe5, 0x4c, 0xe0, 0xca, 0x4b, 0x29, 0x72, 0x2e, 0xe4, 0x29, 0x18, 0x49, 0xbd, 0x66, + 0xe6, 0x9d, 0xc8, 0x0d, 0xaf, 0x99, 0x20, 0x87, 0xda, 0xbb, 0xcb, 0xc8, 0x3e, 0xbb, 0xcb, 0x0b, + 0xd6, 0xff, 0x11, 0xb0, 0x92, 0x24, 0xfd, 0x6f, 0xff, 0x8b, 0xc2, 0xfc, 0x0c, 0xad, 0xfb, 0x63, + 0x30, 0x69, 0xff, 0x6f, 0x80, 0x03, 0xdd, 0xeb, 0x71, 0xff, 0x65, 0x04, 0xa6, 0x32, 0x95, 0x71, + 0x99, 0x59, 0xee, 0xec, 0x3b, 0xcb, 0x79, 0x4e, 0xab, 0x1b, 0x52, 0x59, 0xf7, 0x68, 0xe5, 0xb4, + 0xba, 0x21, 0x45, 0x81, 0x63, 0xa3, 0x52, 0x8f, 0x7b, 0xd8, 0x0d, 0x65, 0x10, 0x5d, 0x8f, 0xca, + 0x32, 0x87, 0xa2, 0xc4, 0xb2, 0x03, 0xec, 0x64, 0xc2, 0x8d, 0xa2, 0xb0, 0x11, 0x72, 0xd5, 0x5c, + 0x29, 0xe2, 0x09, 0x2b, 0x59, 0x05, 0xca, 0x0f, 0xf4, 0x36, 0x04, 0x33, 0x12, 0xc9, 0xc7, 0x1d, + 0xfb, 0xf1, 0xae, 0xb1, 0x22, 0x92, 0x3f, 0xf9, 0xc2, 0x43, 0xb1, 0x82, 0x1e, 0xfc, 0x86, 0x57, + 0xa2, 0x17, 0xf0, 0xf8, 0xa3, 0x59, 0xc0, 0x30, 0x60, 0xf1, 0xbe, 0x19, 0xaa, 0x6d, 0x2f, 0x0c, + 0x1a, 0x34, 0x49, 0xc5, 0xff, 0xf5, 0xa8, 0x8a, 0xd3, 0xd3, 0x35, 0x05, 0x44, 0x83, 0xe7, 0xff, + 0x3d, 0x87, 0x37, 0x4c, 0x1c, 0x62, 0xaa, 0xd6, 0x7f, 0xcf, 0x31, 0x60, 0xb4, 0x69, 0xdc, 0xdf, + 0x77, 0xe0, 0xd4, 0xc0, 0xce, 0xf8, 0xc1, 0x8d, 0x56, 0xba, 0x7f, 0x50, 0x82, 0x13, 0x03, 0x2a, + 0x47, 0x49, 0xef, 0x91, 0xbd, 0xf1, 0x26, 0x4b, 0x53, 0xa7, 0x86, 0xce, 0x8d, 0xc3, 0x6d, 0x43, + 0x66, 0x2b, 0x28, 0x3f, 0xd6, 0xad, 0xc0, 0xfd, 0x72, 0x09, 0xac, 0xd7, 0x08, 0xc9, 0x87, 0xed, + 0x22, 0x69, 0xa7, 0xa8, 0x82, 0x5e, 0xc1, 0x5c, 0x17, 0x59, 0x8b, 0x5e, 0x1b, 0x54, 0x73, 0x9d, + 0x9f, 0xaf, 0xa5, 0xfd, 0xe7, 0x2b, 0x69, 0xa9, 0x6a, 0xf4, 0x72, 0xf1, 0xd5, 0xe8, 0xd5, 0xbe, + 0x4a, 0xf4, 0x5f, 0x71, 0xc4, 0x4c, 0xcb, 0x35, 0xc9, 0x58, 0x58, 0xe7, 0x01, 0x16, 0xf6, 0x2d, + 0x50, 0x49, 0x68, 0xab, 0xc1, 0x3c, 0x3b, 0x69, 0x89, 0xf5, 0x9c, 0x58, 0x97, 0x70, 0xd4, 0x14, + 0xfc, 0x9e, 0x6a, 0xab, 0x15, 0xdd, 0xbd, 0xd0, 0xee, 0xa4, 0x3d, 0x69, 0x93, 0xcd, 0x3d, 0x55, + 0x8d, 0x41, 0x8b, 0xca, 0xfd, 0x2f, 0x47, 0x0c, 0xa7, 0xf4, 0xd1, 0x9f, 0xcf, 0xdd, 0x1f, 0x3c, + 0xb8, 0x7b, 0xfb, 0xf3, 0x00, 0xbe, 0xbe, 0xd1, 0x5f, 0xcc, 0x23, 0x85, 0xe6, 0x85, 0x00, 0xfb, + 0xe5, 0x3c, 0x05, 0x43, 0x4b, 0x5e, 0x66, 0xf1, 0x94, 0xf7, 0x5b, 0x3c, 0xee, 0xbf, 0x3b, 0x90, + 0xd9, 0x2c, 0x48, 0x07, 0x46, 0x99, 0x06, 0xbd, 0x62, 0xde, 0x1f, 0xb0, 0x59, 0xb3, 0x85, 0x25, + 0xa7, 0x05, 0xff, 0x13, 0x85, 0x20, 0xd2, 0x92, 0xde, 0x79, 0xa9, 0x88, 0x37, 0x32, 0x6c, 0x81, + 0xcc, 0xbf, 0x97, 0xff, 0x29, 0x41, 0x7b, 0xfa, 0xee, 0xf3, 0x30, 0xd3, 0xa7, 0x14, 0xbf, 0x51, + 0x14, 0xa9, 0x47, 0x17, 0xac, 0x19, 0xc8, 0xef, 0x37, 0xa2, 0xc0, 0x31, 0x07, 0xff, 0x78, 0x9e, + 0x3d, 0xf9, 0x82, 0x03, 0x33, 0x49, 0x9e, 0xdf, 0xa3, 0xea, 0x3b, 0x1d, 0xb9, 0xea, 0x43, 0x61, + 0xbf, 0x12, 0xee, 0x5f, 0x48, 0xf3, 0x24, 0xfe, 0xb3, 0x94, 0xde, 0x5c, 0x9c, 0xa1, 0x9b, 0x0b, + 0x5b, 0x62, 0xfe, 0x16, 0xad, 0x77, 0x5b, 0x7d, 0xa5, 0x34, 0xeb, 0x12, 0x8e, 0x9a, 0x22, 0xf3, + 0x58, 0x59, 0x79, 0xdf, 0xc7, 0xca, 0x9e, 0x83, 0x49, 0xfb, 0x61, 0x11, 0x1e, 0x42, 0x93, 0xc9, + 0x07, 0xfb, 0x0d, 0x12, 0xcc, 0x50, 0xe5, 0x1e, 0xbb, 0x1a, 0xdd, 0xf7, 0xb1, 0xab, 0x67, 0xa0, + 0x22, 0x1f, 0x6e, 0x52, 0xf1, 0x5d, 0x51, 0xa7, 0x23, 0x61, 0xa8, 0xb1, 0xcc, 0x40, 0xb4, 0xbd, + 0xb0, 0xeb, 0xb5, 0x58, 0x0f, 0xc9, 0x9a, 0x3c, 0xbd, 0xb2, 0xae, 0x69, 0x0c, 0x5a, 0x54, 0xee, + 0x3f, 0x3b, 0x90, 0x7f, 0xf8, 0x27, 0x53, 0xd9, 0xe7, 0xec, 0x5b, 0xd9, 0x97, 0x2d, 0x70, 0x2a, + 0x1d, 0xa8, 0xc0, 0xc9, 0xae, 0x3d, 0x2a, 0x3f, 0xb0, 0xf6, 0xe8, 0x0d, 0xe6, 0x56, 0xb8, 0x28, + 0x52, 0x9a, 0x18, 0x74, 0x23, 0x9c, 0xb8, 0x30, 0xe6, 0x7b, 0xba, 0x70, 0x7a, 0x52, 0x38, 0x4a, + 0x4b, 0x8b, 0x9c, 0x48, 0x62, 0x6a, 0xf3, 0x5f, 0xfd, 0xce, 0xd9, 0x27, 0xbe, 0xf6, 0x9d, 0xb3, + 0x4f, 0x7c, 0xf3, 0x3b, 0x67, 0x9f, 0xf8, 0xe8, 0xbd, 0xb3, 0xce, 0x57, 0xef, 0x9d, 0x75, 0xbe, + 0x76, 0xef, 0xac, 0xf3, 0xcd, 0x7b, 0x67, 0x9d, 0x6f, 0xdf, 0x3b, 0xeb, 0xbc, 0xf6, 0x0f, 0x67, + 0x9f, 0x78, 0x4f, 0x45, 0xcd, 0xd5, 0xff, 0x0d, 0x00, 0x00, 0xff, 0xff, 0x86, 0x48, 0x26, 0x48, + 0xa7, 0x74, 0x00, 0x00, } func (m *AWSAuthConfig) Marshal() (dAtA []byte, err error) { @@ -4551,6 +4549,14 @@ func (m *Cluster) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + i-- + if m.ClusterResources { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x50 if m.Shard != nil { i = encodeVarintGenerated(dAtA, i, uint64(*m.Shard)) i-- @@ -8746,6 +8752,7 @@ func (m *Cluster) Size() (n int) { if m.Shard != nil { n += 1 + sovGenerated(uint64(*m.Shard)) } + n += 2 return n } @@ -10545,6 +10552,7 @@ func (this *Cluster) String() string { `RefreshRequestedAt:` + strings.Replace(fmt.Sprintf("%v", this.RefreshRequestedAt), "Time", "v1.Time", 1) + `,`, `Info:` + strings.Replace(strings.Replace(this.Info.String(), "ClusterInfo", "ClusterInfo", 1), `&`, ``, 1) + `,`, `Shard:` + valueToStringGenerated(this.Shard) + `,`, + `ClusterResources:` + fmt.Sprintf("%v", this.ClusterResources) + `,`, `}`, }, "") return s @@ -16284,6 +16292,26 @@ func (m *Cluster) Unmarshal(dAtA []byte) error { } } m.Shard = &v + case 10: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ClusterResources", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.ClusterResources = bool(v != 0) default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) diff --git a/pkg/apis/application/v1alpha1/generated.proto b/pkg/apis/application/v1alpha1/generated.proto index 41edc72f3fc39..29c8f46aae7f1 100644 --- a/pkg/apis/application/v1alpha1/generated.proto +++ b/pkg/apis/application/v1alpha1/generated.proto @@ -406,6 +406,9 @@ message Cluster { // Shard contains optional shard number. Calculated on the fly by the application controller if not specified. optional int64 shard = 9; + + // Indicates if cluster level resources should be managed. This setting is used only if cluster is connected in a namespaced mode. + optional bool clusterResources = 10; } // ClusterCacheInfo contains information about the cluster cache @@ -780,7 +783,7 @@ message ProjectRole { // Description is a description of the role optional string description = 2; - // Policies Stores a list of casbin formated strings that define access policies for the role in the project + // Policies Stores a list of casbin formatted strings that define access policies for the role in the project repeated string policies = 3; // JWTTokens are a list of generated JWT tokens bound to this role diff --git a/pkg/apis/application/v1alpha1/openapi_generated.go b/pkg/apis/application/v1alpha1/openapi_generated.go index 8b906a2490893..ee82110e9c519 100644 --- a/pkg/apis/application/v1alpha1/openapi_generated.go +++ b/pkg/apis/application/v1alpha1/openapi_generated.go @@ -1448,6 +1448,13 @@ func schema_pkg_apis_application_v1alpha1_Cluster(ref common.ReferenceCallback) Format: "int64", }, }, + "clusterResources": { + SchemaProps: spec.SchemaProps{ + Description: "Indicates if cluster level resources should be managed. This setting is used only if cluster is connected in a namespaced mode.", + Type: []string{"boolean"}, + Format: "", + }, + }, }, Required: []string{"server", "name", "config"}, }, @@ -2721,7 +2728,7 @@ func schema_pkg_apis_application_v1alpha1_ProjectRole(ref common.ReferenceCallba }, "policies": { SchemaProps: spec.SchemaProps{ - Description: "Policies Stores a list of casbin formated strings that define access policies for the role in the project", + Description: "Policies Stores a list of casbin formatted strings that define access policies for the role in the project", Type: []string{"array"}, Items: &spec.SchemaOrArray{ Schema: &spec.Schema{ diff --git a/pkg/apis/application/v1alpha1/types.go b/pkg/apis/application/v1alpha1/types.go index 8a576096f0653..ee5018a574616 100644 --- a/pkg/apis/application/v1alpha1/types.go +++ b/pkg/apis/application/v1alpha1/types.go @@ -1283,6 +1283,8 @@ type Cluster struct { Info ClusterInfo `json:"info,omitempty" protobuf:"bytes,8,opt,name=info"` // Shard contains optional shard number. Calculated on the fly by the application controller if not specified. Shard *int64 `json:"shard,omitempty" protobuf:"bytes,9,opt,name=shard"` + // Indicates if cluster level resources should be managed. This setting is used only if cluster is connected in a namespaced mode. + ClusterResources bool `json:"clusterResources,omitempty" protobuf:"bytes,10,opt,name=clusterResources"` } // Equals returns true if two cluster objects are considered to be equal @@ -1307,6 +1309,10 @@ func (c *Cluster) Equals(other *Cluster) bool { if shard != otherShard { return false } + + if c.ClusterResources != other.ClusterResources { + return false + } return reflect.DeepEqual(c.Config, other.Config) } @@ -1975,7 +1981,7 @@ type ProjectRole struct { Name string `json:"name" protobuf:"bytes,1,opt,name=name"` // Description is a description of the role Description string `json:"description,omitempty" protobuf:"bytes,2,opt,name=description"` - // Policies Stores a list of casbin formated strings that define access policies for the role in the project + // Policies Stores a list of casbin formatted strings that define access policies for the role in the project Policies []string `json:"policies,omitempty" protobuf:"bytes,3,rep,name=policies"` // JWTTokens are a list of generated JWT tokens bound to this role JWTTokens []JWTToken `json:"jwtTokens,omitempty" protobuf:"bytes,4,rep,name=jwtTokens"` @@ -2408,13 +2414,19 @@ func (r ResourceDiff) TargetObject() (*unstructured.Unstructured, error) { return UnmarshalToUnstructured(r.TargetState) } -// TODO: document this method +// SetInferredServer sets the Server field of the destination. See IsServerInferred() for details. func (d *ApplicationDestination) SetInferredServer(server string) { + d.isServerInferred = true d.Server = server } -// TODO: document this method +// An ApplicationDestination has an 'inferred server' if the ApplicationDestination +// contains a Name, but not a Server URL. In this case it is necessary to retrieve +// the Server URL by looking up the cluster name. +// +// As of this writing, looking up the cluster name, and setting the URL, is +// performed by 'utils.ValidateDestination(...)', which then calls SetInferredServer. func (d *ApplicationDestination) IsServerInferred() bool { return d.isServerInferred } diff --git a/reposerver/OWNERS b/reposerver/OWNERS new file mode 100644 index 0000000000000..0c9a4c7a4f476 --- /dev/null +++ b/reposerver/OWNERS @@ -0,0 +1,3 @@ +owners: +- jgwest +- mayzhang2000 diff --git a/reposerver/apiclient/repository.pb.go b/reposerver/apiclient/repository.pb.go index 8ce652815b9e3..9499bca5cafb1 100644 --- a/reposerver/apiclient/repository.pb.go +++ b/reposerver/apiclient/repository.pb.go @@ -1483,7 +1483,7 @@ type RepoServerServiceClient interface { GenerateManifest(ctx context.Context, in *ManifestRequest, opts ...grpc.CallOption) (*ManifestResponse, error) // Returns a bool val if the repository is valid and has proper access TestRepository(ctx context.Context, in *TestRepositoryRequest, opts ...grpc.CallOption) (*TestRepositoryResponse, error) - // Returns a list of refs (eg. branches and tags) in the repo + // Returns a list of refs (e.g. branches and tags) in the repo ListRefs(ctx context.Context, in *ListRefsRequest, opts ...grpc.CallOption) (*Refs, error) // ListApps returns a list of apps in the repo ListApps(ctx context.Context, in *ListAppsRequest, opts ...grpc.CallOption) (*AppList, error) @@ -1572,7 +1572,7 @@ type RepoServerServiceServer interface { GenerateManifest(context.Context, *ManifestRequest) (*ManifestResponse, error) // Returns a bool val if the repository is valid and has proper access TestRepository(context.Context, *TestRepositoryRequest) (*TestRepositoryResponse, error) - // Returns a list of refs (eg. branches and tags) in the repo + // Returns a list of refs (e.g. branches and tags) in the repo ListRefs(context.Context, *ListRefsRequest) (*Refs, error) // ListApps returns a list of apps in the repo ListApps(context.Context, *ListAppsRequest) (*AppList, error) diff --git a/reposerver/cache/cache.go b/reposerver/cache/cache.go index 71192ec05701a..9c9f1c3f37448 100644 --- a/reposerver/cache/cache.go +++ b/reposerver/cache/cache.go @@ -63,8 +63,8 @@ func AddCacheFlagsToCmd(cmd *cobra.Command, opts ...func(client *redis.Client)) func appSourceKey(appSrc *appv1.ApplicationSource) uint32 { appSrc = appSrc.DeepCopy() if !appSrc.IsHelm() { - appSrc.RepoURL = "" // superceded by commitSHA - appSrc.TargetRevision = "" // superceded by commitSHA + appSrc.RepoURL = "" // superseded by commitSHA + appSrc.TargetRevision = "" // superseded by commitSHA } appSrcStr, _ := json.Marshal(appSrc) return hash.FNVa(string(appSrcStr)) diff --git a/reposerver/repository/repository.go b/reposerver/repository/repository.go index 4d23f65f0c317..50ff9523e095f 100644 --- a/reposerver/repository/repository.go +++ b/reposerver/repository/repository.go @@ -175,7 +175,7 @@ type operationContext struct { // application path or helm chart path appPath string - // output of 'git verify-(tag/commit)', if signature verifiction is enabled (otherwise "") + // output of 'git verify-(tag/commit)', if signature verification is enabled (otherwise "") verificationResult string } @@ -430,9 +430,9 @@ func (s *Service) runManifestGen(repoRoot, commitSHA, cacheKey string, ctxSrc op return manifestGenCacheEntry.ManifestResponse, nil } -// getManifestCacheEntry returns false if the 'generate manifests' operation should be run by runRepoOperation, eg: +// getManifestCacheEntry returns false if the 'generate manifests' operation should be run by runRepoOperation, e.g.: // - If the cache result is empty for the requested key -// - If the cache is not empty, but the cached value is a manifest generation error AND we have not yet met the failure threshold (eg res.NumberOfConsecutiveFailures > 0 && res.NumberOfConsecutiveFailures < s.initConstants.PauseGenerationAfterFailedGenerationAttempts) +// - If the cache is not empty, but the cached value is a manifest generation error AND we have not yet met the failure threshold (e.g. res.NumberOfConsecutiveFailures > 0 && res.NumberOfConsecutiveFailures < s.initConstants.PauseGenerationAfterFailedGenerationAttempts) // - If the cache is not empty, but the cache value is an error AND that generation error has expired // and returns true otherwise. // If true is returned, either the second or third parameter (but not both) will contain a value from the cache (a ManifestResponse, or error, respectively) @@ -449,12 +449,12 @@ func (s *Service) getManifestCacheEntry(cacheKey string, q *apiclient.ManifestRe // If we are already in the 'manifest generation caching' state, due to too many consecutive failures... if res.NumberOfConsecutiveFailures >= s.initConstants.PauseGenerationAfterFailedGenerationAttempts { - // Check if enough time has passed to try generation again (eg to exit the 'manifest generation caching' state) + // Check if enough time has passed to try generation again (e.g. to exit the 'manifest generation caching' state) if s.initConstants.PauseGenerationOnFailureForMinutes > 0 { elapsedTimeInMinutes := int((s.now().Unix() - res.FirstFailureTimestamp) / 60) - // After X minutes, reset the cache and retry the operation (eg perhaps the error is ephemeral and has passed) + // After X minutes, reset the cache and retry the operation (e.g. perhaps the error is ephemeral and has passed) if elapsedTimeInMinutes >= s.initConstants.PauseGenerationOnFailureForMinutes { // We can now try again, so reset the cache state and run the operation below err = s.cache.DeleteManifests(cacheKey, q.ApplicationSource, q, q.Namespace, q.AppLabelKey, q.AppName) @@ -466,7 +466,7 @@ func (s *Service) getManifestCacheEntry(cacheKey string, q *apiclient.ManifestRe } } - // Check if enough cached responses have been returned to try generation again (eg to exit the 'manifest generation caching' state) + // Check if enough cached responses have been returned to try generation again (e.g. to exit the 'manifest generation caching' state) if s.initConstants.PauseGenerationOnFailureForRequests > 0 && res.NumberOfCachedResponsesReturned > 0 { if res.NumberOfCachedResponsesReturned >= s.initConstants.PauseGenerationOnFailureForRequests { diff --git a/reposerver/repository/repository.proto b/reposerver/repository/repository.proto index 3e44818f24441..e35b4524f59dc 100644 --- a/reposerver/repository/repository.proto +++ b/reposerver/repository/repository.proto @@ -174,7 +174,7 @@ service RepoServerService { rpc TestRepository(TestRepositoryRequest) returns (TestRepositoryResponse) { } - // Returns a list of refs (eg. branches and tags) in the repo + // Returns a list of refs (e.g. branches and tags) in the repo rpc ListRefs(ListRefsRequest) returns (Refs) { } diff --git a/resource_customizations/argoproj.io/Rollout/health.lua b/resource_customizations/argoproj.io/Rollout/health.lua index 8bef6a800d0b3..a3ffd99813188 100644 --- a/resource_customizations/argoproj.io/Rollout/health.lua +++ b/resource_customizations/argoproj.io/Rollout/health.lua @@ -66,12 +66,31 @@ function isGenerationObserved(obj) return observedGeneration == obj.metadata.generation end +-- isWorkloadGenerationObserved determines if the referenced workload's generation spec has been +-- observed by the controller. This only applies to v1.1 rollout +function isWorkloadGenerationObserved(obj) + if obj.spec.workloadRef == nil or obj.metadata.annotations == nil then + -- rollout is v1.0 or earlier + return true + end + workloadGen = tonumber(obj.metadata.annotations["rollout.argoproj.io/workload-generation"]) + observedWorkloadGen = tonumber(obj.status.workloadObservedGeneration) + return workloadGen == observedWorkloadGen +end + hs = {} -if not isGenerationObserved(obj) then +if not isGenerationObserved(obj) or not isWorkloadGenerationObserved(obj) then hs.status = "Progressing" hs.message = "Waiting for rollout spec update to be observed" return hs -end +end + +-- Argo Rollouts v1.0 has been improved to record a phase/message in status, which Argo CD can blindly surface +if obj.status.phase ~= nil then + hs.status = obj.status.phase + hs.message = obj.status.message + return hs +end for _, condition in ipairs(obj.status.conditions) do if condition.type == "InvalidSpec" then diff --git a/resource_customizations/argoproj.io/Rollout/health_test.yaml b/resource_customizations/argoproj.io/Rollout/health_test.yaml index de5ae9aacf57c..68ad99a2a576c 100644 --- a/resource_customizations/argoproj.io/Rollout/health_test.yaml +++ b/resource_customizations/argoproj.io/Rollout/health_test.yaml @@ -7,6 +7,14 @@ tests: status: Progressing message: "Waiting for rollout spec update to be observed" inputPath: testdata/progressing_newGeneration.yaml +- healthStatus: + status: Progressing + message: "Waiting for rollout spec update to be observed" + inputPath: testdata/progressing_newWorkloadGeneration.yaml +- healthStatus: + status: Degraded + message: "InvalidSpec" + inputPath: testdata/degraded_statusPhaseMessage.yaml - healthStatus: status: Healthy message: "" @@ -15,6 +23,14 @@ tests: status: Healthy message: "" inputPath: testdata/healthy_legacy_v0.9_observedGeneration_numeric.yaml +- healthStatus: + status: Healthy + message: "" + inputPath: testdata/healthy_legacy_v1.0_newWorkloadGeneration.yaml +- healthStatus: + status: Healthy + message: "" + inputPath: testdata/healthy_newWorkloadGeneration.yaml - healthStatus: status: Degraded message: "The Rollout \"basic\" is invalid: spec.strategy.strategy: Required value: Rollout has missing field '.spec.strategy.canary or .spec.strategy.blueGreen'" diff --git a/resource_customizations/argoproj.io/Rollout/testdata/degraded_statusPhaseMessage.yaml b/resource_customizations/argoproj.io/Rollout/testdata/degraded_statusPhaseMessage.yaml new file mode 100644 index 0000000000000..02c161dc1f399 --- /dev/null +++ b/resource_customizations/argoproj.io/Rollout/testdata/degraded_statusPhaseMessage.yaml @@ -0,0 +1,50 @@ +apiVersion: argoproj.io/v1alpha1 +kind: Rollout +metadata: + creationTimestamp: "2020-11-13T00:44:55Z" + generation: 1 + name: basic + namespace: argocd-e2e + resourceVersion: "182108" + selfLink: /apis/argoproj.io/v1alpha1/namespaces/argocd-e2e/rollouts/basic + uid: 34e4bbfc-222c-4968-bd60-2b30ae81110d +spec: + replicas: 1 + selector: + matchLabels: + app: basic + strategy: + canary: + steps: + - setWeight: 50 + - pause: {} + template: + metadata: + creationTimestamp: null + labels: + app: basic + spec: + containers: + - image: nginx:1.19-alpine + name: basic + resources: + requests: + cpu: 1m + memory: 16Mi +status: + HPAReplicas: 1 + availableReplicas: 1 + blueGreen: {} + canary: {} + conditions: {} + phase: "Degraded" + message: "InvalidSpec" + currentPodHash: 754cb84d5 + currentStepHash: 757f5f97b + currentStepIndex: 2 + observedGeneration: "8575574967" ## <---- uses legacy observedGeneration hash which are numbers + readyReplicas: 1 + replicas: 1 + selector: app=basic + stableRS: 754cb84d5 + updatedReplicas: 1 diff --git a/resource_customizations/argoproj.io/Rollout/testdata/healthy_legacy_v1.0_newWorkloadGeneration.yaml b/resource_customizations/argoproj.io/Rollout/testdata/healthy_legacy_v1.0_newWorkloadGeneration.yaml new file mode 100644 index 0000000000000..f231ff5ada328 --- /dev/null +++ b/resource_customizations/argoproj.io/Rollout/testdata/healthy_legacy_v1.0_newWorkloadGeneration.yaml @@ -0,0 +1,58 @@ +apiVersion: argoproj.io/v1alpha1 +kind: Rollout +metadata: + annotations: + rollout.argoproj.io/revision: "1" + creationTimestamp: "2021-07-27T12:14:11Z" + generation: 3 + name: rollout-ref-deployment + namespace: default + resourceVersion: "4220" + uid: a3d1d224-ac4f-4f84-9274-e01e1d43b036 +spec: + replicas: 5 + strategy: + canary: + steps: + - setWeight: 20 + - pause: + duration: 10s + workloadRef: + apiVersion: apps/v1 + kind: Deployment + name: rollout-ref-deployment +status: + HPAReplicas: 5 + availableReplicas: 5 + blueGreen: {} + canary: {} + collisionCount: 1 + conditions: + - lastTransitionTime: "2021-07-27T12:14:21Z" + lastUpdateTime: "2021-07-27T12:14:21Z" + message: RolloutCompleted + reason: RolloutCompleted + status: "True" + type: Completed + - lastTransitionTime: "2021-07-27T12:14:11Z" + lastUpdateTime: "2021-07-27T12:14:21Z" + message: ReplicaSet "rollout-ref-deployment-75bbd56864" has successfully progressed. + reason: NewReplicaSetAvailable + status: "True" + type: Progressing + - lastTransitionTime: "2021-07-27T12:14:21Z" + lastUpdateTime: "2021-07-27T12:14:21Z" + message: Rollout has minimum availability + reason: AvailableReason + status: "True" + type: Available + currentPodHash: 75bbd56864 + currentStepHash: 55f5d87bd9 + currentStepIndex: 2 + observedGeneration: "3" + phase: Healthy + readyReplicas: 5 + replicas: 5 + selector: app=rollout-ref-deployment + stableRS: 75bbd56864 + updatedReplicas: 5 diff --git a/resource_customizations/argoproj.io/Rollout/testdata/healthy_newWorkloadGeneration.yaml b/resource_customizations/argoproj.io/Rollout/testdata/healthy_newWorkloadGeneration.yaml new file mode 100644 index 0000000000000..4418a81896ad8 --- /dev/null +++ b/resource_customizations/argoproj.io/Rollout/testdata/healthy_newWorkloadGeneration.yaml @@ -0,0 +1,60 @@ +apiVersion: argoproj.io/v1alpha1 +kind: Rollout +metadata: + annotations: + rollout.argoproj.io/revision: "1" + rollout.argoproj.io/workload-generation: "1" + creationTimestamp: "2021-07-27T12:14:11Z" + generation: 3 + name: rollout-ref-deployment + namespace: default + resourceVersion: "4220" + uid: a3d1d224-ac4f-4f84-9274-e01e1d43b036 +spec: + replicas: 5 + strategy: + canary: + steps: + - setWeight: 20 + - pause: + duration: 10s + workloadRef: + apiVersion: apps/v1 + kind: Deployment + name: rollout-ref-deployment +status: + HPAReplicas: 5 + availableReplicas: 5 + blueGreen: {} + canary: {} + collisionCount: 1 + conditions: + - lastTransitionTime: "2021-07-27T12:14:21Z" + lastUpdateTime: "2021-07-27T12:14:21Z" + message: RolloutCompleted + reason: RolloutCompleted + status: "True" + type: Completed + - lastTransitionTime: "2021-07-27T12:14:11Z" + lastUpdateTime: "2021-07-27T12:14:21Z" + message: ReplicaSet "rollout-ref-deployment-75bbd56864" has successfully progressed. + reason: NewReplicaSetAvailable + status: "True" + type: Progressing + - lastTransitionTime: "2021-07-27T12:14:21Z" + lastUpdateTime: "2021-07-27T12:14:21Z" + message: Rollout has minimum availability + reason: AvailableReason + status: "True" + type: Available + currentPodHash: 75bbd56864 + currentStepHash: 55f5d87bd9 + currentStepIndex: 2 + observedGeneration: "3" + phase: Healthy + readyReplicas: 5 + replicas: 5 + selector: app=rollout-ref-deployment + stableRS: 75bbd56864 + updatedReplicas: 5 + workloadObservedGeneration: "1" diff --git a/resource_customizations/argoproj.io/Rollout/testdata/progressing_newWorkloadGeneration.yaml b/resource_customizations/argoproj.io/Rollout/testdata/progressing_newWorkloadGeneration.yaml new file mode 100644 index 0000000000000..bc5f0f431083c --- /dev/null +++ b/resource_customizations/argoproj.io/Rollout/testdata/progressing_newWorkloadGeneration.yaml @@ -0,0 +1,60 @@ +apiVersion: argoproj.io/v1alpha1 +kind: Rollout +metadata: + annotations: + rollout.argoproj.io/revision: "1" + rollout.argoproj.io/workload-generation: "2" + creationTimestamp: "2021-07-27T12:14:11Z" + generation: 3 + name: rollout-ref-deployment + namespace: default + resourceVersion: "4220" + uid: a3d1d224-ac4f-4f84-9274-e01e1d43b036 +spec: + replicas: 5 + strategy: + canary: + steps: + - setWeight: 20 + - pause: + duration: 10s + workloadRef: + apiVersion: apps/v1 + kind: Deployment + name: rollout-ref-deployment +status: + HPAReplicas: 5 + availableReplicas: 5 + blueGreen: {} + canary: {} + collisionCount: 1 + conditions: + - lastTransitionTime: "2021-07-27T12:14:21Z" + lastUpdateTime: "2021-07-27T12:14:21Z" + message: RolloutCompleted + reason: RolloutCompleted + status: "True" + type: Completed + - lastTransitionTime: "2021-07-27T12:14:11Z" + lastUpdateTime: "2021-07-27T12:14:21Z" + message: ReplicaSet "rollout-ref-deployment-75bbd56864" has successfully progressed. + reason: NewReplicaSetAvailable + status: "True" + type: Progressing + - lastTransitionTime: "2021-07-27T12:14:21Z" + lastUpdateTime: "2021-07-27T12:14:21Z" + message: Rollout has minimum availability + reason: AvailableReason + status: "True" + type: Available + currentPodHash: 75bbd56864 + currentStepHash: 55f5d87bd9 + currentStepIndex: 2 + observedGeneration: "3" + phase: Healthy + readyReplicas: 5 + replicas: 5 + selector: app=rollout-ref-deployment + stableRS: 75bbd56864 + updatedReplicas: 5 + workloadObservedGeneration: "1" diff --git a/resource_customizations/minio.min.io/Tenant/health.lua b/resource_customizations/minio.min.io/Tenant/health.lua new file mode 100644 index 0000000000000..5e205a555f89b --- /dev/null +++ b/resource_customizations/minio.min.io/Tenant/health.lua @@ -0,0 +1,46 @@ +health_status = {} +if obj.status ~= nil then + if obj.status.currentState ~= nil then + if obj.status.currentState == "Initialized" then + health_status.status = "Healthy" + health_status.message = obj.status.currentState + return health_status + end + if obj.status.currentState:find("^Provisioning") ~= nil then + health_status.status = "Progressing" + health_status.message = obj.status.currentState + return health_status + end + if obj.status.currentState:find("^Waiting") ~= nil then + health_status.status = "Progressing" + health_status.message = obj.status.currentState + return health_status + end + if obj.status.currentState:find("^Updating") ~= nil then + health_status.status = "Progressing" + health_status.message = obj.status.currentState + return health_status + end + if obj.status.currentState == "Statefulset not controlled by operator" then + health_status.status = "Degraded" + health_status.message = obj.status.currentState + return health_status + end + if obj.status.currentState == "Another MinIO Tenant already exists in the namespace" then + health_status.status = "Degraded" + health_status.message = obj.status.currentState + return health_status + end + if obj.status.currentState == "Different versions across MinIO Pools" then + health_status.status = "Degraded" + health_status.message = obj.status.currentState + return health_status + end + health_status.status = "Progressing" + health_status.message = obj.status.currentState + return health_status + end +end +health_status.status = "Progressing" +health_status.message = "No status info available" +return health_status diff --git a/resource_customizations/minio.min.io/Tenant/health_test.yaml b/resource_customizations/minio.min.io/Tenant/health_test.yaml new file mode 100644 index 0000000000000..525d7674b11bd --- /dev/null +++ b/resource_customizations/minio.min.io/Tenant/health_test.yaml @@ -0,0 +1,37 @@ +tests: +- healthStatus: + status: Healthy + message: "Initialized" + inputPath: testdata/initialized.yaml +- healthStatus: + status: Progressing + message: "Provisioning MinIO Cluster IP Service" + inputPath: testdata/provisioning.yaml +- healthStatus: + status: Progressing + message: "Waiting for Pods to be ready" + inputPath: testdata/waiting.yaml +- healthStatus: + status: Progressing + message: "Updating MinIO Version" + inputPath: testdata/updating.yaml +- healthStatus: + status: Degraded + message: "Statefulset not controlled by operator" + inputPath: testdata/out_of_control.yaml +- healthStatus: + status: Degraded + message: "Another MinIO Tenant already exists in the namespace" + inputPath: testdata/another_tenant_exists.yaml +- healthStatus: + status: Degraded + message: "Different versions across MinIO Pools" + inputPath: testdata/versions_mismatch.yaml +- healthStatus: + status: Progressing + message: "" + inputPath: testdata/unknown_status_message.yaml +- healthStatus: + status: Progressing + message: "No status info available" + inputPath: testdata/no_status.yaml diff --git a/resource_customizations/minio.min.io/Tenant/testdata/another_tenant_exists.yaml b/resource_customizations/minio.min.io/Tenant/testdata/another_tenant_exists.yaml new file mode 100644 index 0000000000000..5ca4d78d772bd --- /dev/null +++ b/resource_customizations/minio.min.io/Tenant/testdata/another_tenant_exists.yaml @@ -0,0 +1,13 @@ +apiVersion: minio.min.io/v2 +kind: Tenant +metadata: + name: minio-tenant +spec: + image: minio/minio:latest + pools: + - name: pool-0 + servers: 1 + volumesPerServer: 4 +status: + revision: 0 + currentState: Another MinIO Tenant already exists in the namespace diff --git a/resource_customizations/minio.min.io/Tenant/testdata/initialized.yaml b/resource_customizations/minio.min.io/Tenant/testdata/initialized.yaml new file mode 100644 index 0000000000000..74018d3321aec --- /dev/null +++ b/resource_customizations/minio.min.io/Tenant/testdata/initialized.yaml @@ -0,0 +1,13 @@ +apiVersion: minio.min.io/v2 +kind: Tenant +metadata: + name: minio-tenant +spec: + image: minio/minio:latest + pools: + - name: pool-0 + servers: 1 + volumesPerServer: 4 +status: + revision: 0 + currentState: Initialized diff --git a/resource_customizations/minio.min.io/Tenant/testdata/no_status.yaml b/resource_customizations/minio.min.io/Tenant/testdata/no_status.yaml new file mode 100644 index 0000000000000..3e58e86c20c10 --- /dev/null +++ b/resource_customizations/minio.min.io/Tenant/testdata/no_status.yaml @@ -0,0 +1,12 @@ +apiVersion: minio.min.io/v2 +kind: Tenant +metadata: + name: minio-tenant +spec: + image: minio/minio:latest + pools: + - name: pool-0 + servers: 1 + volumesPerServer: 4 +status: + revision: 0 diff --git a/resource_customizations/minio.min.io/Tenant/testdata/out_of_control.yaml b/resource_customizations/minio.min.io/Tenant/testdata/out_of_control.yaml new file mode 100644 index 0000000000000..ea25763a0c361 --- /dev/null +++ b/resource_customizations/minio.min.io/Tenant/testdata/out_of_control.yaml @@ -0,0 +1,13 @@ +apiVersion: minio.min.io/v2 +kind: Tenant +metadata: + name: minio-tenant +spec: + image: minio/minio:latest + pools: + - name: pool-0 + servers: 1 + volumesPerServer: 4 +status: + revision: 0 + currentState: Statefulset not controlled by operator diff --git a/resource_customizations/minio.min.io/Tenant/testdata/provisioning.yaml b/resource_customizations/minio.min.io/Tenant/testdata/provisioning.yaml new file mode 100644 index 0000000000000..05c9ba39a9ec9 --- /dev/null +++ b/resource_customizations/minio.min.io/Tenant/testdata/provisioning.yaml @@ -0,0 +1,13 @@ +apiVersion: minio.min.io/v2 +kind: Tenant +metadata: + name: minio-tenant +spec: + image: minio/minio:latest + pools: + - name: pool-0 + servers: 1 + volumesPerServer: 4 +status: + revision: 0 + currentState: Provisioning MinIO Cluster IP Service diff --git a/resource_customizations/minio.min.io/Tenant/testdata/unknown_status_message.yaml b/resource_customizations/minio.min.io/Tenant/testdata/unknown_status_message.yaml new file mode 100644 index 0000000000000..862560e2ecd4b --- /dev/null +++ b/resource_customizations/minio.min.io/Tenant/testdata/unknown_status_message.yaml @@ -0,0 +1,13 @@ +apiVersion: minio.min.io/v2 +kind: Tenant +metadata: + name: minio-tenant +spec: + image: minio/minio:latest + pools: + - name: pool-0 + servers: 1 + volumesPerServer: 4 +status: + revision: 0 + currentState: diff --git a/resource_customizations/minio.min.io/Tenant/testdata/updating.yaml b/resource_customizations/minio.min.io/Tenant/testdata/updating.yaml new file mode 100644 index 0000000000000..a32c18d5e7031 --- /dev/null +++ b/resource_customizations/minio.min.io/Tenant/testdata/updating.yaml @@ -0,0 +1,13 @@ +apiVersion: minio.min.io/v2 +kind: Tenant +metadata: + name: minio-tenant +spec: + image: minio/minio:latest + pools: + - name: pool-0 + servers: 1 + volumesPerServer: 4 +status: + revision: 0 + currentState: Updating MinIO Version diff --git a/resource_customizations/minio.min.io/Tenant/testdata/versions_mismatch.yaml b/resource_customizations/minio.min.io/Tenant/testdata/versions_mismatch.yaml new file mode 100644 index 0000000000000..31f79d73ad4d8 --- /dev/null +++ b/resource_customizations/minio.min.io/Tenant/testdata/versions_mismatch.yaml @@ -0,0 +1,13 @@ +apiVersion: minio.min.io/v2 +kind: Tenant +metadata: + name: minio-tenant +spec: + image: minio/minio:latest + pools: + - name: pool-0 + servers: 1 + volumesPerServer: 4 +status: + revision: 0 + currentState: Different versions across MinIO Pools diff --git a/resource_customizations/minio.min.io/Tenant/testdata/waiting.yaml b/resource_customizations/minio.min.io/Tenant/testdata/waiting.yaml new file mode 100644 index 0000000000000..3476622de6580 --- /dev/null +++ b/resource_customizations/minio.min.io/Tenant/testdata/waiting.yaml @@ -0,0 +1,13 @@ +apiVersion: minio.min.io/v2 +kind: Tenant +metadata: + name: minio-tenant +spec: + image: minio/minio:latest + pools: + - name: pool-0 + servers: 1 + volumesPerServer: 4 +status: + revision: 0 + currentState: Waiting for Pods to be ready diff --git a/resource_customizations/trident.netapp.io/TridentBackendConfig/health.lua b/resource_customizations/trident.netapp.io/TridentBackendConfig/health.lua new file mode 100644 index 0000000000000..8f8b0ca9c5d83 --- /dev/null +++ b/resource_customizations/trident.netapp.io/TridentBackendConfig/health.lua @@ -0,0 +1,16 @@ +hs = {} +if obj.status ~= nil then + if obj.status.phase == "Bound" and obj.status.lastOperationStatus == "Success" then + hs.status = "Healthy" + hs.message = obj.status.message + return hs + end + if obj.status.lastOperationStatus == "Failed" then + hs.status = "Degraded" + hs.message = obj.status.message + return hs + end +end +hs.status = "Progressing" +hs.message = "Waiting for backend creation" +return hs diff --git a/resource_customizations/trident.netapp.io/TridentBackendConfig/health_test.yaml b/resource_customizations/trident.netapp.io/TridentBackendConfig/health_test.yaml new file mode 100644 index 0000000000000..d7cbc7f90382f --- /dev/null +++ b/resource_customizations/trident.netapp.io/TridentBackendConfig/health_test.yaml @@ -0,0 +1,13 @@ +tests: +- healthStatus: + status: Degraded + message: "Failed to create backend: backend tbc-ontap-nas already exists" + inputPath: testdata/degraded.yaml +- healthStatus: + status: Progressing + message: "Waiting for backend creation" + inputPath: testdata/progressing.yaml +- healthStatus: + status: Healthy + message: "Backend 'tbc-ontap-nas' created" + inputPath: testdata/healthy.yaml diff --git a/resource_customizations/trident.netapp.io/TridentBackendConfig/testdata/degraded.yaml b/resource_customizations/trident.netapp.io/TridentBackendConfig/testdata/degraded.yaml new file mode 100644 index 0000000000000..cfc367d15508c --- /dev/null +++ b/resource_customizations/trident.netapp.io/TridentBackendConfig/testdata/degraded.yaml @@ -0,0 +1,95 @@ +apiVersion: trident.netapp.io/v1 +kind: TridentBackendConfig +metadata: + annotations: + creationTimestamp: '2021-06-24T11:36:17Z' + finalizers: + - trident.netapp.io + generation: 1 + labels: + app.kubernetes.io/instance: trident-config + managedFields: + - apiVersion: trident.netapp.io/v1 + fieldsType: FieldsV1 + fieldsV1: + 'f:metadata': + 'f:annotations': + .: {} + 'f:kubectl.kubernetes.io/last-applied-configuration': {} + 'f:labels': + .: {} + 'f:app.kubernetes.io/instance': {} + 'f:spec': + .: {} + 'f:backendName': {} + 'f:credentials': + .: {} + 'f:name': {} + 'f:dataLIF': {} + 'f:defaults': + .: {} + 'f:exportPolicy': {} + 'f:snapshotPolicy': {} + 'f:snapshotReserve': {} + 'f:spaceReserve': {} + 'f:deletionPolicy': {} + 'f:limitVolumeSize': {} + 'f:managementLIF': {} + 'f:nfsMountOptions': {} + 'f:storageDriverName': {} + 'f:storagePrefix': {} + 'f:svm': {} + 'f:version': {} + manager: argocd-application-controller + operation: Update + time: '2021-06-24T11:36:17Z' + - apiVersion: trident.netapp.io/v1 + fieldsType: FieldsV1 + fieldsV1: + 'f:metadata': + 'f:finalizers': + .: {} + 'v:"trident.netapp.io"': {} + 'f:status': + .: {} + 'f:backendInfo': + .: {} + 'f:backendName': {} + 'f:backendUUID': {} + 'f:deletionPolicy': {} + 'f:lastOperationStatus': {} + 'f:message': {} + 'f:phase': {} + manager: trident_orchestrator + operation: Update + time: '2021-06-24T11:36:17Z' + name: backend-tbc-ontap-nas + namespace: trident + resourceVersion: '3430134' + uid: a5714401-d4f4-480d-a317-d85c630afe55 +spec: + backendName: tbc-ontap-nas + credentials: + name: backend-ontap-nas-secret-smv10 + dataLIF: 1.1.1.1 + defaults: + exportPolicy: ep_000 + snapshotPolicy: default + snapshotReserve: '10' + spaceReserve: volume + deletionPolicy: retain + limitVolumeSize: 100Gi + managementLIF: 1.1.1.1 + nfsMountOptions: nfsvers=4 + storageDriverName: ontap-nas + storagePrefix: trident-play01 + svm: svm-play01 + version: 1 +status: + backendInfo: + backendName: '' + backendUUID: '' + deletionPolicy: retain + lastOperationStatus: Failed + message: 'Failed to create backend: backend tbc-ontap-nas already exists' + phase: '' diff --git a/resource_customizations/trident.netapp.io/TridentBackendConfig/testdata/healthy.yaml b/resource_customizations/trident.netapp.io/TridentBackendConfig/testdata/healthy.yaml new file mode 100644 index 0000000000000..2f45144911b40 --- /dev/null +++ b/resource_customizations/trident.netapp.io/TridentBackendConfig/testdata/healthy.yaml @@ -0,0 +1,94 @@ +apiVersion: trident.netapp.io/v1 +kind: TridentBackendConfig +metadata: + creationTimestamp: '2021-06-24T11:30:12Z' + finalizers: + - trident.netapp.io + generation: 1 + labels: + app.kubernetes.io/instance: trident-config + managedFields: + - apiVersion: trident.netapp.io/v1 + fieldsType: FieldsV1 + fieldsV1: + 'f:metadata': + 'f:annotations': + .: {} + 'f:kubectl.kubernetes.io/last-applied-configuration': {} + 'f:labels': + .: {} + 'f:app.kubernetes.io/instance': {} + 'f:spec': + .: {} + 'f:backendName': {} + 'f:credentials': + .: {} + 'f:name': {} + 'f:dataLIF': {} + 'f:defaults': + .: {} + 'f:exportPolicy': {} + 'f:snapshotPolicy': {} + 'f:snapshotReserve': {} + 'f:spaceReserve': {} + 'f:deletionPolicy': {} + 'f:limitVolumeSize': {} + 'f:managementLIF': {} + 'f:nfsMountOptions': {} + 'f:storageDriverName': {} + 'f:storagePrefix': {} + 'f:svm': {} + 'f:version': {} + manager: argocd-application-controller + operation: Update + time: '2021-06-24T11:30:12Z' + - apiVersion: trident.netapp.io/v1 + fieldsType: FieldsV1 + fieldsV1: + 'f:metadata': + 'f:finalizers': + .: {} + 'v:"trident.netapp.io"': {} + 'f:status': + .: {} + 'f:backendInfo': + .: {} + 'f:backendName': {} + 'f:backendUUID': {} + 'f:deletionPolicy': {} + 'f:lastOperationStatus': {} + 'f:message': {} + 'f:phase': {} + manager: trident_orchestrator + operation: Update + time: '2021-06-24T11:30:12Z' + name: backend-tbc-ontap-nas + namespace: trident + resourceVersion: '3429076' + uid: 3de31983-aff9-4adb-a31c-1541d2cd86e6 +spec: + backendName: tbc-ontap-nas + credentials: + name: backend-ontap-nas-secret + dataLIF: 1.1.1.1 + defaults: + exportPolicy: ep_000 + snapshotPolicy: default + snapshotReserve: '10' + spaceReserve: volume + deletionPolicy: retain + limitVolumeSize: 100Gi + managementLIF: 1.1.1.1 + nfsMountOptions: nfsvers=4 + storageDriverName: ontap-nas + storagePrefix: trident-play01 + svm: svm-trident-play + version: 1 +status: + backendInfo: + backendName: tbc-ontap-nas + backendUUID: 00000000-0000-0000-0000-000000000000 + deletionPolicy: retain + lastOperationStatus: Success + message: Backend 'tbc-ontap-nas' created + phase: Bound diff --git a/resource_customizations/trident.netapp.io/TridentBackendConfig/testdata/progressing.yaml b/resource_customizations/trident.netapp.io/TridentBackendConfig/testdata/progressing.yaml new file mode 100644 index 0000000000000..bd8c60b46316c --- /dev/null +++ b/resource_customizations/trident.netapp.io/TridentBackendConfig/testdata/progressing.yaml @@ -0,0 +1,91 @@ +apiVersion: trident.netapp.io/v1 +kind: TridentBackendConfig +metadata: + creationTimestamp: '2021-06-24T11:30:12Z' + finalizers: + - trident.netapp.io + generation: 1 + labels: + app.kubernetes.io/instance: trident-config + managedFields: + - apiVersion: trident.netapp.io/v1 + fieldsType: FieldsV1 + fieldsV1: + 'f:metadata': + 'f:annotations': + .: {} + 'f:kubectl.kubernetes.io/last-applied-configuration': {} + 'f:labels': + .: {} + 'f:app.kubernetes.io/instance': {} + 'f:spec': + .: {} + 'f:backendName': {} + 'f:credentials': + .: {} + 'f:name': {} + 'f:dataLIF': {} + 'f:defaults': + .: {} + 'f:exportPolicy': {} + 'f:snapshotPolicy': {} + 'f:snapshotReserve': {} + 'f:spaceReserve': {} + 'f:deletionPolicy': {} + 'f:limitVolumeSize': {} + 'f:managementLIF': {} + 'f:nfsMountOptions': {} + 'f:storageDriverName': {} + 'f:storagePrefix': {} + 'f:svm': {} + 'f:version': {} + manager: argocd-application-controller + operation: Update + time: '2021-06-24T11:30:12Z' + - apiVersion: trident.netapp.io/v1 + fieldsType: FieldsV1 + fieldsV1: + 'f:metadata': + 'f:finalizers': + .: {} + 'v:"trident.netapp.io"': {} + 'f:status': + .: {} + 'f:backendInfo': + .: {} + 'f:backendName': {} + 'f:backendUUID': {} + 'f:deletionPolicy': {} + 'f:lastOperationStatus': {} + 'f:message': {} + 'f:phase': {} + manager: trident_orchestrator + operation: Update + time: '2021-06-24T11:30:12Z' + name: backend-tbc-ontap-nas + namespace: trident + resourceVersion: '3429076' + uid: 3de31983-aff9-4adb-a31c-1541d2cd86e6 +spec: + backendName: tbc-ontap-nas + credentials: + name: backend-ontap-nas-secret + dataLIF: 1.1.1.1 + defaults: + exportPolicy: ep_000 + snapshotPolicy: default + snapshotReserve: '10' + spaceReserve: volume + deletionPolicy: retain + limitVolumeSize: 100Gi + managementLIF: 1.1.1.1 + nfsMountOptions: nfsvers=4 + storageDriverName: ontap-nas + storagePrefix: trident-play01 + svm: svm-trident-play + version: 1 +status: + deletionPolicy: retain + lastOperationStatus: Progressing + message: Creating 'tbc-ontap-nas' backend + phase: Bound diff --git a/resource_customizations/trident.netapp.io/TridentOrchestrator/health.lua b/resource_customizations/trident.netapp.io/TridentOrchestrator/health.lua new file mode 100644 index 0000000000000..4ceecef2f0ec0 --- /dev/null +++ b/resource_customizations/trident.netapp.io/TridentOrchestrator/health.lua @@ -0,0 +1,16 @@ +hs = {} +if obj.status ~= nil then + if obj.status.status == "Installed" then + hs.status = "Healthy" + hs.message = obj.status.message + return hs + end + if obj.status.status == "Failed" or obj.status.status == "Error" then + hs.status = "Degraded" + hs.message = obj.status.message + return hs + end +end +hs.status = "Progressing" +hs.message = "Waiting for trident installation" +return hs diff --git a/resource_customizations/trident.netapp.io/TridentOrchestrator/health_test.yaml b/resource_customizations/trident.netapp.io/TridentOrchestrator/health_test.yaml new file mode 100644 index 0000000000000..86ee88fadda8d --- /dev/null +++ b/resource_customizations/trident.netapp.io/TridentOrchestrator/health_test.yaml @@ -0,0 +1,13 @@ +tests: +- healthStatus: + status: Degraded + message: "Trident is bound to another CR 'trident'" + inputPath: testdata/degraded.yaml +- healthStatus: + status: Progressing + message: "Waiting for trident installation" + inputPath: testdata/progressing.yaml +- healthStatus: + status: Healthy + message: "Trident installed" + inputPath: testdata/healthy.yaml diff --git a/resource_customizations/trident.netapp.io/TridentOrchestrator/testdata/degraded.yaml b/resource_customizations/trident.netapp.io/TridentOrchestrator/testdata/degraded.yaml new file mode 100644 index 0000000000000..deb2058d421de --- /dev/null +++ b/resource_customizations/trident.netapp.io/TridentOrchestrator/testdata/degraded.yaml @@ -0,0 +1,91 @@ +apiVersion: trident.netapp.io/v1 +kind: TridentOrchestrator +metadata: + creationTimestamp: '2021-06-24T11:27:54Z' + generation: 1 + labels: + app.kubernetes.io/instance: trident-operator + managedFields: + - apiVersion: trident.netapp.io/v1 + fieldsType: FieldsV1 + fieldsV1: + 'f:metadata': + 'f:annotations': + .: {} + 'f:kubectl.kubernetes.io/last-applied-configuration': {} + 'f:labels': + .: {} + 'f:app.kubernetes.io/instance': {} + 'f:spec': + .: {} + 'f:autosupportImage': {} + 'f:debug': {} + 'f:logFormat': {} + 'f:namespace': {} + 'f:tridentImage': {} + manager: argocd-application-controller + operation: Update + time: '2021-06-24T11:27:54Z' + - apiVersion: trident.netapp.io/v1 + fieldsType: FieldsV1 + fieldsV1: + 'f:status': + .: {} + 'f:currentInstallationParams': + .: {} + 'f:IPv6': {} + 'f:autosupportHostname': {} + 'f:autosupportImage': {} + 'f:autosupportProxy': {} + 'f:autosupportSerialNumber': {} + 'f:debug': {} + 'f:enableNodePrep': {} + 'f:imagePullSecrets': {} + 'f:imageRegistry': {} + 'f:k8sTimeout': {} + 'f:kubeletDir': {} + 'f:logFormat': {} + 'f:silenceAutosupport': {} + 'f:tridentImage': {} + 'f:message': {} + 'f:namespace': {} + 'f:status': {} + 'f:version': {} + manager: trident-operator + operation: Update + time: '2021-06-24T11:27:55Z' + name: trident + resourceVersion: '3428714' + uid: 4353204f-59f7-41be-a853-dcf114011222 +spec: + IPv6: false + autosupportImage: 'netapp/trident-autosupport:21.01' + autosupportProxy: null + debug: false + enableNodePrep: false + k8sTimeout: 0 + kubeletDir: null + logFormat: text + namespace: trident + silenceAutosupport: false + tridentImage: 'netapp/trident:21.04.0' +status: + currentInstallationParams: + IPv6: '' + autosupportHostname: '' + autosupportImage: '' + autosupportProxy: '' + autosupportSerialNumber: '' + debug: '' + enableNodePrep: '' + imagePullSecrets: null + imageRegistry: '' + k8sTimeout: '' + kubeletDir: '' + logFormat: '' + silenceAutosupport: '' + tridentImage: '' + message: "Trident is bound to another CR 'trident'" + namespace: trident + status: Error + version: '' diff --git a/resource_customizations/trident.netapp.io/TridentOrchestrator/testdata/healthy.yaml b/resource_customizations/trident.netapp.io/TridentOrchestrator/testdata/healthy.yaml new file mode 100644 index 0000000000000..211c7a27d26b6 --- /dev/null +++ b/resource_customizations/trident.netapp.io/TridentOrchestrator/testdata/healthy.yaml @@ -0,0 +1,91 @@ +apiVersion: trident.netapp.io/v1 +kind: TridentOrchestrator +metadata: + creationTimestamp: '2021-06-24T10:51:34Z' + generation: 1 + labels: + app.kubernetes.io/instance: trident-operator + managedFields: + - apiVersion: trident.netapp.io/v1 + fieldsType: FieldsV1 + fieldsV1: + 'f:metadata': + 'f:annotations': + .: {} + 'f:kubectl.kubernetes.io/last-applied-configuration': {} + 'f:labels': + .: {} + 'f:app.kubernetes.io/instance': {} + 'f:spec': + .: {} + 'f:autosupportImage': {} + 'f:debug': {} + 'f:logFormat': {} + 'f:namespace': {} + 'f:tridentImage': {} + manager: argocd-application-controller + operation: Update + time: '2021-06-24T10:51:34Z' + - apiVersion: trident.netapp.io/v1 + fieldsType: FieldsV1 + fieldsV1: + 'f:status': + .: {} + 'f:currentInstallationParams': + .: {} + 'f:IPv6': {} + 'f:autosupportHostname': {} + 'f:autosupportImage': {} + 'f:autosupportProxy': {} + 'f:autosupportSerialNumber': {} + 'f:debug': {} + 'f:enableNodePrep': {} + 'f:imagePullSecrets': {} + 'f:imageRegistry': {} + 'f:k8sTimeout': {} + 'f:kubeletDir': {} + 'f:logFormat': {} + 'f:silenceAutosupport': {} + 'f:tridentImage': {} + 'f:message': {} + 'f:namespace': {} + 'f:status': {} + 'f:version': {} + manager: trident-operator + operation: Update + time: '2021-06-24T10:51:35Z' + name: trident + resourceVersion: '3424514' + uid: eb768637-6b11-4e70-8646-43c2117bc202 +spec: + IPv6: false + autosupportImage: 'netapp/trident-autosupport:21.01' + autosupportProxy: null + debug: false + enableNodePrep: false + k8sTimeout: 0 + kubeletDir: null + logFormat: text + namespace: trident + silenceAutosupport: false + tridentImage: 'netapp/trident:21.04.0' +status: + currentInstallationParams: + IPv6: 'false' + autosupportHostname: '' + autosupportImage: 'netapp/trident-autosupport:21.01' + autosupportProxy: '' + autosupportSerialNumber: '' + debug: 'false' + enableNodePrep: 'false' + imagePullSecrets: [] + imageRegistry: '' + k8sTimeout: '30' + kubeletDir: /var/lib/kubelet + logFormat: text + silenceAutosupport: 'false' + tridentImage: 'netapp/trident:21.04.0' + message: Trident installed + namespace: trident + status: Installed + version: v21.04.0 diff --git a/resource_customizations/trident.netapp.io/TridentOrchestrator/testdata/progressing.yaml b/resource_customizations/trident.netapp.io/TridentOrchestrator/testdata/progressing.yaml new file mode 100644 index 0000000000000..6647b8dca7260 --- /dev/null +++ b/resource_customizations/trident.netapp.io/TridentOrchestrator/testdata/progressing.yaml @@ -0,0 +1,91 @@ +apiVersion: trident.netapp.io/v1 +kind: TridentOrchestrator +metadata: + creationTimestamp: '2021-06-24T11:27:54Z' + generation: 1 + labels: + app.kubernetes.io/instance: trident-operator + managedFields: + - apiVersion: trident.netapp.io/v1 + fieldsType: FieldsV1 + fieldsV1: + 'f:metadata': + 'f:annotations': + .: {} + 'f:kubectl.kubernetes.io/last-applied-configuration': {} + 'f:labels': + .: {} + 'f:app.kubernetes.io/instance': {} + 'f:spec': + .: {} + 'f:autosupportImage': {} + 'f:debug': {} + 'f:logFormat': {} + 'f:namespace': {} + 'f:tridentImage': {} + manager: argocd-application-controller + operation: Update + time: '2021-06-24T11:27:54Z' + - apiVersion: trident.netapp.io/v1 + fieldsType: FieldsV1 + fieldsV1: + 'f:status': + .: {} + 'f:currentInstallationParams': + .: {} + 'f:IPv6': {} + 'f:autosupportHostname': {} + 'f:autosupportImage': {} + 'f:autosupportProxy': {} + 'f:autosupportSerialNumber': {} + 'f:debug': {} + 'f:enableNodePrep': {} + 'f:imagePullSecrets': {} + 'f:imageRegistry': {} + 'f:k8sTimeout': {} + 'f:kubeletDir': {} + 'f:logFormat': {} + 'f:silenceAutosupport': {} + 'f:tridentImage': {} + 'f:message': {} + 'f:namespace': {} + 'f:status': {} + 'f:version': {} + manager: trident-operator + operation: Update + time: '2021-06-24T11:27:55Z' + name: trident + resourceVersion: '3428714' + uid: 4353204f-59f7-41be-a853-dcf114011222 +spec: + IPv6: false + autosupportImage: 'netapp/trident-autosupport:21.01' + autosupportProxy: null + debug: false + enableNodePrep: false + k8sTimeout: 0 + kubeletDir: null + logFormat: text + namespace: trident + silenceAutosupport: false + tridentImage: 'netapp/trident:21.04.0' +status: + currentInstallationParams: + IPv6: '' + autosupportHostname: '' + autosupportImage: '' + autosupportProxy: '' + autosupportSerialNumber: '' + debug: '' + enableNodePrep: '' + imagePullSecrets: null + imageRegistry: '' + k8sTimeout: '' + kubeletDir: '' + logFormat: '' + silenceAutosupport: '' + tridentImage: '' + message: Installing Trident + namespace: trident + status: Installing + version: '' diff --git a/server/application/application.go b/server/application/application.go index 638e2510c1a18..c8a4acb0ea225 100644 --- a/server/application/application.go +++ b/server/application/application.go @@ -561,7 +561,7 @@ func (s *Server) waitSync(app *appv1.Application) { minVersion, err := strconv.Atoi(app.ResourceVersion) if err != nil { logCtx.Warnf("waitSync failed: could not parse resource version %s", app.ResourceVersion) - time.Sleep(50 * time.Millisecond) // sleep anyways + time.Sleep(50 * time.Millisecond) // sleep anyway return } for { @@ -775,7 +775,7 @@ func (s *Server) Watch(q *application.ApplicationQuery, ws application.Applicati if appVersion, err := strconv.Atoi(a.ResourceVersion); err == nil && appVersion < minVersion { return } - matchedEvent := q.GetName() == "" || a.Name == q.GetName() && selector.Matches(labels.Set(a.Labels)) + matchedEvent := (q.GetName() == "" || a.Name == q.GetName()) && selector.Matches(labels.Set(a.Labels)) if !matchedEvent { return } diff --git a/server/application/application_test.go b/server/application/application_test.go index f6e60b9ff3f9a..2308ada40689a 100644 --- a/server/application/application_test.go +++ b/server/application/application_test.go @@ -3,6 +3,7 @@ package application import ( "context" coreerrors "errors" + "fmt" "sync/atomic" "testing" "time" @@ -73,6 +74,14 @@ func fakeAppList() *apiclient.AppList { // return an ApplicationServiceServer which returns fake data func newTestAppServer(objects ...runtime.Object) *Server { + f := func(enf *rbac.Enforcer) { + _ = enf.SetBuiltinPolicy(assets.BuiltinPolicyCSV) + enf.SetDefaultRole("role:admin") + } + return newTestAppServerWithEnforcerConfigure(f, objects...) +} + +func newTestAppServerWithEnforcerConfigure(f func(*rbac.Enforcer), objects ...runtime.Object) *Server { kubeclientset := fake.NewSimpleClientset(&v1.ConfigMap{ ObjectMeta: metav1.ObjectMeta{ Namespace: testNamespace, @@ -139,12 +148,11 @@ func newTestAppServer(objects ...runtime.Object) *Server { objects = append(objects, defaultProj, myProj, projWithSyncWindows) fakeAppsClientset := apps.NewSimpleClientset(objects...) - factory := appinformer.NewFilteredSharedInformerFactory(fakeAppsClientset, 0, "", func(options *metav1.ListOptions) {}) + factory := appinformer.NewSharedInformerFactoryWithOptions(fakeAppsClientset, 0, appinformer.WithNamespace(""), appinformer.WithTweakListOptions(func(options *metav1.ListOptions) {})) fakeProjLister := factory.Argoproj().V1alpha1().AppProjects().Lister().AppProjects(testNamespace) enforcer := rbac.NewEnforcer(kubeclientset, testNamespace, common.ArgoCDRBACConfigMapName, nil) - _ = enforcer.SetBuiltinPolicy(assets.BuiltinPolicyCSV) - enforcer.SetDefaultRole("role:admin") + f(enforcer) enforcer.SetClaimsEnforcerFunc(rbacpolicy.NewRBACPolicyEnforcer(enforcer, fakeProjLister).EnforceClaims) settingsMgr := settings.NewSettingsManager(ctx, kubeclientset, testNamespace) @@ -280,6 +288,49 @@ func TestListApps(t *testing.T) { assert.Equal(t, []string{"abc", "bcd", "def"}, names) } +func TestCoupleAppsListApps(t *testing.T) { + var objects []runtime.Object + ctx := context.Background() + + var groups []string + for i := 0; i < 50; i++ { + groups = append(groups, fmt.Sprintf("group-%d", i)) + } + // nolint:staticcheck + ctx = context.WithValue(ctx, "claims", &jwt.MapClaims{"groups": groups}) + for projectId := 0; projectId < 100; projectId++ { + projectName := fmt.Sprintf("proj-%d", projectId) + for appId := 0; appId < 100; appId++ { + objects = append(objects, newTestApp(func(app *appsv1.Application) { + app.Name = fmt.Sprintf("app-%d-%d", projectId, appId) + app.Spec.Project = projectName + })) + } + } + + f := func(enf *rbac.Enforcer) { + policy := ` +p, role:test, applications, *, proj-10/*, allow +g, group-45, role:test +p, role:test2, applications, *, proj-15/*, allow +g, group-47, role:test2 +p, role:test3, applications, *, proj-20/*, allow +g, group-49, role:test3 +` + _ = enf.SetUserPolicy(policy) + } + appServer := newTestAppServerWithEnforcerConfigure(f, objects...) + + res, err := appServer.List(ctx, &application.ApplicationQuery{}) + + assert.NoError(t, err) + var names []string + for i := range res.Items { + names = append(names, res.Items[i].Name) + } + assert.Equal(t, 300, len(names)) +} + func TestCreateApp(t *testing.T) { testApp := newTestApp() appServer := newTestAppServer() diff --git a/server/cluster/cluster.go b/server/cluster/cluster.go index e304149d0c48b..c5ef8a3bcdaf4 100644 --- a/server/cluster/cluster.go +++ b/server/cluster/cluster.go @@ -155,6 +155,9 @@ var clusterFieldsByPath = map[string]func(updated *appv1.Cluster, existing *appv "shard": func(updated *appv1.Cluster, existing *appv1.Cluster) { updated.Shard = existing.Shard }, + "clusterResources": func(updated *appv1.Cluster, existing *appv1.Cluster) { + updated.ClusterResources = existing.ClusterResources + }, } // Update updates a cluster diff --git a/server/metrics/metrics.go b/server/metrics/metrics.go index e823555674238..0a940a318a78a 100644 --- a/server/metrics/metrics.go +++ b/server/metrics/metrics.go @@ -35,7 +35,7 @@ var ( ) // NewMetricsServer returns a new prometheus server which collects api server metrics -func NewMetricsServer(port int) *MetricsServer { +func NewMetricsServer(host string, port int) *MetricsServer { mux := http.NewServeMux() registry := prometheus.NewRegistry() mux.Handle("/metrics", promhttp.HandlerFor(prometheus.Gatherers{ @@ -48,7 +48,7 @@ func NewMetricsServer(port int) *MetricsServer { return &MetricsServer{ Server: &http.Server{ - Addr: fmt.Sprintf("0.0.0.0:%d", port), + Addr: fmt.Sprintf("%s:%d", host, port), Handler: mux, }, redisRequestCounter: redisRequestCounter, diff --git a/server/rbacpolicy/rbacpolicy.go b/server/rbacpolicy/rbacpolicy.go index e7b2683f4b3db..7fff88962238b 100644 --- a/server/rbacpolicy/rbacpolicy.go +++ b/server/rbacpolicy/rbacpolicy.go @@ -113,10 +113,13 @@ func (p *RBACPolicyEnforcer) EnforceClaims(claims jwt.Claims, rvals ...interface runtimePolicy = proj.ProjectPoliciesString() } + // NOTE: This calls prevent multiple creation of the wrapped enforcer + enforcer := p.enf.CreateEnforcerWithRuntimePolicy(runtimePolicy) + // Check the subject. This is typically the 'admin' case. - // NOTE: the call to EnforceRuntimePolicy will also consider the default role + // NOTE: the call to EnforceWithCustomEnforcer will also consider the default role vals := append([]interface{}{subject}, rvals[1:]...) - if p.enf.EnforceRuntimePolicy(runtimePolicy, vals...) { + if p.enf.EnforceWithCustomEnforcer(enforcer, vals...) { return true } @@ -126,10 +129,19 @@ func (p *RBACPolicyEnforcer) EnforceClaims(claims jwt.Claims, rvals ...interface } // Finally check if any of the user's groups grant them permissions groups := jwtutil.GetScopeValues(mapClaims, scopes) - for _, group := range groups { - vals := append([]interface{}{group}, rvals[1:]...) - if p.enf.EnforceRuntimePolicy(runtimePolicy, vals...) { - return true + + // Get groups to reduce the amount to checking groups + groupingPolicies := enforcer.GetGroupingPolicy() + for gidx := range groups { + for gpidx := range groupingPolicies { + // Prefilter user groups by groups defined in the model + if groupingPolicies[gpidx][0] == groups[gidx] { + vals := append([]interface{}{groups[gidx]}, rvals[1:]...) + if p.enf.EnforceWithCustomEnforcer(enforcer, vals...) { + return true + } + break + } } } logCtx := log.WithField("claims", claims).WithField("rval", rvals) diff --git a/server/repository/repository.proto b/server/repository/repository.proto index c6d86fa341ffc..537030ceecefe 100644 --- a/server/repository/repository.proto +++ b/server/repository/repository.proto @@ -117,7 +117,7 @@ service RepositoryService { option (google.api.http).get = "/api/v1/repositories/{repo}/refs"; } - // ListApps returns list of apps in the repe + // ListApps returns list of apps in the repo rpc ListApps(RepoAppsQuery) returns (RepoAppsResponse) { option (google.api.http).get = "/api/v1/repositories/{repo}/apps"; } diff --git a/server/server.go b/server/server.go index 66ced4419e775..01f5ae4bdb5f7 100644 --- a/server/server.go +++ b/server/server.go @@ -4,17 +4,18 @@ import ( "context" "crypto/tls" "fmt" - "io/ioutil" + goio "io" + "io/fs" "math" "net" "net/http" "net/url" "os" "os/exec" - "path" "path/filepath" "regexp" "strings" + gosync "sync" "time" // nolint:staticcheck @@ -82,6 +83,7 @@ import ( "github.com/argoproj/argo-cd/v2/server/session" "github.com/argoproj/argo-cd/v2/server/settings" "github.com/argoproj/argo-cd/v2/server/version" + "github.com/argoproj/argo-cd/v2/ui" "github.com/argoproj/argo-cd/v2/util/assets" cacheutil "github.com/argoproj/argo-cd/v2/util/cache" "github.com/argoproj/argo-cd/v2/util/db" @@ -132,6 +134,7 @@ var ( maxConcurrentLoginRequestsCount = 50 replicasCount = 1 enableGRPCTimeHistogram = true + staticAssets = http.FS(&subDirFs{dir: "dist/app", fs: ui.Embedded}) ) func init() { @@ -161,6 +164,9 @@ type ArgoCDServer struct { // stopCh is the channel which when closed, will shutdown the Argo CD server stopCh chan struct{} userStateStorage util_session.UserStateStorage + indexDataInit gosync.Once + indexData []byte + indexDataErr error } type ArgoCDServerOpts struct { @@ -171,7 +177,6 @@ type ArgoCDServerOpts struct { MetricsPort int Namespace string DexServerAddr string - StaticAssetsDir string BaseHRef string RootPath string KubeClientset kubernetes.Interface @@ -181,6 +186,7 @@ type ArgoCDServerOpts struct { RedisClient *redis.Client TLSConfigCustomizer tlsutil.ConfigCustomizer XFrameOptions string + ListenHost string } // initializeDefaultProject creates the default project if it does not already exist @@ -290,7 +296,7 @@ func (a *ArgoCDServer) Run(ctx context.Context, port int, metricsPort int) { httpsS.Handler = &bug21955Workaround{handler: httpsS.Handler} } - metricsServ := metrics.NewMetricsServer(metricsPort) + metricsServ := metrics.NewMetricsServer(a.ListenHost, metricsPort) if a.RedisClient != nil { cacheutil.CollectMetrics(a.RedisClient, metricsServ) } @@ -299,7 +305,7 @@ func (a *ArgoCDServer) Run(ctx context.Context, port int, metricsPort int) { var conn net.Listener var realErr error _ = wait.ExponentialBackoff(backoff, func() (bool, error) { - conn, realErr = net.Listen("tcp", fmt.Sprintf(":%d", port)) + conn, realErr = net.Listen("tcp", fmt.Sprintf("%s:%d", a.ListenHost, port)) if realErr != nil { a.log.Warnf("failed listen: %v", realErr) return false, nil @@ -308,7 +314,7 @@ func (a *ArgoCDServer) Run(ctx context.Context, port int, metricsPort int) { }) errors.CheckError(realErr) - // Cmux is used to support servicing gRPC and HTTP1.1+JSON on the same port + // CMux is used to support servicing gRPC and HTTP1.1+JSON on the same port tcpm := cmux.New(conn) var tlsm cmux.CMux var grpcL net.Listener @@ -363,6 +369,10 @@ func (a *ArgoCDServer) Run(ctx context.Context, port int, metricsPort int) { errors.CheckError(conn.Close()) } +func (a *ArgoCDServer) Initialized() bool { + return a.projInformer.HasSynced() && a.appInformer.HasSynced() +} + // checkServeErr checks the error from a .Serve() call to decide if it was a graceful shutdown func (a *ArgoCDServer) checkServeErr(name string, err error) { if err != nil { @@ -417,7 +427,7 @@ func (a *ArgoCDServer) watchSettings() { break } if prevOIDCConfig != a.settings.OIDCConfigRAW { - log.Infof("odic config modified. restarting") + log.Infof("oidc config modified. restarting") break } if prevURL != a.settings.URL { @@ -733,14 +743,19 @@ func (a *ArgoCDServer) newHTTPServer(ctx context.Context, port int, grpcWebHandl // Serve cli binaries directly from API server registerDownloadHandlers(mux, "/download") + // Serve extensions + var extensionsApiPath = "/extensions/" + var extensionsSharedPath = "/tmp/extensions/" + + extHandler := http.StripPrefix(extensionsApiPath, http.FileServer(http.Dir(extensionsSharedPath))) + mux.HandleFunc(extensionsApiPath, extHandler.ServeHTTP) + // Serve UI static assets - if a.StaticAssetsDir != "" { - var assetsHandler http.Handler = http.HandlerFunc(a.newStaticAssetsHandler(a.StaticAssetsDir, a.BaseHRef)) - if a.ArgoCDServerOpts.EnableGZip { - assetsHandler = compressHandler(assetsHandler) - } - mux.Handle("/", assetsHandler) + var assetsHandler http.Handler = http.HandlerFunc(a.newStaticAssetsHandler()) + if a.ArgoCDServerOpts.EnableGZip { + assetsHandler = compressHandler(assetsHandler) } + mux.Handle("/", assetsHandler) return &httpS } @@ -810,55 +825,34 @@ func registerDownloadHandlers(mux *http.ServeMux, base string) { } } -func indexFilePath(srcPath string, baseHRef string) (string, error) { - if baseHRef == "/" { - return srcPath, nil - } - filePath := path.Join(os.TempDir(), fmt.Sprintf("index_%s.html", strings.Replace(strings.Trim(baseHRef, "/"), "/", "_", -1))) - f, err := os.OpenFile(filePath, os.O_RDWR|os.O_CREATE|os.O_EXCL, 0600) - if err != nil { - if os.IsExist(err) { - return filePath, nil +func (s *ArgoCDServer) getIndexData() ([]byte, error) { + s.indexDataInit.Do(func() { + data, err := ui.Embedded.ReadFile("dist/app/index.html") + if err != nil { + s.indexDataErr = err + return } - return "", err - } - defer io.Close(f) - - data, err := ioutil.ReadFile(srcPath) - if err != nil { - return "", err - } - if baseHRef != "/" { - data = []byte(baseHRefRegex.ReplaceAllString(string(data), fmt.Sprintf(``, strings.Trim(baseHRef, "/")))) - } - _, err = f.Write(data) - if err != nil { - return "", err - } + if s.BaseHRef == "/" || s.BaseHRef == "" { + s.indexData = data + } else { + s.indexData = []byte(baseHRefRegex.ReplaceAllString(string(data), fmt.Sprintf(``, strings.Trim(s.BaseHRef, "/")))) + } + }) - return filePath, nil + return s.indexData, s.indexDataErr } -func fileExists(dir, filename string) bool { - // We make sure that the resulting path is within the directory we intend to - // serve content from. path.Join() will normalize the path. - abs, err := filepath.Abs(dir) +func uiAssetExists(filename string) bool { + f, err := staticAssets.Open(strings.Trim(filename, "/")) if err != nil { return false } - fp := path.Join(abs, filename) - if !strings.HasPrefix(fp, abs) { - return false - } - info, err := os.Stat(fp) - if os.IsNotExist(err) { - return false - } - return !info.IsDir() + defer io.Close(f) + return true } // newStaticAssetsHandler returns an HTTP handler to serve UI static assets -func (server *ArgoCDServer) newStaticAssetsHandler(dir string, baseHRef string) func(http.ResponseWriter, *http.Request) { +func (server *ArgoCDServer) newStaticAssetsHandler() func(http.ResponseWriter, *http.Request) { return func(w http.ResponseWriter, r *http.Request) { acceptHTML := false for _, acceptType := range strings.Split(r.Header.Get("Accept"), ",") { @@ -868,7 +862,7 @@ func (server *ArgoCDServer) newStaticAssetsHandler(dir string, baseHRef string) } } - fileRequest := r.URL.Path != "/index.html" && fileExists(dir, r.URL.Path) + fileRequest := r.URL.Path != "/index.html" && uiAssetExists(r.URL.Path) // Set X-Frame-Options according to configuration if server.XFrameOptions != "" { @@ -881,18 +875,60 @@ func (server *ArgoCDServer) newStaticAssetsHandler(dir string, baseHRef string) for k, v := range noCacheHeaders { w.Header().Set(k, v) } - indexHtmlPath, err := indexFilePath(path.Join(dir, "index.html"), baseHRef) + data, err := server.getIndexData() if err != nil { - http.Error(w, fmt.Sprintf("Unable to access index.html: %v", err), http.StatusInternalServerError) + http.Error(w, err.Error(), http.StatusInternalServerError) return } - http.ServeFile(w, r, indexHtmlPath) + + modTime, err := time.Parse(common.GetVersion().BuildDate, time.RFC3339) + if err != nil { + modTime = time.Now() + } + http.ServeContent(w, r, "index.html", modTime, byteReadSeeker{data: data}) } else { - http.ServeFile(w, r, path.Join(dir, r.URL.Path)) + http.FileServer(staticAssets).ServeHTTP(w, r) } } } +type subDirFs struct { + dir string + fs fs.FS +} + +func (s subDirFs) Open(name string) (fs.File, error) { + return s.fs.Open(filepath.Join(s.dir, name)) +} + +type byteReadSeeker struct { + data []byte + offset int64 +} + +func (f byteReadSeeker) Read(b []byte) (int, error) { + if f.offset >= int64(len(f.data)) { + return 0, goio.EOF + } + n := copy(b, f.data[f.offset:]) + f.offset += int64(n) + return n, nil +} + +func (f byteReadSeeker) Seek(offset int64, whence int) (int64, error) { + switch whence { + case 1: + offset += f.offset + case 2: + offset += int64(len(f.data)) + } + if offset < 0 || offset > int64(len(f.data)) { + return 0, &fs.PathError{Op: "seek", Err: fs.ErrInvalid} + } + f.offset = offset + return offset, nil +} + type registerFunc func(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) error // mustRegisterGWHandler is a convenience function to register a gateway handler diff --git a/server/server_test.go b/server/server_test.go index e5253ebf04126..69a465d67c018 100644 --- a/server/server_test.go +++ b/server/server_test.go @@ -37,13 +37,12 @@ func fakeServer() (*ArgoCDServer, func()) { redis, closer := test.NewInMemoryRedis() argoCDOpts := ArgoCDServerOpts{ - Namespace: test.FakeArgoCDNamespace, - KubeClientset: kubeclientset, - AppClientset: appClientSet, - Insecure: true, - DisableAuth: true, - StaticAssetsDir: "../test/testdata/static", - XFrameOptions: "sameorigin", + Namespace: test.FakeArgoCDNamespace, + KubeClientset: kubeclientset, + AppClientset: appClientSet, + Insecure: true, + DisableAuth: true, + XFrameOptions: "sameorigin", Cache: servercache.NewCache( appstatecache.NewCache( cacheutil.NewCache(cacheutil.NewInMemoryCache(1*time.Hour)), @@ -546,24 +545,3 @@ func TestInitializeDefaultProject_ProjectAlreadyInitialized(t *testing.T) { assert.Equal(t, proj.Spec, existingDefaultProject.Spec) } - -func TestFileExists(t *testing.T) { - t.Run("File exists and path is within dir", func(t *testing.T) { - exists := fileExists(".", "server.go") - assert.True(t, exists) - exists = fileExists(".", "account/account.go") - assert.True(t, exists) - }) - t.Run("File does not exist", func(t *testing.T) { - exists := fileExists(".", "notexist.go") - assert.False(t, exists) - }) - t.Run("Dir does not exist", func(t *testing.T) { - exists := fileExists("/notexisting", "server.go") - assert.False(t, exists) - }) - t.Run("File outside of dir", func(t *testing.T) { - exists := fileExists(".", "../reposerver/server.go") - assert.False(t, exists) - }) -} diff --git a/test/container/Dockerfile b/test/container/Dockerfile index 9fa2c64e0b625..b9e5dbed34cdc 100644 --- a/test/container/Dockerfile +++ b/test/container/Dockerfile @@ -2,11 +2,11 @@ FROM redis:6.2.4 as redis FROM node:12.18.4 as node -FROM golang:1.16.4 as golang +FROM golang:1.16.5 as golang FROM registry:2.7.1 as registry -FROM ubuntu:20.10 +FROM ubuntu:21.04 ENV DEBIAN_FRONTEND=noninteractive RUN apt-get update && apt-get install --fix-missing -y \ diff --git a/test/container/Procfile b/test/container/Procfile index 689782d407175..04119ac5bd8dd 100644 --- a/test/container/Procfile +++ b/test/container/Procfile @@ -1,5 +1,5 @@ controller: sh -c "FORCE_LOG_COLORS=1 ARGOCD_FAKE_IN_CLUSTER=true ARGOCD_BINARY_NAME=argocd-application-controller go run ./cmd/main.go --loglevel debug --redis localhost:${ARGOCD_E2E_REDIS_PORT:-6379} --repo-server localhost:${ARGOCD_E2E_REPOSERVER_PORT:-8081}" -api-server: sh -c "FORCE_LOG_COLORS=1 ARGOCD_FAKE_IN_CLUSTER=true ARGOCD_BINARY_NAME=argocd-server go run ./cmd/main.go --loglevel debug --redis localhost:${ARGOCD_E2E_REDIS_PORT:-6379} --disable-auth=${ARGOCD_E2E_DISABLE_AUTH:-'true'} --insecure --dex-server http://localhost:${ARGOCD_E2E_DEX_PORT:-5556} --repo-server localhost:${ARGOCD_E2E_REPOSERVER_PORT:-8081} --port ${ARGOCD_E2E_APISERVER_PORT:-8080} --staticassets ui/dist/app" +api-server: sh -c "FORCE_LOG_COLORS=1 ARGOCD_FAKE_IN_CLUSTER=true ARGOCD_BINARY_NAME=argocd-server go run ./cmd/main.go --loglevel debug --redis localhost:${ARGOCD_E2E_REDIS_PORT:-6379} --disable-auth=${ARGOCD_E2E_DISABLE_AUTH:-'true'} --insecure --dex-server http://localhost:${ARGOCD_E2E_DEX_PORT:-5556} --repo-server localhost:${ARGOCD_E2E_REPOSERVER_PORT:-8081} --port ${ARGOCD_E2E_APISERVER_PORT:-8080}" dex: sh -c "test $ARGOCD_IN_CI = true && exit 0; ARGOCD_BINARY_NAME=argocd-dex go run github.com/argoproj/argo-cd/cmd gendexcfg -o `pwd`/dist/dex.yaml && docker run --rm -p ${ARGOCD_E2E_DEX_PORT:-5556}:${ARGOCD_E2E_DEX_PORT:-5556} -v `pwd`/dist/dex.yaml:/dex.yaml ghcr.io/dexidp/dex:v2.27.0 serve /dex.yaml" redis: sh -c "/usr/local/bin/redis-server --save "" --appendonly no --port ${ARGOCD_E2E_REDIS_PORT:-6379}" repo-server: sh -c "FORCE_LOG_COLORS=1 ARGOCD_FAKE_IN_CLUSTER=true ARGOCD_GNUPGHOME=${ARGOCD_GNUPGHOME:-/tmp/argocd-local/gpg/keys} ARGOCD_GPG_DATA_PATH=${ARGOCD_GPG_DATA_PATH:-/tmp/argocd-local/gpg/source} ARGOCD_BINARY_NAME=argocd-repo-server go run ./cmd/main.go --loglevel debug --port ${ARGOCD_E2E_REPOSERVER_PORT:-8081} --redis localhost:${ARGOCD_E2E_REDIS_PORT:-6379}" diff --git a/test/e2e/app_management_test.go b/test/e2e/app_management_test.go index ad06558c5bec4..10d10014fcd4d 100644 --- a/test/e2e/app_management_test.go +++ b/test/e2e/app_management_test.go @@ -1588,7 +1588,7 @@ func TestSyncOptionReplace(t *testing.T) { Then(). Expect(SyncStatusIs(SyncStatusCodeSynced)). And(func(app *Application) { - assert.Equal(t, app.Status.OperationState.SyncResult.Resources[0].Message, "ConfigMap/my-map created") + assert.Equal(t, app.Status.OperationState.SyncResult.Resources[0].Message, "configmap/my-map created") }). When(). Sync(). diff --git a/test/e2e/cluster_test.go b/test/e2e/cluster_test.go index d67b642827ca5..56c147021c300 100644 --- a/test/e2e/cluster_test.go +++ b/test/e2e/cluster_test.go @@ -11,12 +11,16 @@ import ( ) func TestClusterList(t *testing.T) { + SkipIfAlreadyRun(t) + defer RecordTestRun(t) output := FailOnErr(RunCli("cluster", "list")).(string) assert.Equal(t, fmt.Sprintf(`SERVER NAME VERSION STATUS MESSAGE https://kubernetes.default.svc in-cluster %v Successful `, GetVersions().ServerVersion), output) } func TestClusterGet(t *testing.T) { + SkipIfAlreadyRun(t) + defer RecordTestRun(t) output := FailOnErr(RunCli("cluster", "get", "https://kubernetes.default.svc")).(string) assert.Contains(t, output, fmt.Sprintf(` diff --git a/test/e2e/fixture/fixture.go b/test/e2e/fixture/fixture.go index 69667e6a3d86a..62254b5d6f76a 100644 --- a/test/e2e/fixture/fixture.go +++ b/test/e2e/fixture/fixture.go @@ -272,7 +272,7 @@ func CreateSecret(username, password string) string { return secretName } -// Convinience wrapper for updating argocd-cm +// Convenience wrapper for updating argocd-cm func updateSettingConfigMap(updater func(cm *corev1.ConfigMap) error) { updateGenericConfigMap(common.ArgoCDConfigMapName, updater) } diff --git a/test/e2e/testdata/always-outofsync/always-outofsync.yaml b/test/e2e/testdata/always-outofsync/always-outofsync.yaml index 8f9a9eb9c2e85..cf1bcc3e703f5 100644 --- a/test/e2e/testdata/always-outofsync/always-outofsync.yaml +++ b/test/e2e/testdata/always-outofsync/always-outofsync.yaml @@ -12,4 +12,4 @@ subjects: roleRef: apiGroup: "" kind: Role - name: doesnt-matter + name: does-not-matter diff --git a/test/remote/Dockerfile b/test/remote/Dockerfile index a7b16e2225408..dce7312767dc2 100644 --- a/test/remote/Dockerfile +++ b/test/remote/Dockerfile @@ -1,9 +1,9 @@ -FROM golang:1.16.2 AS go +FROM golang:1.16.5 AS go RUN go get github.com/mattn/goreman && \ go get github.com/kisielk/godepgraph -FROM ubuntu:20.10 +FROM ubuntu:21.04 ENV DEBIAN_FRONTEND=noninteractive RUN apt-get update && apt-get install -y \ diff --git a/tools/cmd-docs/main.go b/tools/cmd-docs/main.go index e6e5b4bdb3322..0183bef47c069 100644 --- a/tools/cmd-docs/main.go +++ b/tools/cmd-docs/main.go @@ -10,7 +10,6 @@ import ( argocddex "github.com/argoproj/argo-cd/v2/cmd/argocd-dex/commands" reposerver "github.com/argoproj/argo-cd/v2/cmd/argocd-repo-server/commands" argocdserver "github.com/argoproj/argo-cd/v2/cmd/argocd-server/commands" - argocdutil "github.com/argoproj/argo-cd/v2/cmd/argocd-util/commands" argocdcli "github.com/argoproj/argo-cd/v2/cmd/argocd/commands" ) @@ -43,8 +42,4 @@ func main() { log.Fatal(err) } - err = doc.GenMarkdownTree(argocdutil.NewCommand(), "./docs/operator-manual/server-commands") - if err != nil { - log.Fatal(err) - } } diff --git a/ui-test/.env b/ui-test/.env new file mode 100644 index 0000000000000..9e4c5b3d72259 --- /dev/null +++ b/ui-test/.env @@ -0,0 +1,40 @@ +# +# Currently defined test environment variables. Uncomment and/or change as desired. +# +############################ +# Test specific variables +############################ +# +# Timeout to wait for an element to appear. The default is 60 sec. +# TEST_TIMEOUT=60000 +# +# Run the tests in headless mode if true, non-headless mode if false +IS_HEADLESS=true +# +# Turn on/off tracing to the console. The default is true. +# ENABLE_CONSOLE_LOG=true +# +############################ +# ArgoCD specific variables +############################ +# +# URL of the ArgoCD UI to test against +ARGOCD_URL=http://localhost:4000 +# +# Git repository where applications reside +GIT_REPO=https://github.com/argoproj/argocd-example-apps +# +# The name to give the app in ArgoCD +APP_NAME=myapp +# +# The project name +APP_PROJECT=default +# +# The source path of the application in the repo +SOURCE_REPO_PATH=helm-guestbook +# +# Destination cluster name +DESTINATION_CLUSTER_NAME=in-cluster +# +# Destination namespace +DESTINATION_NAMESPACE=default diff --git a/ui-test/.gitignore b/ui-test/.gitignore new file mode 100644 index 0000000000000..ca01eb5e477e4 --- /dev/null +++ b/ui-test/.gitignore @@ -0,0 +1,6 @@ +.vscode/ +.idea/ +.DS_Store +out/ +node_modules/ +.env diff --git a/ui-test/.prettierrc b/ui-test/.prettierrc new file mode 100644 index 0000000000000..0abdae70b50de --- /dev/null +++ b/ui-test/.prettierrc @@ -0,0 +1,9 @@ +{ + "bracketSpacing": false, + "jsxSingleQuote": true, + "printWidth": 180, + "singleQuote": true, + "tabWidth": 4, + "jsxBracketSameLine": true, + "quoteProps": "consistent" +} diff --git a/ui-test/package.json b/ui-test/package.json new file mode 100644 index 0000000000000..5b638aab02442 --- /dev/null +++ b/ui-test/package.json @@ -0,0 +1,32 @@ +{ + "name": "ui-test", + "version": "1.0.0", + "description": "UI Testing", + "main": "argocd-ui-test", + "scripts": { + "compile": "npx tsc", + "test": "node out/test001.js", + "pretest": "cp .env out/.env", + "lint": "tslint -p ." + }, + "author": "Keith Chong", + "license": "Apache-2.0", + "dependencies": { + "@types/selenium-webdriver": "^4.0.9", + "assert": "^2.0.0", + "chromedriver": "^86.0.0", + "selenium-webdriver": "^4.0.0-alpha.7" + }, + "devDependencies": { + "@types/mocha": "^8.0.3", + "@types/node": "^14.14.2", + "dotenv": "^8.2.0", + "mocha": "^8.2.0", + "prettier": "^1.18.2", + "tslint": "^6.1.3", + "tslint-config-prettier": "^1.18.0", + "tslint-plugin-prettier": "^2.0.1", + "typescript": "^4.0.3", + "yarn": "^1.22.10" + } +} diff --git a/ui-test/src/Configuration.ts b/ui-test/src/Configuration.ts new file mode 100644 index 0000000000000..33323433f1559 --- /dev/null +++ b/ui-test/src/Configuration.ts @@ -0,0 +1,15 @@ +require('dotenv').config({path: __dirname + '/.env'}); + +export default class Configuration { + // Test specific + public static readonly ENABLE_CONSOLE_LOG: string | undefined = process.env.ENABLE_CONSOLE_LOG; + public static readonly TEST_TIMEOUT: string | undefined = process.env.TEST_TIMEOUT; + // ArgoCD UI specific. These are for single application-based tests, so one can quickly create an app based on the environment variables + public static readonly ARGOCD_URL: string = process.env.ARGOCD_URL ? process.env.ARGOCD_URL : ''; + public static readonly APP_NAME: string = process.env.APP_NAME ? process.env.APP_NAME : ''; + public static readonly APP_PROJECT: string = process.env.APP_PROJECT ? process.env.APP_PROJECT : ''; + public static readonly GIT_REPO: string = process.env.GIT_REPO ? process.env.GIT_REPO : ''; + public static readonly SOURCE_REPO_PATH: string = process.env.SOURCE_REPO_PATH ? process.env.SOURCE_REPO_PATH : ''; + public static readonly DESTINATION_CLUSTER_NAME: string = process.env.DESTINATION_CLUSTER_NAME ? process.env.DESTINATION_CLUSTER_NAME : ''; + public static readonly DESTINATION_NAMESPACE: string = process.env.DESTINATION_NAMESPACE ? process.env.DESTINATION_NAMESPACE : ''; +} diff --git a/ui-test/src/Constants.ts b/ui-test/src/Constants.ts new file mode 100644 index 0000000000000..e868ccb16bbce --- /dev/null +++ b/ui-test/src/Constants.ts @@ -0,0 +1,4 @@ +export const TEST_TIMEOUT: number = 60000; +export const TEST_SLIDING_PANEL_TIMEOUT: number = 5000; +export const TEST_IS_NOT_VISIBLE_TIMEOUT: number = 5000; +export const ENABLE_CONSOLE_LOG: boolean = true; diff --git a/ui-test/src/UiTestUtilities.ts b/ui-test/src/UiTestUtilities.ts new file mode 100644 index 0000000000000..a2f3126ace371 --- /dev/null +++ b/ui-test/src/UiTestUtilities.ts @@ -0,0 +1,134 @@ +import Configuration from './Configuration'; +import {Builder, By, until, WebDriver, WebElement} from 'selenium-webdriver'; +import chrome from 'selenium-webdriver/chrome'; +import * as Const from './Constants'; +import {Navigation} from './navigation'; + +export default class UiTestUtilities { + /** + * Log a message to the console. + * @param message + */ + public static async log(message: string): Promise { + let doLog = Const.ENABLE_CONSOLE_LOG; + // Config override + if (Configuration.ENABLE_CONSOLE_LOG) { + if (Configuration.ENABLE_CONSOLE_LOG === 'false') { + doLog = false; + } else { + doLog = true; + } + } + if (doLog) { + // tslint:disable-next-line:no-console + console.log(message); + } + } + + public static async logError(message: string): Promise { + let doLog = Const.ENABLE_CONSOLE_LOG; + // Config override + if (Configuration.ENABLE_CONSOLE_LOG) { + if (Configuration.ENABLE_CONSOLE_LOG === 'false') { + doLog = false; + } else { + doLog = true; + } + } + if (doLog) { + // tslint:disable-next-line:no-console + console.error(message); + } + } + + /** + * Set up the WebDriver. Initial steps for all tests. Returns the instance of Navigation with the WebDriver. + * From there, navigate the UI. Test cases do no need to reference the instance of WebDriver since Component/Page-specific + * API methods should be called instead. + * + */ + public static async init(): Promise { + const options = new chrome.Options(); + if (process.env.IS_HEADLESS) { + options.addArguments('headless'); + } + options.addArguments('window-size=1400x1200'); + const driver = await new Builder() + .forBrowser('chrome') + .setChromeOptions(options) + .build(); + + UiTestUtilities.log('Environment variables are:'); + UiTestUtilities.log(require('dotenv').config({path: __dirname + '/../.env'})); + + // Navigate to the ArgoCD URL + await driver.get(Configuration.ARGOCD_URL); + + return new Navigation(driver); + } + + /** + * Locate the UI Element for the given locator, and wait until it is visible + * + * @param driver + * @param locator + */ + public static async findUiElement(driver: WebDriver, locator: By): Promise { + try { + let timeout = Const.TEST_TIMEOUT; + if (Configuration.TEST_TIMEOUT) { + timeout = parseInt(Configuration.TEST_TIMEOUT, 10); + } + const element = await driver.wait(until.elementLocated(locator), timeout); + await driver.wait(until.elementIsVisible(element), timeout); + return element; + } catch (err) { + throw err; + } + } + + /** + * Similar to until.methods and used in driver.wait, this will wait until + * the expected attribute is the same as the actual attribute on the element + * + * @param attr + * @param attrValue + */ + public static async untilAttributeIs(element: WebElement, attr: string, attrValue: string): Promise { + const actual = await element.getAttribute(attr); + UiTestUtilities.log('Actual = ' + actual + ', expected = ' + attrValue + ', ' + (actual === attrValue)); + return actual === attrValue; + } + + /** + * Similar to until.methods and used in driver.wait, this function will wait until + * the element (eg. operation state) title attribute no longer is present + * + * @param element + */ + public static async untilOperationStatusDisappears(element: WebElement): Promise { + try { + const opState = await element.getAttribute('title'); + UiTestUtilities.log('Operation State = ' + opState); + return false; + } catch (err) { + UiTestUtilities.log('Status disappeared'); + return true; + } + } + + /** + * For clicking on elements if WebElement.click() doesn't work + * + * @param driver + * @param element + */ + public static async click(driver: WebDriver, element: WebElement): Promise { + try { + // Execute synchronous script + await driver.executeScript('arguments[0].click();', element); + } catch (e) { + throw e; + } + } +} diff --git a/ui-test/src/application-create-panel/application-create-panel.ts b/ui-test/src/application-create-panel/application-create-panel.ts new file mode 100644 index 0000000000000..60f92842a4362 --- /dev/null +++ b/ui-test/src/application-create-panel/application-create-panel.ts @@ -0,0 +1,205 @@ +import {By, until, WebDriver} from 'selenium-webdriver'; +import {Base} from '../base'; +import UiTestUtilities from '../UiTestUtilities'; +import * as Const from '../Constants'; + +const CREATE_APPLICATION_BUTTON_CREATE: By = By.xpath('.//button[@qe-id="applications-list-button-create"]'); +const CREATE_APPLICATION_BUTTON_CANCEL: By = By.xpath('.//button[@qe-id="applications-list-button-cancel"]'); + +const CREATE_APPLICATION_FIELD_APP_NAME: By = By.xpath('.//input[@qeid="application-create-field-app-name"]'); +const CREATE_APPLICATION_FIELD_PROJECT: By = By.xpath('.//input[@qe-id="application-create-field-project"]'); +const CREATE_APPLICATION_FIELD_REPOSITORY_URL: By = By.xpath('.//input[@qe-id="application-create-field-repository-url"]'); +const CREATE_APPLICATION_FIELD_REPOSITORY_PATH: By = By.xpath('.//input[@qe-id="application-create-field-path"]'); + +const CREATE_APPLICATION_DROPDOWN_DESTINATION: By = By.xpath('.//div[@qe-id="application-create-dropdown-destination"]'); +const CREATE_APPLICATION_DROPDOWN_MENU_URL: By = By.xpath('.//li[@qe-id="application-create-dropdown-destination-URL"]'); +const CREATE_APPLICATION_DROPDOWN_MENU_NAME: By = By.xpath('.//li[@qe-id="application-create-dropdown-destination-NAME"]'); + +export const DESTINATION_MENU_NAME: string = 'NAME'; +export const DESTINATION_MENU_URL: string = 'URL'; + +const CREATE_APPLICATION_FIELD_CLUSTER_NAME: By = By.xpath('.//input[@qe-id="application-create-field-cluster-name"]'); +const CREATE_APPLICATION_FIELD_CLUSTER_NAMESPACE: By = By.xpath('.//input[@qeid="application-create-field-namespace"]'); +const CREATE_APPLICATION_FIELD_CLUSTER_URL: By = By.xpath('.//input[@qe-id="application-create-field-cluster-url"]'); + +export class ApplicationCreatePanel extends Base { + public constructor(driver: WebDriver) { + super(driver); + } + + public async setAppName(appName: string): Promise { + try { + const appNameField = await UiTestUtilities.findUiElement(this.driver, CREATE_APPLICATION_FIELD_APP_NAME); + await appNameField.sendKeys(appName); + } catch (err) { + throw new Error(err); + } + } + + public async setProjectName(projectName: string): Promise { + try { + const project = await UiTestUtilities.findUiElement(this.driver, CREATE_APPLICATION_FIELD_PROJECT); + await project.sendKeys(projectName); + } catch (err) { + throw new Error(err); + } + } + + public async setSourceRepoUrl(sourceRepoUrl: string): Promise { + try { + const reposUrl = await UiTestUtilities.findUiElement(this.driver, CREATE_APPLICATION_FIELD_REPOSITORY_URL); + await reposUrl.sendKeys(sourceRepoUrl); + } catch (err) { + throw new Error(err); + } + } + + public async setSourceRepoPath(sourceRepoPath: string): Promise { + try { + const path = await UiTestUtilities.findUiElement(this.driver, CREATE_APPLICATION_FIELD_REPOSITORY_PATH); + await path.sendKeys(sourceRepoPath); + } catch (err) { + throw new Error(err); + } + } + + /** + * Convenience method to select the Destination Cluster URL menu and set the url field with destinationClusterFieldValue + * + * @param destinationClusterFieldValue + */ + public async selectDestinationClusterURLMenu(destinationClusterFieldValue: string): Promise { + try { + const clusterCombo = await UiTestUtilities.findUiElement(this.driver, CREATE_APPLICATION_DROPDOWN_DESTINATION); + // click() doesn't work. Use script + await UiTestUtilities.click(this.driver, clusterCombo); + const urlMenu = await UiTestUtilities.findUiElement(this.driver, CREATE_APPLICATION_DROPDOWN_MENU_URL); + await urlMenu.click(); + if (destinationClusterFieldValue) { + await this.setDestinationClusterUrl(destinationClusterFieldValue); + } + } catch (err) { + throw new Error(err); + } + } + + /** + * Convenience method to select the Destination Cluster Name menu and set the namefield with destinationClusterFieldValue + * + * @param destinationClusterFieldValue + */ + public async selectDestinationClusterNameMenu(destinationClusterFieldValue: string): Promise { + try { + const clusterCombo = await UiTestUtilities.findUiElement(this.driver, CREATE_APPLICATION_DROPDOWN_DESTINATION); + // click() doesn't work. Use script + await UiTestUtilities.click(this.driver, clusterCombo); + const nameMenu = await UiTestUtilities.findUiElement(this.driver, CREATE_APPLICATION_DROPDOWN_MENU_NAME); + await nameMenu.click(); + if (destinationClusterFieldValue) { + await this.setDestinationClusterName(destinationClusterFieldValue); + } + } catch (err) { + throw new Error(err); + } + } + + public async setDestinationClusterName(destinationClusterName: string): Promise { + try { + const clusterName = await UiTestUtilities.findUiElement(this.driver, CREATE_APPLICATION_FIELD_CLUSTER_NAME); + await clusterName.sendKeys(destinationClusterName); + // await clusterName.sendKeys('\r'); + } catch (err) { + throw new Error(err); + } + } + + public async setDestinationClusterUrl(destinationClusterUrl: string): Promise { + try { + const clusterUrl = await UiTestUtilities.findUiElement(this.driver, CREATE_APPLICATION_FIELD_CLUSTER_URL); + await clusterUrl.sendKeys(destinationClusterUrl); + } catch (err) { + throw new Error(err); + } + } + + public async setDestinationNamespace(destinationNamespace: string): Promise { + try { + const namespace = await UiTestUtilities.findUiElement(this.driver, CREATE_APPLICATION_FIELD_CLUSTER_NAMESPACE); + await namespace.sendKeys(destinationNamespace); + } catch (err) { + throw new Error(err); + } + } + + /** + * Click the Create button to create the app + */ + public async clickCreateButton(): Promise { + try { + const createButton = await UiTestUtilities.findUiElement(this.driver, CREATE_APPLICATION_BUTTON_CREATE); + await createButton.click(); + + // Wait until the Create Application Sliding Panel disappears + await this.driver.wait(until.elementIsNotVisible(createButton), Const.TEST_SLIDING_PANEL_TIMEOUT).catch(e => { + UiTestUtilities.logError('The Create Application Sliding Panel did not disappear'); + throw e; + }); + await this.driver.sleep(1000); + } catch (err) { + throw new Error(err); + } + } + + /** + * Click the Cancel Button. Do not create the app. + */ + public async clickCancelButton(): Promise { + try { + const cancelButton = await UiTestUtilities.findUiElement(this.driver, CREATE_APPLICATION_BUTTON_CANCEL); + await cancelButton.click(); + + // Wait until the Create Application Sliding Panel disappears + await this.driver.wait(until.elementIsNotVisible(cancelButton), Const.TEST_SLIDING_PANEL_TIMEOUT).catch(e => { + UiTestUtilities.logError('The Create Application Sliding Panel did not disappear'); + throw e; + }); + } catch (err) { + throw new Error(err); + } + } + + /** + * Convenience method to create an application given the following inputs to the dialog + * + * TODO add Sync Policy and Sync Options and setter methods above + * + * @param appName + * @param projectName + * @param sourceRepoUrl + * @param sourceRepoPath + * @param destinationMenu + * @param destinationClusterName + * @param destinationNamespace + */ + public async createApplication( + appName: string, + projectName: string, + sourceRepoUrl: string, + sourceRepoPath: string, + destinationClusterName: string, + destinationNamespace: string + ): Promise { + UiTestUtilities.log('About to create application'); + try { + await this.setAppName(appName); + await this.setProjectName(projectName); + await this.setSourceRepoUrl(sourceRepoUrl); + await this.setSourceRepoPath(sourceRepoPath); + await this.selectDestinationClusterNameMenu(destinationClusterName); + await this.setDestinationNamespace(destinationNamespace); + await this.clickCreateButton(); + } catch (err) { + throw new Error(err); + } + } +} diff --git a/ui-test/src/applications-list/applications-list.ts b/ui-test/src/applications-list/applications-list.ts new file mode 100644 index 0000000000000..3aa5e42ab2c8d --- /dev/null +++ b/ui-test/src/applications-list/applications-list.ts @@ -0,0 +1,199 @@ +import {By, until, WebDriver} from 'selenium-webdriver'; +import UiTestUtilities from '../UiTestUtilities'; +import * as Const from '../Constants'; +import {Base} from '../base'; +import {ApplicationCreatePanel} from '../application-create-panel/application-create-panel'; +import {ApplicationsSyncPanel, SYNC_PANEL_SYNCHRONIZE_BUTTON} from '../applications-sync-panel/applications-sync-panel'; +import {PopupManager} from '../popup/popup-manager'; + +const NEW_APP_BUTTON: By = By.xpath('.//button[@qe-id="applications-list-button-new-app"]'); +// Uncomment to use: +// const CREATE_APPLICATION_BUTTON: By = By.xpath('.//button[@qe-id="applications-list-button-create-application"]'); + +export class ApplicationsList extends Base { + private applicationCreatePanel: ApplicationCreatePanel; + private applicationsSyncPanel: ApplicationsSyncPanel; + private popupManager: PopupManager; + + public constructor(driver: WebDriver) { + super(driver); + this.applicationCreatePanel = new ApplicationCreatePanel(driver); + this.applicationsSyncPanel = new ApplicationsSyncPanel(driver); + this.popupManager = new PopupManager(driver); + } + + public async clickTile(appName: string): Promise { + try { + const tile = await UiTestUtilities.findUiElement(this.driver, this.getApplicationTileLocator(appName)); + await tile.click(); + } catch (err) { + throw new Error(err); + } + } + + /** + * Click the Add New Button + */ + public async clickNewAppButton(): Promise { + try { + const newAppButton = await UiTestUtilities.findUiElement(this.driver, NEW_APP_BUTTON); + await newAppButton.click(); + } catch (err) { + throw new Error(err); + } + return this.applicationCreatePanel; + } + + /** + * Click the Sync button on the App tile + * + * @param appName + */ + public async clickSyncButtonOnApp(appName: string): Promise { + try { + const syncButton = await UiTestUtilities.findUiElement(this.driver, this.getSyncButtonLocatorForApp(appName)); + await syncButton.click(); + // Wait until the Synchronize sliding panel appears + const synchronizeButton = await this.driver.wait(until.elementLocated(SYNC_PANEL_SYNCHRONIZE_BUTTON), Const.TEST_TIMEOUT); + await this.driver.wait(until.elementIsVisible(synchronizeButton), Const.TEST_TIMEOUT); + } catch (err) { + throw new Error(err); + } + return this.applicationsSyncPanel; + } + + /** + * Delete an application via the Delete button on the App tile + * + * @param appName + */ + public async clickDeleteButtonOnApp(appName: string): Promise { + try { + const deleteButton = await UiTestUtilities.findUiElement(this.driver, this.getDeleteButtonLocatorForApp(appName)); + await deleteButton.click(); + } catch (err) { + throw new Error(err); + } + return this.popupManager; + } + + public async waitUntilOperationStatusDisappearsOnApp(appName: string) { + const opStateElem = await UiTestUtilities.findUiElement(this.driver, this.getApplicationOperationsTitle(appName)); + await this.driver.wait(async () => { + return UiTestUtilities.untilOperationStatusDisappears(opStateElem); + }, Const.TEST_TIMEOUT); + } + + /** + * Click on the Refresh button on the App tile + * + * @param appName + */ + public async clickRefreshButtonOnApp(appName: string): Promise { + try { + const refreshButton = await UiTestUtilities.findUiElement(this.driver, this.getRefreshButtonLocatorForApp(appName)); + await this.driver.wait(until.elementIsVisible(refreshButton), Const.TEST_TIMEOUT); + await refreshButton.click(); + } catch (err) { + throw new Error(err); + } + } + + /** + * Use with wait. Wait for the health status of the app to change to Healthy + * + * @param appName + */ + public async waitForHealthStatusOnApp(appName: string): Promise { + try { + const healthStatusElement = await UiTestUtilities.findUiElement(this.driver, this.getApplicationHealthTitle(appName)); + await this.driver.wait(async () => { + return UiTestUtilities.untilAttributeIs(healthStatusElement, 'title', 'Healthy'); + }, Const.TEST_TIMEOUT); + } catch (err) { + throw new Error(err); + } + } + + /** + * Use with wait. Wait for the sync status of the app to change to Synced + * + * @param appName + */ + public async waitForSyncStatusOnApp(appName: string): Promise { + try { + const statusElement = await UiTestUtilities.findUiElement(this.driver, this.getApplicationSyncTitle(appName)); + await this.driver.wait(async () => { + return UiTestUtilities.untilAttributeIs(statusElement, 'title', 'Synced'); + }, Const.TEST_TIMEOUT); + } catch (err) { + throw new Error(err); + } + } + + /** + * Check that there are no operations associated with the app + * + * @param appName + */ + public async checkNoAdditionalOperations(appName: string): Promise { + // Check if there are no operations still running + UiTestUtilities.log('Checking if there are any additional operations'); + let opStateElem; + let opState; + try { + opStateElem = await this.driver.wait(until.elementLocated(this.getApplicationOperationsTitle(appName)), Const.TEST_IS_NOT_VISIBLE_TIMEOUT); + UiTestUtilities.logError('Unexpected to locate Operation element.'); + opState = await opStateElem.getAttribute('title'); + } catch (e) { + // ignore since we expect to not have any existing operations + } + if (opStateElem) { + throw new Error('Expecting no other operations. Actual: ' + opState); + } + } + + // Locators + + // By.css('#app .applications-tiles .applications-list-" + appName + "''); + + private getApplicationTileLocator(appName: string): By { + return By.xpath('.//div[contains(@class,"qe-applications-list-"' + appName + ')'); + } + + private getSyncButtonLocatorForApp(appName: string): By { + return By.xpath('.//div[contains(@class, "qe-applications-list-' + appName + '")]//div[@class="row"]//ancestor::a[@qe-id="applications-tiles-button-sync"]'); + } + + private getDeleteButtonLocatorForApp(appName: string): By { + return By.xpath('.//div[contains(@class, "qe-applications-list-' + appName + '")]//div[@class="row"]//ancestor::a[@qe-id="applications-tiles-button-delete"]'); + } + + private getRefreshButtonLocatorForApp(appName: string): By { + return By.xpath('.//div[contains(@class, "qe-applications-list-' + appName + '")]//div[@class="row"]//ancestor::a[@qe-id="applications-tiles-button-refresh"]'); + } + + private getApplicationHealthTitle(appName: string): By { + return By.xpath( + './/div[contains(@class, "qe-applications-list-' + + appName + + '")]//div[@class="row"]//div[@qe-id="applications-tiles-health-status"]//i[@qe-id="utils-health-status-title"]' + ); + } + + private getApplicationSyncTitle(appName: string): By { + return By.xpath( + './/div[contains(@class, "qe-applications-list-' + + appName + + '")]//div[@class="row"]//div[@qe-id="applications-tiles-health-status"]//i[@qe-id="utils-sync-status-title"]' + ); + } + + private getApplicationOperationsTitle(appName: string): By { + return By.xpath( + './/div[contains(@class, "qe-applications-list-' + + appName + + '")]//div[@class="row"]//div[@qe-id="applications-tiles-health-status"]//i[@qe-id="utils-operations-status-title"]' + ); + } +} diff --git a/ui-test/src/applications-sync-panel/applications-sync-panel.ts b/ui-test/src/applications-sync-panel/applications-sync-panel.ts new file mode 100644 index 0000000000000..9a5f266de58f3 --- /dev/null +++ b/ui-test/src/applications-sync-panel/applications-sync-panel.ts @@ -0,0 +1,35 @@ +import {By, until, WebDriver} from 'selenium-webdriver'; +import {Base} from '../base'; +import * as Const from '../Constants'; +import UiTestUtilities from '../UiTestUtilities'; + +export const SYNC_PANEL_SYNCHRONIZE_BUTTON: By = By.xpath('.//button[@qe-id="application-sync-panel-button-synchronize"]'); + +export class ApplicationsSyncPanel extends Base { + public constructor(driver: WebDriver) { + super(driver); + } + + /** + * Click the Sync button + */ + public async clickSyncButton() { + try { + // Wait until the Synchronize button appears + const synchronizeButton = await this.driver.wait(until.elementLocated(SYNC_PANEL_SYNCHRONIZE_BUTTON), Const.TEST_TIMEOUT); + await this.driver.wait(until.elementIsVisible(synchronizeButton), Const.TEST_TIMEOUT); + + // Check if the sync button is enabled + await this.driver.wait(until.elementIsEnabled(synchronizeButton), Const.TEST_TIMEOUT); + await synchronizeButton.click(); + + await this.driver.wait(until.elementIsNotVisible(synchronizeButton), Const.TEST_SLIDING_PANEL_TIMEOUT).catch(e => { + UiTestUtilities.logError('The Synchronization Sliding Panel did not disappear'); + throw e; + }); + UiTestUtilities.log('Synchronize sliding panel disappeared'); + } catch (err) { + throw new Error(err); + } + } +} diff --git a/ui-test/src/base.ts b/ui-test/src/base.ts new file mode 100644 index 0000000000000..0982ea8a72cec --- /dev/null +++ b/ui-test/src/base.ts @@ -0,0 +1,9 @@ +import {WebDriver} from 'selenium-webdriver'; + +export abstract class Base { + protected driver: WebDriver; + + public constructor(driver: WebDriver) { + this.driver = driver; + } +} diff --git a/ui-test/src/navigation.ts b/ui-test/src/navigation.ts new file mode 100644 index 0000000000000..57588b86d464d --- /dev/null +++ b/ui-test/src/navigation.ts @@ -0,0 +1,93 @@ +import {By, WebDriver} from 'selenium-webdriver'; +import {ApplicationsList} from './applications-list/applications-list'; +import UiTestUtilities from './UiTestUtilities'; +import {Base} from './base'; + +const NAVBAR_APPLICATIONS_BUTTON: By = By.css('#app .nav-bar .argo-icon-application'); +const NAVBAR_SETTINGS_BUTTON: By = By.css('#app .nav-bar .argo-icon-settings'); +const NAVBAR_USER_INFO_BUTTON: By = By.css('#app .nav-bar .fa-user-circle'); +const NAVBAR_DOCS_BUTTON: By = By.css('#app .nav-bar .argo-icon-docs'); + +export class Navigation extends Base { + private applicationsList: ApplicationsList; + + public constructor(driver: WebDriver) { + super(driver); + this.applicationsList = new ApplicationsList(this.driver); + } + + /** + * Click the Applications Nav Bar Button + * Return: reference to ApplicationsList page + */ + public async clickApplicationsNavBarButton(): Promise { + try { + const navBarButton = await UiTestUtilities.findUiElement(this.driver, NAVBAR_APPLICATIONS_BUTTON); + await navBarButton.click(); + } catch (err) { + throw new Error(err); + } + return this.applicationsList; + } + + /** + * Click the Settings Nav Bar Button + * TODO return settings page + */ + public async clickSettingsNavBarButton() { + try { + const navBarButton = await UiTestUtilities.findUiElement(this.driver, NAVBAR_SETTINGS_BUTTON); + await navBarButton.click(); + } catch (err) { + throw new Error(err); + } + } + + /** + * Click the User Info Nav Bar Button + * TODO return User Info page + */ + public async clickUserInfoNavBarButton() { + try { + const navBarButton = await UiTestUtilities.findUiElement(this.driver, NAVBAR_USER_INFO_BUTTON); + await navBarButton.click(); + } catch (err) { + throw new Error(err); + } + } + + /** + * Click the Documentation Nav Bar Button + * TODO return docs page + */ + public async clickDocsNavBarButton() { + try { + const navBarButton = await UiTestUtilities.findUiElement(this.driver, NAVBAR_DOCS_BUTTON); + await navBarButton.click(); + } catch (err) { + throw new Error(err); + } + } + + /** + * Get the WebDriver. Test cases are not recommended to use this. Use Page/Component objects to perform actions + */ + public getDriver(): WebDriver { + return this.driver; + } + + /** + * Call when test case is finished + */ + public async quit() { + await this.driver.quit(); + } + + /** + * Sleep for t milliseconds. This is not recommended for use by test cases. + * @param t + */ + public async sleep(t: number) { + await this.driver.sleep(t); + } +} diff --git a/ui-test/src/popup/popup-manager.ts b/ui-test/src/popup/popup-manager.ts new file mode 100644 index 0000000000000..c80c2182302fd --- /dev/null +++ b/ui-test/src/popup/popup-manager.ts @@ -0,0 +1,35 @@ +import {By, WebDriver} from 'selenium-webdriver'; +import {Base} from '../base'; +import UiTestUtilities from '../UiTestUtilities'; + +// Popup Confirmation dialog +// Uncomment to use +// const POPUP_OK_BUTTON_CSS: By = By.css('#app .popup-container .qe-argo-popup-ok-button'); +// const POPUP_OK_BUTTON: By = By.xpath('.//button[@qe-id="argo-popup-ok-button"]'); +// const POPUP_CANCEL_BUTTON: By = By.xpath('.//button[@qe-id="argo-popup-cancel-button"]'); + +// Popup Prompt dialog +const DELETE_APP_POPUP_FIELD_CONFIRMATION: By = By.xpath('.//input[@qeid="name-field-delete-confirmation"]'); +const DELETE_APP_PROMPT_POPUP_OK_BUTTON: By = By.xpath('.//button[@qe-id="prompt-popup-ok-button"]'); +const DELETE_APP_PROMPT_POPUP_CANCEL_BUTTON: By = By.xpath('.//button[@qe-id="prompt-popup-cancel-button"]'); + +export class PopupManager extends Base { + public constructor(driver: WebDriver) { + super(driver); + } + + public async setPromptFieldName(appName: string): Promise { + const confirmationField = await UiTestUtilities.findUiElement(this.driver, DELETE_APP_POPUP_FIELD_CONFIRMATION); + await confirmationField.sendKeys(appName); + } + + public async clickPromptOk(): Promise { + const okButton = await UiTestUtilities.findUiElement(this.driver, DELETE_APP_PROMPT_POPUP_OK_BUTTON); + await okButton.click(); + } + + public async clickPromptCancel(): Promise { + const cancelButton = await UiTestUtilities.findUiElement(this.driver, DELETE_APP_PROMPT_POPUP_CANCEL_BUTTON); + await cancelButton.click(); + } +} diff --git a/ui-test/src/test001.ts b/ui-test/src/test001.ts new file mode 100644 index 0000000000000..3db3f4d71413f --- /dev/null +++ b/ui-test/src/test001.ts @@ -0,0 +1,55 @@ +import Configuration from './Configuration'; +import UiTestUtilities from './UiTestUtilities'; +import {trace} from 'console'; +import {ApplicationsList} from './applications-list/applications-list'; +import {ApplicationCreatePanel} from './application-create-panel/application-create-panel'; +import {ApplicationsSyncPanel} from './applications-sync-panel/applications-sync-panel'; +import {PopupManager} from './popup/popup-manager'; + +/** + * General test that + * - creates an app based on the environment variables (see .env), + * - syncs the app + * - waits for the healthy and sync'ed states + * - deletes the app. + * + * This can be run multiple times for different apps + * + */ +async function doTest() { + const navigation = await UiTestUtilities.init(); + try { + const appsList: ApplicationsList = await navigation.clickApplicationsNavBarButton(); + const applicationCreatePanel: ApplicationCreatePanel = await appsList.clickNewAppButton(); + + UiTestUtilities.log('About to create application'); + await applicationCreatePanel.setAppName(Configuration.APP_NAME); + await applicationCreatePanel.setProjectName(Configuration.APP_PROJECT); + await applicationCreatePanel.setSourceRepoUrl(Configuration.GIT_REPO); + await applicationCreatePanel.setSourceRepoPath(Configuration.SOURCE_REPO_PATH); + await applicationCreatePanel.selectDestinationClusterNameMenu(Configuration.DESTINATION_CLUSTER_NAME); + await applicationCreatePanel.setDestinationNamespace(Configuration.DESTINATION_NAMESPACE); + await applicationCreatePanel.clickCreateButton(); + + const appsSyncPanel: ApplicationsSyncPanel = await appsList.clickSyncButtonOnApp(Configuration.APP_NAME); + await appsSyncPanel.clickSyncButton(); + + await appsList.waitForHealthStatusOnApp(Configuration.APP_NAME); + await appsList.waitForSyncStatusOnApp(Configuration.APP_NAME); + await appsList.checkNoAdditionalOperations(Configuration.APP_NAME); + + const popupManager: PopupManager = await appsList.clickDeleteButtonOnApp(Configuration.APP_NAME); + await popupManager.setPromptFieldName(Configuration.APP_NAME); + await popupManager.clickPromptOk(); + // After deleting, wait until the delete operation finishes + await appsList.waitUntilOperationStatusDisappearsOnApp(Configuration.APP_NAME); + + await UiTestUtilities.log('Test passed'); + } catch (e) { + trace('Test failed ', e); + } finally { + await navigation.quit(); + } +} + +doTest(); diff --git a/ui-test/src/test002.ts b/ui-test/src/test002.ts new file mode 100644 index 0000000000000..4e1f41fc05de0 --- /dev/null +++ b/ui-test/src/test002.ts @@ -0,0 +1,27 @@ +import UiTestUtilities from './UiTestUtilities'; +import {trace} from 'console'; +import {ApplicationsList} from './applications-list/applications-list'; +import {ApplicationCreatePanel} from './application-create-panel/application-create-panel'; + +/** + * Test to demo how to visit each page via the navigation bar on the left. + * + */ +async function doTest() { + const navigation = await UiTestUtilities.init(); + try { + await navigation.clickDocsNavBarButton(); + await navigation.clickUserInfoNavBarButton(); + await navigation.clickSettingsNavBarButton(); + const appsList: ApplicationsList = await navigation.clickApplicationsNavBarButton(); + const applicationCreatePanel: ApplicationCreatePanel = await appsList.clickNewAppButton(); + await applicationCreatePanel.clickCancelButton(); + await UiTestUtilities.log('Test passed'); + } catch (e) { + trace('Test failed ', e); + } finally { + await navigation.quit(); + } +} + +doTest(); diff --git a/ui-test/tsconfig.json b/ui-test/tsconfig.json new file mode 100644 index 0000000000000..143f0946f29ef --- /dev/null +++ b/ui-test/tsconfig.json @@ -0,0 +1,74 @@ +{ + "compilerOptions": { + /* Visit https://aka.ms/tsconfig.json to read more about this file */ + + /* Basic Options */ + // "incremental": true, /* Enable incremental compilation */ + "target": "es6", /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019', 'ES2020', or 'ESNEXT'. */ + "module": "commonjs", /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', 'es2020', or 'ESNext'. */ + "lib": ["es2017"], /* Specify library files to be included in the compilation. */ + "allowJs": true, /* Allow javascript files to be compiled. */ + // "checkJs": true, /* Report errors in .js files. */ + // "jsx": "preserve", /* Specify JSX code generation: 'preserve', 'react-native', or 'react'. */ + // "declaration": true, /* Generates corresponding '.d.ts' file. */ + // "declarationMap": true, /* Generates a sourcemap for each corresponding '.d.ts' file. */ + "sourceMap": true, /* Generates corresponding '.map' file. */ + // "outFile": "./", /* Concatenate and emit output to single file. */ + "outDir": "out", /* Redirect output structure to the directory. */ + "rootDir": "src", /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */ + // "composite": true, /* Enable project compilation */ + // "tsBuildInfoFile": "./", /* Specify file to store incremental compilation information */ + // "removeComments": true, /* Do not emit comments to output. */ + // "noEmit": true, /* Do not emit outputs. */ + // "importHelpers": true, /* Import emit helpers from 'tslib'. */ + // "downlevelIteration": true, /* Provide full support for iterables in 'for-of', spread, and destructuring when targeting 'ES5' or 'ES3'. */ + // "isolatedModules": true, /* Transpile each file as a separate module (similar to 'ts.transpileModule'). */ + + /* Strict Type-Checking Options */ + "strict": true, /* Enable all strict type-checking options. */ + "noImplicitAny": true, /* Raise error on expressions and declarations with an implied 'any' type. */ + // "strictNullChecks": true, /* Enable strict null checks. */ + // "strictFunctionTypes": true, /* Enable strict checking of function types. */ + // "strictBindCallApply": true, /* Enable strict 'bind', 'call', and 'apply' methods on functions. */ + // "strictPropertyInitialization": true, /* Enable strict checking of property initialization in classes. */ + // "noImplicitThis": true, /* Raise error on 'this' expressions with an implied 'any' type. */ + // "alwaysStrict": true, /* Parse in strict mode and emit "use strict" for each source file. */ + + /* Additional Checks */ + "noUnusedLocals": true, /* Report errors on unused locals. */ + "noUnusedParameters": true, /* Report errors on unused parameters. */ + "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */ + // "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */ + + /* Module Resolution Options */ + "moduleResolution": "node", /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */ + // "baseUrl": "./", /* Base directory to resolve non-absolute module names. */ + // "paths": {}, /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */ + // "rootDirs": [], /* List of root folders whose combined content represents the structure of the project at runtime. */ + // "typeRoots": [], /* List of folders to include type definitions from. */ + // "types": [], /* Type declaration files to be included in compilation. */ + // "allowSyntheticDefaultImports": true, /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */ + "esModuleInterop": true, /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */ + // "preserveSymlinks": true, /* Do not resolve the real path of symlinks. */ + // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ + + /* Source Map Options */ + // "sourceRoot": "", /* Specify the location where debugger should locate TypeScript files instead of source locations. */ + // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ + // "inlineSourceMap": true, /* Emit a single file with source maps instead of having a separate file. */ + // "inlineSources": true, /* Emit the source alongside the sourcemaps within a single file; requires '--inlineSourceMap' or '--sourceMap' to be set. */ + + /* Experimental Options */ + "experimentalDecorators": true, /* Enables experimental support for ES7 decorators. */ + // "emitDecoratorMetadata": true, /* Enables experimental support for emitting type metadata for decorators. */ + + /* Advanced Options */ + // "resolveJsonModule": true, /* Include modules imported with '.json' extension */ + "skipLibCheck": true, /* Skip type checking of declaration files. */ + "forceConsistentCasingInFileNames": true /* Disallow inconsistently-cased references to the same file. */ + }, + "exclude": [ + "node_modules", + "out" + ] +} diff --git a/ui-test/tslint.json b/ui-test/tslint.json new file mode 100644 index 0000000000000..2ed387963062c --- /dev/null +++ b/ui-test/tslint.json @@ -0,0 +1,17 @@ +{ + "extends": [ + "tslint:recommended", "tslint-plugin-prettier", "tslint-config-prettier" + ], + "jsRules": {}, + "rules": { + "prettier": true, + "quotemark": [true, "single"], + "no-var-requires": false, + "interface-name": false, + "object-literal-sort-keys": false, + "max-line-length": [true, 200], + "array-type": false, + "max-classes-per-file": false + }, + "rulesDirectory": [] +} diff --git a/ui-test/yarn.lock b/ui-test/yarn.lock new file mode 100644 index 0000000000000..a723a8393d0bd --- /dev/null +++ b/ui-test/yarn.lock @@ -0,0 +1,1529 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@babel/code-frame@^7.0.0": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.10.4.tgz#168da1a36e90da68ae8d49c0f1b48c7c6249213a" + integrity sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg== + dependencies: + "@babel/highlight" "^7.10.4" + +"@babel/helper-validator-identifier@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz#a78c7a7251e01f616512d31b10adcf52ada5e0d2" + integrity sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw== + +"@babel/highlight@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.10.4.tgz#7d1bdfd65753538fabe6c38596cdb76d9ac60143" + integrity sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA== + dependencies: + "@babel/helper-validator-identifier" "^7.10.4" + chalk "^2.0.0" + js-tokens "^4.0.0" + +"@nodelib/fs.scandir@2.1.3": + version "2.1.3" + resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.3.tgz#3a582bdb53804c6ba6d146579c46e52130cf4a3b" + integrity sha512-eGmwYQn3gxo4r7jdQnkrrN6bY478C3P+a/y72IJukF8LjB6ZHeB3c+Ehacj3sYeSmUXGlnA67/PmbM9CVwL7Dw== + dependencies: + "@nodelib/fs.stat" "2.0.3" + run-parallel "^1.1.9" + +"@nodelib/fs.stat@2.0.3", "@nodelib/fs.stat@^2.0.2": + version "2.0.3" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz#34dc5f4cabbc720f4e60f75a747e7ecd6c175bd3" + integrity sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA== + +"@nodelib/fs.walk@^1.2.3": + version "1.2.4" + resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.4.tgz#011b9202a70a6366e436ca5c065844528ab04976" + integrity sha512-1V9XOY4rDW0rehzbrcqAmHnz8e7SKvX27gh8Gt2WgB0+pdzdiLV83p72kZPU+jvMbS1qU5mauP2iOvO8rhmurQ== + dependencies: + "@nodelib/fs.scandir" "2.1.3" + fastq "^1.6.0" + +"@testim/chrome-version@^1.0.7": + version "1.0.7" + resolved "https://registry.yarnpkg.com/@testim/chrome-version/-/chrome-version-1.0.7.tgz#0cd915785ec4190f08a3a6acc9b61fc38fb5f1a9" + integrity sha512-8UT/J+xqCYfn3fKtOznAibsHpiuDshCb0fwgWxRazTT19Igp9ovoXMPhXyLD6m3CKQGTMHgqoxaFfMWaL40Rnw== + +"@types/glob@^7.1.1": + version "7.1.3" + resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.3.tgz#e6ba80f36b7daad2c685acd9266382e68985c183" + integrity sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w== + dependencies: + "@types/minimatch" "*" + "@types/node" "*" + +"@types/minimatch@*": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d" + integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA== + +"@types/mocha@^8.0.3": + version "8.2.0" + resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-8.2.0.tgz#3eb56d13a1de1d347ecb1957c6860c911704bc44" + integrity sha512-/Sge3BymXo4lKc31C8OINJgXLaw+7vL1/L1pGiBNpGrBiT8FQiaFpSYV0uhTaG4y78vcMBTMFsWaHDvuD+xGzQ== + +"@types/node@*", "@types/node@^14.14.2": + version "14.14.14" + resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.14.tgz#f7fd5f3cc8521301119f63910f0fb965c7d761ae" + integrity sha512-UHnOPWVWV1z+VV8k6L1HhG7UbGBgIdghqF3l9Ny9ApPghbjICXkUJSd/b9gOgQfjM1r+37cipdw/HJ3F6ICEnQ== + +"@types/selenium-webdriver@^4.0.9": + version "4.0.10" + resolved "https://registry.yarnpkg.com/@types/selenium-webdriver/-/selenium-webdriver-4.0.10.tgz#1aa370a14747b51752e65622999848c4f037b058" + integrity sha512-Xavn3fE+uM2aeIHtefIwpy0zAf2HQOyip/jU7ZR0ailt/B0ww/TJ6yMnfZ5pM0F4+Kx+9AQSnxQio3P5QAl1yQ== + +"@types/yauzl@^2.9.1": + version "2.9.1" + resolved "https://registry.yarnpkg.com/@types/yauzl/-/yauzl-2.9.1.tgz#d10f69f9f522eef3cf98e30afb684a1e1ec923af" + integrity sha512-A1b8SU4D10uoPjwb0lnHmmu8wZhR9d+9o2PKBQT2jU5YPTKsxac6M2qGAdY7VcL+dHHhARVUDmeg0rOrcd9EjA== + dependencies: + "@types/node" "*" + +"@ungap/promise-all-settled@1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz#aa58042711d6e3275dd37dc597e5d31e8c290a44" + integrity sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q== + +agent-base@6: + version "6.0.2" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" + integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== + dependencies: + debug "4" + +aggregate-error@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" + integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== + dependencies: + clean-stack "^2.0.0" + indent-string "^4.0.0" + +ansi-colors@4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" + integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== + +ansi-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" + integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= + +ansi-regex@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" + integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== + +ansi-styles@^3.2.0, ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + +anymatch@~3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.1.tgz#c55ecf02185e2469259399310c173ce31233b142" + integrity sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +argparse@^1.0.7: + version "1.0.10" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== + dependencies: + sprintf-js "~1.0.2" + +array-filter@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/array-filter/-/array-filter-1.0.0.tgz#baf79e62e6ef4c2a4c0b831232daffec251f9d83" + integrity sha1-uveeYubvTCpMC4MSMtr/7CUfnYM= + +array-union@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" + integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== + +assert@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/assert/-/assert-2.0.0.tgz#95fc1c616d48713510680f2eaf2d10dd22e02d32" + integrity sha512-se5Cd+js9dXJnu6Ag2JFc00t+HmHOen+8Q+L7O9zI0PqQXr20uk2J0XQqMxZEeo5U50o8Nvmmx7dZrl+Ufr35A== + dependencies: + es6-object-assign "^1.1.0" + is-nan "^1.2.1" + object-is "^1.0.1" + util "^0.12.0" + +available-typed-arrays@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.2.tgz#6b098ca9d8039079ee3f77f7b783c4480ba513f5" + integrity sha512-XWX3OX8Onv97LMk/ftVyBibpGwY5a8SmuxZPzeOxqmuEqUCOM9ZE+uIaD1VNJ5QnvU2UQusvmKbuM1FR8QWGfQ== + dependencies: + array-filter "^1.0.0" + +axios@^0.19.2: + version "0.19.2" + resolved "https://registry.yarnpkg.com/axios/-/axios-0.19.2.tgz#3ea36c5d8818d0d5f8a8a97a6d36b86cdc00cb27" + integrity sha512-fjgm5MvRHLhx+osE2xoekY70AhARk3a6hkN+3Io1jc00jtquGvxYlKlsFUhmUET0V5te6CcZI7lcv2Ym61mjHA== + dependencies: + follow-redirects "1.5.10" + +balanced-match@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" + integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= + +binary-extensions@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.1.0.tgz#30fa40c9e7fe07dbc895678cd287024dea241dd9" + integrity sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ== + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +braces@^3.0.1, braces@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + +browser-stdout@1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" + integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== + +buffer-crc32@~0.2.3: + version "0.2.13" + resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" + integrity sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI= + +builtin-modules@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" + integrity sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8= + +call-bind@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.0.tgz#24127054bb3f9bdcb4b1fb82418186072f77b8ce" + integrity sha512-AEXsYIyyDY3MCzbwdhzG3Jx1R0J2wetQyUynn6dYHAO+bg8l1k7jwZtRv4ryryFs7EP+NDlikJlVe59jr0cM2w== + dependencies: + function-bind "^1.1.1" + get-intrinsic "^1.0.0" + +camelcase@^5.0.0: + version "5.3.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" + integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== + +camelcase@^6.0.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.2.0.tgz#924af881c9d525ac9d87f40d964e5cea982a1809" + integrity sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg== + +chalk@^2.0.0, chalk@^2.3.0: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chalk@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a" + integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +chokidar@3.4.3: + version "3.4.3" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.4.3.tgz#c1df38231448e45ca4ac588e6c79573ba6a57d5b" + integrity sha512-DtM3g7juCXQxFVSNPNByEC2+NImtBuxQQvWlHunpJIS5Ocr0lG306cC7FCi7cEA0fzmybPUIl4txBIobk1gGOQ== + dependencies: + anymatch "~3.1.1" + braces "~3.0.2" + glob-parent "~5.1.0" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.5.0" + optionalDependencies: + fsevents "~2.1.2" + +chromedriver@^86.0.0: + version "86.0.0" + resolved "https://registry.yarnpkg.com/chromedriver/-/chromedriver-86.0.0.tgz#4b9504d5bbbcd4c6bd6d6fd1dd8247ab8cdeca67" + integrity sha512-byLJWhAfuYOmzRYPDf4asJgGDbI4gJGHa+i8dnQZGuv+6WW1nW1Fg+8zbBMOfLvGn7sKL41kVdmCEVpQHn9oyg== + dependencies: + "@testim/chrome-version" "^1.0.7" + axios "^0.19.2" + del "^5.1.0" + extract-zip "^2.0.1" + https-proxy-agent "^5.0.0" + mkdirp "^1.0.4" + tcp-port-used "^1.0.1" + +clean-stack@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" + integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== + +cliui@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" + integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA== + dependencies: + string-width "^3.1.0" + strip-ansi "^5.2.0" + wrap-ansi "^5.1.0" + +color-convert@^1.9.0: + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= + +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +commander@^2.12.1: + version "2.20.3" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" + integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= + +core-util-is@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= + +debug@4, debug@4.3.1, debug@^4.1.1: + version "4.3.1" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee" + integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== + dependencies: + ms "2.1.2" + +debug@4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.2.0.tgz#7f150f93920e94c58f5574c2fd01a3110effe7f1" + integrity sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg== + dependencies: + ms "2.1.2" + +debug@=3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" + integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== + dependencies: + ms "2.0.0" + +decamelize@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= + +decamelize@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-4.0.0.tgz#aa472d7bf660eb15f3494efd531cab7f2a709837" + integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ== + +deep-is@^0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" + integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= + +define-properties@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" + integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== + dependencies: + object-keys "^1.0.12" + +del@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/del/-/del-5.1.0.tgz#d9487c94e367410e6eff2925ee58c0c84a75b3a7" + integrity sha512-wH9xOVHnczo9jN2IW68BabcecVPxacIA3g/7z6vhSU/4stOKQzeCRK0yD0A24WiAAUJmmVpWqrERcTxnLo3AnA== + dependencies: + globby "^10.0.1" + graceful-fs "^4.2.2" + is-glob "^4.0.1" + is-path-cwd "^2.2.0" + is-path-inside "^3.0.1" + p-map "^3.0.0" + rimraf "^3.0.0" + slash "^3.0.0" + +diff@4.0.2, diff@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" + integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== + +dir-glob@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" + integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== + dependencies: + path-type "^4.0.0" + +dotenv@^8.2.0: + version "8.2.0" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-8.2.0.tgz#97e619259ada750eea3e4ea3e26bceea5424b16a" + integrity sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw== + +emoji-regex@^7.0.1: + version "7.0.3" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" + integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== + +end-of-stream@^1.1.0: + version "1.4.4" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== + dependencies: + once "^1.4.0" + +es-abstract@^1.18.0-next.1: + version "1.18.0-next.1" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.0-next.1.tgz#6e3a0a4bda717e5023ab3b8e90bec36108d22c68" + integrity sha512-I4UGspA0wpZXWENrdA0uHbnhte683t3qT/1VFH9aX2dA5PPSf6QW5HHXf5HImaqPmjXaVeVk4RGWnaylmV7uAA== + dependencies: + es-to-primitive "^1.2.1" + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.1" + is-callable "^1.2.2" + is-negative-zero "^2.0.0" + is-regex "^1.1.1" + object-inspect "^1.8.0" + object-keys "^1.1.1" + object.assign "^4.1.1" + string.prototype.trimend "^1.0.1" + string.prototype.trimstart "^1.0.1" + +es-to-primitive@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" + integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== + dependencies: + is-callable "^1.1.4" + is-date-object "^1.0.1" + is-symbol "^1.0.2" + +es6-object-assign@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/es6-object-assign/-/es6-object-assign-1.1.0.tgz#c2c3582656247c39ea107cb1e6652b6f9f24523c" + integrity sha1-wsNYJlYkfDnqEHyx5mUrb58kUjw= + +escape-string-regexp@4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== + +escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= + +eslint-plugin-prettier@^2.2.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-2.7.0.tgz#b4312dcf2c1d965379d7f9d5b5f8aaadc6a45904" + integrity sha512-CStQYJgALoQBw3FsBzH0VOVDRnJ/ZimUlpLm226U8qgqYJfPOY/CPK6wyRInMxh73HSKg5wyRwdS4BVYYHwokA== + dependencies: + fast-diff "^1.1.1" + jest-docblock "^21.0.0" + +esprima@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + +extract-zip@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-2.0.1.tgz#663dca56fe46df890d5f131ef4a06d22bb8ba13a" + integrity sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg== + dependencies: + debug "^4.1.1" + get-stream "^5.1.0" + yauzl "^2.10.0" + optionalDependencies: + "@types/yauzl" "^2.9.1" + +fast-diff@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.2.0.tgz#73ee11982d86caaf7959828d519cfe927fac5f03" + integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w== + +fast-glob@^3.0.3: + version "3.2.4" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.4.tgz#d20aefbf99579383e7f3cc66529158c9b98554d3" + integrity sha512-kr/Oo6PX51265qeuCYsyGypiO5uJFgBS0jksyG7FUeCyQzNwYnzrNIMR1NXfkZXsMYXYLRAHgISHBz8gQcxKHQ== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.0" + merge2 "^1.3.0" + micromatch "^4.0.2" + picomatch "^2.2.1" + +fastq@^1.6.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.9.0.tgz#e16a72f338eaca48e91b5c23593bcc2ef66b7947" + integrity sha512-i7FVWL8HhVY+CTkwFxkN2mk3h+787ixS5S63eb78diVRc1MCssarHq3W5cj0av7YDSwmaV928RNag+U1etRQ7w== + dependencies: + reusify "^1.0.4" + +fd-slicer@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.1.0.tgz#25c7c89cb1f9077f8891bbe61d8f390eae256f1e" + integrity sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4= + dependencies: + pend "~1.2.0" + +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + +find-up@5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" + integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== + dependencies: + locate-path "^6.0.0" + path-exists "^4.0.0" + +find-up@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" + integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== + dependencies: + locate-path "^3.0.0" + +flat@^5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" + integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== + +follow-redirects@1.5.10: + version "1.5.10" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.5.10.tgz#7b7a9f9aea2fdff36786a94ff643ed07f4ff5e2a" + integrity sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ== + dependencies: + debug "=3.1.0" + +foreach@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99" + integrity sha1-C+4AUBiusmDQo6865ljdATbsG5k= + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= + +fsevents@~2.1.2: + version "2.1.3" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.3.tgz#fb738703ae8d2f9fe900c33836ddebee8b97f23e" + integrity sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ== + +function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + +get-caller-file@^2.0.1: + version "2.0.5" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== + +get-intrinsic@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.0.1.tgz#94a9768fcbdd0595a1c9273aacf4c89d075631be" + integrity sha512-ZnWP+AmS1VUaLgTRy47+zKtjTxz+0xMpx3I52i+aalBK1QP19ggLF3Db89KJX7kjfOfP2eoa01qc++GwPgufPg== + dependencies: + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.1" + +get-stream@^5.1.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" + integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== + dependencies: + pump "^3.0.0" + +glob-parent@^5.1.0, glob-parent@~5.1.0: + version "5.1.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + +glob@7.1.6, glob@^7.1.1, glob@^7.1.3: + version "7.1.6" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" + integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +globby@^10.0.1: + version "10.0.2" + resolved "https://registry.yarnpkg.com/globby/-/globby-10.0.2.tgz#277593e745acaa4646c3ab411289ec47a0392543" + integrity sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg== + dependencies: + "@types/glob" "^7.1.1" + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.0.3" + glob "^7.1.3" + ignore "^5.1.1" + merge2 "^1.2.3" + slash "^3.0.0" + +graceful-fs@^4.2.2: + version "4.2.4" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" + integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== + +growl@1.10.5: + version "1.10.5" + resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.5.tgz#f2735dc2283674fa67478b10181059355c369e5e" + integrity sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA== + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +has-symbols@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8" + integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg== + +has@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== + dependencies: + function-bind "^1.1.1" + +he@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" + integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== + +https-proxy-agent@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz#e2a90542abb68a762e0a0850f6c9edadfd8506b2" + integrity sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA== + dependencies: + agent-base "6" + debug "4" + +ignore@^5.1.1: + version "5.1.8" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57" + integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== + +immediate@~3.0.5: + version "3.0.6" + resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.0.6.tgz#9db1dbd0faf8de6fbe0f5dd5e56bb606280de69b" + integrity sha1-nbHb0Pr43m++D13V5Wu2BigN5ps= + +indent-string@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" + integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@^2.0.3, inherits@~2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +ip-regex@^4.1.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-4.2.0.tgz#a03f5eb661d9a154e3973a03de8b23dd0ad6892e" + integrity sha512-n5cDDeTWWRwK1EBoWwRti+8nP4NbytBBY0pldmnIkq6Z55KNFmWofh4rl9dPZpj+U/nVq7gweR3ylrvMt4YZ5A== + +is-arguments@^1.0.4: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.0.tgz#62353031dfbee07ceb34656a6bde59efecae8dd9" + integrity sha512-1Ij4lOMPl/xB5kBDn7I+b2ttPMKa8szhEIrXDuXQD/oe3HJLTLhqhgGspwgyGd6MOywBUqVvYicF72lkgDnIHg== + dependencies: + call-bind "^1.0.0" + +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + +is-callable@^1.1.4, is-callable@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.2.tgz#c7c6715cd22d4ddb48d3e19970223aceabb080d9" + integrity sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA== + +is-core-module@^2.1.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.2.0.tgz#97037ef3d52224d85163f5597b2b63d9afed981a" + integrity sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ== + dependencies: + has "^1.0.3" + +is-date-object@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.2.tgz#bda736f2cd8fd06d32844e7743bfa7494c3bfd7e" + integrity sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g== + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= + +is-fullwidth-code-point@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" + integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= + +is-generator-function@^1.0.7: + version "1.0.8" + resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.0.8.tgz#dfb5c2b120e02b0a8d9d2c6806cd5621aa922f7b" + integrity sha512-2Omr/twNtufVZFr1GhxjOMFPAj2sjc/dKaIqBhvo4qciXfJmITGH6ZGd8eZYNHza8t1y0e01AuqRhJwfWp26WQ== + +is-glob@^4.0.1, is-glob@~4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" + integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== + dependencies: + is-extglob "^2.1.1" + +is-nan@^1.2.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/is-nan/-/is-nan-1.3.0.tgz#85d1f5482f7051c2019f5673ccebdb06f3b0db03" + integrity sha512-z7bbREymOqt2CCaZVly8aC4ML3Xhfi0ekuOnjO2L8vKdl+CttdVoGZQhd4adMFAsxQ5VeRVwORs4tU8RH+HFtQ== + dependencies: + define-properties "^1.1.3" + +is-negative-zero@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.1.tgz#3de746c18dda2319241a53675908d8f766f11c24" + integrity sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w== + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-path-cwd@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-2.2.0.tgz#67d43b82664a7b5191fd9119127eb300048a9fdb" + integrity sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ== + +is-path-inside@^3.0.1: + version "3.0.2" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.2.tgz#f5220fc82a3e233757291dddc9c5877f2a1f3017" + integrity sha512-/2UGPSgmtqwo1ktx8NDHjuPwZWmHhO+gj0f93EkhLB5RgW9RZevWYYlIkS6zePc6U2WpOdQYIwHe9YC4DWEBVg== + +is-plain-obj@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" + integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== + +is-regex@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.1.tgz#c6f98aacc546f6cec5468a07b7b153ab564a57b9" + integrity sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg== + dependencies: + has-symbols "^1.0.1" + +is-symbol@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.3.tgz#38e1014b9e6329be0de9d24a414fd7441ec61937" + integrity sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ== + dependencies: + has-symbols "^1.0.1" + +is-typed-array@^1.1.3: + version "1.1.4" + resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.4.tgz#1f66f34a283a3c94a4335434661ca53fff801120" + integrity sha512-ILaRgn4zaSrVNXNGtON6iFNotXW3hAPF3+0fB1usg2jFlWqo5fEDdmJkz0zBfoi7Dgskr8Khi2xZ8cXqZEfXNA== + dependencies: + available-typed-arrays "^1.0.2" + call-bind "^1.0.0" + es-abstract "^1.18.0-next.1" + foreach "^2.0.5" + has-symbols "^1.0.1" + +is-url@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/is-url/-/is-url-1.2.4.tgz#04a4df46d28c4cff3d73d01ff06abeb318a1aa52" + integrity sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww== + +is2@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/is2/-/is2-2.0.6.tgz#094f887248b49ba7ce278f8c39f85a70927bb5de" + integrity sha512-+Z62OHOjA6k2sUDOKXoZI3EXv7Fb1K52jpTBLbkfx62bcUeSsrTBLhEquCRDKTx0XE5XbHcG/S2vrtE3lnEDsQ== + dependencies: + deep-is "^0.1.3" + ip-regex "^4.1.0" + is-url "^1.2.4" + +isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= + +jest-docblock@^21.0.0: + version "21.2.0" + resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-21.2.0.tgz#51529c3b30d5fd159da60c27ceedc195faf8d414" + integrity sha512-5IZ7sY9dBAYSV+YjQ0Ovb540Ku7AO9Z5o2Cg789xj167iQuZ2cG+z0f3Uct6WeYLbU6aQiM2pCs7sZ+4dotydw== + +js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +js-yaml@3.14.0: + version "3.14.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.0.tgz#a7a34170f26a21bb162424d8adacb4113a69e482" + integrity sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + +js-yaml@^3.13.1: + version "3.14.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" + integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + +jszip@^3.5.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/jszip/-/jszip-3.5.0.tgz#b4fd1f368245346658e781fec9675802489e15f6" + integrity sha512-WRtu7TPCmYePR1nazfrtuF216cIVon/3GWOvHS9QR5bIwSbnxtdpma6un3jyGGNhHsKCSzn5Ypk+EkDRvTGiFA== + dependencies: + lie "~3.3.0" + pako "~1.0.2" + readable-stream "~2.3.6" + set-immediate-shim "~1.0.1" + +lie@~3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/lie/-/lie-3.3.0.tgz#dcf82dee545f46074daf200c7c1c5a08e0f40f6a" + integrity sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ== + dependencies: + immediate "~3.0.5" + +lines-and-columns@^1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00" + integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA= + +locate-path@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" + integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== + dependencies: + p-locate "^3.0.0" + path-exists "^3.0.0" + +locate-path@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" + integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== + dependencies: + p-locate "^5.0.0" + +log-symbols@4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.0.0.tgz#69b3cc46d20f448eccdb75ea1fa733d9e821c920" + integrity sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA== + dependencies: + chalk "^4.0.0" + +merge2@^1.2.3, merge2@^1.3.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== + +micromatch@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.2.tgz#4fcb0999bf9fbc2fcbdd212f6d629b9a56c39259" + integrity sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q== + dependencies: + braces "^3.0.1" + picomatch "^2.0.5" + +minimatch@3.0.4, minimatch@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== + dependencies: + brace-expansion "^1.1.7" + +minimist@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" + integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== + +mkdirp@^0.5.3: + version "0.5.5" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" + integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== + dependencies: + minimist "^1.2.5" + +mkdirp@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" + integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== + +mocha@^8.2.0: + version "8.2.1" + resolved "https://registry.yarnpkg.com/mocha/-/mocha-8.2.1.tgz#f2fa68817ed0e53343d989df65ccd358bc3a4b39" + integrity sha512-cuLBVfyFfFqbNR0uUKbDGXKGk+UDFe6aR4os78XIrMQpZl/nv7JYHcvP5MFIAb374b2zFXsdgEGwmzMtP0Xg8w== + dependencies: + "@ungap/promise-all-settled" "1.1.2" + ansi-colors "4.1.1" + browser-stdout "1.3.1" + chokidar "3.4.3" + debug "4.2.0" + diff "4.0.2" + escape-string-regexp "4.0.0" + find-up "5.0.0" + glob "7.1.6" + growl "1.10.5" + he "1.2.0" + js-yaml "3.14.0" + log-symbols "4.0.0" + minimatch "3.0.4" + ms "2.1.2" + nanoid "3.1.12" + serialize-javascript "5.0.1" + strip-json-comments "3.1.1" + supports-color "7.2.0" + which "2.0.2" + wide-align "1.1.3" + workerpool "6.0.2" + yargs "13.3.2" + yargs-parser "13.1.2" + yargs-unparser "2.0.0" + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= + +ms@2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +nanoid@3.1.12: + version "3.1.12" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.12.tgz#6f7736c62e8d39421601e4a0c77623a97ea69654" + integrity sha512-1qstj9z5+x491jfiC4Nelk+f8XBad7LN20PmyWINJEMRSf3wcAjAWysw1qaA8z6NSKe2sjq1hRSDpBH5paCb6A== + +normalize-path@^3.0.0, normalize-path@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +object-inspect@^1.8.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.9.0.tgz#c90521d74e1127b67266ded3394ad6116986533a" + integrity sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw== + +object-is@^1.0.1: + version "1.1.4" + resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.4.tgz#63d6c83c00a43f4cbc9434eb9757c8a5b8565068" + integrity sha512-1ZvAZ4wlF7IyPVOcE1Omikt7UpaFlOQq0HlSti+ZvDH3UiD2brwGMwDbyV43jao2bKJ+4+WdPJHSd7kgzKYVqg== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + +object-keys@^1.0.12, object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + +object.assign@^4.1.1: + version "4.1.2" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940" + integrity sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + has-symbols "^1.0.1" + object-keys "^1.1.1" + +once@^1.3.0, once@^1.3.1, once@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= + dependencies: + wrappy "1" + +p-limit@^2.0.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" + integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== + dependencies: + p-try "^2.0.0" + +p-limit@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + +p-locate@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" + integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== + dependencies: + p-limit "^2.0.0" + +p-locate@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" + integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== + dependencies: + p-limit "^3.0.2" + +p-map@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-3.0.0.tgz#d704d9af8a2ba684e2600d9a215983d4141a979d" + integrity sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ== + dependencies: + aggregate-error "^3.0.0" + +p-try@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== + +pako@~1.0.2: + version "1.0.11" + resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" + integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== + +path-exists@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= + +path-parse@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" + integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== + +path-type@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" + integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== + +pend@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" + integrity sha1-elfrVQpng/kRUzH89GY9XI4AelA= + +picomatch@^2.0.4, picomatch@^2.0.5, picomatch@^2.2.1: + version "2.2.2" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" + integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== + +prettier@^1.18.2: + version "1.19.1" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.19.1.tgz#f7d7f5ff8a9cd872a7be4ca142095956a60797cb" + integrity sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew== + +process-nextick-args@~2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== + +pump@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +randombytes@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" + integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== + dependencies: + safe-buffer "^5.1.0" + +readable-stream@~2.3.6: + version "2.3.7" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" + integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + +readdirp@~3.5.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.5.0.tgz#9ba74c019b15d365278d2e91bb8c48d7b4d42c9e" + integrity sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ== + dependencies: + picomatch "^2.2.1" + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= + +require-main-filename@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" + integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== + +resolve@^1.3.2: + version "1.19.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.19.0.tgz#1af5bf630409734a067cae29318aac7fa29a267c" + integrity sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg== + dependencies: + is-core-module "^2.1.0" + path-parse "^1.0.6" + +reusify@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" + integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== + +rimraf@^2.6.3, rimraf@^2.7.1: + version "2.7.1" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" + integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== + dependencies: + glob "^7.1.3" + +rimraf@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + dependencies: + glob "^7.1.3" + +run-parallel@^1.1.9: + version "1.1.10" + resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.1.10.tgz#60a51b2ae836636c81377df16cb107351bcd13ef" + integrity sha512-zb/1OuZ6flOlH6tQyMPUrE3x3Ulxjlo9WIVXR4yVYi4H9UXQaeIsPbLn2R3O3vQCnDKkAl2qHiuocKKX4Tz/Sw== + +safe-buffer@^5.1.0, safe-buffer@^5.1.2: + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +selenium-webdriver@^4.0.0-alpha.7: + version "4.0.0-alpha.8" + resolved "https://registry.yarnpkg.com/selenium-webdriver/-/selenium-webdriver-4.0.0-alpha.8.tgz#5cb99f4239b39dbdff6ac796893f873d044dd3bc" + integrity sha512-yPSaiWySZTEbxuuWQMDqdXh3H3N4Aiw/bSUjpkKMPWWCysfPqUncrq6FewBqdxWD1wQKzy5yWaQMGsgTY/0rCQ== + dependencies: + jszip "^3.5.0" + rimraf "^2.7.1" + tmp "^0.1.0" + ws "^7.3.1" + +semver@^5.3.0: + version "5.7.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" + integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== + +serialize-javascript@5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-5.0.1.tgz#7886ec848049a462467a97d3d918ebb2aaf934f4" + integrity sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA== + dependencies: + randombytes "^2.1.0" + +set-blocking@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= + +set-immediate-shim@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61" + integrity sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E= + +slash@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== + +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= + +"string-width@^1.0.2 || 2": + version "2.1.1" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" + integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== + dependencies: + is-fullwidth-code-point "^2.0.0" + strip-ansi "^4.0.0" + +string-width@^3.0.0, string-width@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" + integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== + dependencies: + emoji-regex "^7.0.1" + is-fullwidth-code-point "^2.0.0" + strip-ansi "^5.1.0" + +string.prototype.trimend@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.3.tgz#a22bd53cca5c7cf44d7c9d5c732118873d6cd18b" + integrity sha512-ayH0pB+uf0U28CtjlLvL7NaohvR1amUvVZk+y3DYb0Ey2PUV5zPkkKy9+U1ndVEIXO8hNg18eIv9Jntbii+dKw== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + +string.prototype.trimstart@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.3.tgz#9b4cb590e123bb36564401d59824298de50fd5aa" + integrity sha512-oBIBUy5lea5tt0ovtOFiEQaBkoBBkyJhZXzJYrSmDo5IUUqbOPvVezuRs/agBIdZ2p2Eo1FD6bD9USyBLfl3xg== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + +strip-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" + integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= + dependencies: + ansi-regex "^3.0.0" + +strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" + integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== + dependencies: + ansi-regex "^4.1.0" + +strip-json-comments@3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== + +supports-color@7.2.0, supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + +supports-color@^5.3.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +tcp-port-used@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/tcp-port-used/-/tcp-port-used-1.0.2.tgz#9652b7436eb1f4cfae111c79b558a25769f6faea" + integrity sha512-l7ar8lLUD3XS1V2lfoJlCBaeoaWo/2xfYt81hM7VlvR4RrMVFqfmzfhLVk40hAb368uitje5gPtBRL1m/DGvLA== + dependencies: + debug "4.3.1" + is2 "^2.0.6" + +tmp@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.1.0.tgz#ee434a4e22543082e294ba6201dcc6eafefa2877" + integrity sha512-J7Z2K08jbGcdA1kkQpJSqLF6T0tdQqpR2pnSUXsIchbPdTI9v3e85cLW0d6WDhwuAleOV71j2xWs8qMPfK7nKw== + dependencies: + rimraf "^2.6.3" + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +tslib@^1.13.0, tslib@^1.7.1, tslib@^1.8.1: + version "1.14.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" + integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== + +tslint-config-prettier@^1.18.0: + version "1.18.0" + resolved "https://registry.yarnpkg.com/tslint-config-prettier/-/tslint-config-prettier-1.18.0.tgz#75f140bde947d35d8f0d238e0ebf809d64592c37" + integrity sha512-xPw9PgNPLG3iKRxmK7DWr+Ea/SzrvfHtjFt5LBl61gk2UBG/DB9kCXRjv+xyIU1rUtnayLeMUVJBcMX8Z17nDg== + +tslint-plugin-prettier@^2.0.1: + version "2.3.0" + resolved "https://registry.yarnpkg.com/tslint-plugin-prettier/-/tslint-plugin-prettier-2.3.0.tgz#73fe71bf9f03842ac48c104122ca9b1de012ecf4" + integrity sha512-F9e4K03yc9xuvv+A0v1EmjcnDwpz8SpCD8HzqSDe0eyg34cBinwn9JjmnnRrNAs4HdleRQj7qijp+P/JTxt4vA== + dependencies: + eslint-plugin-prettier "^2.2.0" + lines-and-columns "^1.1.6" + tslib "^1.7.1" + +tslint@^6.1.3: + version "6.1.3" + resolved "https://registry.yarnpkg.com/tslint/-/tslint-6.1.3.tgz#5c23b2eccc32487d5523bd3a470e9aa31789d904" + integrity sha512-IbR4nkT96EQOvKE2PW/djGz8iGNeJ4rF2mBfiYaR/nvUWYKJhLwimoJKgjIFEIDibBtOevj7BqCRL4oHeWWUCg== + dependencies: + "@babel/code-frame" "^7.0.0" + builtin-modules "^1.1.1" + chalk "^2.3.0" + commander "^2.12.1" + diff "^4.0.1" + glob "^7.1.1" + js-yaml "^3.13.1" + minimatch "^3.0.4" + mkdirp "^0.5.3" + resolve "^1.3.2" + semver "^5.3.0" + tslib "^1.13.0" + tsutils "^2.29.0" + +tsutils@^2.29.0: + version "2.29.0" + resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-2.29.0.tgz#32b488501467acbedd4b85498673a0812aca0b99" + integrity sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA== + dependencies: + tslib "^1.8.1" + +typescript@^4.0.3: + version "4.1.3" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.1.3.tgz#519d582bd94cba0cf8934c7d8e8467e473f53bb7" + integrity sha512-B3ZIOf1IKeH2ixgHhj6la6xdwR9QrLC5d1VKeCSY4tvkqhF2eqd9O7txNlS0PO3GrBAFIdr3L1ndNwteUbZLYg== + +util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= + +util@^0.12.0: + version "0.12.3" + resolved "https://registry.yarnpkg.com/util/-/util-0.12.3.tgz#971bb0292d2cc0c892dab7c6a5d37c2bec707888" + integrity sha512-I8XkoQwE+fPQEhy9v012V+TSdH2kp9ts29i20TaaDUXsg7x/onePbhFJUExBfv/2ay1ZOp/Vsm3nDlmnFGSAog== + dependencies: + inherits "^2.0.3" + is-arguments "^1.0.4" + is-generator-function "^1.0.7" + is-typed-array "^1.1.3" + safe-buffer "^5.1.2" + which-typed-array "^1.1.2" + +which-module@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" + integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= + +which-typed-array@^1.1.2: + version "1.1.4" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.4.tgz#8fcb7d3ee5adf2d771066fba7cf37e32fe8711ff" + integrity sha512-49E0SpUe90cjpoc7BOJwyPHRqSAd12c10Qm2amdEZrJPCY2NDxaW01zHITrem+rnETY3dwrbH3UUrUwagfCYDA== + dependencies: + available-typed-arrays "^1.0.2" + call-bind "^1.0.0" + es-abstract "^1.18.0-next.1" + foreach "^2.0.5" + function-bind "^1.1.1" + has-symbols "^1.0.1" + is-typed-array "^1.1.3" + +which@2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +wide-align@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" + integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA== + dependencies: + string-width "^1.0.2 || 2" + +workerpool@6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.0.2.tgz#e241b43d8d033f1beb52c7851069456039d1d438" + integrity sha512-DSNyvOpFKrNusaaUwk+ej6cBj1bmhLcBfj80elGk+ZIo5JSkq+unB1dLKEOcNfJDZgjGICfhQ0Q5TbP0PvF4+Q== + +wrap-ansi@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09" + integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q== + dependencies: + ansi-styles "^3.2.0" + string-width "^3.0.0" + strip-ansi "^5.0.0" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= + +ws@^7.3.1: + version "7.5.3" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.3.tgz#160835b63c7d97bfab418fc1b8a9fced2ac01a74" + integrity sha512-kQ/dHIzuLrS6Je9+uv81ueZomEwH0qVYstcAQ4/Z93K8zeko9gtAbttJWzoC5ukqXY1PpoouV3+VSOqEAFt5wg== + +y18n@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.1.tgz#8db2b83c31c5d75099bb890b23f3094891e247d4" + integrity sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ== + +yargs-parser@13.1.2, yargs-parser@^13.1.2: + version "13.1.2" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38" + integrity sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg== + dependencies: + camelcase "^5.0.0" + decamelize "^1.2.0" + +yargs-unparser@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-2.0.0.tgz#f131f9226911ae5d9ad38c432fe809366c2325eb" + integrity sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA== + dependencies: + camelcase "^6.0.0" + decamelize "^4.0.0" + flat "^5.0.2" + is-plain-obj "^2.1.0" + +yargs@13.3.2: + version "13.3.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd" + integrity sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw== + dependencies: + cliui "^5.0.0" + find-up "^3.0.0" + get-caller-file "^2.0.1" + require-directory "^2.1.1" + require-main-filename "^2.0.0" + set-blocking "^2.0.0" + string-width "^3.0.0" + which-module "^2.0.0" + y18n "^4.0.0" + yargs-parser "^13.1.2" + +yarn@^1.22.10: + version "1.22.10" + resolved "https://registry.yarnpkg.com/yarn/-/yarn-1.22.10.tgz#c99daa06257c80f8fa2c3f1490724e394c26b18c" + integrity sha512-IanQGI9RRPAN87VGTF7zs2uxkSyQSrSPsju0COgbsKQOOXr5LtcVPeyXWgwVa0ywG3d8dg6kSYKGBuYK021qeA== + +yauzl@^2.10.0: + version "2.10.0" + resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9" + integrity sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk= + dependencies: + buffer-crc32 "~0.2.3" + fd-slicer "~1.1.0" + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== diff --git a/ui/.gitignore b/ui/.gitignore index 0209917db9fce..482d62bd43117 100644 --- a/ui/.gitignore +++ b/ui/.gitignore @@ -1,6 +1,5 @@ node_modules -dist .vscode junit.xml coverage -/yarn-error.log \ No newline at end of file +/yarn-error.log diff --git a/ui/.prettierrc b/ui/.prettierrc index 0abdae70b50de..9e18402b642d4 100644 --- a/ui/.prettierrc +++ b/ui/.prettierrc @@ -5,5 +5,6 @@ "singleQuote": true, "tabWidth": 4, "jsxBracketSameLine": true, - "quoteProps": "consistent" + "quoteProps": "consistent", + "arrowParens": "avoid" } diff --git a/ui/OWNERS b/ui/OWNERS new file mode 100644 index 0000000000000..dadbabefcb289 --- /dev/null +++ b/ui/OWNERS @@ -0,0 +1,3 @@ +owners: +- rbreeze +- reginapizza diff --git a/ui/dist/app/gitkeep b/ui/dist/app/gitkeep new file mode 100644 index 0000000000000..e69de29bb2d1d diff --git a/ui/embed.go b/ui/embed.go new file mode 100644 index 0000000000000..665621a9c12fd --- /dev/null +++ b/ui/embed.go @@ -0,0 +1,7 @@ +package ui + +import "embed" + +// Embedded contains embedded UI resources +//go:embed dist/app +var Embedded embed.FS diff --git a/ui/package.json b/ui/package.json index b2ea548c6bdda..0d923beb1321c 100644 --- a/ui/package.json +++ b/ui/package.json @@ -5,11 +5,12 @@ "scripts": { "start": "webpack-dev-server --config ./src/app/webpack.config.js --mode development", "docker": "./scripts/build_docker.sh", - "build": "rm -rf dist && webpack --config ./src/app/webpack.config.js", + "build": "find ./dist -type f -not -name gitkeep -delete && webpack --config ./src/app/webpack.config.js", "lint": "tslint -p ./src/app", "test": "jest" }, "dependencies": { + "@reactivex/rxjs": "^6.6.7", "@types/classnames": "^2.2.3", "@types/cookie": "^0.3.1", "@types/dagre": "^0.7.40", @@ -39,18 +40,17 @@ "html-webpack-plugin": "^3.2.0", "jest-junit": "^6.4.0", "js-yaml": "^3.13.1", - "jscs": "^3.0.7", "json-merge-patch": "^0.2.3", "minimatch": "^3.0.4", "moment": "^2.24.0", "monaco-editor": "^0.15.6", "monaco-editor-webpack-plugin": "^1.7.0", - "node-sass": "^4.14.1", + "node-sass": "^6.0.1", "prop-types": "^15.6.0", "raw-loader": "^0.5.1", "react": "^16.9.3", "react-autocomplete": "^1.8.1", - "react-diff-view": "^2.1.4", + "react-diff-view": "^2.4.7", "react-dom": "^16.9.3", "react-form": "2.16.0", "react-ga": "^2.6.0", @@ -70,7 +70,7 @@ "superagent-promise": "^1.1.0", "ts-loader": "^6.0.4", "ts-node": "^4.1.0", - "tslint": "^5.16.0", + "tslint": "^6.1.3", "tslint-react": "^3.4.0", "typescript": "^4.0.3", "unidiff": "^1.0.2", @@ -80,7 +80,8 @@ }, "resolutions": { "@types/react": "16.9.3", - "@types/react-dom": "16.9.3" + "@types/react-dom": "16.9.3", + "normalize-url": "4.3.0" }, "devDependencies": { "@babel/core": "^7.7.2", @@ -98,7 +99,7 @@ "jest": "^24.9.0", "jest-transform-css": "^2.0.0", "postcss": "^8.2.10", - "prettier": "^1.18.2", + "prettier": "1.19", "react-test-renderer": "16.8.3", "ts-jest": "^24.1.0", "tslint-config-prettier": "^1.18.0", diff --git a/ui/src/app/applications/components/application-deployment-history/revision-metadata-rows.tsx b/ui/src/app/applications/components/application-deployment-history/revision-metadata-rows.tsx index 80eee7e654dbe..d92cd54a10cd1 100644 --- a/ui/src/app/applications/components/application-deployment-history/revision-metadata-rows.tsx +++ b/ui/src/app/applications/components/application-deployment-history/revision-metadata-rows.tsx @@ -34,7 +34,7 @@ export const RevisionMetadataRows = (props: {applicationName: string; source: Ap {m.message && (
-
{m.message.split('\n')[0].slice(0, 64)}
+
{m.message?.split('\n')[0].slice(0, 64)}
)}
diff --git a/ui/src/app/applications/components/application-details/application-details.scss b/ui/src/app/applications/components/application-details/application-details.scss index 75e24746145cd..d677cd68a4b04 100644 --- a/ui/src/app/applications/components/application-details/application-details.scss +++ b/ui/src/app/applications/components/application-details/application-details.scss @@ -1,4 +1,5 @@ @import 'node_modules/argo-ui/src/styles/config'; +@import 'node_modules/foundation-sites/scss/util/util'; $header: 120px; @@ -189,4 +190,17 @@ $header: 120px; &__commit-message { line-height: 1.5em; } + + @include breakpoint(xxlarge up) { + .filters-group { + position: fixed; + padding-right: 1.5em; + max-height: calc(100vh - 200px); + overflow: hidden; + } + + .filters-group:hover { + overflow-y: auto; + } + } } diff --git a/ui/src/app/applications/components/application-details/application-details.tsx b/ui/src/app/applications/components/application-details/application-details.tsx index 3ef166993b1cd..a51a852b8a402 100644 --- a/ui/src/app/applications/components/application-details/application-details.tsx +++ b/ui/src/app/applications/components/application-details/application-details.tsx @@ -1,4 +1,4 @@ -import {Checkbox as ArgoCheckbox, DropDownMenu, NotificationType, SlidingPanel, TopBarFilter} from 'argo-ui'; +import {Checkbox as ArgoCheckbox, DropDownMenu, NotificationType, SlidingPanel} from 'argo-ui'; import * as classNames from 'classnames'; import * as PropTypes from 'prop-types'; import * as React from 'react'; @@ -9,6 +9,7 @@ import {delay, filter, map, mergeMap, repeat, retryWhen} from 'rxjs/operators'; import {DataLoader, EmptyState, ErrorNotification, ObservableQuery, Page, Paginate, Revision, Timestamp} from '../../../shared/components'; import {AppContext, ContextApis} from '../../../shared/context'; import * as appModels from '../../../shared/models'; +import {ApplicationTree} from '../../../shared/models'; import {AppDetailsPreferences, AppsDetailsViewType, services} from '../../../shared/services'; import {ApplicationConditions} from '../application-conditions/application-conditions'; @@ -21,6 +22,7 @@ import {ApplicationSyncPanel} from '../application-sync-panel/application-sync-p import {ResourceDetails} from '../resource-details/resource-details'; import * as AppUtils from '../utils'; import {ApplicationResourceList} from './application-resource-list'; +import {Filters} from './application-resource-filter'; require('./application-details.scss'); @@ -29,6 +31,15 @@ interface ApplicationDetailsState { revision?: string; } +interface FilterInput { + kind: string[]; + health: string[]; + sync: string[]; + namespace: string[]; + createdWithin: number[]; // number of minutes the resource must be created within + ownership: string[]; +} + export const NodeInfo = (node?: string): {key: string; container: number} => { const nodeContainer = {key: '', container: 0}; if (node) { @@ -108,44 +119,13 @@ export class ApplicationDetails extends React.Component {({application, tree, pref}: {application: appModels.Application; tree: appModels.ApplicationTree; pref: AppDetailsPreferences}) => { tree.nodes = tree.nodes || []; - const kindsSet = new Set(tree.nodes.map(item => item.kind)); const treeFilter = this.getTreeFilter(pref.resourceFilter); - treeFilter.kind.forEach(kind => { - kindsSet.add(kind); - }); - const kinds = Array.from(kindsSet); - const noKindsFilter = pref.resourceFilter.filter(item => item.indexOf('kind:') !== 0); - const refreshing = application.metadata.annotations && application.metadata.annotations[appModels.AnnotationRefreshKey]; - - const filterTopBar: TopBarFilter = { - items: [ - {content: () => Sync}, - {value: 'sync:Synced', label: 'Synced'}, - // Unhealthy includes 'Unknown' and 'OutOfSync' - {value: 'sync:OutOfSync', label: 'OutOfSync'}, - {content: () => Health}, - {value: 'health:Healthy', label: 'Healthy'}, - {value: 'health:Progressing', label: 'Progressing'}, - {value: 'health:Degraded', label: 'Degraded'}, - {value: 'health:Missing', label: 'Missing'}, - {value: 'health:Unknown', label: 'Unknown'}, - { - content: setSelection => ( - - ) - }, - ...kinds.sort().map(kind => ({value: `kind:${kind}`, label: kind})) - ], - selectedValues: pref.resourceFilter, - selectionChanged: items => { - this.appContext.apis.navigation.goto('.', {resource: `${items.join(',')}`}); - services.viewPreferences.updatePreferences({appDetails: {...pref, resourceFilter: items}}); - } + const setFilter = (items: string[]) => { + this.appContext.apis.navigation.goto('.', {resource: items.join(',')}); + services.viewPreferences.updatePreferences({appDetails: {...pref, resourceFilter: items}}); }; - + const clearFilter = () => setFilter([]); + const refreshing = application.metadata.annotations && application.metadata.annotations[appModels.AnnotationRefreshKey]; const appNodesByName = this.groupAppNodesByKey(application, tree); const selectedItem = (this.selectedNodeKey && appNodesByName.get(this.selectedNodeKey)) || null; const isAppSelected = selectedItem === application; @@ -155,27 +135,24 @@ export class ApplicationDetails extends React.Component(); - const visibleOrphans = (pref.orphanedResources && tree.orphanedNodes) || []; - if (visibleOrphans.length > 0) { - application.status.resources.forEach(res => statusByKey.set(AppUtils.nodeKey(res), res)); - } - const orphans = visibleOrphans.map(orphan => statusByKey.get(AppUtils.nodeKey(orphan))); - - const filteredRes = application.status.resources - .filter(res => { - const resNode: ResourceTreeNode = {...res, root: null, info: null, parentRefs: [], resourceVersion: '', uid: ''}; - resNode.root = resNode; - return this.filterTreeNode(resNode, treeFilter); - }) - .concat(orphans); + const orphaned: appModels.ResourceStatus[] = pref.orphanedResources + ? (tree.orphanedNodes || []).map(node => ({ + ...node, + status: null, + health: null + })) + : []; + const filteredRes = application.status.resources.concat(orphaned).filter(res => { + const resNode: ResourceTreeNode = {...res, root: null, info: null, parentRefs: [], resourceVersion: '', uid: ''}; + resNode.root = resNode; + return this.filterTreeNode(tree, resNode, treeFilter); + }); return (
{refreshing &&

Refreshing

} + {(tree.orphanedNodes || []).length > 0 && (
)} {((pref.view === 'tree' || pref.view === 'network') && ( - this.filterTreeNode(node, treeFilter)} - selectedNodeFullName={this.selectedNodeKey} - onNodeClick={fullName => this.selectNode(fullName)} - nodeMenu={node => - AppUtils.renderResourceMenu(node, application, tree, this.appContext, this.appChanged, () => - this.getApplicationActionMenu(application) - ) - } - tree={tree} - app={application} - showOrphanedResources={pref.orphanedResources} - useNetworkingHierarchy={pref.view === 'network'} - onClearFilter={() => { - this.appContext.apis.navigation.goto('.', {resource: ''}); - services.viewPreferences.updatePreferences({appDetails: {...pref, resourceFilter: []}}); - }} - /> +
+
+ +
+
+ this.filterTreeNode(tree, node, treeFilter)} + selectedNodeFullName={this.selectedNodeKey} + onNodeClick={fullName => this.selectNode(fullName)} + nodeMenu={node => + AppUtils.renderResourceMenu(node, application, tree, this.appContext, this.appChanged, () => + this.getApplicationActionMenu(application) + ) + } + tree={tree} + app={application} + showOrphanedResources={pref.orphanedResources} + useNetworkingHierarchy={pref.view === 'network'} + onClearFilter={clearFilter} + /> +
+
)) || (pref.view === 'pods' && ( (item === 'OutOfSync' ? ['OutOfSync', 'Unknown'] : [item])).reduce((first, second) => first.concat(second), []); - return ( + const minutesAgo = (m: number) => { + const d = new Date(); + d.setTime(d.getTime() - m * 60000); + return d; + }; + const createdAt = new Date(node.createdAt); // will be falsely if the node has not been created, and so will not appear + const createdWithin = (n: number) => createdAt.getTime() > minutesAgo(n).getTime(); + + const root = node.root || ({} as ResourceTreeNode); + const hook = root && root.hook; + if ( (filterInput.kind.length === 0 || filterInput.kind.indexOf(node.kind) > -1) && - (syncStatuses.length === 0 || node.root.hook || (node.root.status && syncStatuses.indexOf(node.root.status) > -1)) && - (filterInput.health.length === 0 || node.root.hook || (node.root.health && filterInput.health.indexOf(node.root.health.status) > -1)) - ); + (syncStatuses.length === 0 || hook || (root.status && syncStatuses.indexOf(root.status) > -1)) && + (filterInput.health.length === 0 || hook || (root.health && filterInput.health.indexOf(root.health.status) > -1)) && + (filterInput.namespace.length === 0 || filterInput.namespace.includes(node.namespace)) && + (filterInput.createdWithin.length === 0 || !!filterInput.createdWithin.find(v => createdWithin(v))) + ) { + return true; + } + + if (filterInput.ownership.includes('Owned') && ownership !== 'Owners') { + const owned = tree.nodes.filter(n => (node.parentRefs || []).find(r => r.uid === n.uid)); + if (owned.find(n => this.filterTreeNode(tree, n, filterInput, 'Owned'))) { + return true; + } + } + if (filterInput.ownership.includes('Owners') && ownership !== 'Owned') { + const owners = tree.nodes.filter(n => (n.parentRefs || []).find(r => r.uid === node.uid)); + if (owners.find(n => this.filterTreeNode(tree, n, filterInput, 'Owners'))) { + return true; + } + } + + return false; } private loadAppInfo(name: string): Observable<{application: appModels.Application; tree: appModels.ApplicationTree}> { @@ -535,11 +546,14 @@ export class ApplicationDetails extends React.Component(); const health = new Array(); const sync = new Array(); - for (const item of filterInput) { + const namespace = new Array(); + const createdWithin = new Array(); + const ownership = new Array(); + for (const item of filterInput || []) { const [type, val] = item.split(':'); switch (type) { case 'kind': @@ -551,9 +565,18 @@ export class ApplicationDetails extends React.Component self.indexOf(value) === index; + +function toOption(label: string) { + return {label}; +} + +export const Filters = (props: {pref: AppDetailsPreferences; tree: ApplicationTree; onSetFilter: (items: string[]) => void; onClearFilter: () => void}) => { + const {pref, tree, onSetFilter} = props; + + const onClearFilter = () => { + setLoading(true); + props.onClearFilter(); + }; + + const shown = pref.hideFilters; + const setShown = (val: boolean) => services.viewPreferences.updatePreferences({appDetails: {...pref, hideFilters: val}}); + + const resourceFilter = pref.resourceFilter || []; + const removePrefix = (prefix: string) => (v: string) => v.replace(prefix + ':', ''); + + const [groupedFilters, setGroupedFilters] = React.useState<{[key: string]: string}>({}); + const [loading, setLoading] = React.useState(true); + + React.useEffect(() => { + const update: {[key: string]: string} = {}; + (resourceFilter || []).forEach(pair => { + const tmp = pair.split(':'); + if (tmp.length === 2) { + const prefix = tmp[0]; + const cur = update[prefix]; + update[prefix] = `${cur ? cur + ',' : ''}${pair}`; + } + }); + setGroupedFilters(update); + setLoading(false); + }, [resourceFilter, loading]); + + const setFilters = (prefix: string, values: string[]) => { + const groups = {...groupedFilters}; + groups[prefix] = values.map(v => `${prefix}:${v}`).join(','); + let strings: string[] = []; + Object.keys(groups).forEach(g => { + strings = strings.concat(groups[g].split(',').filter(f => f !== '')); + }); + onSetFilter(strings); + }; + + const ResourceFilter = (p: {label: string; prefix: string; options: {label: string}[]; field?: boolean; radio?: boolean; wrap?: boolean}) => { + return loading ? ( +
Loading...
+ ) : ( + setFilters(p.prefix, v)} + options={p.options} + field={!!p.field} + radio={!!p.radio} + wrap={!!p.wrap} + /> + ); + }; + + // we need to include ones that might have been filter in other apps that do not apply to the current app, + // otherwise the user will not be able to clear them from this panel + const alreadyFilteredOn = (prefix: string) => resourceFilter.filter(f => f.startsWith(prefix + ':')).map(removePrefix(prefix)); + + const kinds = tree.nodes + .map(x => x.kind) + .concat(alreadyFilteredOn('kind')) + .filter(uniq) + .sort(); + const namespaces = tree.nodes + .map(x => x.namespace) + .concat(alreadyFilteredOn('namespace')) + .filter(uniq) + .sort(); + + const selectedFor = (prefix: string) => { + return groupedFilters[prefix] ? groupedFilters[prefix].split(',').map(removePrefix(prefix)) : []; + }; + + return ( + +
+ {ResourceFilter({label: 'KINDS', prefix: 'kind', options: kinds.map(toOption), field: true})} + {ResourceFilter({ + label: 'SYNC STATUS', + prefix: 'sync', + options: ['Synced', 'OutOfSync'].map(label => ({ + label, + icon: + })) + })} +
+ {ResourceFilter({ + label: 'HEALTH STATUS', + prefix: 'health', + options: ['Healthy', 'Progressing', 'Degraded', 'Suspended', 'Missing', 'Unknown'].map(label => ({ + label, + icon: + })) + })} +
+ {namespaces.length > 1 && + ResourceFilter({label: 'NAMESPACES', prefix: 'namespace', options: (namespaces || []).filter(l => l && l !== '').map(toOption), field: true})} + {ResourceFilter({label: 'OWNERSHIP', prefix: 'ownership', wrap: true, options: ['Owners', 'Owned'].map(toOption)})} + {ResourceFilter({label: 'AGE', prefix: 'createdWithin', options: ['1m', '3m', '5m', '15m', '60m'].map(toOption), radio: true, wrap: true})} +
+
+ ); +}; diff --git a/ui/src/app/applications/components/application-pod-view/pod-view.scss b/ui/src/app/applications/components/application-pod-view/pod-view.scss index 74c2a5e86e909..7661533275aa3 100644 --- a/ui/src/app/applications/components/application-pod-view/pod-view.scss +++ b/ui/src/app/applications/components/application-pod-view/pod-view.scss @@ -120,7 +120,7 @@ $num-stats: 2; &--suspended { background-color: $argo-status-warning-color; &:hover { - background-color: $argo-status-warning-color - #111; + background-color: darken($argo-status-warning-color, 10%); } } &--running, diff --git a/ui/src/app/applications/components/application-pod-view/pod-view.tsx b/ui/src/app/applications/components/application-pod-view/pod-view.tsx index 543c5decfd382..aee4f062cc4bc 100644 --- a/ui/src/app/applications/components/application-pod-view/pod-view.tsx +++ b/ui/src/app/applications/components/application-pod-view/pod-view.tsx @@ -140,7 +140,7 @@ export class PodView extends React.Component {
) : null} - {group.info.map(infoItem => ( + {group.info?.map(infoItem => (
{infoItem.value}
))}
@@ -168,7 +168,7 @@ export class PodView extends React.Component { popperOptions={{ modifiers: { preventOverflow: { - enabled: false + enabled: true }, flip: { enabled: false @@ -304,9 +304,7 @@ export class PodView extends React.Component { } const statusByKey = new Map(); - if (this.props.app) { - this.props.app.status.resources.forEach(res => statusByKey.set(nodeKey(res), res)); - } + this.props.app.status?.resources?.forEach(res => statusByKey.set(nodeKey(res), res)); (tree.nodes || []).forEach((rnode: ResourceTreeNode) => { // make sure each node has not null/undefined parentRefs field rnode.parentRefs = rnode.parentRefs || []; @@ -344,7 +342,7 @@ export class PodView extends React.Component { } as Pod; // Get node name for Pod - rnode.info.forEach(i => { + rnode.info?.forEach(i => { if (i.name === 'Node') { p.spec.nodeName = i.value; } @@ -363,7 +361,10 @@ export class PodView extends React.Component { kind: 'node', name: 'Unschedulable', pods: [p], - info: [{name: 'Kernel Version', value: 'N/A'}, {name: 'OS/Arch', value: 'N/A'}], + info: [ + {name: 'Kernel Version', value: 'N/A'}, + {name: 'OS/Arch', value: 'N/A'} + ], hostResourcesInfo: [] }; } diff --git a/ui/src/app/applications/components/application-resource-tree/application-resource-tree.tsx b/ui/src/app/applications/components/application-resource-tree/application-resource-tree.tsx index 6de3b7232e5e5..f7d5e126bd170 100644 --- a/ui/src/app/applications/components/application-resource-tree/application-resource-tree.tsx +++ b/ui/src/app/applications/components/application-resource-tree/application-resource-tree.tsx @@ -399,7 +399,11 @@ export const ApplicationResourceTree = (props: ApplicationResourceTreeProps) => graph.setNode(EXTERNAL_TRAFFIC_NODE, {height: NODE_HEIGHT, width: 30, type: NODE_TYPES.externalTraffic}); externalRoots.sort(compareNodes).forEach(root => { const loadBalancers = root.networkingInfo.ingress.map(ingress => ingress.hostname || ingress.ip); - processNode(root, root, loadBalancers.map(lb => colorsBySource.get(lb))); + processNode( + root, + root, + loadBalancers.map(lb => colorsBySource.get(lb)) + ); loadBalancers.forEach(key => { const loadBalancerNodeKey = `${EXTERNAL_TRAFFIC_NODE}:${key}`; graph.setNode(loadBalancerNodeKey, { diff --git a/ui/src/app/applications/components/application-status-panel/revision-metadata-panel.tsx b/ui/src/app/applications/components/application-status-panel/revision-metadata-panel.tsx index 4c7a05856d315..5d8af7ccebea4 100644 --- a/ui/src/app/applications/components/application-status-panel/revision-metadata-panel.tsx +++ b/ui/src/app/applications/components/application-status-panel/revision-metadata-panel.tsx @@ -51,7 +51,7 @@ export const RevisionMetadataPanel = (props: {appName: string; type: string; rev )}
Comment:
-
{m.message.split('\n')[0].slice(0, 64)}
+
{m.message?.split('\n')[0].slice(0, 64)}
diff --git a/ui/src/app/applications/components/application-sync-panel/application-sync-panel.tsx b/ui/src/app/applications/components/application-sync-panel/application-sync-panel.tsx index 533423411f1d6..4a93f8b8541a4 100644 --- a/ui/src/app/applications/components/application-sync-panel/application-sync-panel.tsx +++ b/ui/src/app/applications/components/application-sync-panel/application-sync-panel.tsx @@ -114,7 +114,16 @@ export const ApplicationSyncPanel = ({application, selectedResource, hide}: {app
{!formApi.values.resources.every((item: boolean) => item) && (
WARNING: partial synchronization is not recorded in history
diff --git a/ui/src/app/applications/components/application-urls.tsx b/ui/src/app/applications/components/application-urls.tsx index 24c1d88f1c286..ff743fc3d63f3 100644 --- a/ui/src/app/applications/components/application-urls.tsx +++ b/ui/src/app/applications/components/application-urls.tsx @@ -37,7 +37,7 @@ export const ApplicationURLs = ({urls}: {urls: string[]}) => { return ( ((externalLinks || []).length > 0 && ( - + )) || null ); diff --git a/ui/src/app/applications/components/applications-list/applications-filter.tsx b/ui/src/app/applications/components/applications-list/applications-filter.tsx index bc483b8bdc7ea..32458f202f5d6 100644 --- a/ui/src/app/applications/components/applications-list/applications-filter.tsx +++ b/ui/src/app/applications/components/applications-list/applications-filter.tsx @@ -1,232 +1,170 @@ -import {Checkbox, DataLoader, Tooltip} from 'argo-ui'; -import * as classNames from 'classnames'; +import {useData} from 'argo-ui/v2'; +import * as minimatch from 'minimatch'; import * as React from 'react'; - -import {TagsInput} from '../../../shared/components'; -import * as models from '../../../shared/models'; +import {Application, ApplicationDestination, Cluster, HealthStatusCode, HealthStatuses, SyncStatusCode, SyncStatuses} from '../../../shared/models'; import {AppsListPreferences, services} from '../../../shared/services'; +import {Filter, FiltersGroup} from '../filter/filter'; +import * as LabelSelector from '../label-selector'; +import {ComparisonStatusIcon, HealthStatusIcon} from '../utils'; + +export interface FilterResult { + projects: boolean; + repos: boolean; + sync: boolean; + health: boolean; + namespaces: boolean; + clusters: boolean; + labels: boolean; +} + +export interface FilteredApp extends Application { + filterResult: FilterResult; +} + +export function getFilterResults(applications: Application[], pref: AppsListPreferences): FilteredApp[] { + return applications.map(app => ({ + ...app, + filterResult: { + projects: pref.projectsFilter.length === 0 || pref.projectsFilter.includes(app.spec.project), + repos: pref.reposFilter.length === 0 || pref.reposFilter.includes(app.spec.source.repoURL), + sync: pref.syncFilter.length === 0 || pref.syncFilter.includes(app.status.sync.status), + health: pref.healthFilter.length === 0 || pref.healthFilter.includes(app.status.health.status), + namespaces: pref.namespacesFilter.length === 0 || pref.namespacesFilter.some(ns => app.spec.destination.namespace && minimatch(app.spec.destination.namespace, ns)), + clusters: + pref.clustersFilter.length === 0 || + pref.clustersFilter.some( + selector => + (app.spec.destination.server && selector.includes(app.spec.destination.server)) || + (app.spec.destination.name && selector.includes(app.spec.destination.name)) + ), + labels: pref.labelsFilter.length === 0 || pref.labelsFilter.every(selector => LabelSelector.match(selector, app.metadata.labels)) + } + })); +} -export interface ApplicationsFilterProps { - clusters: models.Cluster[]; - applications: models.Application[]; +const optionsFrom = (options: string[], filter: string[]) => { + return options + .filter(s => filter.indexOf(s) === -1) + .map(item => { + return {label: item}; + }); +}; + +interface AppFilterProps { + apps: FilteredApp[]; pref: AppsListPreferences; - onChange: (pref: AppsListPreferences) => any; + onChange: (newPrefs: AppsListPreferences) => void; } -const maxFilterItemsCount = 10; - -class ItemsFilter extends React.Component< - { - items: {name: string; count: number}[]; - type: string; - selected: string[]; - onChange: (selected: string[]) => any; - }, - { - expanded: boolean; - } -> { - constructor(props: any) { - super(props); - this.state = {expanded: false}; +const getCounts = (apps: FilteredApp[], filterType: keyof FilterResult, filter: (app: Application) => string, init?: string[]) => { + const map = new Map(); + if (init) { + init.forEach(key => map.set(key, 0)); } + // filter out all apps that does not match other filters and ignore this filter result + apps.filter(app => filter(app) && Object.keys(app.filterResult).every((key: keyof FilterResult) => key === filterType || app.filterResult[key])).forEach(app => + map.set(filter(app), (map.get(filter(app)) || 0) + 1) + ); + return map; +}; - public render() { - const unavailableSelected = this.props.selected.filter(selected => !this.props.items.some(item => item.name === selected)); - const items = this.props.items.sort((first, second) => (first.name > second.name ? 1 : -1)).concat(unavailableSelected.map(selected => ({name: selected, count: 0}))); - return ( - -
    - {items.map(item => ( -
  • -
    - -1} - id={`filter-${this.props.type}-${item.name}`} - onChange={() => { - const newSelected = this.props.selected.slice(); - const index = newSelected.indexOf(item.name); - if (index > -1) { - newSelected.splice(index, 1); - } else { - newSelected.push(item.name); - } - this.props.onChange(newSelected); - }} - />{' '} - -
    {' '} - {item.count} -
  • - ))} -
- {items.length > maxFilterItemsCount && this.setState({expanded: !this.state.expanded})}>{this.state.expanded ? 'collapse' : 'expand'}} -
- ); - } -} +const getOptions = (apps: FilteredApp[], filterType: keyof FilterResult, filter: (app: Application) => string, keys: string[], getIcon?: (k: string) => React.ReactNode) => { + const counts = getCounts(apps, filterType, filter, keys); + return keys.map(k => { + return { + label: k, + icon: getIcon && getIcon(k), + count: counts.get(k) + }; + }); +}; + +const SyncFilter = (props: AppFilterProps) => ( + props.onChange({...props.pref, syncFilter: s})} + options={getOptions( + props.apps, + 'sync', + app => app.status.sync.status, + Object.keys(SyncStatuses), + s => ( + + ) + )} + /> +); + +const HealthFilter = (props: AppFilterProps) => ( + props.onChange({...props.pref, healthFilter: s})} + options={getOptions( + props.apps, + 'health', + app => app.status.health.status, + Object.keys(HealthStatuses), + s => ( + + ) + )} + /> +); -function getLabelsSuggestions(labels: Map>) { +const LabelsFilter = (props: AppFilterProps) => { + const labels = new Map>(); + props.apps + .filter(app => app.metadata && app.metadata.labels) + .forEach(app => + Object.keys(app.metadata.labels).forEach(label => { + let values = labels.get(label); + if (!values) { + values = new Set(); + labels.set(label, values); + } + values.add(app.metadata.labels[label]); + }) + ); const suggestions = new Array(); Array.from(labels.entries()).forEach(([label, values]) => { suggestions.push(label); values.forEach(val => suggestions.push(`${label}=${val}`)); }); - return suggestions; -} + const labelOptions = suggestions.map(s => { + return {label: s}; + }); -export class ApplicationsFilter extends React.Component { - constructor(props: ApplicationsFilterProps) { - super(props); - this.state = {expanded: false}; - } + return props.onChange({...props.pref, labelsFilter: s})} field={true} options={labelOptions} />; +}; - public render() { - const {applications, pref, onChange} = this.props; - - const sync = new Map(); - Object.keys(models.SyncStatuses).forEach(key => sync.set(models.SyncStatuses[key], 0)); - applications.filter(app => app.status.sync.status).forEach(app => sync.set(app.status.sync.status, (sync.get(app.status.sync.status) || 0) + 1)); - const health = new Map(); - Object.keys(models.HealthStatuses).forEach(key => health.set(models.HealthStatuses[key], 0)); - applications.filter(app => app.status.health.status).forEach(app => health.set(app.status.health.status, (health.get(app.status.health.status) || 0) + 1)); - const labels = new Map>(); - applications - .filter(app => app.metadata && app.metadata.labels) - .forEach(app => - Object.keys(app.metadata.labels).forEach(label => { - let values = labels.get(label); - if (!values) { - values = new Set(); - labels.set(label, values); - } - values.add(app.metadata.labels[label]); - }) - ); - - const filtersCount = AppsListPreferences.countEnabledFilters(pref); - - return ( -
{ - if (window.innerWidth < 1440) { - this.setState({expanded: !this.state.expanded}); - } - }}> -
- - - -
-
- {filtersCount} Filter{filtersCount === 1 ? '' : 's'} - - { - AppsListPreferences.clearFilters(this.props.pref); - this.props.onChange(this.props.pref); - }} - /> - -
- - this.setState({expanded: !this.state.expanded})} - /> - -
-
-
-
Sync
- onChange({...pref, syncFilter: selected})} - items={Array.from(sync.keys()).map(status => ({name: status, count: sync.get(status) || 0}))} - type='sync' - /> -
-
-
Health
- onChange({...pref, healthFilter: selected})} - items={Array.from(health.keys()).map(status => ({name: status, count: health.get(status) || 0}))} - type='health' - /> -
-
-
-
Labels
-
    -
  • - onChange({...pref, labelsFilter: selected})} - /> -
  • -
-
Projects
-
    -
  • - services.projects.list('items.metadata.name')}> - {projects => { - const projAppCount = new Map(); - projects.forEach(proj => projAppCount.set(proj.metadata.name, 0)); - applications.forEach(app => projAppCount.set(app.spec.project, (projAppCount.get(app.spec.project) || 0) + 1)); - return ( - proj.metadata.name)} - tags={pref.projectsFilter} - onChange={selected => onChange({...pref, projectsFilter: selected})} - /> - ); - }} - -
  • -
-
Clusters
-
    -
  • - this.getClusterDetail(app.spec.destination)).filter(item => !!item))).filter( - ns => pref.clustersFilter.indexOf(ns) === -1 - )} - tags={pref.clustersFilter} - onChange={selected => onChange({...pref, clustersFilter: selected})} - /> -
  • -
-
Namespaces
-
    -
  • - app.spec.destination.namespace).filter(item => !!item))).filter( - ns => pref.namespacesFilter.indexOf(ns) === -1 - )} - tags={pref.namespacesFilter} - onChange={selected => onChange({...pref, namespacesFilter: selected})} - /> -
  • -
-
-
-
-
- ); - } +const ProjectFilter = (props: AppFilterProps) => { + const [projects, loading, error] = useData( + () => services.projects.list('items.metadata.name'), + null, + () => null + ); + const projectOptions = (projects || []).map(proj => { + return {label: proj.metadata.name}; + }); + return ( + props.onChange({...props.pref, projectsFilter: s})} + field={true} + options={projectOptions} + error={error.state} + retry={error.retry} + loading={loading} + /> + ); +}; - private getClusterDetail(dest: models.ApplicationDestination): string { - const cluster = this.props.clusters.find(target => target.name === dest.name || target.server === dest.server); +const ClusterFilter = (props: AppFilterProps) => { + const getClusterDetail = (dest: ApplicationDestination, clusterList: Cluster[]): string => { + const cluster = (clusterList || []).find(target => target.name === dest.name || target.server === dest.server); if (!cluster) { return dest.server || dest.name; } @@ -234,5 +172,56 @@ export class ApplicationsFilter extends React.Component services.clusters.list()); + const clusterOptions = optionsFrom( + Array.from(new Set(props.apps.map(app => getClusterDetail(app.spec.destination, clusters)).filter(item => !!item))), + props.pref.clustersFilter + ); + + return ( + props.onChange({...props.pref, clustersFilter: s})} + field={true} + options={clusterOptions} + error={error.state} + retry={error.retry} + loading={loading} + /> + ); +}; + +const NamespaceFilter = (props: AppFilterProps) => { + const namespaceOptions = optionsFrom(Array.from(new Set(props.apps.map(app => app.spec.destination.namespace).filter(item => !!item))), props.pref.namespacesFilter); + return ( + props.onChange({...props.pref, namespacesFilter: s})} + field={true} + options={namespaceOptions} + /> + ); +}; + +export const ApplicationsFilter = (props: AppFilterProps) => { + const setShown = (val: boolean) => { + services.viewPreferences.updatePreferences({appList: {...props.pref, hideFilters: !val}}); + }; + + return ( + + + +
+ + + + +
+
+ ); +}; diff --git a/ui/src/app/applications/components/applications-list/applications-list.scss b/ui/src/app/applications/components/applications-list/applications-list.scss index 88f8d930b2559..1e2a65ae7e27a 100644 --- a/ui/src/app/applications/components/applications-list/applications-list.scss +++ b/ui/src/app/applications/components/applications-list/applications-list.scss @@ -67,79 +67,6 @@ } } - $filters-container-collapsed-height: 3em; - $filters-container-box-shadow: 1px 1px 3px $argo-color-gray-5; - - &__filters-container { - max-height: $filters-container-collapsed-height; - overflow: hidden; - position: relative; - border-radius: $border-radius; - box-shadow: $filters-container-box-shadow; - padding: 0 1em 0.75em 1em; - margin: 33px 0; - background-color: white; - transition: max-height 0.25s cubic-bezier(0, 1, 0, 1); - cursor: pointer; - - ul { - margin: 0; - } - - &--expanded { - max-height: calc(1.55em * 17); - transition: max-height 1s ease-in-out; - } - } - - $filters-title-border-bottom: 1px solid $argo-color-gray-3; - - &__filters-title { - height: $filters-container-collapsed-height; - padding: 0.25em 0; - display: flex; - align-items: center; - - &--expanded { - border-bottom: $filters-title-border-bottom; - } - - &__counter { - margin-right: 0; - width: 10ch; - } - - &__expander { - cursor: pointer; - margin-left: 1em; - } - } - - @include breakpoint(xxlarge up) { - &__filters-container { - max-height: 100%; - transition: max-height 0.5s ease-in-out; - cursor: default; - } - - &__filters-title { - border-bottom: $filters-title-border-bottom; - } - - &__filters-title__expander { - display: none; - } - } - - &__filter { - li { - list-style: none; - } - max-height: calc(1.55em * 14); - transition: max-height 0.25s cubic-bezier(0, 1, 0, 1); - overflow-y: auto; - } - &__view-type { white-space: nowrap; i { @@ -156,22 +83,6 @@ } } - &__filter-title { - margin: 0.5em 0 0 0; - color: $argo-color-gray-7; - text-transform: uppercase; - } - - &__filter-label { - vertical-align: bottom; - width: calc(100% - 50px); - overflow: hidden; - text-overflow: ellipsis; - display: inline-block; - white-space: nowrap; - margin-right: 10px; - } - &__table-icon { display: inline-block; margin-right: 10px; @@ -252,4 +163,10 @@ top: 1em; right: 1em; } + + &__external-links-icon-container { + position: relative; + display: inline-block; + width: 28px; + } } diff --git a/ui/src/app/applications/components/applications-list/applications-list.tsx b/ui/src/app/applications/components/applications-list/applications-list.tsx index f20158041815b..db672cbdb8612 100644 --- a/ui/src/app/applications/components/applications-list/applications-list.tsx +++ b/ui/src/app/applications/components/applications-list/applications-list.tsx @@ -1,12 +1,10 @@ import {Autocomplete, ErrorNotification, MockupList, NotificationType, SlidingPanel, Toolbar} from 'argo-ui'; import * as classNames from 'classnames'; -import * as minimatch from 'minimatch'; import * as React from 'react'; import {Key, KeybindingContext, KeybindingProvider} from 'react-keyhooks'; import {RouteComponentProps} from 'react-router'; import {combineLatest, from, merge, Observable} from 'rxjs'; import {bufferTime, delay, filter, map, mergeMap, repeat, retryWhen} from 'rxjs/operators'; - import {AddAuthToToolbar, ClusterCtx, DataLoader, EmptyState, ObservableQuery, Page, Paginate, Query, Spinner} from '../../../shared/components'; import {Consumer, Context, ContextApis} from '../../../shared/context'; import * as models from '../../../shared/models'; @@ -14,9 +12,9 @@ import {AppsListPreferences, AppsListViewType, services} from '../../../shared/s import {ApplicationCreatePanel} from '../application-create-panel/application-create-panel'; import {ApplicationSyncPanel} from '../application-sync-panel/application-sync-panel'; import {ApplicationsSyncPanel} from '../applications-sync-panel/applications-sync-panel'; -import * as LabelSelector from '../label-selector'; import * as AppUtils from '../utils'; -import {ApplicationsFilter} from './applications-filter'; +import {ApplicationsFilter, FilteredApp, getFilterResults} from './applications-filter'; +import {ApplicationsStatusBar} from './applications-status-bar'; import {ApplicationsSummary} from './applications-summary'; import {ApplicationsTable} from './applications-table'; import {ApplicationTiles} from './applications-tiles'; @@ -143,18 +141,12 @@ const ViewPref = ({children}: {children: (pref: AppsListPreferences & {page: num ); -function filterApps(applications: models.Application[], pref: AppsListPreferences, search: string) { - return applications.filter( - app => - (search === '' || app.metadata.name.includes(search)) && - (pref.projectsFilter.length === 0 || pref.projectsFilter.includes(app.spec.project)) && - (pref.reposFilter.length === 0 || pref.reposFilter.includes(app.spec.source.repoURL)) && - (pref.syncFilter.length === 0 || pref.syncFilter.includes(app.status.sync.status)) && - (pref.healthFilter.length === 0 || pref.healthFilter.includes(app.status.health.status)) && - (pref.namespacesFilter.length === 0 || pref.namespacesFilter.some(ns => app.spec.destination.namespace && minimatch(app.spec.destination.namespace, ns))) && - (pref.clustersFilter.length === 0 || pref.clustersFilter.some(server => server === (app.spec.destination.server || app.spec.destination.name))) && - (pref.labelsFilter.length === 0 || pref.labelsFilter.every(selector => LabelSelector.match(selector, app.metadata.labels))) - ); +function filterApps(applications: models.Application[], pref: AppsListPreferences, search: string): {filteredApps: models.Application[]; filterResults: FilteredApp[]} { + const filterResults = getFilterResults(applications, pref); + return { + filterResults, + filteredApps: filterResults.filter(app => (search === '' || app.metadata.name.includes(search)) && Object.values(app.filterResult).every(val => val)) + }; } function tryJsonParse(input: string) { @@ -287,6 +279,7 @@ export const ApplicationsList = (props: RouteComponentProps<{}>) => { const clusters = React.useMemo(() => services.clusters.list(), []); const [isAppCreatePending, setAppCreatePending] = React.useState(false); const loaderRef = React.useRef(); + function refreshApp(appName: string) { // app refreshing might be done too quickly so that UI might miss it due to event batching // add refreshing annotation in the UI to improve user experience @@ -384,7 +377,7 @@ export const ApplicationsList = (props: RouteComponentProps<{}>) => {
{pref => { - const filteredApps = filterApps(applications, pref, pref.search); + const {filteredApps, filterResults} = filterApps(applications, pref, pref.search); return applications.length === 0 && (pref.labelsFilter || []).length === 0 ? (

No applications yet

@@ -399,19 +392,7 @@ export const ApplicationsList = (props: RouteComponentProps<{}>) => { ) : (
- services.clusters.list()}> - {clusterList => { - return ( - onFilterPrefChanged(ctx, newPref)} - /> - ); - }} - - + onFilterPrefChanged(ctx, newPrefs)} pref={pref} /> {syncAppsInput && ( ) => {
{(pref.view === 'summary' && ) || ( 1 && } preferencesKey='applications-list' page={pref.page} emptyState={() => ( diff --git a/ui/src/app/applications/components/applications-list/applications-status-bar.scss b/ui/src/app/applications/components/applications-list/applications-status-bar.scss new file mode 100644 index 0000000000000..f6bbf6c6e09f8 --- /dev/null +++ b/ui/src/app/applications/components/applications-list/applications-status-bar.scss @@ -0,0 +1,32 @@ +@import 'node_modules/argo-ui/src/styles/config'; + +.status-bar { + $height: 16px; + $border-width: 2px; + margin: 0px; + width: 80%; + height: $height; + display: flex; + border-radius: 25px; + border: $border-width solid white; + + &__segment { + &__fill { + height: $height - (2 * $border-width); + } + } + + &__segment:first-child { + border-top-left-radius: 25px; + border-bottom-left-radius: 25px; + } + + &__segment:last-child { + border-top-right-radius: 25px; + border-bottom-right-radius: 25px; + } + + &__segment:not(:first-child) { + border-left: 3px solid white; + } +} diff --git a/ui/src/app/applications/components/applications-list/applications-status-bar.tsx b/ui/src/app/applications/components/applications-list/applications-status-bar.tsx new file mode 100644 index 0000000000000..922a9649369d4 --- /dev/null +++ b/ui/src/app/applications/components/applications-list/applications-status-bar.tsx @@ -0,0 +1,94 @@ +import {Text, Tooltip} from 'argo-ui/v2'; +import * as React from 'react'; +import {COLORS} from '../../../shared/components'; +import {Consumer} from '../../../shared/context'; +import * as models from '../../../shared/models'; + +require('./applications-status-bar.scss'); + +export interface ApplicationsStatusBarProps { + applications: models.Application[]; +} + +export const ApplicationsStatusBar = ({applications}: ApplicationsStatusBarProps) => { + const readings = [ + { + name: 'Healthy', + value: applications.filter(app => app.status.health.status === 'Healthy').length, + color: COLORS.health.healthy + }, + { + name: 'Progressing', + value: applications.filter(app => app.status.health.status === 'Progressing').length, + color: COLORS.health.progressing + }, + { + name: 'Degraded', + value: applications.filter(app => app.status.health.status === 'Degraded').length, + color: COLORS.health.degraded + }, + { + name: 'Suspended', + value: applications.filter(app => app.status.health.status === 'Suspended').length, + color: COLORS.sync.out_of_sync + }, + { + name: 'Missing, Unknown', + value: applications.filter(app => app.status.health.status === 'Unknown' || app.status.health.status === 'Missing').length, + color: '#6D7F8B' // $argo-color-gray-6 + } + ]; + + // will sort readings by value greatest to lowest, then by name + readings.sort((a, b) => (a.value < b.value ? 1 : a.value === b.value ? (a.name > b.name ? 1 : -1) : -1)); + + const totalItems = readings.reduce((total, i) => { + return total + i.value; + }, 0); + + const getTooltipContent = (item: {name: string; value: number; color: string}) => { + if (item.name === 'Missing, Unknown') { + const missing = applications.filter(app => app.status.health.status === 'Missing').length; + const unknown = applications.filter(app => app.status.health.status === 'Unknown').length; + if (missing) { + if (unknown) { + return `${missing} Missing, ${unknown} Unknown`; + } + return `${missing} Missing`; + } + return {unknown} Unknown; + } else { + return ( + + {item.value} {item.name} + + ); + } + }; + + return ( + + {ctx => ( + <> + {totalItems > 1 && ( +
+ {readings && + readings.length > 1 && + readings.map((item, i) => { + if (item.value > 0) { + return ( +
+ +
+ +
+ ); + } + })} +
+ )} + + )} + + ); +}; diff --git a/ui/src/app/applications/components/applications-list/flex-top-bar.scss b/ui/src/app/applications/components/applications-list/flex-top-bar.scss index 52f3c8b27cf06..64348db04faa7 100644 --- a/ui/src/app/applications/components/applications-list/flex-top-bar.scss +++ b/ui/src/app/applications/components/applications-list/flex-top-bar.scss @@ -31,7 +31,7 @@ &__padder { height: 50px; @include breakpoint(medium down) { - height: 100px; + height: 150px; } } } diff --git a/ui/src/app/applications/components/filter/filter.scss b/ui/src/app/applications/components/filter/filter.scss new file mode 100644 index 0000000000000..14e676ccae62e --- /dev/null +++ b/ui/src/app/applications/components/filter/filter.scss @@ -0,0 +1,112 @@ +@import 'node_modules/argo-ui/src/styles/config'; +@import 'node_modules/foundation-sites/scss/util/util'; + +.filter { + background-color: white; + padding: 10px; + box-shadow: 1px 1px 2px 0px rgba(0, 0, 0, 0.1); + border-radius: 5px; + margin-bottom: 1em; + + &__header { + display: flex; + align-items: center; + flex-wrap: wrap; + font-size: 13px; + color: $argo-color-gray-5; + font-weight: 500; + margin-bottom: 0.5em; + height: 28px; + } + + &__collapse { + cursor: pointer; + margin-left: auto; + color: $argo-color-gray-7; + font-size: 20px; + } + + &__error { + color: $argo-failed-color-dark; + + &__retry { + color: $argo-running-color; + cursor: pointer; + } + } + + &__loading { + color: $argo-running-color; + } + + &__error, + &__loading { + text-align: center; + } + + &--wrap { + overflow: auto; + .checkbox__item { + min-width: 4.5em; + float: left; + } + } +} + +.filters-group { + &__container { + display: flex; + &__title { + margin-bottom: 1em; + font-size: 13px; + color: $argo-color-gray-6; + display: flex; + align-items: center; + width: 200px; + } + + .filter { + margin-right: 15px; + height: max-content; + min-width: 200px; + max-width: 200px; + } + + &__subgroup { + align-self: start; + display: flex; + flex-wrap: wrap; + } + } + + &__container--hidden { + display: none; + } +} + +@include breakpoint(xxlarge up) { + .filter { + width: 100%; + margin-right: 0; + } + + .filters-group { + &__container { + width: 260px; + flex-wrap: wrap; + padding-bottom: 6em; + + &__title .action-button { + display: none; + } + + &__text-filters { + width: 100%; + } + } + + &__container--hidden { + display: flex; + } + } +} \ No newline at end of file diff --git a/ui/src/app/applications/components/filter/filter.tsx b/ui/src/app/applications/components/filter/filter.tsx new file mode 100644 index 0000000000000..9feff5e25447d --- /dev/null +++ b/ui/src/app/applications/components/filter/filter.tsx @@ -0,0 +1,142 @@ +import {ActionButton, Autocomplete, CheckboxOption, CheckboxRow} from 'argo-ui/v2'; +import classNames from 'classnames'; +import * as React from 'react'; + +import './filter.scss'; + +interface FilterProps { + selected: string[]; + setSelected: (items: string[]) => void; + options?: CheckboxOption[]; + label?: string; + labels?: string[]; + field?: boolean; + error?: boolean; + retry?: () => void; + loading?: boolean; + radio?: boolean; + wrap?: boolean; +} + +export const FiltersGroup = (props: {children?: React.ReactNode; appliedFilter?: string[]; shown: boolean; setShown: (val: boolean) => void; onClearFilter?: () => void}) => { + return ( +
+
+ FILTERS + {props.appliedFilter?.length > 0 && props.onClearFilter && ( + props.onClearFilter()} style={{marginLeft: 'auto', fontSize: '12px', lineHeight: '5px', display: 'block'}} /> + )} + props.setShown(!props.shown)} + style={{marginLeft: props.appliedFilter?.length > 0 ? '5px' : 'auto', fontSize: '12px', lineHeight: '5px'}} + /> +
+
{props.children}
+
+ ); +}; + +export const Filter = (props: FilterProps) => { + const init = {} as {[label: string]: boolean}; + props.selected.forEach(s => (init[s] = true)); + + const [values, setValues] = React.useState(init); + const [tags, setTags] = React.useState([]); + const [input, setInput] = React.useState(''); + const [collapsed, setCollapsed] = React.useState(false); + + const labels = props.labels || props.options.map(o => o.label); + + React.useEffect(() => { + const map: string[] = Object.keys(values).filter(s => values[s]); + props.setSelected(map); + if (props.field) { + setTags( + Object.keys(values).map(v => { + return {label: v} as CheckboxOption; + }) + ); + } + }, [values]); + + React.useEffect(() => { + if (props.selected.length === 0) { + setValues({} as {[label: string]: boolean}); + setInput(''); + } + }, [props.selected.length]); + + return ( +
+
+ {props.label || 'FILTER'} + {(props.selected || []).length > 0 || (props.field && Object.keys(values).length > 0) ? ( +
{ + setValues({} as {[label: string]: boolean}); + setInput(''); + }}> + CLEAR +
+ ) : ( + setCollapsed(!collapsed)} /> + )} +
+ {!collapsed && + (props.loading ? ( + + ) : props.error ? ( + + ) : ( + + {props.field && ( + setInput(e.target.value)} + onItemClick={val => { + const update = {...values}; + update[val ? val : input] = true; + setInput(''); + setValues(update); + }} + style={{width: '100%'}} + inputStyle={{marginBottom: '0.5em', backgroundColor: 'white'}} + /> + )} + {((props.field ? tags : props.options) || []).map((opt, i) => ( + { + const update = props.radio && val ? {} : {...values}; + update[opt.label] = val; + setValues(update); + }} + option={opt} + /> + ))} + + ))} +
+ ); +}; + +const FilterError = (props: {retry: () => void}) => ( +
+ ERROR LOADING FILTER +
props.retry()} className='filter__error__retry'> + RETRY +
+
+); + +const FilterLoading = () => ( +
+ LOADING +
+); diff --git a/ui/src/app/applications/components/utils.tsx b/ui/src/app/applications/components/utils.tsx index d97926e12893c..66d6c0c80655e 100644 --- a/ui/src/app/applications/components/utils.tsx +++ b/ui/src/app/applications/components/utils.tsx @@ -166,7 +166,17 @@ export const OperationPhaseIcon = ({app}: {app: appModels.Application}) => { return ; }; -export const ComparisonStatusIcon = ({status, resource, label}: {status: appModels.SyncStatusCode; resource?: {requiresPruning?: boolean}; label?: boolean}) => { +export const ComparisonStatusIcon = ({ + status, + resource, + label, + noSpin +}: { + status: appModels.SyncStatusCode; + resource?: {requiresPruning?: boolean}; + label?: boolean; + noSpin?: boolean; +}) => { let className = 'fas fa-question-circle'; let color = COLORS.sync.unknown; let title: string = 'Unknown'; @@ -187,7 +197,7 @@ export const ComparisonStatusIcon = ({status, resource, label}: {status: appMode color = COLORS.sync.out_of_sync; break; case appModels.SyncStatuses.Unknown: - className = 'fa fa-circle-notch fa-spin'; + className = `fa fa-circle-notch ${noSpin ? '' : 'fa-spin'}`; break; } return ( @@ -421,7 +431,7 @@ export function syncStatusMessage(app: appModels.Application) { } } -export const HealthStatusIcon = ({state}: {state: appModels.HealthStatus}) => { +export const HealthStatusIcon = ({state, noSpin}: {state: appModels.HealthStatus; noSpin?: boolean}) => { let color = COLORS.health.unknown; let icon = 'fa-question-circle'; @@ -440,7 +450,7 @@ export const HealthStatusIcon = ({state}: {state: appModels.HealthStatus}) => { break; case appModels.HealthStatuses.Progressing: color = COLORS.health.progressing; - icon = 'fa fa-circle-notch fa-spin'; + icon = `fa fa-circle-notch ${noSpin ? '' : 'fa-spin'}`; break; case appModels.HealthStatuses.Missing: color = COLORS.health.missing; @@ -850,7 +860,11 @@ export function handlePageVisibility(src: () => Observable): Observable }; const start = () => { ensureUnsubscribed(); - subscription = src().subscribe((item: T) => observer.next(item), err => observer.error(err), () => observer.complete()); + subscription = src().subscribe( + (item: T) => observer.next(item), + err => observer.error(err), + () => observer.complete() + ); }; if (!document.hidden) { diff --git a/ui/src/app/shared/components/events-list/events-list.tsx b/ui/src/app/shared/components/events-list/events-list.tsx index fe175e056e836..6b5d5fa245106 100644 --- a/ui/src/app/shared/components/events-list/events-list.tsx +++ b/ui/src/app/shared/components/events-list/events-list.tsx @@ -14,21 +14,21 @@ export const EventsList = (props: {events: models.Event[]}) => {
-
REASON
-
MESSAGE
-
COUNT
-
FIRST OCCURRED
-
LAST OCCURRED
+
REASON
+
MESSAGE
+
COUNT
+
FIRST OCCURRED
+
LAST OCCURRED
{events.map(event => (
-
{event.reason}
-
{event.message}
-
{event.count}
-
{event.firstTimestamp}
-
{event.lastTimestamp}
+
{event.reason}
+
{event.message}
+
{event.count}
+
{event.firstTimestamp}
+
{event.lastTimestamp}
))} diff --git a/ui/src/app/shared/components/paginate/paginate.scss b/ui/src/app/shared/components/paginate/paginate.scss index 053961e02c503..722c14e2da2b0 100644 --- a/ui/src/app/shared/components/paginate/paginate.scss +++ b/ui/src/app/shared/components/paginate/paginate.scss @@ -50,6 +50,10 @@ } &__size-menu { + display: flex; + width: 100%; + justify-content: space-between; + align-items: center; position: absolute; z-index: 1; right: 0; diff --git a/ui/src/app/shared/components/paginate/paginate.tsx b/ui/src/app/shared/components/paginate/paginate.tsx index 09ce8838ad2a0..52eaef8879f31 100644 --- a/ui/src/app/shared/components/paginate/paginate.tsx +++ b/ui/src/app/shared/components/paginate/paginate.tsx @@ -1,5 +1,6 @@ import {DataLoader, DropDownMenu} from 'argo-ui'; +// import {ApplicationStatusBar} from '../../../applications/components/applications-list/applications-status-bar'; import * as React from 'react'; import ReactPaginate from 'react-paginate'; import {services} from '../../services'; @@ -13,9 +14,10 @@ export interface PaginateProps { data: T[]; emptyState?: () => React.ReactNode; preferencesKey?: string; + header?: React.ReactNode; } -export function Paginate({page, onPageChange, children, data, emptyState, preferencesKey}: PaginateProps) { +export function Paginate({page, onPageChange, children, data, emptyState, preferencesKey, header}: PaginateProps) { return ( services.viewPreferences.getPreferences()}> {pref => { @@ -40,6 +42,7 @@ export function Paginate({page, onPageChange, children, data, emptyState, pre /> )}
+ {header ||
} ( diff --git a/ui/src/app/shared/components/urls.test.ts b/ui/src/app/shared/components/urls.test.ts index 9e6f5e34549f7..9459dfecd7af1 100644 --- a/ui/src/app/shared/components/urls.test.ts +++ b/ui/src/app/shared/components/urls.test.ts @@ -38,7 +38,6 @@ test('gitlab.com', () => { 'https://gitlab.com/alex_collins/private-repo/commit/b1fe9426ead684d7af16958920968342ee295c1f'); }); - test('bitbucket.org', () => { testExample( 'https://alexcollinsinuit@bitbucket.org/alexcollinsinuit/test-repo.git', @@ -48,3 +47,6 @@ test('bitbucket.org', () => { 'https://bitbucket.org/alexcollinsinuit/test-repo/commits/38fb93957deb45ff546af13399a92ac0d568c350'); }); +test('empty url', () => { + expect(repoUrl('')).toBe(null); +}); diff --git a/ui/src/app/shared/components/urls.ts b/ui/src/app/shared/components/urls.ts index bd14500bdf9dd..77fa30791677b 100644 --- a/ui/src/app/shared/components/urls.ts +++ b/ui/src/app/shared/components/urls.ts @@ -12,13 +12,17 @@ function protocol(proto: string): string { } export function repoUrl(url: string): string { - const parsed = GitUrlParse(url); + try { + const parsed = GitUrlParse(url); - if (!supportedSource(parsed)) { + if (!supportedSource(parsed)) { + return null; + } + + return `${protocol(parsed.protocol)}://${parsed.resource}/${parsed.owner}/${parsed.name}`; + } catch { return null; } - - return `${protocol(parsed.protocol)}://${parsed.resource}/${parsed.owner}/${parsed.name}`; } export function revisionUrl(url: string, revision: string): string { diff --git a/ui/src/app/shared/services/applications-service.ts b/ui/src/app/shared/services/applications-service.ts index 76d57b36a8921..9f1937070899c 100644 --- a/ui/src/app/shared/services/applications-service.ts +++ b/ui/src/app/shared/services/applications-service.ts @@ -183,7 +183,7 @@ export class ApplicationsService { public getDownloadLogsURL(applicationName: string, namespace: string, podName: string, resource: {group: string; kind: string; name: string}, containerName: string): string { const search = this.getLogsQuery(namespace, podName, resource, containerName, null, false); search.set('download', 'true'); - return `/api/v1/applications/${applicationName}/logs?${search.toString()}`; + return `api/v1/applications/${applicationName}/logs?${search.toString()}`; } public getContainerLogs( diff --git a/ui/src/app/shared/services/view-preferences-service.ts b/ui/src/app/shared/services/view-preferences-service.ts index 38081ad9eb2a8..5fdea7d3da8e0 100644 --- a/ui/src/app/shared/services/view-preferences-service.ts +++ b/ui/src/app/shared/services/view-preferences-service.ts @@ -13,6 +13,7 @@ export interface AppDetailsPreferences { podView: PodViewPreferences; darkMode: boolean; followLogs: boolean; + hideFilters: boolean; } export interface PodViewPreferences { @@ -53,6 +54,7 @@ export class AppsListPreferences { public namespacesFilter: string[]; public clustersFilter: string[]; public view: AppsListViewType; + public hideFilters: boolean; } export interface ViewPreferences { @@ -71,7 +73,8 @@ const DEFAULT_PREFERENCES: ViewPreferences = { version: 1, appDetails: { view: 'tree', - resourceFilter: ['kind:Deployment', 'kind:Service', 'kind:Pod', 'kind:StatefulSet', 'kind:Ingress', 'kind:ConfigMap', 'kind:Job', 'kind:DaemonSet', 'kind:Workflow'], + hideFilters: false, + resourceFilter: [], inlineDiff: false, compactDiff: false, resourceView: 'manifest', @@ -91,7 +94,8 @@ const DEFAULT_PREFERENCES: ViewPreferences = { clustersFilter: new Array(), reposFilter: new Array(), syncFilter: new Array(), - healthFilter: new Array() + healthFilter: new Array(), + hideFilters: false }, pageSizes: {}, hideBannerContent: '' diff --git a/ui/src/app/webpack.config.js b/ui/src/app/webpack.config.js index 406ca4b1a7eb9..8c9963b4333af 100644 --- a/ui/src/app/webpack.config.js +++ b/ui/src/app/webpack.config.js @@ -25,7 +25,7 @@ const config = { path: __dirname + '/../../dist/app' }, - devtool: 'source-map', + devtool: isProd ? '' : 'source-map', resolve: { extensions: ['.ts', '.tsx', '.js', '.json'], diff --git a/ui/tslint.json b/ui/tslint.json index 5e3be99e3d6ec..be51507341d3d 100644 --- a/ui/tslint.json +++ b/ui/tslint.json @@ -14,7 +14,8 @@ "max-line-length": [true, 200], "jsx-no-lambda": false, "array-type": false, - "max-classes-per-file": false + "max-classes-per-file": false, + "newline-per-chained-call": false }, "rulesDirectory": [] } diff --git a/ui/yarn.lock b/ui/yarn.lock index 8228512bdfd76..5431264ffacb8 100644 --- a/ui/yarn.lock +++ b/ui/yarn.lock @@ -9,27 +9,19 @@ dependencies: "@babel/highlight" "^7.0.0" -"@babel/core@^7.1.0": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.5.5.tgz#17b2686ef0d6bc58f963dddd68ab669755582c30" - integrity sha512-i4qoSr2KTtce0DmkuuQBV4AuQgGPUcPXMr9L5MyYAtk06z068lQ10a4O009fe5OB/DfNV+h+qqT7ddNV8UnRjg== +"@babel/code-frame@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.14.5.tgz#23b08d740e83f49c5e59945fbf1b43e80bbf4edb" + integrity sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw== dependencies: - "@babel/code-frame" "^7.5.5" - "@babel/generator" "^7.5.5" - "@babel/helpers" "^7.5.5" - "@babel/parser" "^7.5.5" - "@babel/template" "^7.4.4" - "@babel/traverse" "^7.5.5" - "@babel/types" "^7.5.5" - convert-source-map "^1.1.0" - debug "^4.1.0" - json5 "^2.1.0" - lodash "^4.17.13" - resolve "^1.3.2" - semver "^5.4.1" - source-map "^0.5.0" + "@babel/highlight" "^7.14.5" -"@babel/core@^7.7.2": +"@babel/compat-data@^7.14.5", "@babel/compat-data@^7.14.7": + version "7.14.7" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.14.7.tgz#7b047d7a3a89a67d2258dc61f604f098f1bc7e08" + integrity sha512-nS6dZaISCXJ3+518CWiBfEr//gHyMO02uDxBkXTKZDN5POruCnOZ1N4YBRZDCabwF8nZMWBpRxIicmXtBs+fvw== + +"@babel/core@^7.1.0", "@babel/core@^7.7.2": version "7.7.2" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.7.2.tgz#ea5b99693bcfc058116f42fa1dd54da412b29d91" integrity sha512-eeD7VEZKfhK1KUXGiyPFettgF3m513f8FoBSWiQ1xTvl1RAopLs42Wp9+Ze911I6H0N9lNqJMDgoZT7gHsipeQ== @@ -49,674 +41,602 @@ semver "^5.4.1" source-map "^0.5.0" -"@babel/generator@^7.4.0", "@babel/generator@^7.5.5": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.5.5.tgz#873a7f936a3c89491b43536d12245b626664e3cf" - integrity sha512-ETI/4vyTSxTzGnU2c49XHv2zhExkv9JHLTwDAFz85kmcwuShvYG2H08FwgIguQf4JC75CBnXAUM5PqeF4fj0nQ== +"@babel/generator@^7.14.5", "@babel/generator@^7.4.0", "@babel/generator@^7.7.2": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.14.5.tgz#848d7b9f031caca9d0cd0af01b063f226f52d785" + integrity sha512-y3rlP+/G25OIX3mYKKIOlQRcqj7YgrvHxOLbVmyLJ9bPmi5ttvUmpydVjcFjZphOktWuA7ovbx91ECloWTfjIA== dependencies: - "@babel/types" "^7.5.5" + "@babel/types" "^7.14.5" jsesc "^2.5.1" - lodash "^4.17.13" source-map "^0.5.0" - trim-right "^1.0.1" -"@babel/generator@^7.7.0": - version "7.7.0" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.7.0.tgz#c6d4d1f7a0d6e139cbd01aca73170b0bff5425b4" - integrity sha512-1wdJ6UxHyL1XoJQ119JmvuRX27LRih7iYStMPZOWAjQqeAabFg3dYXKMpgihma+to+0ADsTVVt6oRyUxWZw6Mw== +"@babel/helper-annotate-as-pure@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.14.5.tgz#7bf478ec3b71726d56a8ca5775b046fc29879e61" + integrity sha512-EivH9EgBIb+G8ij1B2jAwSH36WnGvkQSEC6CkX/6v6ZFlw5fVOHvsgGF4uiEHO2GzMvunZb6tDLQEQSdrdocrA== dependencies: - "@babel/types" "^7.7.0" - jsesc "^2.5.1" - lodash "^4.17.13" - source-map "^0.5.0" + "@babel/types" "^7.14.5" -"@babel/generator@^7.7.2": - version "7.7.2" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.7.2.tgz#2f4852d04131a5e17ea4f6645488b5da66ebf3af" - integrity sha512-WthSArvAjYLz4TcbKOi88me+KmDJdKSlfwwN8CnUYn9jBkzhq0ZEPuBfkAWIvjJ3AdEV1Cf/+eSQTnp3IDJKlQ== +"@babel/helper-builder-binary-assignment-operator-visitor@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.14.5.tgz#b939b43f8c37765443a19ae74ad8b15978e0a191" + integrity sha512-YTA/Twn0vBXDVGJuAX6PwW7x5zQei1luDDo2Pl6q1qZ7hVNl0RZrhHCQG/ArGpR29Vl7ETiB8eJyrvpuRp300w== dependencies: - "@babel/types" "^7.7.2" - jsesc "^2.5.1" - lodash "^4.17.13" - source-map "^0.5.0" + "@babel/helper-explode-assignable-expression" "^7.14.5" + "@babel/types" "^7.14.5" -"@babel/helper-annotate-as-pure@^7.0.0", "@babel/helper-annotate-as-pure@^7.7.0": - version "7.7.0" - resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.7.0.tgz#efc54032d43891fe267679e63f6860aa7dbf4a5e" - integrity sha512-k50CQxMlYTYo+GGyUGFwpxKVtxVJi9yh61sXZji3zYHccK9RYliZGSTOgci85T+r+0VFN2nWbGM04PIqwfrpMg== - dependencies: - "@babel/types" "^7.7.0" - -"@babel/helper-builder-binary-assignment-operator-visitor@^7.1.0": - version "7.7.0" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.7.0.tgz#32dd9551d6ed3a5fc2edc50d6912852aa18274d9" - integrity sha512-Cd8r8zs4RKDwMG/92lpZcnn5WPQ3LAMQbCw42oqUh4s7vsSN5ANUZjMel0OOnxDLq57hoDDbai+ryygYfCTOsw== +"@babel/helper-compilation-targets@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.14.5.tgz#7a99c5d0967911e972fe2c3411f7d5b498498ecf" + integrity sha512-v+QtZqXEiOnpO6EYvlImB6zCD2Lel06RzOPzmkz/D/XgQiUu3C/Jb1LOqSt/AIA34TYi/Q+KlT8vTQrgdxkbLw== dependencies: - "@babel/helper-explode-assignable-expression" "^7.7.0" - "@babel/types" "^7.7.0" - -"@babel/helper-builder-react-jsx@^7.7.0": - version "7.7.0" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.7.0.tgz#c6b8254d305bacd62beb648e4dea7d3ed79f352d" - integrity sha512-LSln3cexwInTMYYoFeVLKnYPPMfWNJ8PubTBs3hkh7wCu9iBaqq1OOyW+xGmEdLxT1nhsl+9SJ+h2oUDYz0l2A== - dependencies: - "@babel/types" "^7.7.0" - esutils "^2.0.0" - -"@babel/helper-call-delegate@^7.4.4": - version "7.7.0" - resolved "https://registry.yarnpkg.com/@babel/helper-call-delegate/-/helper-call-delegate-7.7.0.tgz#df8942452c2c1a217335ca7e393b9afc67f668dc" - integrity sha512-Su0Mdq7uSSWGZayGMMQ+z6lnL00mMCnGAbO/R0ZO9odIdB/WNU/VfQKqMQU0fdIsxQYbRjDM4BixIa93SQIpvw== - dependencies: - "@babel/helper-hoist-variables" "^7.7.0" - "@babel/traverse" "^7.7.0" - "@babel/types" "^7.7.0" - -"@babel/helper-create-class-features-plugin@^7.7.0": - version "7.7.0" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.7.0.tgz#bcdc223abbfdd386f94196ae2544987f8df775e8" - integrity sha512-MZiB5qvTWoyiFOgootmRSDV1udjIqJW/8lmxgzKq6oDqxdmHUjeP2ZUOmgHdYjmUVNABqRrHjYAYRvj8Eox/UA== - dependencies: - "@babel/helper-function-name" "^7.7.0" - "@babel/helper-member-expression-to-functions" "^7.7.0" - "@babel/helper-optimise-call-expression" "^7.7.0" - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-replace-supers" "^7.7.0" - "@babel/helper-split-export-declaration" "^7.7.0" - -"@babel/helper-create-regexp-features-plugin@^7.7.0": - version "7.7.0" - resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.7.0.tgz#2e8badfe201cfafb5d930f46cf1e0b6f1cdcab23" - integrity sha512-ZhagAAVGD3L6MPM9/zZi7RRteonfBFLVUz3kjsnYsMAtr9hOJCKI9BAKIMpqn3NyWicPieoX779UL+7/3BEAOA== - dependencies: - "@babel/helper-regex" "^7.4.4" - regexpu-core "^4.6.0" - -"@babel/helper-define-map@^7.7.0": - version "7.7.0" - resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.7.0.tgz#60b0e9fd60def9de5054c38afde8c8ee409c7529" - integrity sha512-kPKWPb0dMpZi+ov1hJiwse9dWweZsz3V9rP4KdytnX1E7z3cTNmFGglwklzFPuqIcHLIY3bgKSs4vkwXXdflQA== - dependencies: - "@babel/helper-function-name" "^7.7.0" - "@babel/types" "^7.7.0" - lodash "^4.17.13" - -"@babel/helper-explode-assignable-expression@^7.7.0": - version "7.7.0" - resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.7.0.tgz#db2a6705555ae1f9f33b4b8212a546bc7f9dc3ef" - integrity sha512-CDs26w2shdD1urNUAji2RJXyBFCaR+iBEGnFz3l7maizMkQe3saVw9WtjG1tz8CwbjvlFnaSLVhgnu1SWaherg== - dependencies: - "@babel/traverse" "^7.7.0" - "@babel/types" "^7.7.0" - -"@babel/helper-function-name@^7.1.0": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.1.0.tgz#a0ceb01685f73355d4360c1247f582bfafc8ff53" - integrity sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw== - dependencies: - "@babel/helper-get-function-arity" "^7.0.0" - "@babel/template" "^7.1.0" - "@babel/types" "^7.0.0" - -"@babel/helper-function-name@^7.7.0": - version "7.7.0" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.7.0.tgz#44a5ad151cfff8ed2599c91682dda2ec2c8430a3" - integrity sha512-tDsJgMUAP00Ugv8O2aGEua5I2apkaQO7lBGUq1ocwN3G23JE5Dcq0uh3GvFTChPa4b40AWiAsLvCZOA2rdnQ7Q== - dependencies: - "@babel/helper-get-function-arity" "^7.7.0" - "@babel/template" "^7.7.0" - "@babel/types" "^7.7.0" - -"@babel/helper-get-function-arity@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz#83572d4320e2a4657263734113c42868b64e49c3" - integrity sha512-r2DbJeg4svYvt3HOS74U4eWKsUAMRH01Z1ds1zx8KNTPtpTL5JAsdFv8BNyOpVqdFhHkkRDIg5B4AsxmkjAlmQ== - dependencies: - "@babel/types" "^7.0.0" - -"@babel/helper-get-function-arity@^7.7.0": - version "7.7.0" - resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.7.0.tgz#c604886bc97287a1d1398092bc666bc3d7d7aa2d" - integrity sha512-tLdojOTz4vWcEnHWHCuPN5P85JLZWbm5Fx5ZsMEMPhF3Uoe3O7awrbM2nQ04bDOUToH/2tH/ezKEOR8zEYzqyw== - dependencies: - "@babel/types" "^7.7.0" - -"@babel/helper-hoist-variables@^7.7.0": - version "7.7.0" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.7.0.tgz#b4552e4cfe5577d7de7b183e193e84e4ec538c81" - integrity sha512-LUe/92NqsDAkJjjCEWkNe+/PcpnisvnqdlRe19FahVapa4jndeuJ+FBiTX1rcAKWKcJGE+C3Q3tuEuxkSmCEiQ== - dependencies: - "@babel/types" "^7.7.0" - -"@babel/helper-member-expression-to-functions@^7.7.0": - version "7.7.0" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.7.0.tgz#472b93003a57071f95a541ea6c2b098398bcad8a" - integrity sha512-QaCZLO2RtBcmvO/ekOLp8p7R5X2JriKRizeDpm5ChATAFWrrYDcDxPuCIBXKyBjY+i1vYSdcUTMIb8psfxHDPA== - dependencies: - "@babel/types" "^7.7.0" - -"@babel/helper-module-imports@^7.7.0": - version "7.7.0" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.7.0.tgz#99c095889466e5f7b6d66d98dffc58baaf42654d" - integrity sha512-Dv3hLKIC1jyfTkClvyEkYP2OlkzNvWs5+Q8WgPbxM5LMeorons7iPP91JM+DU7tRbhqA1ZeooPaMFvQrn23RHw== - dependencies: - "@babel/types" "^7.7.0" - -"@babel/helper-module-transforms@^7.1.0", "@babel/helper-module-transforms@^7.7.0": - version "7.7.0" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.7.0.tgz#154a69f0c5b8fd4d39e49750ff7ac4faa3f36786" - integrity sha512-rXEefBuheUYQyX4WjV19tuknrJFwyKw0HgzRwbkyTbB+Dshlq7eqkWbyjzToLrMZk/5wKVKdWFluiAsVkHXvuQ== - dependencies: - "@babel/helper-module-imports" "^7.7.0" - "@babel/helper-simple-access" "^7.7.0" - "@babel/helper-split-export-declaration" "^7.7.0" - "@babel/template" "^7.7.0" - "@babel/types" "^7.7.0" - lodash "^4.17.13" - -"@babel/helper-optimise-call-expression@^7.7.0": - version "7.7.0" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.7.0.tgz#4f66a216116a66164135dc618c5d8b7a959f9365" - integrity sha512-48TeqmbazjNU/65niiiJIJRc5JozB8acui1OS7bSd6PgxfuovWsvjfWSzlgx+gPFdVveNzUdpdIg5l56Pl5jqg== - dependencies: - "@babel/types" "^7.7.0" - -"@babel/helper-plugin-utils@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0.tgz#bbb3fbee98661c569034237cc03967ba99b4f250" - integrity sha512-CYAOUCARwExnEixLdB6sDm2dIJ/YgEAKDM1MOeMeZu9Ld/bDgVo8aiWrXwcY7OBh+1Ea2uUcVRcxKk0GJvW7QA== - -"@babel/helper-regex@^7.0.0", "@babel/helper-regex@^7.4.4": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/helper-regex/-/helper-regex-7.5.5.tgz#0aa6824f7100a2e0e89c1527c23936c152cab351" - integrity sha512-CkCYQLkfkiugbRDO8eZn6lRuR8kzZoGXCg3149iTk5se7g6qykSpy3+hELSwquhu+TgHn8nkLiBwHvNX8Hofcw== - dependencies: - lodash "^4.17.13" - -"@babel/helper-remap-async-to-generator@^7.7.0": - version "7.7.0" - resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.7.0.tgz#4d69ec653e8bff5bce62f5d33fc1508f223c75a7" - integrity sha512-pHx7RN8X0UNHPB/fnuDnRXVZ316ZigkO8y8D835JlZ2SSdFKb6yH9MIYRU4fy/KPe5sPHDFOPvf8QLdbAGGiyw== - dependencies: - "@babel/helper-annotate-as-pure" "^7.7.0" - "@babel/helper-wrap-function" "^7.7.0" - "@babel/template" "^7.7.0" - "@babel/traverse" "^7.7.0" - "@babel/types" "^7.7.0" - -"@babel/helper-replace-supers@^7.5.5", "@babel/helper-replace-supers@^7.7.0": - version "7.7.0" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.7.0.tgz#d5365c8667fe7cbd13b8ddddceb9bd7f2b387512" - integrity sha512-5ALYEul5V8xNdxEeWvRsBzLMxQksT7MaStpxjJf9KsnLxpAKBtfw5NeMKZJSYDa0lKdOcy0g+JT/f5mPSulUgg== - dependencies: - "@babel/helper-member-expression-to-functions" "^7.7.0" - "@babel/helper-optimise-call-expression" "^7.7.0" - "@babel/traverse" "^7.7.0" - "@babel/types" "^7.7.0" - -"@babel/helper-simple-access@^7.7.0": - version "7.7.0" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.7.0.tgz#97a8b6c52105d76031b86237dc1852b44837243d" - integrity sha512-AJ7IZD7Eem3zZRuj5JtzFAptBw7pMlS3y8Qv09vaBWoFsle0d1kAn5Wq6Q9MyBXITPOKnxwkZKoAm4bopmv26g== - dependencies: - "@babel/template" "^7.7.0" - "@babel/types" "^7.7.0" + "@babel/compat-data" "^7.14.5" + "@babel/helper-validator-option" "^7.14.5" + browserslist "^4.16.6" + semver "^6.3.0" -"@babel/helper-split-export-declaration@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.4.4.tgz#ff94894a340be78f53f06af038b205c49d993677" - integrity sha512-Ro/XkzLf3JFITkW6b+hNxzZ1n5OQ80NvIUdmHspih1XAhtN3vPTuUFT4eQnela+2MaZ5ulH+iyP513KJrxbN7Q== - dependencies: - "@babel/types" "^7.4.4" +"@babel/helper-create-class-features-plugin@^7.14.6": + version "7.14.6" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.14.6.tgz#f114469b6c06f8b5c59c6c4e74621f5085362542" + integrity sha512-Z6gsfGofTxH/+LQXqYEK45kxmcensbzmk/oi8DmaQytlQCgqNZt9XQF8iqlI/SeXWVjaMNxvYvzaYw+kh42mDg== + dependencies: + "@babel/helper-annotate-as-pure" "^7.14.5" + "@babel/helper-function-name" "^7.14.5" + "@babel/helper-member-expression-to-functions" "^7.14.5" + "@babel/helper-optimise-call-expression" "^7.14.5" + "@babel/helper-replace-supers" "^7.14.5" + "@babel/helper-split-export-declaration" "^7.14.5" + +"@babel/helper-create-regexp-features-plugin@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.14.5.tgz#c7d5ac5e9cf621c26057722fb7a8a4c5889358c4" + integrity sha512-TLawwqpOErY2HhWbGJ2nZT5wSkR192QpN+nBg1THfBfftrlvOh+WbhrxXCH4q4xJ9Gl16BGPR/48JA+Ryiho/A== + dependencies: + "@babel/helper-annotate-as-pure" "^7.14.5" + regexpu-core "^4.7.1" + +"@babel/helper-explode-assignable-expression@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.14.5.tgz#8aa72e708205c7bb643e45c73b4386cdf2a1f645" + integrity sha512-Htb24gnGJdIGT4vnRKMdoXiOIlqOLmdiUYpAQ0mYfgVT/GDm8GOYhgi4GL+hMKrkiPRohO4ts34ELFsGAPQLDQ== + dependencies: + "@babel/types" "^7.14.5" + +"@babel/helper-function-name@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz#89e2c474972f15d8e233b52ee8c480e2cfcd50c4" + integrity sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ== + dependencies: + "@babel/helper-get-function-arity" "^7.14.5" + "@babel/template" "^7.14.5" + "@babel/types" "^7.14.5" + +"@babel/helper-get-function-arity@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz#25fbfa579b0937eee1f3b805ece4ce398c431815" + integrity sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg== + dependencies: + "@babel/types" "^7.14.5" + +"@babel/helper-hoist-variables@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.14.5.tgz#e0dd27c33a78e577d7c8884916a3e7ef1f7c7f8d" + integrity sha512-R1PXiz31Uc0Vxy4OEOm07x0oSjKAdPPCh3tPivn/Eo8cvz6gveAeuyUUPB21Hoiif0uoPQSSdhIPS3352nvdyQ== + dependencies: + "@babel/types" "^7.14.5" + +"@babel/helper-member-expression-to-functions@^7.14.5": + version "7.14.7" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.14.7.tgz#97e56244beb94211fe277bd818e3a329c66f7970" + integrity sha512-TMUt4xKxJn6ccjcOW7c4hlwyJArizskAhoSTOCkA0uZ+KghIaci0Qg9R043kUMWI9mtQfgny+NQ5QATnZ+paaA== + dependencies: + "@babel/types" "^7.14.5" + +"@babel/helper-module-imports@^7.14.5", "@babel/helper-module-imports@^7.7.0": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.14.5.tgz#6d1a44df6a38c957aa7c312da076429f11b422f3" + integrity sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ== + dependencies: + "@babel/types" "^7.14.5" + +"@babel/helper-module-transforms@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.14.5.tgz#7de42f10d789b423eb902ebd24031ca77cb1e10e" + integrity sha512-iXpX4KW8LVODuAieD7MzhNjmM6dzYY5tfRqT+R9HDXWl0jPn/djKmA+G9s/2C2T9zggw5tK1QNqZ70USfedOwA== + dependencies: + "@babel/helper-module-imports" "^7.14.5" + "@babel/helper-replace-supers" "^7.14.5" + "@babel/helper-simple-access" "^7.14.5" + "@babel/helper-split-export-declaration" "^7.14.5" + "@babel/helper-validator-identifier" "^7.14.5" + "@babel/template" "^7.14.5" + "@babel/traverse" "^7.14.5" + "@babel/types" "^7.14.5" + +"@babel/helper-optimise-call-expression@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.14.5.tgz#f27395a8619e0665b3f0364cddb41c25d71b499c" + integrity sha512-IqiLIrODUOdnPU9/F8ib1Fx2ohlgDhxnIDU7OEVi+kAbEZcyiF7BLU8W6PfvPi9LzztjS7kcbzbmL7oG8kD6VA== + dependencies: + "@babel/types" "^7.14.5" + +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.8.0": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz#5ac822ce97eec46741ab70a517971e443a70c5a9" + integrity sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ== + +"@babel/helper-remap-async-to-generator@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.14.5.tgz#51439c913612958f54a987a4ffc9ee587a2045d6" + integrity sha512-rLQKdQU+HYlxBwQIj8dk4/0ENOUEhA/Z0l4hN8BexpvmSMN9oA9EagjnhnDpNsRdWCfjwa4mn/HyBXO9yhQP6A== + dependencies: + "@babel/helper-annotate-as-pure" "^7.14.5" + "@babel/helper-wrap-function" "^7.14.5" + "@babel/types" "^7.14.5" + +"@babel/helper-replace-supers@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.14.5.tgz#0ecc0b03c41cd567b4024ea016134c28414abb94" + integrity sha512-3i1Qe9/8x/hCHINujn+iuHy+mMRLoc77b2nI9TB0zjH1hvn9qGlXjWlggdwUcju36PkPCy/lpM7LLUdcTyH4Ow== + dependencies: + "@babel/helper-member-expression-to-functions" "^7.14.5" + "@babel/helper-optimise-call-expression" "^7.14.5" + "@babel/traverse" "^7.14.5" + "@babel/types" "^7.14.5" + +"@babel/helper-simple-access@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.14.5.tgz#66ea85cf53ba0b4e588ba77fc813f53abcaa41c4" + integrity sha512-nfBN9xvmCt6nrMZjfhkl7i0oTV3yxR4/FztsbOASyTvVcoYd0TRHh7eMLdlEcCqobydC0LAF3LtC92Iwxo0wyw== + dependencies: + "@babel/types" "^7.14.5" -"@babel/helper-split-export-declaration@^7.7.0": - version "7.7.0" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.7.0.tgz#1365e74ea6c614deeb56ebffabd71006a0eb2300" - integrity sha512-HgYSI8rH08neWlAH3CcdkFg9qX9YsZysZI5GD8LjhQib/mM0jGOZOVkoUiiV2Hu978fRtjtsGsW6w0pKHUWtqA== - dependencies: - "@babel/types" "^7.7.0" +"@babel/helper-skip-transparent-expression-wrappers@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.14.5.tgz#96f486ac050ca9f44b009fbe5b7d394cab3a0ee4" + integrity sha512-dmqZB7mrb94PZSAOYtr+ZN5qt5owZIAgqtoTuqiFbHFtxgEcmQlRJVI+bO++fciBunXtB6MK7HrzrfcAzIz2NQ== + dependencies: + "@babel/types" "^7.14.5" + +"@babel/helper-split-export-declaration@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz#22b23a54ef51c2b7605d851930c1976dd0bc693a" + integrity sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA== + dependencies: + "@babel/types" "^7.14.5" + +"@babel/helper-validator-identifier@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz#d0f0e277c512e0c938277faa85a3968c9a44c0e8" + integrity sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg== + +"@babel/helper-validator-option@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz#6e72a1fff18d5dfcb878e1e62f1a021c4b72d5a3" + integrity sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow== -"@babel/helper-wrap-function@^7.7.0": - version "7.7.0" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.7.0.tgz#15af3d3e98f8417a60554acbb6c14e75e0b33b74" - integrity sha512-sd4QjeMgQqzshSjecZjOp8uKfUtnpmCyQhKQrVJBBgeHAB/0FPi33h3AbVlVp07qQtMD4QgYSzaMI7VwncNK/w== - dependencies: - "@babel/helper-function-name" "^7.7.0" - "@babel/template" "^7.7.0" - "@babel/traverse" "^7.7.0" - "@babel/types" "^7.7.0" - -"@babel/helpers@^7.5.5": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.5.5.tgz#63908d2a73942229d1e6685bc2a0e730dde3b75e" - integrity sha512-nRq2BUhxZFnfEn/ciJuhklHvFOqjJUD5wpx+1bxUF2axL9C+v4DE/dmp5sT2dKnpOs4orZWzpAZqlCy8QqE/7g== - dependencies: - "@babel/template" "^7.4.4" - "@babel/traverse" "^7.5.5" - "@babel/types" "^7.5.5" +"@babel/helper-wrap-function@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.14.5.tgz#5919d115bf0fe328b8a5d63bcb610f51601f2bff" + integrity sha512-YEdjTCq+LNuNS1WfxsDCNpgXkJaIyqco6DAelTUjT4f2KIWC1nBcaCaSdHTBqQVLnTBexBcVcFhLSU1KnYuePQ== + dependencies: + "@babel/helper-function-name" "^7.14.5" + "@babel/template" "^7.14.5" + "@babel/traverse" "^7.14.5" + "@babel/types" "^7.14.5" "@babel/helpers@^7.7.0": - version "7.7.0" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.7.0.tgz#359bb5ac3b4726f7c1fde0ec75f64b3f4275d60b" - integrity sha512-VnNwL4YOhbejHb7x/b5F39Zdg5vIQpUUNzJwx0ww1EcVRt41bbGRZWhAURrfY32T5zTT3qwNOQFWpn+P0i0a2g== + version "7.14.6" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.14.6.tgz#5b58306b95f1b47e2a0199434fa8658fa6c21635" + integrity sha512-yesp1ENQBiLI+iYHSJdoZKUtRpfTlL1grDIX9NRlAVppljLw/4tTyYupIB7uIYmC3stW/imAv8EqaKaS/ibmeA== dependencies: - "@babel/template" "^7.7.0" - "@babel/traverse" "^7.7.0" - "@babel/types" "^7.7.0" + "@babel/template" "^7.14.5" + "@babel/traverse" "^7.14.5" + "@babel/types" "^7.14.5" -"@babel/highlight@^7.0.0": - version "7.5.0" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.5.0.tgz#56d11312bd9248fa619591d02472be6e8cb32540" - integrity sha512-7dV4eu9gBxoM0dAnj/BCFDW9LFU0zvTrkq0ugM7pnHEgguOEeOz1so2ZghEdzviYzQEED0r4EAgpsBChKy1TRQ== +"@babel/highlight@^7.0.0", "@babel/highlight@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.14.5.tgz#6861a52f03966405001f6aa534a01a24d99e8cd9" + integrity sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg== dependencies: + "@babel/helper-validator-identifier" "^7.14.5" chalk "^2.0.0" - esutils "^2.0.2" js-tokens "^4.0.0" -"@babel/parser@^7.1.0", "@babel/parser@^7.4.3", "@babel/parser@^7.4.4", "@babel/parser@^7.5.5": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.5.5.tgz#02f077ac8817d3df4a832ef59de67565e71cca4b" - integrity sha512-E5BN68cqR7dhKan1SfqgPGhQ178bkVKpXTPEXnFJBrEt8/DKRZlybmy+IgYLTeN7tp1R5Ccmbm2rBk17sHYU3g== - -"@babel/parser@^7.7.0": - version "7.7.0" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.7.0.tgz#232618f6e8947bc54b407fa1f1c91a22758e7159" - integrity sha512-GqL+Z0d7B7ADlQBMXlJgvXEbtt5qlqd1YQ5fr12hTSfh7O/vgrEIvJxU2e7aSVrEUn75zTZ6Nd0s8tthrlZnrQ== - -"@babel/parser@^7.7.2": - version "7.7.3" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.7.3.tgz#5fad457c2529de476a248f75b0f090b3060af043" - integrity sha512-bqv+iCo9i+uLVbI0ILzKkvMorqxouI+GbV13ivcARXn9NNEabi2IEz912IgNpT/60BNXac5dgcfjb94NjsF33A== +"@babel/parser@^7.1.0", "@babel/parser@^7.14.5", "@babel/parser@^7.14.7", "@babel/parser@^7.4.3", "@babel/parser@^7.7.2": + version "7.14.7" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.14.7.tgz#6099720c8839ca865a2637e6c85852ead0bdb595" + integrity sha512-X67Z5y+VBJuHB/RjwECp8kSl5uYi0BvRbNeWqkaJCVh+LiTPl19WBUfG627psSgp9rSf6ojuXghQM3ha6qHHdA== "@babel/plugin-proposal-async-generator-functions@^7.7.0": - version "7.7.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.7.0.tgz#83ef2d6044496b4c15d8b4904e2219e6dccc6971" - integrity sha512-ot/EZVvf3mXtZq0Pd0+tSOfGWMizqmOohXmNZg6LNFjHOV+wOPv7BvVYh8oPR8LhpIP3ye8nNooKL50YRWxpYA== + version "7.14.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.14.7.tgz#784a48c3d8ed073f65adcf30b57bcbf6c8119ace" + integrity sha512-RK8Wj7lXLY3bqei69/cc25gwS5puEc3dknoFPFbqfy3XxYQBQFvu4ioWpafMBAB+L9NyptQK4nMOa5Xz16og8Q== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-remap-async-to-generator" "^7.7.0" - "@babel/plugin-syntax-async-generators" "^7.2.0" + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-remap-async-to-generator" "^7.14.5" + "@babel/plugin-syntax-async-generators" "^7.8.4" "@babel/plugin-proposal-dynamic-import@^7.7.0": - version "7.7.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.7.0.tgz#dc02a8bad8d653fb59daf085516fa416edd2aa7f" - integrity sha512-7poL3Xi+QFPC7sGAzEIbXUyYzGJwbc2+gSD0AkiC5k52kH2cqHdqxm5hNFfLW3cRSTcx9bN0Fl7/6zWcLLnKAQ== + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.14.5.tgz#0c6617df461c0c1f8fff3b47cd59772360101d2c" + integrity sha512-ExjiNYc3HDN5PXJx+bwC50GIx/KKanX2HiggnIUAYedbARdImiCU4RhhHfdf0Kd7JNXGpsBBBCOm+bBVy3Gb0g== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-dynamic-import" "^7.2.0" + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/plugin-syntax-dynamic-import" "^7.8.3" "@babel/plugin-proposal-json-strings@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.2.0.tgz#568ecc446c6148ae6b267f02551130891e29f317" - integrity sha512-MAFV1CA/YVmYwZG0fBQyXhmj0BHCB5egZHCKWIFVv/XCxAeVGIHfos3SwDck4LvCllENIAg7xMKOG5kH0dzyUg== + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.14.5.tgz#38de60db362e83a3d8c944ac858ddf9f0c2239eb" + integrity sha512-NSq2fczJYKVRIsUJyNxrVUMhB27zb7N7pOFGQOhBKJrChbGcgEAqyZrmZswkPk18VMurEeJAaICbfm57vUeTbQ== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-json-strings" "^7.2.0" + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/plugin-syntax-json-strings" "^7.8.3" "@babel/plugin-proposal-object-rest-spread@^7.6.2": - version "7.6.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.6.2.tgz#8ffccc8f3a6545e9f78988b6bf4fe881b88e8096" - integrity sha512-LDBXlmADCsMZV1Y9OQwMc0MyGZ8Ta/zlD9N67BfQT8uYwkRswiu2hU6nJKrjrt/58aH/vqfQlR/9yId/7A2gWw== + version "7.14.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.14.7.tgz#5920a2b3df7f7901df0205974c0641b13fd9d363" + integrity sha512-082hsZz+sVabfmDWo1Oct1u1AgbKbUAyVgmX4otIc7bdsRgHBXwTwb3DpDmD4Eyyx6DNiuz5UAATT655k+kL5g== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-object-rest-spread" "^7.2.0" + "@babel/compat-data" "^7.14.7" + "@babel/helper-compilation-targets" "^7.14.5" + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-transform-parameters" "^7.14.5" "@babel/plugin-proposal-optional-catch-binding@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.2.0.tgz#135d81edb68a081e55e56ec48541ece8065c38f5" - integrity sha512-mgYj3jCcxug6KUcX4OBoOJz3CMrwRfQELPQ5560F70YQUBZB7uac9fqaWamKR1iWUzGiK2t0ygzjTScZnVz75g== + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.14.5.tgz#939dd6eddeff3a67fdf7b3f044b5347262598c3c" + integrity sha512-3Oyiixm0ur7bzO5ybNcZFlmVsygSIQgdOa7cTfOYCMY+wEPAYhZAJxi3mixKFCTCKUhQXuCTtQ1MzrpL3WT8ZQ== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-optional-catch-binding" "^7.2.0" + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" "@babel/plugin-proposal-unicode-property-regex@^7.7.0": - version "7.7.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.7.0.tgz#549fe1717a1bd0a2a7e63163841cb37e78179d5d" - integrity sha512-mk34H+hp7kRBWJOOAR0ZMGCydgKMD4iN9TpDRp3IIcbunltxEY89XSimc6WbtSLCDrwcdy/EEw7h5CFCzxTchw== + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.14.5.tgz#0f95ee0e757a5d647f378daa0eca7e93faa8bbe8" + integrity sha512-6axIeOU5LnY471KenAB9vI8I5j7NQ2d652hIYwVyRfgaZT5UpiqFKCuVXCDMSrU+3VFafnu2c5m3lrWIlr6A5Q== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.7.0" - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-create-regexp-features-plugin" "^7.14.5" + "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-syntax-async-generators@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.2.0.tgz#69e1f0db34c6f5a0cf7e2b3323bf159a76c8cb7f" - integrity sha512-1ZrIRBv2t0GSlcwVoQ6VgSLpLgiN/FVQUzt9znxo7v2Ov4jJrs8RY8tv0wvDmFN3qIdMKWrmMMW6yZ0G19MfGg== +"@babel/plugin-syntax-async-generators@^7.2.0", "@babel/plugin-syntax-async-generators@^7.8.4": + version "7.8.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" + integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-dynamic-import@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.2.0.tgz#69c159ffaf4998122161ad8ebc5e6d1f55df8612" - integrity sha512-mVxuJ0YroI/h/tbFTPGZR8cv6ai+STMKNBq0f8hFxsxWjl94qqhsb+wXbpNMDPU3cfR1TIsVFzU3nXyZMqyK4w== +"@babel/plugin-syntax-dynamic-import@^7.2.0", "@babel/plugin-syntax-dynamic-import@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" + integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-json-strings@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.2.0.tgz#72bd13f6ffe1d25938129d2a186b11fd62951470" - integrity sha512-5UGYnMSLRE1dqqZwug+1LISpA403HzlSfsg6P9VXU6TBjcSHeNlw4DxDx7LgpF+iKZoOG/+uzqoRHTdcUpiZNg== +"@babel/plugin-syntax-json-strings@^7.2.0", "@babel/plugin-syntax-json-strings@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" + integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-jsx@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.2.0.tgz#0b85a3b4bc7cdf4cc4b8bf236335b907ca22e7c7" - integrity sha512-VyN4QANJkRW6lDBmENzRszvZf3/4AXaj9YR7GwrWeeN9tEBPuXbmDYVU9bYBN0D70zCWVwUy0HWq2553VCb6Hw== +"@babel/plugin-syntax-jsx@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.14.5.tgz#000e2e25d8673cce49300517a3eda44c263e4201" + integrity sha512-ohuFIsOMXJnbOMRfX7/w7LocdR6R7whhuRD4ax8IipLcLPlZGJKkBxgHp++U4N/vKyU16/YDQr2f5seajD3jIw== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-syntax-object-rest-spread@^7.0.0", "@babel/plugin-syntax-object-rest-spread@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.2.0.tgz#3b7a3e733510c57e820b9142a6579ac8b0dfad2e" - integrity sha512-t0JKGgqk2We+9may3t0xDdmneaXmyxq0xieYcKHxIsrJO64n1OiMWNUtc5gQK1PA0NpdCRrtZp4z+IUaKugrSA== +"@babel/plugin-syntax-object-rest-spread@^7.0.0", "@babel/plugin-syntax-object-rest-spread@^7.2.0", "@babel/plugin-syntax-object-rest-spread@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" + integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-optional-catch-binding@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.2.0.tgz#a94013d6eda8908dfe6a477e7f9eda85656ecf5c" - integrity sha512-bDe4xKNhb0LI7IvZHiA13kff0KEfaGX/Hv4lMA9+7TEc63hMNvfKo6ZFpXhKuEp+II/q35Gc4NoMeDZyaUbj9w== +"@babel/plugin-syntax-optional-catch-binding@^7.2.0", "@babel/plugin-syntax-optional-catch-binding@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" + integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-top-level-await@^7.7.0": - version "7.7.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.7.0.tgz#f5699549f50bbe8d12b1843a4e82f0a37bb65f4d" - integrity sha512-hi8FUNiFIY1fnUI2n1ViB1DR0R4QeK4iHcTlW6aJkrPoTdb8Rf1EMQ6GT3f67DDkYyWgew9DFoOZ6gOoEsdzTA== + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c" + integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-syntax-typescript@^7.2.0": - version "7.3.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.3.3.tgz#a7cc3f66119a9f7ebe2de5383cce193473d65991" - integrity sha512-dGwbSMA1YhVS8+31CnPR7LB4pcbrzcV99wQzby4uAfrkZPYZlQ7ImwdpzLqi6Z6IL02b8IAL379CaMwo0x5Lag== +"@babel/plugin-syntax-typescript@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.14.5.tgz#b82c6ce471b165b5ce420cf92914d6fb46225716" + integrity sha512-u6OXzDaIXjEstBRRoBCQ/uKQKlbuaeE5in0RvWdA4pN6AhqxTIwUsnHPU1CFZA/amYObMsuWhYfRl3Ch90HD0Q== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-transform-arrow-functions@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.2.0.tgz#9aeafbe4d6ffc6563bf8f8372091628f00779550" - integrity sha512-ER77Cax1+8/8jCB9fo4Ud161OZzWN5qawi4GusDuRLcDbDG+bIGYY20zb2dfAFdTRGzrfq2xZPvF0R64EHnimg== + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.14.5.tgz#f7187d9588a768dd080bf4c9ffe117ea62f7862a" + integrity sha512-KOnO0l4+tD5IfOdi4x8C1XmEIRWUjNRV8wc6K2vz/3e8yAOoZZvsRXRRIF/yo/MAOFb4QjtAw9xSxMXbSMRy8A== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-transform-async-to-generator@^7.7.0": - version "7.7.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.7.0.tgz#e2b84f11952cf5913fe3438b7d2585042772f492" - integrity sha512-vLI2EFLVvRBL3d8roAMqtVY0Bm9C1QzLkdS57hiKrjUBSqsQYrBsMCeOg/0KK7B0eK9V71J5mWcha9yyoI2tZw== + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.14.5.tgz#72c789084d8f2094acb945633943ef8443d39e67" + integrity sha512-szkbzQ0mNk0rpu76fzDdqSyPu0MuvpXgC+6rz5rpMb5OIRxdmHfQxrktL8CYolL2d8luMCZTR0DpIMIdL27IjA== dependencies: - "@babel/helper-module-imports" "^7.7.0" - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-remap-async-to-generator" "^7.7.0" + "@babel/helper-module-imports" "^7.14.5" + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-remap-async-to-generator" "^7.14.5" "@babel/plugin-transform-block-scoped-functions@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.2.0.tgz#5d3cc11e8d5ddd752aa64c9148d0db6cb79fd190" - integrity sha512-ntQPR6q1/NKuphly49+QiQiTN0O63uOwjdD6dhIjSWBI5xlrbUFh720TIpzBhpnrLfv2tNH/BXvLIab1+BAI0w== + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.14.5.tgz#e48641d999d4bc157a67ef336aeb54bc44fd3ad4" + integrity sha512-dtqWqdWZ5NqBX3KzsVCWfQI3A53Ft5pWFCT2eCVUftWZgjc5DpDponbIF1+c+7cSGk2wN0YK7HGL/ezfRbpKBQ== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-transform-block-scoping@^7.6.3": - version "7.6.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.6.3.tgz#6e854e51fbbaa84351b15d4ddafe342f3a5d542a" - integrity sha512-7hvrg75dubcO3ZI2rjYTzUrEuh1E9IyDEhhB6qfcooxhDA33xx2MasuLVgdxzcP6R/lipAC6n9ub9maNW6RKdw== + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.14.5.tgz#8cc63e61e50f42e078e6f09be775a75f23ef9939" + integrity sha512-LBYm4ZocNgoCqyxMLoOnwpsmQ18HWTQvql64t3GvMUzLQrNoV1BDG0lNftC8QKYERkZgCCT/7J5xWGObGAyHDw== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - lodash "^4.17.13" + "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-transform-classes@^7.7.0": - version "7.7.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.7.0.tgz#b411ecc1b8822d24b81e5d184f24149136eddd4a" - integrity sha512-/b3cKIZwGeUesZheU9jNYcwrEA7f/Bo4IdPmvp7oHgvks2majB5BoT5byAql44fiNQYOPzhk2w8DbgfuafkMoA== - dependencies: - "@babel/helper-annotate-as-pure" "^7.7.0" - "@babel/helper-define-map" "^7.7.0" - "@babel/helper-function-name" "^7.7.0" - "@babel/helper-optimise-call-expression" "^7.7.0" - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-replace-supers" "^7.7.0" - "@babel/helper-split-export-declaration" "^7.7.0" + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.14.5.tgz#0e98e82097b38550b03b483f9b51a78de0acb2cf" + integrity sha512-J4VxKAMykM06K/64z9rwiL6xnBHgB1+FVspqvlgCdwD1KUbQNfszeKVVOMh59w3sztHYIZDgnhOC4WbdEfHFDA== + dependencies: + "@babel/helper-annotate-as-pure" "^7.14.5" + "@babel/helper-function-name" "^7.14.5" + "@babel/helper-optimise-call-expression" "^7.14.5" + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-replace-supers" "^7.14.5" + "@babel/helper-split-export-declaration" "^7.14.5" globals "^11.1.0" "@babel/plugin-transform-computed-properties@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.2.0.tgz#83a7df6a658865b1c8f641d510c6f3af220216da" - integrity sha512-kP/drqTxY6Xt3NNpKiMomfgkNn4o7+vKxK2DDKcBG9sHj51vHqMBGy8wbDS/J4lMxnqs153/T3+DmCEAkC5cpA== + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.14.5.tgz#1b9d78987420d11223d41195461cc43b974b204f" + integrity sha512-pWM+E4283UxaVzLb8UBXv4EIxMovU4zxT1OPnpHJcmnvyY9QbPPTKZfEj31EUvG3/EQRbYAGaYEUZ4yWOBC2xg== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-transform-destructuring@^7.6.0": - version "7.6.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.6.0.tgz#44bbe08b57f4480094d57d9ffbcd96d309075ba6" - integrity sha512-2bGIS5P1v4+sWTCnKNDZDxbGvEqi0ijeqM/YqHtVGrvG2y0ySgnEEhXErvE9dA0bnIzY9bIzdFK0jFA46ASIIQ== + version "7.14.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.14.7.tgz#0ad58ed37e23e22084d109f185260835e5557576" + integrity sha512-0mDE99nK+kVh3xlc5vKwB6wnP9ecuSj+zQCa/n0voENtP/zymdT4HH6QEb65wjjcbqr1Jb/7z9Qp7TF5FtwYGw== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-transform-dotall-regex@^7.7.0": - version "7.7.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.7.0.tgz#c5c9ecacab3a5e0c11db6981610f0c32fd698b3b" - integrity sha512-3QQlF7hSBnSuM1hQ0pS3pmAbWLax/uGNCbPBND9y+oJ4Y776jsyujG2k0Sn2Aj2a0QwVOiOFL5QVPA7spjvzSA== + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.14.5.tgz#2f6bf76e46bdf8043b4e7e16cf24532629ba0c7a" + integrity sha512-loGlnBdj02MDsFaHhAIJzh7euK89lBrGIdM9EAtHFo6xKygCUGuuWe07o1oZVk287amtW1n0808sQM99aZt3gw== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.7.0" - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-create-regexp-features-plugin" "^7.14.5" + "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-transform-duplicate-keys@^7.5.0": - version "7.5.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.5.0.tgz#c5dbf5106bf84cdf691222c0974c12b1df931853" - integrity sha512-igcziksHizyQPlX9gfSjHkE2wmoCH3evvD2qR5w29/Dk0SMKE/eOI7f1HhBdNhR/zxJDqrgpoDTq5YSLH/XMsQ== + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.14.5.tgz#365a4844881bdf1501e3a9f0270e7f0f91177954" + integrity sha512-iJjbI53huKbPDAsJ8EmVmvCKeeq21bAze4fu9GBQtSLqfvzj2oRuHVx4ZkDwEhg1htQ+5OBZh/Ab0XDf5iBZ7A== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-transform-exponentiation-operator@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.2.0.tgz#a63868289e5b4007f7054d46491af51435766008" - integrity sha512-umh4hR6N7mu4Elq9GG8TOu9M0bakvlsREEC+ialrQN6ABS4oDQ69qJv1VtR3uxlKMCQMCvzk7vr17RHKcjx68A== + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.14.5.tgz#5154b8dd6a3dfe6d90923d61724bd3deeb90b493" + integrity sha512-jFazJhMBc9D27o9jDnIE5ZErI0R0m7PbKXVq77FFvqFbzvTMuv8jaAwLZ5PviOLSFttqKIW0/wxNSDbjLk0tYA== dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor" "^7.1.0" - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.14.5" + "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-transform-for-of@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.4.4.tgz#0267fc735e24c808ba173866c6c4d1440fc3c556" - integrity sha512-9T/5Dlr14Z9TIEXLXkt8T1DU7F24cbhwhMNUziN3hB1AXoZcdzPcTiKGRn/6iOymDqtTKWnr/BtRKN9JwbKtdQ== + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.14.5.tgz#dae384613de8f77c196a8869cbf602a44f7fc0eb" + integrity sha512-CfmqxSUZzBl0rSjpoQSFoR9UEj3HzbGuGNL21/iFTmjb5gFggJp3ph0xR1YBhexmLoKRHzgxuFvty2xdSt6gTA== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-transform-function-name@^7.7.0": - version "7.7.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.7.0.tgz#0fa786f1eef52e3b7d4fc02e54b2129de8a04c2a" - integrity sha512-P5HKu0d9+CzZxP5jcrWdpe7ZlFDe24bmqP6a6X8BHEBl/eizAsY8K6LX8LASZL0Jxdjm5eEfzp+FIrxCm/p8bA== + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.14.5.tgz#e81c65ecb900746d7f31802f6bed1f52d915d6f2" + integrity sha512-vbO6kv0fIzZ1GpmGQuvbwwm+O4Cbm2NrPzwlup9+/3fdkuzo1YqOZcXw26+YUJB84Ja7j9yURWposEHLYwxUfQ== dependencies: - "@babel/helper-function-name" "^7.7.0" - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-function-name" "^7.14.5" + "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-transform-literals@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.2.0.tgz#690353e81f9267dad4fd8cfd77eafa86aba53ea1" - integrity sha512-2ThDhm4lI4oV7fVQ6pNNK+sx+c/GM5/SaML0w/r4ZB7sAneD/piDJtwdKlNckXeyGK7wlwg2E2w33C/Hh+VFCg== + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.14.5.tgz#41d06c7ff5d4d09e3cf4587bd3ecf3930c730f78" + integrity sha512-ql33+epql2F49bi8aHXxvLURHkxJbSmMKl9J5yHqg4PLtdE6Uc48CH1GS6TQvZ86eoB/ApZXwm7jlA+B3kra7A== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-transform-member-expression-literals@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.2.0.tgz#fa10aa5c58a2cb6afcf2c9ffa8cb4d8b3d489a2d" - integrity sha512-HiU3zKkSU6scTidmnFJ0bMX8hz5ixC93b4MHMiYebmk2lUVNGOboPsqQvx5LzooihijUoLR/v7Nc1rbBtnc7FA== + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.14.5.tgz#b39cd5212a2bf235a617d320ec2b48bcc091b8a7" + integrity sha512-WkNXxH1VXVTKarWFqmso83xl+2V3Eo28YY5utIkbsmXoItO8Q3aZxN4BTS2k0hz9dGUloHK26mJMyQEYfkn/+Q== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-transform-modules-amd@^7.5.0": - version "7.5.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.5.0.tgz#ef00435d46da0a5961aa728a1d2ecff063e4fb91" - integrity sha512-n20UsQMKnWrltocZZm24cRURxQnWIvsABPJlw/fvoy9c6AgHZzoelAIzajDHAQrDpuKFFPPcFGd7ChsYuIUMpg== + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.14.5.tgz#4fd9ce7e3411cb8b83848480b7041d83004858f7" + integrity sha512-3lpOU8Vxmp3roC4vzFpSdEpGUWSMsHFreTWOMMLzel2gNGfHE5UWIh/LN6ghHs2xurUp4jRFYMUIZhuFbody1g== dependencies: - "@babel/helper-module-transforms" "^7.1.0" - "@babel/helper-plugin-utils" "^7.0.0" - babel-plugin-dynamic-import-node "^2.3.0" + "@babel/helper-module-transforms" "^7.14.5" + "@babel/helper-plugin-utils" "^7.14.5" + babel-plugin-dynamic-import-node "^2.3.3" "@babel/plugin-transform-modules-commonjs@^7.7.0": - version "7.7.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.7.0.tgz#3e5ffb4fd8c947feede69cbe24c9554ab4113fe3" - integrity sha512-KEMyWNNWnjOom8vR/1+d+Ocz/mILZG/eyHHO06OuBQ2aNhxT62fr4y6fGOplRx+CxCSp3IFwesL8WdINfY/3kg== + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.14.5.tgz#7aaee0ea98283de94da98b28f8c35701429dad97" + integrity sha512-en8GfBtgnydoao2PS+87mKyw62k02k7kJ9ltbKe0fXTHrQmG6QZZflYuGI1VVG7sVpx4E1n7KBpNlPb8m78J+A== dependencies: - "@babel/helper-module-transforms" "^7.7.0" - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-simple-access" "^7.7.0" - babel-plugin-dynamic-import-node "^2.3.0" + "@babel/helper-module-transforms" "^7.14.5" + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-simple-access" "^7.14.5" + babel-plugin-dynamic-import-node "^2.3.3" "@babel/plugin-transform-modules-systemjs@^7.7.0": - version "7.7.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.7.0.tgz#9baf471213af9761c1617bb12fd278e629041417" - integrity sha512-ZAuFgYjJzDNv77AjXRqzQGlQl4HdUM6j296ee4fwKVZfhDR9LAGxfvXjBkb06gNETPnN0sLqRm9Gxg4wZH6dXg== + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.14.5.tgz#c75342ef8b30dcde4295d3401aae24e65638ed29" + integrity sha512-mNMQdvBEE5DcMQaL5LbzXFMANrQjd2W7FPzg34Y4yEz7dBgdaC+9B84dSO+/1Wba98zoDbInctCDo4JGxz1VYA== dependencies: - "@babel/helper-hoist-variables" "^7.7.0" - "@babel/helper-plugin-utils" "^7.0.0" - babel-plugin-dynamic-import-node "^2.3.0" + "@babel/helper-hoist-variables" "^7.14.5" + "@babel/helper-module-transforms" "^7.14.5" + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-validator-identifier" "^7.14.5" + babel-plugin-dynamic-import-node "^2.3.3" "@babel/plugin-transform-modules-umd@^7.7.0": - version "7.7.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.7.0.tgz#d62c7da16670908e1d8c68ca0b5d4c0097b69966" - integrity sha512-u7eBA03zmUswQ9LQ7Qw0/ieC1pcAkbp5OQatbWUzY1PaBccvuJXUkYzoN1g7cqp7dbTu6Dp9bXyalBvD04AANA== + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.14.5.tgz#fb662dfee697cce274a7cda525190a79096aa6e0" + integrity sha512-RfPGoagSngC06LsGUYyM9QWSXZ8MysEjDJTAea1lqRjNECE3y0qIJF/qbvJxc4oA4s99HumIMdXOrd+TdKaAAA== dependencies: - "@babel/helper-module-transforms" "^7.7.0" - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-module-transforms" "^7.14.5" + "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-transform-named-capturing-groups-regex@^7.7.0": - version "7.7.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.7.0.tgz#358e6fd869b9a4d8f5cbc79e4ed4fc340e60dcaf" - integrity sha512-+SicSJoKouPctL+j1pqktRVCgy+xAch1hWWTMy13j0IflnyNjaoskj+DwRQFimHbLqO3sq2oN2CXMvXq3Bgapg== + version "7.14.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.14.7.tgz#60c06892acf9df231e256c24464bfecb0908fd4e" + integrity sha512-DTNOTaS7TkW97xsDMrp7nycUVh6sn/eq22VaxWfEdzuEbRsiaOU0pqU7DlyUGHVsbQbSghvjKRpEl+nUCKGQSg== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.7.0" + "@babel/helper-create-regexp-features-plugin" "^7.14.5" "@babel/plugin-transform-new-target@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.4.4.tgz#18d120438b0cc9ee95a47f2c72bc9768fbed60a5" - integrity sha512-r1z3T2DNGQwwe2vPGZMBNjioT2scgWzK9BCnDEh+46z8EEwXBq24uRzd65I7pjtugzPSj921aM15RpESgzsSuA== + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.14.5.tgz#31bdae8b925dc84076ebfcd2a9940143aed7dbf8" + integrity sha512-Nx054zovz6IIRWEB49RDRuXGI4Gy0GMgqG0cII9L3MxqgXz/+rgII+RU58qpo4g7tNEx1jG7rRVH4ihZoP4esQ== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-transform-object-super@^7.5.5": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.5.5.tgz#c70021df834073c65eb613b8679cc4a381d1a9f9" - integrity sha512-un1zJQAhSosGFBduPgN/YFNvWVpRuHKU7IHBglLoLZsGmruJPOo6pbInneflUdmq7YvSVqhpPs5zdBvLnteltQ== + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.14.5.tgz#d0b5faeac9e98597a161a9cf78c527ed934cdc45" + integrity sha512-MKfOBWzK0pZIrav9z/hkRqIk/2bTv9qvxHzPQc12RcVkMOzpIKnFCNYJip00ssKWYkd8Sf5g0Wr7pqJ+cmtuFg== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-replace-supers" "^7.5.5" + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-replace-supers" "^7.14.5" -"@babel/plugin-transform-parameters@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.4.4.tgz#7556cf03f318bd2719fe4c922d2d808be5571e16" - integrity sha512-oMh5DUO1V63nZcu/ZVLQFqiihBGo4OpxJxR1otF50GMeCLiRx5nUdtokd+u9SuVJrvvuIh9OosRFPP4pIPnwmw== +"@babel/plugin-transform-parameters@^7.14.5", "@babel/plugin-transform-parameters@^7.4.4": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.14.5.tgz#49662e86a1f3ddccac6363a7dfb1ff0a158afeb3" + integrity sha512-Tl7LWdr6HUxTmzQtzuU14SqbgrSKmaR77M0OKyq4njZLQTPfOvzblNKyNkGwOfEFCEx7KeYHQHDI0P3F02IVkA== dependencies: - "@babel/helper-call-delegate" "^7.4.4" - "@babel/helper-get-function-arity" "^7.0.0" - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-transform-property-literals@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.2.0.tgz#03e33f653f5b25c4eb572c98b9485055b389e905" - integrity sha512-9q7Dbk4RhgcLp8ebduOpCbtjh7C0itoLYHXd9ueASKAG/is5PQtMR5VJGka9NKqGhYEGn5ITahd4h9QeBMylWQ== + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.14.5.tgz#0ddbaa1f83db3606f1cdf4846fa1dfb473458b34" + integrity sha512-r1uilDthkgXW8Z1vJz2dKYLV1tuw2xsbrp3MrZmD99Wh9vsfKoob+JTgri5VUb/JqyKRXotlOtwgu4stIYCmnw== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-transform-react-display-name@^7.0.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.2.0.tgz#ebfaed87834ce8dc4279609a4f0c324c156e3eb0" - integrity sha512-Htf/tPa5haZvRMiNSQSFifK12gtr/8vwfr+A9y69uF0QcU77AVu4K7MiHEkTxF7lQoHOL0F9ErqgfNEAKgXj7A== + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.14.5.tgz#baa92d15c4570411301a85a74c13534873885b65" + integrity sha512-07aqY1ChoPgIxsuDviptRpVkWCSbXWmzQqcgy65C6YSFOfPFvb/DX3bBRHh7pCd/PMEEYHYWUTSVkCbkVainYQ== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-transform-react-jsx-self@^7.0.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.2.0.tgz#461e21ad9478f1031dd5e276108d027f1b5240ba" - integrity sha512-v6S5L/myicZEy+jr6ielB0OR8h+EH/1QFx/YJ7c7Ua+7lqsjj/vW6fD5FR9hB/6y7mGbfT4vAURn3xqBxsUcdg== + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.14.5.tgz#703b5d1edccd342179c2a99ee8c7065c2b4403cc" + integrity sha512-M/fmDX6n0cfHK/NLTcPmrfVAORKDhK8tyjDhyxlUjYyPYYO8FRWwuxBA3WBx8kWN/uBUuwGa3s/0+hQ9JIN3Tg== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-jsx" "^7.2.0" + "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-transform-react-jsx-source@^7.0.0": - version "7.5.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.5.0.tgz#583b10c49cf057e237085bcbd8cc960bd83bd96b" - integrity sha512-58Q+Jsy4IDCZx7kqEZuSDdam/1oW8OdDX8f+Loo6xyxdfg1yF0GE2XNJQSTZCaMol93+FBzpWiPEwtbMloAcPg== + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.14.5.tgz#79f728e60e6dbd31a2b860b0bf6c9765918acf1d" + integrity sha512-1TpSDnD9XR/rQ2tzunBVPThF5poaYT9GqP+of8fAtguYuI/dm2RkrMBDemsxtY0XBzvW7nXjYM0hRyKX9QYj7Q== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-jsx" "^7.2.0" + "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-transform-react-jsx@^7.7.0": - version "7.7.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.7.0.tgz#834b0723ba78cd4d24d7d629300c2270f516d0b7" - integrity sha512-mXhBtyVB1Ujfy+0L6934jeJcSXj/VCg6whZzEcgiiZHNS0PGC7vUCsZDQCxxztkpIdF+dY1fUMcjAgEOC3ZOMQ== + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.14.5.tgz#39749f0ee1efd8a1bd729152cf5f78f1d247a44a" + integrity sha512-7RylxNeDnxc1OleDm0F5Q/BSL+whYRbOAR+bwgCxIr0L32v7UFh/pz1DLMZideAUxKT6eMoS2zQH6fyODLEi8Q== dependencies: - "@babel/helper-builder-react-jsx" "^7.7.0" - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-jsx" "^7.2.0" + "@babel/helper-annotate-as-pure" "^7.14.5" + "@babel/helper-module-imports" "^7.14.5" + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/plugin-syntax-jsx" "^7.14.5" + "@babel/types" "^7.14.5" "@babel/plugin-transform-regenerator@^7.7.0": - version "7.7.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.7.0.tgz#f1b20b535e7716b622c99e989259d7dd942dd9cc" - integrity sha512-AXmvnC+0wuj/cFkkS/HFHIojxH3ffSXE+ttulrqWjZZRaUOonfJc60e1wSNT4rV8tIunvu/R3wCp71/tLAa9xg== + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.14.5.tgz#9676fd5707ed28f522727c5b3c0aa8544440b04f" + integrity sha512-NVIY1W3ITDP5xQl50NgTKlZ0GrotKtLna08/uGY6ErQt6VEQZXla86x/CTddm5gZdcr+5GSsvMeTmWA5Ii6pkg== dependencies: - regenerator-transform "^0.14.0" + regenerator-transform "^0.14.2" "@babel/plugin-transform-reserved-words@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.2.0.tgz#4792af87c998a49367597d07fedf02636d2e1634" - integrity sha512-fz43fqW8E1tAB3DKF19/vxbpib1fuyCwSPE418ge5ZxILnBhWyhtPgz8eh1RCGGJlwvksHkyxMxh0eenFi+kFw== + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.14.5.tgz#c44589b661cfdbef8d4300dcc7469dffa92f8304" + integrity sha512-cv4F2rv1nD4qdexOGsRQXJrOcyb5CrgjUH9PKrrtyhSDBNWGxd0UIitjyJiWagS+EbUGjG++22mGH1Pub8D6Vg== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-transform-shorthand-properties@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.2.0.tgz#6333aee2f8d6ee7e28615457298934a3b46198f0" - integrity sha512-QP4eUM83ha9zmYtpbnyjTLAGKQritA5XW/iG9cjtuOI8s1RuL/3V6a3DeSHfKutJQ+ayUfeZJPcnCYEQzaPQqg== + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.14.5.tgz#97f13855f1409338d8cadcbaca670ad79e091a58" + integrity sha512-xLucks6T1VmGsTB+GWK5Pl9Jl5+nRXD1uoFdA5TSO6xtiNjtXTjKkmPdFXVLGlK5A2/or/wQMKfmQ2Y0XJfn5g== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-transform-spread@^7.6.2": - version "7.6.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.6.2.tgz#fc77cf798b24b10c46e1b51b1b88c2bf661bb8dd" - integrity sha512-DpSvPFryKdK1x+EDJYCy28nmAaIMdxmhot62jAXF/o99iA33Zj2Lmcp3vDmz+MUh0LNYVPvfj5iC3feb3/+PFg== + version "7.14.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.14.6.tgz#6bd40e57fe7de94aa904851963b5616652f73144" + integrity sha512-Zr0x0YroFJku7n7+/HH3A2eIrGMjbmAIbJSVv0IZ+t3U2WUQUA64S/oeied2e+MaGSjmt4alzBCsK9E8gh+fag== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-skip-transparent-expression-wrappers" "^7.14.5" "@babel/plugin-transform-sticky-regex@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.2.0.tgz#a1e454b5995560a9c1e0d537dfc15061fd2687e1" - integrity sha512-KKYCoGaRAf+ckH8gEL3JHUaFVyNHKe3ASNsZ+AlktgHevvxGigoIttrEJb8iKN03Q7Eazlv1s6cx2B2cQ3Jabw== + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.14.5.tgz#5b617542675e8b7761294381f3c28c633f40aeb9" + integrity sha512-Z7F7GyvEMzIIbwnziAZmnSNpdijdr4dWt+FJNBnBLz5mwDFkqIXU9wmBcWWad3QeJF5hMTkRe4dAq2sUZiG+8A== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-regex" "^7.0.0" + "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-transform-template-literals@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.4.4.tgz#9d28fea7bbce637fb7612a0750989d8321d4bcb0" - integrity sha512-mQrEC4TWkhLN0z8ygIvEL9ZEToPhG5K7KDW3pzGqOfIGZ28Jb0POUkeWcoz8HnHvhFy6dwAT1j8OzqN8s804+g== + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.14.5.tgz#a5f2bc233937d8453885dc736bdd8d9ffabf3d93" + integrity sha512-22btZeURqiepOfuy/VkFr+zStqlujWaarpMErvay7goJS6BWwdd6BY9zQyDLDa4x2S3VugxFb162IZ4m/S/+Gg== dependencies: - "@babel/helper-annotate-as-pure" "^7.0.0" - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-transform-typeof-symbol@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.2.0.tgz#117d2bcec2fbf64b4b59d1f9819894682d29f2b2" - integrity sha512-2LNhETWYxiYysBtrBTqL8+La0jIoQQnIScUJc74OYvUGRmkskNY4EzLCnjHBzdmb38wqtTaixpo1NctEcvMDZw== + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.14.5.tgz#39af2739e989a2bd291bf6b53f16981423d457d4" + integrity sha512-lXzLD30ffCWseTbMQzrvDWqljvZlHkXU+CnseMhkMNqU1sASnCsz3tSzAaH3vCUXb9PHeUb90ZT1BdFTm1xxJw== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-transform-typescript@^7.7.2": - version "7.7.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.7.2.tgz#eb9f14c516b5d36f4d6f3a9d7badae6d0fc313d4" - integrity sha512-UWhDaJRqdPUtdK1s0sKYdoRuqK0NepjZto2UZltvuCgMoMZmdjhgz5hcRokie/3aYEaSz3xvusyoayVaq4PjRg== + version "7.14.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.14.6.tgz#6e9c2d98da2507ebe0a883b100cde3c7279df36c" + integrity sha512-XlTdBq7Awr4FYIzqhmYY80WN0V0azF74DMPyFqVHBvf81ZUgc4X7ZOpx6O8eLDK6iM5cCQzeyJw0ynTaefixRA== dependencies: - "@babel/helper-create-class-features-plugin" "^7.7.0" - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-typescript" "^7.2.0" + "@babel/helper-create-class-features-plugin" "^7.14.6" + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/plugin-syntax-typescript" "^7.14.5" "@babel/plugin-transform-unicode-regex@^7.7.0": - version "7.7.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.7.0.tgz#743d9bcc44080e3cc7d49259a066efa30f9187a3" - integrity sha512-RrThb0gdrNwFAqEAAx9OWgtx6ICK69x7i9tCnMdVrxQwSDp/Abu9DXFU5Hh16VP33Rmxh04+NGW28NsIkFvFKA== + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.14.5.tgz#4cd09b6c8425dd81255c7ceb3fb1836e7414382e" + integrity sha512-UygduJpC5kHeCiRw/xDVzC+wj8VaYSoKl5JNVmbP7MadpNinAm3SvZCxZ42H37KZBKztz46YC73i9yV34d0Tzw== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.7.0" - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-create-regexp-features-plugin" "^7.14.5" + "@babel/helper-plugin-utils" "^7.14.5" "@babel/preset-env@^7.7.1": version "7.7.1" @@ -794,108 +714,43 @@ "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-transform-typescript" "^7.7.2" -"@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.4.2": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.5.5.tgz#74fba56d35efbeca444091c7850ccd494fd2f132" - integrity sha512-28QvEGyQyNkB0/m2B4FU7IEZGK2NUrcMtT6BZEFALTguLk+AUT6ofsHtPk5QyjAdUkpMJ+/Em+quwz4HOt30AQ== - dependencies: - regenerator-runtime "^0.13.2" - -"@babel/runtime@^7.9.2": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.12.1.tgz#b4116a6b6711d010b2dad3b7b6e43bf1b9954740" - integrity sha512-J5AIf3vPj3UwXaAzb5j1xM4WAQDX3EMgemF8rjCP3SoW09LfRKAXQKt6CoVYl230P6iWdRcBbnLDDdnqWxZSCA== +"@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.12.5", "@babel/runtime@^7.4.2", "@babel/runtime@^7.5.5", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7": + version "7.14.6" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.14.6.tgz#535203bc0892efc7dec60bdc27b2ecf6e409062d" + integrity sha512-/PCB2uJ7oM44tz8YhC4Z/6PeOKXp4K588f+5M3clr1M4zbqztlo0XEfJ2LEzj/FgwfgGcIdl8n7YYjTCI0BYwg== dependencies: regenerator-runtime "^0.13.4" -"@babel/template@^7.1.0", "@babel/template@^7.4.0", "@babel/template@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.4.4.tgz#f4b88d1225689a08f5bc3a17483545be9e4ed237" - integrity sha512-CiGzLN9KgAvgZsnivND7rkA+AeJ9JB0ciPOD4U59GKbQP2iQl+olF1l76kJOupqidozfZ32ghwBEJDhnk9MEcw== - dependencies: - "@babel/code-frame" "^7.0.0" - "@babel/parser" "^7.4.4" - "@babel/types" "^7.4.4" - -"@babel/template@^7.7.0": - version "7.7.0" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.7.0.tgz#4fadc1b8e734d97f56de39c77de76f2562e597d0" - integrity sha512-OKcwSYOW1mhWbnTBgQY5lvg1Fxg+VyfQGjcBduZFljfc044J5iDlnDSfhQ867O17XHiSCxYHUxHg2b7ryitbUQ== - dependencies: - "@babel/code-frame" "^7.0.0" - "@babel/parser" "^7.7.0" - "@babel/types" "^7.7.0" - -"@babel/traverse@^7.1.0", "@babel/traverse@^7.4.3", "@babel/traverse@^7.5.5": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.5.5.tgz#f664f8f368ed32988cd648da9f72d5ca70f165bb" - integrity sha512-MqB0782whsfffYfSjH4TM+LMjrJnhCNEDMDIjeTpl+ASaUvxcjoiVCo/sM1GhS1pHOXYfWVCYneLjMckuUxDaQ== - dependencies: - "@babel/code-frame" "^7.5.5" - "@babel/generator" "^7.5.5" - "@babel/helper-function-name" "^7.1.0" - "@babel/helper-split-export-declaration" "^7.4.4" - "@babel/parser" "^7.5.5" - "@babel/types" "^7.5.5" - debug "^4.1.0" - globals "^11.1.0" - lodash "^4.17.13" - -"@babel/traverse@^7.7.0": - version "7.7.0" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.7.0.tgz#9f5744346b8d10097fd2ec2eeffcaf19813cbfaf" - integrity sha512-ea/3wRZc//e/uwCpuBX2itrhI0U9l7+FsrKWyKGNyvWbuMcCG7ATKY2VI4wlg2b2TA39HHwIxnvmXvtiKsyn7w== - dependencies: - "@babel/code-frame" "^7.5.5" - "@babel/generator" "^7.7.0" - "@babel/helper-function-name" "^7.7.0" - "@babel/helper-split-export-declaration" "^7.7.0" - "@babel/parser" "^7.7.0" - "@babel/types" "^7.7.0" - debug "^4.1.0" - globals "^11.1.0" - lodash "^4.17.13" - -"@babel/traverse@^7.7.2": - version "7.7.2" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.7.2.tgz#ef0a65e07a2f3c550967366b3d9b62a2dcbeae09" - integrity sha512-TM01cXib2+rgIZrGJOLaHV/iZUAxf4A0dt5auY6KNZ+cm6aschuJGqKJM3ROTt3raPUdIDk9siAufIFEleRwtw== - dependencies: - "@babel/code-frame" "^7.5.5" - "@babel/generator" "^7.7.2" - "@babel/helper-function-name" "^7.7.0" - "@babel/helper-split-export-declaration" "^7.7.0" - "@babel/parser" "^7.7.2" - "@babel/types" "^7.7.2" +"@babel/template@^7.14.5", "@babel/template@^7.4.0", "@babel/template@^7.7.0": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.14.5.tgz#a9bc9d8b33354ff6e55a9c60d1109200a68974f4" + integrity sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g== + dependencies: + "@babel/code-frame" "^7.14.5" + "@babel/parser" "^7.14.5" + "@babel/types" "^7.14.5" + +"@babel/traverse@^7.1.0", "@babel/traverse@^7.14.5", "@babel/traverse@^7.4.3", "@babel/traverse@^7.7.2": + version "7.14.7" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.14.7.tgz#64007c9774cfdc3abd23b0780bc18a3ce3631753" + integrity sha512-9vDr5NzHu27wgwejuKL7kIOm4bwEtaPQ4Z6cpCmjSuaRqpH/7xc4qcGEscwMqlkwgcXl6MvqoAjZkQ24uSdIZQ== + dependencies: + "@babel/code-frame" "^7.14.5" + "@babel/generator" "^7.14.5" + "@babel/helper-function-name" "^7.14.5" + "@babel/helper-hoist-variables" "^7.14.5" + "@babel/helper-split-export-declaration" "^7.14.5" + "@babel/parser" "^7.14.7" + "@babel/types" "^7.14.5" debug "^4.1.0" globals "^11.1.0" - lodash "^4.17.13" -"@babel/types@^7.0.0", "@babel/types@^7.3.0", "@babel/types@^7.4.0", "@babel/types@^7.4.4", "@babel/types@^7.5.5": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.5.5.tgz#97b9f728e182785909aa4ab56264f090a028d18a" - integrity sha512-s63F9nJioLqOlW3UkyMd+BYhXt44YuaFm/VV0VwuteqjYwRrObkU7ra9pY4wAJR3oXi8hJrMcrcJdO/HH33vtw== +"@babel/types@^7.0.0", "@babel/types@^7.14.5", "@babel/types@^7.3.0", "@babel/types@^7.4.0", "@babel/types@^7.7.1", "@babel/types@^7.7.2": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.14.5.tgz#3bb997ba829a2104cedb20689c4a5b8121d383ff" + integrity sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg== dependencies: - esutils "^2.0.2" - lodash "^4.17.13" - to-fast-properties "^2.0.0" - -"@babel/types@^7.7.0", "@babel/types@^7.7.1": - version "7.7.1" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.7.1.tgz#8b08ea368f2baff236613512cf67109e76285827" - integrity sha512-kN/XdANDab9x1z5gcjDc9ePpxexkt+1EQ2MQUiM4XnMvQfvp87/+6kY4Ko2maLXH+tei/DgJ/ybFITeqqRwDiA== - dependencies: - esutils "^2.0.2" - lodash "^4.17.13" - to-fast-properties "^2.0.0" - -"@babel/types@^7.7.2": - version "7.7.2" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.7.2.tgz#550b82e5571dcd174af576e23f0adba7ffc683f7" - integrity sha512-YTf6PXoh3+eZgRCBzzP25Bugd2ngmpQVrk7kXX0i5N9BO7TFBtIgZYs7WtxtOGs8e6A4ZI7ECkbBCEHeXocvOA== - dependencies: - esutils "^2.0.2" - lodash "^4.17.13" + "@babel/helper-validator-identifier" "^7.14.5" to-fast-properties "^2.0.0" "@beyonk/google-fonts-webpack-plugin@^1.5.0": @@ -910,9 +765,9 @@ yauzl "^2.8.0" "@cnakazawa/watch@^1.0.3": - version "1.0.3" - resolved "https://registry.yarnpkg.com/@cnakazawa/watch/-/watch-1.0.3.tgz#099139eaec7ebf07a27c1786a3ff64f39464d2ef" - integrity sha512-r5160ogAvGyHsal38Kux7YYtodEKOj89RGb28ht1jh3SJb08VwRwAKKJL0bGb04Zd/3r9FL3BFIc3bBidYffCA== + version "1.0.4" + resolved "https://registry.yarnpkg.com/@cnakazawa/watch/-/watch-1.0.4.tgz#f864ae85004d0fcab6f50be9141c4da368d1656a" + integrity sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ== dependencies: exec-sh "^0.3.2" minimist "^1.2.0" @@ -923,20 +778,11 @@ integrity sha512-GoXw0U2Qaa33m3eUcxuHnHpNvHjNlLo0gtV091XBpaRINaB4X6FGCG5XKxSFNFiPpugUDqNruHzaqpTdDm4AOg== "@fortawesome/fontawesome-free@^5.8.1": - version "5.9.0" - resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-free/-/fontawesome-free-5.9.0.tgz#1aa5c59efb1b8c6eb6277d1e3e8c8f31998b8c8e" - integrity sha512-g795BBEzM/Hq2SYNPm/NQTIp3IWd4eXSH0ds87Na2jnrAUFX3wkyZAI4Gwj9DOaWMuz2/01i8oWI7P7T/XLkhg== + version "5.15.3" + resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-free/-/fontawesome-free-5.15.3.tgz#c36ffa64a2a239bf948541a97b6ae8d729e09a9a" + integrity sha512-rFnSUN/QOtnOAgqFRooTA3H57JLDm0QEG/jPdk+tLQNL/eWd+Aok8g3qCI+Q1xuDPWpGW/i9JySpJVsq8Q0s9w== -"@jest/console@^24.7.1": - version "24.7.1" - resolved "https://registry.yarnpkg.com/@jest/console/-/console-24.7.1.tgz#32a9e42535a97aedfe037e725bd67e954b459545" - integrity sha512-iNhtIy2M8bXlAOULWVTUxmnelTLFneTNEkHCgPmgd+zNwy9zVddJ6oS5rZ9iwoscNdT5mMwUd0C51v/fSlzItg== - dependencies: - "@jest/source-map" "^24.3.0" - chalk "^2.0.1" - slash "^2.0.0" - -"@jest/console@^24.9.0": +"@jest/console@^24.7.1", "@jest/console@^24.9.0": version "24.9.0" resolved "https://registry.yarnpkg.com/@jest/console/-/console-24.9.0.tgz#79b1bc06fb74a8cfb01cbdedf945584b1b9707f0" integrity sha512-Zuj6b8TnKXi3q4ymac8EQfc3ea/uhLeCGThFqXeC8H9/raaH8ARPUTdId+XyGd03Z4In0/VjD2OYFcBF09fNLQ== @@ -1025,16 +871,7 @@ source-map "^0.6.0" string-length "^2.0.0" -"@jest/source-map@^24.3.0": - version "24.3.0" - resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-24.3.0.tgz#563be3aa4d224caf65ff77edc95cd1ca4da67f28" - integrity sha512-zALZt1t2ou8le/crCeeiRYzvdnTzaIlpOWaet45lNSqNJUnXbppUUFR4ZUAlzgDmKee4Q5P/tKXypI1RiHwgag== - dependencies: - callsites "^3.0.0" - graceful-fs "^4.1.15" - source-map "^0.6.0" - -"@jest/source-map@^24.9.0": +"@jest/source-map@^24.3.0", "@jest/source-map@^24.9.0": version "24.9.0" resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-24.9.0.tgz#0e263a94430be4b41da683ccc1e6bffe2a191714" integrity sha512-/Xw7xGlsZb4MJzNDgB7PW5crou5JqWiBQaz6xyPd3ArOg2nfn/PunV8+olXbbEZzNl591o5rWKE9BRDaFAuIBg== @@ -1084,15 +921,6 @@ source-map "^0.6.1" write-file-atomic "2.4.1" -"@jest/types@^24.8.0": - version "24.8.0" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-24.8.0.tgz#f31e25948c58f0abd8c845ae26fcea1491dea7ad" - integrity sha512-g17UxVr2YfBtaMUxn9u/4+siG1ptg9IGYAYwvpwn61nBg779RXnjE/m7CxYcIzEt0AbHZZAHSEZNhkE2WxURVg== - dependencies: - "@types/istanbul-lib-coverage" "^2.0.0" - "@types/istanbul-reports" "^1.1.1" - "@types/yargs" "^12.0.9" - "@jest/types@^24.9.0": version "24.9.0" resolved "https://registry.yarnpkg.com/@jest/types/-/types-24.9.0.tgz#63cb26cb7500d069e5a389441a7c6ab5e909fc59" @@ -1102,43 +930,62 @@ "@types/istanbul-reports" "^1.1.1" "@types/yargs" "^13.0.0" -"@nodelib/fs.scandir@2.1.3": - version "2.1.3" - resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.3.tgz#3a582bdb53804c6ba6d146579c46e52130cf4a3b" - integrity sha512-eGmwYQn3gxo4r7jdQnkrrN6bY478C3P+a/y72IJukF8LjB6ZHeB3c+Ehacj3sYeSmUXGlnA67/PmbM9CVwL7Dw== +"@jest/types@^27.0.6": + version "27.0.6" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-27.0.6.tgz#9a992bc517e0c49f035938b8549719c2de40706b" + integrity sha512-aSquT1qa9Pik26JK5/3rvnYb4bGtm1VFNesHKmNTwmPIgOrixvhL2ghIvFRNEpzy3gU+rUgjIF/KodbkFAl++g== dependencies: - "@nodelib/fs.stat" "2.0.3" + "@types/istanbul-lib-coverage" "^2.0.0" + "@types/istanbul-reports" "^3.0.0" + "@types/node" "*" + "@types/yargs" "^16.0.0" + chalk "^4.0.0" + +"@nodelib/fs.scandir@2.1.5": + version "2.1.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" + integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== + dependencies: + "@nodelib/fs.stat" "2.0.5" run-parallel "^1.1.9" -"@nodelib/fs.stat@2.0.3", "@nodelib/fs.stat@^2.0.2": - version "2.0.3" - resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz#34dc5f4cabbc720f4e60f75a747e7ecd6c175bd3" - integrity sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA== +"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" + integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== "@nodelib/fs.walk@^1.2.3": - version "1.2.4" - resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.4.tgz#011b9202a70a6366e436ca5c065844528ab04976" - integrity sha512-1V9XOY4rDW0rehzbrcqAmHnz8e7SKvX27gh8Gt2WgB0+pdzdiLV83p72kZPU+jvMbS1qU5mauP2iOvO8rhmurQ== + version "1.2.8" + resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" + integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== dependencies: - "@nodelib/fs.scandir" "2.1.3" + "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" "@npmcli/move-file@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@npmcli/move-file/-/move-file-1.0.1.tgz#de103070dac0f48ce49cf6693c23af59c0f70464" - integrity sha512-Uv6h1sT+0DrblvIrolFtbvM1FgWm+/sy4B3pvLp67Zys+thcukzS5ekn7HsZFGpWP4Q3fYJCljbWQE/XivMRLw== + version "1.1.2" + resolved "https://registry.yarnpkg.com/@npmcli/move-file/-/move-file-1.1.2.tgz#1a82c3e372f7cae9253eb66d72543d6b8685c674" + integrity sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg== dependencies: mkdirp "^1.0.4" + rimraf "^3.0.2" + +"@reactivex/rxjs@^6.6.7": + version "6.6.7" + resolved "https://registry.yarnpkg.com/@reactivex/rxjs/-/rxjs-6.6.7.tgz#52ab48f989aba9cda2b995acc904a43e6e1b3b40" + integrity sha512-xZIV2JgHhWoVPm3uVcFbZDRVJfx2hgqmuTX7J4MuKaZ+j5jN29agniCPBwrlCmpA15/zLKcPi7/bogt0ZwOFyA== + dependencies: + tslib "^1.9.0" "@redocly/react-dropdown-aria@^2.0.11": - version "2.0.11" - resolved "https://registry.yarnpkg.com/@redocly/react-dropdown-aria/-/react-dropdown-aria-2.0.11.tgz#532b864b329237e646abe45d0f8edc923e77370a" - integrity sha512-rmuSC2JFFl4DkPDdGVrmffT9KcbG2AB5jvhxPIrOc1dO9mHRMUUftQY35KZlvWqqSSqVn+AM+J9dhiTo1ZqR8A== + version "2.0.12" + resolved "https://registry.yarnpkg.com/@redocly/react-dropdown-aria/-/react-dropdown-aria-2.0.12.tgz#2e3af2b1b8e9123487109400d6117f0d4a8445a6" + integrity sha512-feQEZlyBvQsbT/fvpJ4jJ5OLGaUPpnskHYDsY8DGpPymN+HUeDQrqkBEbbKRwMKidFTI2cxk2kJNNTnvdS9jyw== "@tippy.js/react@^2.1.2": - version "2.2.2" - resolved "https://registry.yarnpkg.com/@tippy.js/react/-/react-2.2.2.tgz#a0fbc646958cdb002d7d227f7b18dca346c76f2e" - integrity sha512-ex6IEy1cFC1a1MqbRaNZqo/MRK/GQOfa/VO5jydYeBrxnxJ3I/3gCX098dUHRLZmB6aFKVY39TwgnQRCbLUG4Q== + version "2.2.3" + resolved "https://registry.yarnpkg.com/@tippy.js/react/-/react-2.2.3.tgz#2ffb0af6693055be7db4b329b2d3cc7f2356f68e" + integrity sha512-5XYvbQujzDj9r00JYEz/cBtm6DutjOdv2azdco53B+eWF7FDBCQfkLVn87wimfEpmGK0vqRQv/cwFxFcoOP98Q== dependencies: prop-types "^15.6.2" tippy.js "^4.3.4" @@ -1148,15 +995,10 @@ resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== -"@types/anymatch@*": - version "1.3.1" - resolved "https://registry.yarnpkg.com/@types/anymatch/-/anymatch-1.3.1.tgz#336badc1beecb9dacc38bea2cf32adf627a8421a" - integrity sha512-/+CRPXpBDpo2RK9C68N3b2cOvO0Cf5B9aPijHsoDQTHivnGSObdOF2BRQOYjojWTDy6nQvMjmqRXIxH55VjxxA== - "@types/babel__core@^7.1.0": - version "7.1.2" - resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.2.tgz#608c74f55928033fce18b99b213c16be4b3d114f" - integrity sha512-cfCCrFmiGY/yq0NuKNxIQvZFy9kY/1immpSpTngOnyIbD4+eJOG5mxphhHDv3CHL9GltO4GcKr54kGBg3RNdbg== + version "7.1.15" + resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.15.tgz#2ccfb1ad55a02c83f8e0ad327cbc332f55eb1024" + integrity sha512-bxlMKPDbY8x5h6HBwVzEOk2C8fb6SLfYQ5Jw3uBYuYF1lfWk/kbLd81la82vrIkBb0l+JdmrZaDikPrNxpS/Ew== dependencies: "@babel/parser" "^7.1.0" "@babel/types" "^7.0.0" @@ -1165,24 +1007,24 @@ "@types/babel__traverse" "*" "@types/babel__generator@*": - version "7.0.2" - resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.0.2.tgz#d2112a6b21fad600d7674274293c85dce0cb47fc" - integrity sha512-NHcOfab3Zw4q5sEE2COkpfXjoE7o+PmqD9DQW4koUT3roNxwziUdXGnRndMat/LJNUtePwn1TlP4do3uoe3KZQ== + version "7.6.3" + resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.3.tgz#f456b4b2ce79137f768aa130d2423d2f0ccfaba5" + integrity sha512-/GWCmzJWqV7diQW54smJZzWbSFf4QYtF71WCKhcx6Ru/tFyQIY2eiiITcCAeuPbNSvT9YCGkVMqqvSk2Z0mXiA== dependencies: "@babel/types" "^7.0.0" "@types/babel__template@*": - version "7.0.2" - resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.0.2.tgz#4ff63d6b52eddac1de7b975a5223ed32ecea9307" - integrity sha512-/K6zCpeW7Imzgab2bLkLEbz0+1JlFSrUMdw7KoIIu+IUdu51GWaBZpd3y1VXGVXzynvGa4DaIaxNZHiON3GXUg== + version "7.4.1" + resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.1.tgz#3d1a48fd9d6c0edfd56f2ff578daed48f36c8969" + integrity sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g== dependencies: "@babel/parser" "^7.1.0" "@babel/types" "^7.0.0" "@types/babel__traverse@*", "@types/babel__traverse@^7.0.6": - version "7.0.7" - resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.0.7.tgz#2496e9ff56196cc1429c72034e07eab6121b6f3f" - integrity sha512-CeBpmX1J8kWLcDEnI3Cl2Eo6RfbGvzUctA+CjZUhOKDFbLfcr7fc4usEqLNWetrlJd7RhAkyYe2czXop4fICpw== + version "7.14.2" + resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.14.2.tgz#ffcd470bbb3f8bf30481678fb5502278ca833a43" + integrity sha512-K2waXdXBi2302XUdcHcR1jCeU0LL4TD9HRs/gk0N2Xvrht+G/BfJa4QObBQZfhMdxiCpV3COl5Nfq4uKTeTnJA== dependencies: "@babel/types" "^7.3.0" @@ -1197,9 +1039,9 @@ integrity sha512-LKVP3cgXBT9RYj+t+9FDKwS5tdI+rPBXaNSkma7hvqy35lc7mAokC2zsqWJH0LaqIt3B962nuYI77hsJoT1gow== "@types/cookiejar@*": - version "2.1.1" - resolved "https://registry.yarnpkg.com/@types/cookiejar/-/cookiejar-2.1.1.tgz#90b68446364baf9efd8e8349bb36bd3852b75b80" - integrity sha512-aRnpPa7ysx3aNW60hTiCtLHlQaIFsXFCgQlpakNgDNVFzbtusSY8PwjAQgRWfSk0ekNoBjO51eQRB6upA9uuyw== + version "2.1.2" + resolved "https://registry.yarnpkg.com/@types/cookiejar/-/cookiejar-2.1.2.tgz#66ad9331f63fe8a3d3d9d8c6e3906dd10f6446e8" + integrity sha512-t73xJJrvdTjXrn4jLS9VSGRbz0nUY3cl2DMGDU48lKl+HR9dbbjW2A9r3g40VA++mQpy6uuHg33gy7du2BKpog== "@types/dagre@^0.7.40": version "0.7.42" @@ -1219,17 +1061,17 @@ integrity sha512-kA2RxBT/r/ZuDDKwMl+vFWn1Z0lfm1/Ik6Qb91wnSzyzCDa/fkM8gIOq6ruB7xfr37n6Mj5dyivileUVKsidlg== "@types/glob@^7.1.1": - version "7.1.3" - resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.3.tgz#e6ba80f36b7daad2c685acd9266382e68985c183" - integrity sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w== + version "7.1.4" + resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.4.tgz#ea59e21d2ee5c517914cb4bc8e4153b99e566672" + integrity sha512-w+LsMxKyYQm347Otw+IfBXOv9UWVjpHpCDdbBMt8Kz/xbvCYNjP+0qPh91Km3iKfSRLBB0P7fAMf0KHrPu+MyA== dependencies: "@types/minimatch" "*" "@types/node" "*" "@types/history@*": - version "4.7.2" - resolved "https://registry.yarnpkg.com/@types/history/-/history-4.7.2.tgz#0e670ea254d559241b6eeb3894f8754991e73220" - integrity sha512-ui3WwXmjTaY73fOQ3/m3nnajU/Orhi6cEu5rzX+BrAAJxa3eITXZ5ch9suPqtM03OWhAHhPSyBGCN4UKoxO20Q== + version "4.7.9" + resolved "https://registry.yarnpkg.com/@types/history/-/history-4.7.9.tgz#1cfb6d60ef3822c589f18e70f8b12f9a28ce8724" + integrity sha512-MUc6zSmU3tEVnkQ78q0peeEjKWPUADMlC/t++2bI8WnAG2tvYRPIgHG8lWkXwqc8MsUF6Z2MOf+Mh5sazOmhiQ== "@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0": version "2.0.1" @@ -1237,24 +1079,33 @@ integrity sha512-hRJD2ahnnpLgsj6KWMYSrmXkM3rm2Dl1qkx6IOFD5FnuNPXJIG5L0dhgKXCYTRMGzU4n0wImQ/xfmRc4POUFlg== "@types/istanbul-lib-report@*": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-1.1.1.tgz#e5471e7fa33c61358dd38426189c037a58433b8c" - integrity sha512-3BUTyMzbZa2DtDI2BkERNC6jJw2Mr2Y0oGI7mRxYNBPxppbtEK1F66u3bKwU2g+wxwWI7PAoRpJnOY1grJqzHg== + version "3.0.0" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#c14c24f18ea8190c118ee7562b7ff99a36552686" + integrity sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg== dependencies: "@types/istanbul-lib-coverage" "*" "@types/istanbul-reports@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-1.1.1.tgz#7a8cbf6a406f36c8add871625b278eaf0b0d255a" - integrity sha512-UpYjBi8xefVChsCoBpKShdxTllC9pwISirfoZsUa2AAdQg/Jd2KQGtSbw+ya7GPo7x/wAPlH6JBhKhAsXUEZNA== + version "1.1.2" + resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz#e875cc689e47bce549ec81f3df5e6f6f11cfaeb2" + integrity sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw== dependencies: "@types/istanbul-lib-coverage" "*" "@types/istanbul-lib-report" "*" +"@types/istanbul-reports@^3.0.0": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz#9153fe98bba2bd565a63add9436d6f0d7f8468ff" + integrity sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw== + dependencies: + "@types/istanbul-lib-report" "*" + "@types/jest-diff@*": - version "20.0.1" - resolved "https://registry.yarnpkg.com/@types/jest-diff/-/jest-diff-20.0.1.tgz#35cc15b9c4f30a18ef21852e255fdb02f6d59b89" - integrity sha512-yALhelO3i0hqZwhjtcr6dYyaLoCHbAMshwtj6cGxTvHZAKXHsYGdff6E8EPw3xLKY0ELUTQ69Q1rQiJENnccMA== + version "24.3.0" + resolved "https://registry.yarnpkg.com/@types/jest-diff/-/jest-diff-24.3.0.tgz#29e237a3d954babfe6e23cc59b57ecd8ca8d858d" + integrity sha512-vx1CRDeDUwQ0Pc7v+hS61O1ETA81kD04IMEC0hS1kPyVtHDdZrokAvpF7MT9VI/fVSzicelUZNCepDvhRV1PeA== + dependencies: + jest-diff "*" "@types/jest@^24.0.13": version "24.0.15" @@ -1268,25 +1119,35 @@ resolved "https://registry.yarnpkg.com/@types/js-yaml/-/js-yaml-3.12.1.tgz#5c6f4a1eabca84792fbd916f0cb40847f123c656" integrity sha512-SGGAhXLHDx+PK4YLNcNGa6goPf9XRWQNAUUbffkwVGGXIxmDKWyGGL4inzq2sPmExu431Ekb9aEMn9BkPqEYFA== -"@types/json-schema@^7.0.5": - version "7.0.6" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.6.tgz#f4c7ec43e81b319a9815115031709f26987891f0" - integrity sha512-3c+yGKvVP5Y9TYBEibGNR+kLtijnj7mYrXRg+WpFb2X9xm04g/DXYkfg4hmzJQosc9snFNUPkbYIhu+KAm6jJw== +"@types/json-schema@^7.0.5", "@types/json-schema@^7.0.7": + version "7.0.8" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.8.tgz#edf1bf1dbf4e04413ca8e5b17b3b7d7d54b59818" + integrity sha512-YSBPTLTVm2e2OoQIDYx8HaeWJ5tTToLH67kXR7zYNGupXMEHa2++G8k+DczX2cFVgalypqtyZIcU19AFcmOpmg== "@types/minimatch@*", "@types/minimatch@^3.0.3": version "3.0.3" resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d" integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA== +"@types/minimist@^1.2.0": + version "1.2.2" + resolved "https://registry.yarnpkg.com/@types/minimist/-/minimist-1.2.2.tgz#ee771e2ba4b3dc5b372935d549fd9617bf345b8c" + integrity sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ== + "@types/node@*": - version "12.6.8" - resolved "https://registry.yarnpkg.com/@types/node/-/node-12.6.8.tgz#e469b4bf9d1c9832aee4907ba8a051494357c12c" - integrity sha512-aX+gFgA5GHcDi89KG5keey2zf0WfZk/HAQotEamsK2kbey+8yGKcson0hbK8E+v0NArlCJQCqMP161YhV6ZXLg== + version "16.3.1" + resolved "https://registry.yarnpkg.com/@types/node/-/node-16.3.1.tgz#24691fa2b0c3ec8c0d34bfcfd495edac5593ebb4" + integrity sha512-N87VuQi7HEeRJkhzovao/JviiqKjDKMVKxKMfUvSKw+MbkbW8R0nA3fi/MQhhlxV2fQ+2ReM+/Nt4efdrJx3zA== "@types/node@^13.11.1": - version "13.13.26" - resolved "https://registry.yarnpkg.com/@types/node/-/node-13.13.26.tgz#09b8326828d46b174d29086cdb6dcd2d0dcf67a3" - integrity sha512-+48LLqolaKj/WnIY1crfLseaGQMIDISBy3PTXVOZ7w/PBaRUv+H8t94++atzfoBAvorbUYz6Xq9vh1fHrg33ig== + version "13.13.52" + resolved "https://registry.yarnpkg.com/@types/node/-/node-13.13.52.tgz#03c13be70b9031baaed79481c0c0cfb0045e53f7" + integrity sha512-s3nugnZumCC//n4moGGe6tkNMyYEdaDBitVjwPxXmR5lnMG5dHePinH2EdxkG3Rh1ghFHHixAG4NJhpJW1rthQ== + +"@types/normalize-package-data@^2.4.0": + version "2.4.1" + resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz#d3357479a0fdfdd5907fe67e17e0a85c906e1301" + integrity sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw== "@types/prop-types@*", "@types/prop-types@^15.5.2": version "15.7.1" @@ -1329,9 +1190,9 @@ "@types/react" "*" "@types/react-helmet@^6.1.0": - version "6.1.0" - resolved "https://registry.yarnpkg.com/@types/react-helmet/-/react-helmet-6.1.0.tgz#af586ed685f4905e2adc7462d1d65ace52beee7a" - integrity sha512-PYRoU1XJFOzQ3BHvWL1T8iDNbRjdMDJMT5hFmZKGbsq09kbSqJy61uwEpTrbTNWDopVphUT34zUSVLK9pjsgYQ== + version "6.1.2" + resolved "https://registry.yarnpkg.com/@types/react-helmet/-/react-helmet-6.1.2.tgz#e9d7d16b29e4ec5716711c52c35c3cec45819eac" + integrity sha512-dcfAZNlWb5JYFbO9CGfrPWLJAyFcT6UeR3u35eBbv8liY2Rg4K7fM1G5+HnwVgot+C+kVwXAZ8pLEn2jsMfTDg== dependencies: "@types/react" "*" @@ -1351,15 +1212,7 @@ "@types/react" "*" "@types/react-router" "*" -"@types/react-router@*": - version "5.0.3" - resolved "https://registry.yarnpkg.com/@types/react-router/-/react-router-5.0.3.tgz#855a1606e62de3f4d69ea34fb3c0e50e98e964d5" - integrity sha512-j2Gge5cvxca+5lK9wxovmGPgpVJMwjyu5lTA/Cd6fLGoPq7FXcUE1jFkEdxeyqGGz8VfHYSHCn5Lcn24BzaNKA== - dependencies: - "@types/history" "*" - "@types/react" "*" - -"@types/react-router@^4.0.27": +"@types/react-router@*", "@types/react-router@^4.0.27": version "4.4.5" resolved "https://registry.yarnpkg.com/@types/react-router/-/react-router-4.4.5.tgz#1166997dc7eef2917b5ebce890ebecb32ee5c1b3" integrity sha512-12+VOu1+xiC8RPc9yrgHCyLI79VswjtuqeS2gPrMcywH6tkc8rGIUhs4LaL3AJPqo5d+RPnfRpNKiJ7MK2Qhcg== @@ -1390,6 +1243,11 @@ "@types/prop-types" "*" csstype "^2.2.0" +"@types/source-list-map@*": + version "0.1.2" + resolved "https://registry.yarnpkg.com/@types/source-list-map/-/source-list-map-0.1.2.tgz#0078836063ffaf17412349bba364087e0ac02ec9" + integrity sha512-K5K+yml8LTo9bWJI/rECfIPrGgxdpeNbj+d53lwN4QjW1MCwlkhUms+gtdzigTeUyBr09+u8BwOIY3MXvHdcsA== + "@types/stack-utils@^1.0.1": version "1.0.1" resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-1.0.1.tgz#0a851d3bd96498fa25c33ab7278ed3bd65f06c3e" @@ -1413,38 +1271,43 @@ "@types/cookiejar" "*" "@types/node" "*" -"@types/tapable@*": - version "1.0.4" - resolved "https://registry.yarnpkg.com/@types/tapable/-/tapable-1.0.4.tgz#b4ffc7dc97b498c969b360a41eee247f82616370" - integrity sha512-78AdXtlhpCHT0K3EytMpn4JNxaf5tbqbLcbIRoQIHzpTIyjpxLQKRoxU55ujBXAtg3Nl2h/XWvfDa9dsMOd0pQ== +"@types/tapable@^1": + version "1.0.8" + resolved "https://registry.yarnpkg.com/@types/tapable/-/tapable-1.0.8.tgz#b94a4391c85666c7b73299fd3ad79d4faa435310" + integrity sha512-ipixuVrh2OdNmauvtT51o3d8z12p6LtFW9in7U79der/kwejjdNchQC5UMn5u/KxNoM7VHHOs/l8KS8uHxhODQ== "@types/uglify-js@*": - version "3.0.4" - resolved "https://registry.yarnpkg.com/@types/uglify-js/-/uglify-js-3.0.4.tgz#96beae23df6f561862a830b4288a49e86baac082" - integrity sha512-SudIN9TRJ+v8g5pTG8RRCqfqTMNqgWCKKd3vtynhGzkIIjxaicNAMuY5TRadJ6tzDu3Dotf3ngaMILtmOdmWEQ== + version "3.13.1" + resolved "https://registry.yarnpkg.com/@types/uglify-js/-/uglify-js-3.13.1.tgz#5e889e9e81e94245c75b6450600e1c5ea2878aea" + integrity sha512-O3MmRAk6ZuAKa9CHgg0Pr0+lUOqoMLpc9AS4R8ano2auvsg7IE8syF3Xh/NPr26TWklxYcqoEEFdzLLs1fV9PQ== dependencies: source-map "^0.6.1" +"@types/webpack-sources@*": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@types/webpack-sources/-/webpack-sources-2.1.1.tgz#6af17e3a3ded71eec2b98008d7c12f498a0a4506" + integrity sha512-MjM1R6iuw8XaVbtkCBz0N349cyqBjJHCbQiOeppe3VBeFvxqs74RKHAVt9LkxTnUWc7YLZOEsUfPUnmK6SBPKQ== + dependencies: + "@types/node" "*" + "@types/source-list-map" "*" + source-map "^0.7.3" + "@types/webpack@^4.4.19": - version "4.32.1" - resolved "https://registry.yarnpkg.com/@types/webpack/-/webpack-4.32.1.tgz#6e95010e806f808abd6551c112097ac09035aacf" - integrity sha512-9n38CBx9uga1FEAdTipnt0EkbKpsCJFh7xJb1LE65FFb/A6OOLFX022vYsGC1IyVCZ/GroNg9u/RMmlDxGcLIw== + version "4.41.30" + resolved "https://registry.yarnpkg.com/@types/webpack/-/webpack-4.41.30.tgz#fd3db6d0d41e145a8eeeafcd3c4a7ccde9068ddc" + integrity sha512-GUHyY+pfuQ6haAfzu4S14F+R5iGRwN6b2FRNJY7U0NilmFAqbsOfK6j1HwuLBAqwRIT+pVdNDJGJ6e8rpp0KHA== dependencies: - "@types/anymatch" "*" "@types/node" "*" - "@types/tapable" "*" + "@types/tapable" "^1" "@types/uglify-js" "*" + "@types/webpack-sources" "*" + anymatch "^3.0.0" source-map "^0.6.0" "@types/yargs-parser@*": - version "13.1.0" - resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-13.1.0.tgz#c563aa192f39350a1d18da36c5a8da382bbd8228" - integrity sha512-gCubfBUZ6KxzoibJ+SCUc/57Ms1jz5NjHe4+dI2krNmU5zCPAphyLJYyTOg06ueIyfj+SaCUqmzun7ImlxDcKg== - -"@types/yargs@^12.0.9": - version "12.0.12" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-12.0.12.tgz#45dd1d0638e8c8f153e87d296907659296873916" - integrity sha512-SOhuU4wNBxhhTHxYaiG5NY4HBhDIDnJF60GU+2LqHAdKKer86//e4yg69aENCtQ04n0ovz+tq2YPME5t5yp4pw== + version "20.2.1" + resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-20.2.1.tgz#3b9ce2489919d9e4fea439b76916abc34b2df129" + integrity sha512-7tFImggNeNBVMsn0vLrpn1H1uPrUBdnARPTpZoitY37ZrdJREzf7I16tMrlK3hen349gr1NYh8CmZQa7CTG6Aw== "@types/yargs@^13.0.0": version "13.0.3" @@ -1453,6 +1316,13 @@ dependencies: "@types/yargs-parser" "*" +"@types/yargs@^16.0.0": + version "16.0.4" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-16.0.4.tgz#26aad98dd2c2a38e421086ea9ad42b9e51642977" + integrity sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw== + dependencies: + "@types/yargs-parser" "*" + "@webassemblyjs/ast@1.9.0": version "1.9.0" resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.9.0.tgz#bd850604b4042459a5a41cd7d338cbed695ed964" @@ -1608,15 +1478,10 @@ resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== -JSV@^4.0.x: - version "4.0.2" - resolved "https://registry.yarnpkg.com/JSV/-/JSV-4.0.2.tgz#d077f6825571f82132f9dffaed587b4029feff57" - integrity sha1-0Hf2glVx+CEy+d/67Vh7QCn+/1c= - abab@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.2.tgz#a2fba1b122c69a85caa02d10f9270c7219709a9d" - integrity sha512-2scffjvioEmNz0OyDSLGWDfKCVwaKc6l9Pm9kOIREU13ClXZvHpg/nRL5xyjSSSLhOnXqft2HpsAzNEEA8cFFg== + version "2.0.5" + resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.5.tgz#c0b678fb32d60fc1219c784d6a826fe385aeb79a" + integrity sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q== abbrev@1: version "1.1.1" @@ -1645,19 +1510,14 @@ acorn-walk@^6.0.1: integrity sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA== acorn@^5.5.3: - version "5.7.3" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.3.tgz#67aa231bf8812974b85235a96771eb6bd07ea279" - integrity sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw== - -acorn@^6.0.1: - version "6.3.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.3.0.tgz#0087509119ffa4fc0a0041d1e93a417e68cb856e" - integrity sha512-/czfa8BwS88b9gWQVhc8eknunSA2DoJpJyTQkhheIf5E48u1N0R4q/YxxsAeqRrmK9TQ/uYfgLDfZo91UlANIA== + version "5.7.4" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.4.tgz#3e8d8a9947d0599a1796d10225d7432f4a4acf5e" + integrity sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg== -acorn@^6.4.1: - version "6.4.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.1.tgz#531e58ba3f51b9dacb9a6646ca4debf5b14ca474" - integrity sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA== +acorn@^6.0.1, acorn@^6.4.1: + version "6.4.2" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.2.tgz#35866fd710528e92de10cf06016498e47e39e1e6" + integrity sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ== add@^2.0.6: version "2.0.6" @@ -1670,9 +1530,9 @@ agent-base@5: integrity sha512-TMeqbNl2fMW0nMjTEPOwe3J/PRFP4vqeoNuQMG0HlMrtm5QxKqdvAkZ1pRBQ/ulIyDD5Yq0nJ7YbdD8ey0TO3g== agent-base@6: - version "6.0.1" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.1.tgz#808007e4e5867decb0ab6ab2f928fbdb5a596db4" - integrity sha512-01q25QQDwLSsyfhrKbn8yuur+JNw0H+0Y4JiGIKd3z9aYk/w/2kxD/Upc+t2ZBBSUNff50VjPsSW2YxM8QYKVg== + version "6.0.2" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" + integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== dependencies: debug "4" @@ -1689,12 +1549,7 @@ ajv-errors@^1.0.0: resolved "https://registry.yarnpkg.com/ajv-errors/-/ajv-errors-1.0.1.tgz#f35986aceb91afadec4102fbd85014950cefa64d" integrity sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ== -ajv-keywords@^3.1.0: - version "3.4.1" - resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.4.1.tgz#ef916e271c64ac12171fd8384eaae6b2345854da" - integrity sha512-RO1ibKvd27e6FEShVFfPALuHI3WjSVNeK5FIsmme/LYRNxjKuNj+Dt7bucLa6NdSv3JcVTyMlm9kGR84z1XpaQ== - -ajv-keywords@^3.4.1, ajv-keywords@^3.5.2: +ajv-keywords@^3.1.0, ajv-keywords@^3.4.1, ajv-keywords@^3.5.2: version "3.5.2" resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== @@ -1709,20 +1564,10 @@ ajv@^5.5.2: fast-json-stable-stringify "^2.0.0" json-schema-traverse "^0.3.0" -ajv@^6.1.0, ajv@^6.5.5: - version "6.10.2" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.10.2.tgz#d3cea04d6b017b2894ad69040fec8b623eb4bd52" - integrity sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw== - dependencies: - fast-deep-equal "^2.0.1" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.4.1" - uri-js "^4.2.2" - -ajv@^6.10.2, ajv@^6.12.4: - version "6.12.5" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.5.tgz#19b0e8bae8f476e5ba666300387775fb1a00a4da" - integrity sha512-lRF8RORchjpKG50/WFf8xmg7sgCLFiYNNnqdKflk63whMQcWR5ngGjiSXkL9bjxy6B2npOK2HSMN49jEBMSkag== +ajv@^6.1.0, ajv@^6.10.2, ajv@^6.12.3, ajv@^6.12.4: + version "6.12.6" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== dependencies: fast-deep-equal "^3.1.1" fast-json-stable-stringify "^2.0.0" @@ -1781,17 +1626,17 @@ ansi-styles@^3.2.0, ansi-styles@^3.2.1: dependencies: color-convert "^1.9.0" -ansi-styles@^4.0.0: +ansi-styles@^4.0.0, ansi-styles@^4.1.0: version "4.3.0" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== dependencies: color-convert "^2.0.1" -ansi-styles@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-1.0.0.tgz#cb102df1c56f5123eab8b67cd7b98027a0279178" - integrity sha1-yxAt8cVvUSPquLZ817mAJ6AnkXg= +ansi-styles@^5.0.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" + integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== anymatch@^2.0.0: version "2.0.0" @@ -1801,10 +1646,10 @@ anymatch@^2.0.0: micromatch "^3.1.4" normalize-path "^2.1.1" -anymatch@~3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.1.tgz#c55ecf02185e2469259399310c173ce31233b142" - integrity sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg== +anymatch@^3.0.0, anymatch@~3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" + integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== dependencies: normalize-path "^3.0.0" picomatch "^2.0.4" @@ -1824,7 +1669,7 @@ are-we-there-yet@~1.1.2: "argo-ui@git+https://github.com/argoproj/argo-ui.git": version "1.0.0" - resolved "git+https://github.com/argoproj/argo-ui.git#74898366c30a1eb7f0efb2ebfbb6d3a9b0b9001a" + resolved "git+https://github.com/argoproj/argo-ui.git#e72b3655abe21c16a12ca82369d90209fa1f05d9" dependencies: "@fortawesome/fontawesome-free" "^5.8.1" "@tippy.js/react" "^2.1.2" @@ -1845,7 +1690,7 @@ are-we-there-yet@~1.1.2: typescript "^4.0.3" xterm "2.4.0" -argparse@^1.0.2, argparse@^1.0.7: +argparse@^1.0.7: version "1.0.10" resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== @@ -1877,11 +1722,6 @@ array-equal@^1.0.0: resolved "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93" integrity sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM= -array-find-index@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" - integrity sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E= - array-flatten@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" @@ -1914,16 +1754,11 @@ array-unique@^0.3.2: resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= -arrify@^1.0.0: +arrify@^1.0.0, arrify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0= -asap@~2.0.3: - version "2.0.6" - resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" - integrity sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY= - asn1.js@^5.2.0: version "5.4.1" resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-5.4.1.tgz#11a980b84ebb91781ce35b0fdc2ee294e3783f07" @@ -1979,11 +1814,6 @@ async-limiter@~1.0.0: resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== -async@0.2.x, async@~0.2.9: - version "0.2.10" - resolved "https://registry.yarnpkg.com/async/-/async-0.2.10.tgz#b6bbe0b0674b9d719708ca38de8c237cb526c3d1" - integrity sha1-trvgsGdLnXGXCMo43owjfLUmw9E= - async@^2.5.0, async@^2.6.2: version "2.6.3" resolved "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff" @@ -1996,7 +1826,7 @@ asynckit@^0.4.0: resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= -atob@^2.1.1: +atob@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== @@ -2007,9 +1837,9 @@ aws-sign2@~0.7.0: integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= aws4@^1.8.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.8.0.tgz#f0e003d9ca9e7f59c7a508945d7b2ef9a04a542f" - integrity sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ== + version "1.11.0" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.11.0.tgz#d61f46d83b2519250e2784daf5b09479a8b41c59" + integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA== babel-jest@^24.9.0: version "24.9.0" @@ -2034,10 +1864,10 @@ babel-loader@^8.0.6: mkdirp "^0.5.1" pify "^4.0.1" -babel-plugin-dynamic-import-node@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.0.tgz#f00f507bdaa3c3e3ff6e7e5e98d90a7acab96f7f" - integrity sha512-o6qFkpeQEBxcqt0XYlWzAVxNCSCZdUgcR8IRlhD/8DylxjjO4foPcvTW0GGKa/cVt3rvxZ7o5ippJ+/0nvLhlQ== +babel-plugin-dynamic-import-node@^2.3.3: + version "2.3.3" + resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz#84fda19c976ec5c6defef57f9427b3def66e17a3" + integrity sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ== dependencies: object.assign "^4.1.0" @@ -2066,7 +1896,7 @@ babel-preset-jest@^24.9.0: "@babel/plugin-syntax-object-rest-spread" "^7.0.0" babel-plugin-jest-hoist "^24.9.0" -babel-runtime@^6.26.0, babel-runtime@^6.9.2: +babel-runtime@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" integrity sha1-llxwWGaOgrVde/4E/yM3vItWR/4= @@ -2074,20 +1904,15 @@ babel-runtime@^6.26.0, babel-runtime@^6.9.2: core-js "^2.4.0" regenerator-runtime "^0.11.0" -babylon@^6.8.1: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" - integrity sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ== - balanced-match@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" - integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= + version "1.0.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== base64-js@^1.0.2: - version "1.3.1" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.1.tgz#58ece8cb75dd07e71ed08c736abc5fac4dbf8df1" - integrity sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g== + version "1.5.1" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" + integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== base@^0.11.1: version "0.11.2" @@ -2143,16 +1968,16 @@ binary-extensions@^1.0.0: integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw== binary-extensions@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.1.0.tgz#30fa40c9e7fe07dbc895678cd287024dea241dd9" - integrity sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ== + version "2.2.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" + integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== -block-stream@*: - version "0.0.9" - resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a" - integrity sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo= +bindings@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" + integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== dependencies: - inherits "~2.0.0" + file-uri-to-path "1.0.0" bluebird@^3.5.5: version "3.7.2" @@ -2164,10 +1989,10 @@ bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.11.9: resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88" integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA== -bn.js@^5.1.1: - version "5.1.3" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.1.3.tgz#beca005408f642ebebea80b042b4d18d2ac0ee6b" - integrity sha512-GkTiFpjFtUzU9CbMeJ5iazkCzGL3jrhzerzZIuqLABjbwRaFt33I9tUdSNryIptM+RxDet6OKm2WnLXzW51KsQ== +bn.js@^5.0.0, bn.js@^5.1.1: + version "5.2.0" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.0.tgz#358860674396c6997771a9d051fcc1b57d4ae002" + integrity sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw== body-parser@1.19.0: version "1.19.0" @@ -2197,7 +2022,7 @@ bonjour@^3.5.0: multicast-dns "^6.0.1" multicast-dns-service-types "^1.1.0" -boolbase@~1.0.0: +boolbase@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24= @@ -2238,10 +2063,10 @@ brorand@^1.0.1, brorand@^1.1.0: resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8= -browser-process-hrtime@^0.1.2: - version "0.1.3" - resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-0.1.3.tgz#616f00faef1df7ec1b5bf9cfe2bdc3170f26c7b4" - integrity sha512-bRFnI4NnjO6cnyLmOV/7PVoDEMJChlcfN0z4s1YMBY989/SvlfMI1lgCnkFUs53e9gQF+w7qu7XdllSTiSl8Aw== +browser-process-hrtime@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626" + integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow== browser-resolve@^1.11.3: version "1.11.3" @@ -2282,11 +2107,11 @@ browserify-des@^1.0.0: safe-buffer "^5.1.2" browserify-rsa@^4.0.0, browserify-rsa@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.0.1.tgz#21e0abfaf6f2029cf2fafb133567a701d4135524" - integrity sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ= + version "4.1.0" + resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.1.0.tgz#b2fd06b5b75ae297f7ce2dc651f918f5be158c8d" + integrity sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog== dependencies: - bn.js "^4.1.0" + bn.js "^5.0.0" randombytes "^2.0.1" browserify-sign@^4.0.0: @@ -2311,7 +2136,7 @@ browserify-zlib@^0.2.0: dependencies: pako "~1.0.5" -browserslist@^4.6.0, browserslist@^4.7.2: +browserslist@^4.16.6, browserslist@^4.6.0: version "4.16.6" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.16.6.tgz#d7901277a5a88e554ed305b183ec9b0c08f66fa2" integrity sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ== @@ -2329,10 +2154,10 @@ bs-logger@0.x: dependencies: fast-json-stable-stringify "2.x" -bser@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.0.tgz#65fc784bf7f87c009b973c12db6546902fa9c7b5" - integrity sha512-8zsjWrQkkBoLK6uxASk1nJ2SKv97ltiGDo6A3wA0/yRPz+CwmEyDo0hUrhIuukG2JHpAl3bvFIixw2/3Hi0DOg== +bser@2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05" + integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ== dependencies: node-int64 "^0.4.0" @@ -2407,9 +2232,9 @@ cacache@^12.0.2: y18n "^4.0.0" cacache@^15.0.5: - version "15.0.5" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-15.0.5.tgz#69162833da29170d6732334643c60e005f5f17d0" - integrity sha512-lloiL22n7sOjEEXdL8NAjTgv9a1u43xICE9/203qonkZUCj5X1UEWIdf2/Y0d6QcCtMzbKQyhrcDbdvlZTs/+A== + version "15.2.0" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-15.2.0.tgz#73af75f77c58e72d8c630a7a2858cb18ef523389" + integrity sha512-uKoJSHmnrqXgthDFx/IU6ED/5xd+NNGe+Bb+kLZy7Ku4P+BaiWEUflAKPZ7eAzsYGcsAGASJZsybXp+quEcHTw== dependencies: "@npmcli/move-file" "^1.0.1" chownr "^2.0.0" @@ -2425,7 +2250,7 @@ cacache@^15.0.5: p-map "^4.0.0" promise-inflight "^1.0.1" rimraf "^3.0.2" - ssri "^8.0.0" + ssri "^8.0.1" tar "^6.0.2" unique-filename "^1.1.1" @@ -2444,6 +2269,14 @@ cache-base@^1.0.1: union-value "^1.0.0" unset-value "^1.0.0" +call-bind@^1.0.0, call-bind@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" + integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== + dependencies: + function-bind "^1.1.1" + get-intrinsic "^1.0.2" + call-me-maybe@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/call-me-maybe/-/call-me-maybe-1.0.1.tgz#26d208ea89e37b5cbde60250a15f031c16a4d66b" @@ -2462,18 +2295,14 @@ camel-case@3.0.x: no-case "^2.2.0" upper-case "^1.1.1" -camelcase-keys@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7" - integrity sha1-MIvur/3ygRkFHvodkyITyRuPkuc= +camelcase-keys@^6.2.2: + version "6.2.2" + resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-6.2.2.tgz#5e755d6ba51aa223ec7d3d52f25778210f9dc3c0" + integrity sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg== dependencies: - camelcase "^2.0.0" - map-obj "^1.0.0" - -camelcase@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f" - integrity sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8= + camelcase "^5.3.1" + map-obj "^4.0.0" + quick-lru "^4.0.1" camelcase@^4.1.0: version "4.1.0" @@ -2486,9 +2315,9 @@ camelcase@^5.0.0, camelcase@^5.3.1: integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== caniuse-lite@^1.0.30001219: - version "1.0.30001228" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001228.tgz#bfdc5942cd3326fa51ee0b42fbef4da9d492a7fa" - integrity sha512-QQmLOGJ3DEgokHbMSA8cj2a+geXqmnpyOFT0lhQV6P3/YOJvGDEwoedcwxEQ30gJIwIIunHIicunJ2rzK5gB2A== + version "1.0.30001243" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001243.tgz#d9250155c91e872186671c523f3ae50cfc94a3aa" + integrity sha512-vNxw9mkTBtkmLFnJRv/2rhs1yufpDfCkBZexG3Y0xdOH2Z/eE/85E4Dl5j1YUN34nZVsSp6vVRFQRrez9wJMRA== capture-exit@^2.0.0: version "2.0.0" @@ -2502,7 +2331,7 @@ caseless@~0.12.0: resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= -chalk@^1.1.1, chalk@^1.1.3, chalk@~1.1.0: +chalk@^1.1.1, chalk@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg= @@ -2522,19 +2351,13 @@ chalk@^2.0.0, chalk@^2.0.1, chalk@^2.3.0, chalk@^2.4.1, chalk@^2.4.2: escape-string-regexp "^1.0.5" supports-color "^5.3.0" -chalk@~0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-0.4.0.tgz#5199a3ddcd0c1efe23bc08c1b027b06176e0c64f" - integrity sha1-UZmj3c0MHv4jvAjBsCewYXbgxk8= +chalk@^4.0.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.1.tgz#c80b3fab28bf6371e6863325eee67e618b77e6ad" + integrity sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg== dependencies: - ansi-styles "~1.0.0" - has-color "~0.1.0" - strip-ansi "~0.1.0" - -change-emitter@^0.1.2: - version "0.1.6" - resolved "https://registry.yarnpkg.com/change-emitter/-/change-emitter-0.1.6.tgz#e8b2fe3d7f1ab7d69a32199aff91ea6931409515" - integrity sha1-6LL+PX8at9aaMhma/5HqaTFAlRU= + ansi-styles "^4.1.0" + supports-color "^7.1.0" charenc@0.0.2: version "0.0.2" @@ -2561,24 +2384,24 @@ chokidar@^2.1.8: fsevents "^1.2.7" chokidar@^3.4.1: - version "3.4.2" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.4.2.tgz#38dc8e658dec3809741eb3ef7bb0a47fe424232d" - integrity sha512-IZHaDeBeI+sZJRX7lGcXsdzgvZqKv6sECqsbErJA4mHWfpRrD8B97kSFN4cQz6nGBGiuFia1MKR4d6c1o8Cv7A== + version "3.5.2" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.2.tgz#dba3976fcadb016f66fd365021d91600d01c1e75" + integrity sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ== dependencies: - anymatch "~3.1.1" + anymatch "~3.1.2" braces "~3.0.2" - glob-parent "~5.1.0" + glob-parent "~5.1.2" is-binary-path "~2.1.0" is-glob "~4.0.1" normalize-path "~3.0.0" - readdirp "~3.4.0" + readdirp "~3.6.0" optionalDependencies: - fsevents "~2.1.2" + fsevents "~2.3.2" chownr@^1.1.1: - version "1.1.3" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.3.tgz#42d837d5239688d55f303003a508230fa6727142" - integrity sha512-i70fVHhmV3DtTl6nqvZOnIjbY0Pe4kAUjwHj8z0zAdgBtYrJyYwLKCCuRBQ5ppkyL0AkN7HKRnETdmdp1zqNXw== + version "1.1.4" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" + integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== chownr@^2.0.0: version "2.0.0" @@ -2586,11 +2409,9 @@ chownr@^2.0.0: integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== chrome-trace-event@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz#234090ee97c7d4ad1a2c4beae27505deffc608a4" - integrity sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ== - dependencies: - tslib "^1.9.0" + version "1.0.3" + resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz#1015eced4741e15d06664a957dbbf50d041e26ac" + integrity sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg== ci-info@^2.0.0: version "2.0.0" @@ -2626,9 +2447,9 @@ classnames@^2.2.5, classnames@^2.2.6: integrity sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q== clean-css@4.2.x: - version "4.2.1" - resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.2.1.tgz#2d411ef76b8569b6d0c84068dabe85b0aa5e5c17" - integrity sha512-4ZxI6dy4lrY6FHzfiy1aEOXgu4LIsW2MhwG0VBKdcoGoH/XLFgaHSdLTGr4O8Be6A8r3MOphEiI8Gc1n0ecf3g== + version "4.2.3" + resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.2.3.tgz#507b5de7d97b48ee53d84adb0160ff6216380f78" + integrity sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA== dependencies: source-map "~0.6.0" @@ -2637,13 +2458,6 @@ clean-stack@^2.0.0: resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== -cli-table@~0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/cli-table/-/cli-table-0.3.1.tgz#f53b05266a8b1a0b934b3d0821e6e2dc5914ae23" - integrity sha1-9TsFJmqLGguTSz0IIebi3FkUriM= - dependencies: - colors "1.0.3" - cliui@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" @@ -2662,6 +2476,15 @@ cliui@^6.0.0: strip-ansi "^6.0.0" wrap-ansi "^6.2.0" +cliui@^7.0.2: + version "7.0.4" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" + integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.0" + wrap-ansi "^7.0.0" + clone-deep@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-2.0.2.tgz#00db3a1e173656730d1188c3d6aced6d7ea97713" @@ -2725,20 +2548,20 @@ color-convert@^2.0.1: dependencies: color-name "~1.1.4" -color-name@1.1.3: +color-name@1.1.3, color-name@^1.0.0: version "1.1.3" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= -color-name@^1.0.0, color-name@~1.1.4: +color-name@~1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== color-string@^1.5.2: - version "1.5.3" - resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.5.3.tgz#c9bbc5f01b58b5492f3d6857459cb6590ce204cc" - integrity sha512-dC2C5qeWoYkxki5UAXapdjqO672AM4vZuPGRQfO8b5HKuKGBbKWpITyDYN7TOFKvRW7kOgAn3746clDBMDJyQw== + version "1.5.5" + resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.5.5.tgz#65474a8f0e7439625f3d27a6a19d89fc45223014" + integrity sha512-jgIoum0OfQfq9Whcfc2z/VhCNcmQjWbey6qBX0vqt7YICflUmBCh9E9CiQD5GSJ+Uehixm3NUwHVhqUAWRivZg== dependencies: color-name "^1.0.0" simple-swizzle "^0.2.2" @@ -2756,16 +2579,6 @@ colorette@^1.2.2: resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.2.tgz#cbcc79d5e99caea2dbf10eb3a26fd8b3e6acfa94" integrity sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w== -colors@0.6.x: - version "0.6.2" - resolved "https://registry.yarnpkg.com/colors/-/colors-0.6.2.tgz#2423fe6678ac0c5dae8852e5d0e5be08c997abcc" - integrity sha1-JCP+ZnisDF2uiFLl0OW+CMmXq8w= - -colors@1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/colors/-/colors-1.0.3.tgz#0433f44d809680fdeb60ed260f1b0c262e82a40b" - integrity sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs= - combined-stream@^1.0.6, combined-stream@~1.0.6: version "1.0.8" resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" @@ -2773,16 +2586,11 @@ combined-stream@^1.0.6, combined-stream@~1.0.6: dependencies: delayed-stream "~1.0.0" -commander@2.17.x: +commander@2.17.x, commander@^2.12.1: version "2.17.1" resolved "https://registry.yarnpkg.com/commander/-/commander-2.17.1.tgz#bd77ab7de6de94205ceacc72f1716d29f20a77bf" integrity sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg== -commander@^2.12.1: - version "2.20.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.0.tgz#d58bb2b5c1ee8f87b0d340027e9e94e222c5a422" - integrity sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ== - commander@^2.20.0: version "2.20.3" resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" @@ -2793,20 +2601,6 @@ commander@~2.19.0: resolved "https://registry.yarnpkg.com/commander/-/commander-2.19.0.tgz#f6198aa84e5b83c46054b94ddedbfed5ee9ff12a" integrity sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg== -commander@~2.9.0: - version "2.9.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4" - integrity sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q= - dependencies: - graceful-readlink ">= 1.0.0" - -comment-parser@^0.3.1: - version "0.3.2" - resolved "https://registry.yarnpkg.com/comment-parser/-/comment-parser-0.3.2.tgz#3c03f0776b86a36dfd9a0a2c97c6307f332082fe" - integrity sha1-PAPwd2uGo239mgosl8YwfzMggv4= - dependencies: - readable-stream "^2.0.4" - common-tags@1.8.0: version "1.8.0" resolved "https://registry.yarnpkg.com/common-tags/-/common-tags-1.8.0.tgz#8e3153e542d4a39e9b10554434afaaf98956a937" @@ -2889,17 +2683,10 @@ content-type@~1.0.4: resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== -convert-source-map@^1.1.0, convert-source-map@^1.4.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.6.0.tgz#51b537a8c43e0f04dec1993bffcdd504e758ac20" - integrity sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A== - dependencies: - safe-buffer "~5.1.1" - -convert-source-map@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" - integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA== +convert-source-map@^1.4.0, convert-source-map@^1.7.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.8.0.tgz#f3373c32d21b4d780dd8004514684fb791ca4369" + integrity sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA== dependencies: safe-buffer "~5.1.1" @@ -2958,27 +2745,22 @@ copy-webpack-plugin@^6.1.1: webpack-sources "^1.4.3" core-js-compat@^3.1.1: - version "3.4.0" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.4.0.tgz#2a47c51d3dc026d290018cacd987495f68a47c75" - integrity sha512-pgQUcgT2+v9/yxHgMynYjNj7nmxLRXv3UC39rjCjDwpe63ev2rioQTju1PKLYUBbPCQQvZNWvQC8tBJd65q11g== + version "3.15.2" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.15.2.tgz#47272fbb479880de14b4e6081f71f3492f5bd3cb" + integrity sha512-Wp+BJVvwopjI+A1EFqm2dwUmWYXrvucmtIB2LgXn/Rb+gWPKYxtmb4GKHGKG/KGF1eK9jfjzT38DITbTOCX/SQ== dependencies: - browserslist "^4.7.2" - semver "^6.3.0" - -core-js@^1.0.0: - version "1.2.7" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-1.2.7.tgz#652294c14651db28fa93bd2d5ff2983a4f08c636" - integrity sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY= + browserslist "^4.16.6" + semver "7.0.0" core-js@^2.4.0: - version "2.6.10" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.10.tgz#8a5b8391f8cc7013da703411ce5b585706300d7f" - integrity sha512-I39t74+4t+zau64EN1fE5v2W31Adtc/REhzWN+gWRRXg6WH5qAsZm62DHpQ1+Yhe4047T55jvzz7MUqF/dBBlA== + version "2.6.12" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.12.tgz#d9333dfa7b065e347cc5682219d6f690859cc2ec" + integrity sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ== core-js@^3.2.1: - version "3.6.5" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.6.5.tgz#7395dc273af37fb2e50e9bd3d9fe841285231d1a" - integrity sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA== + version "3.15.2" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.15.2.tgz#740660d2ff55ef34ce664d7e2455119c5bdd3d61" + integrity sha512-tKs41J7NJVuaya8DxIOCnl8QuPHx5/ZVbFo1oKgVl1qHFBBrDctzQGtuLjPpRdNTWmKPH6oEvgN/MUID+l485Q== core-util-is@1.0.2, core-util-is@~1.0.0: version "1.0.2" @@ -3046,13 +2828,14 @@ cross-spawn@6.0.5, cross-spawn@^6.0.0, cross-spawn@^6.0.5: shebang-command "^1.2.0" which "^1.2.9" -cross-spawn@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-3.0.1.tgz#1256037ecb9f0c5f79e3d6ef135e30770184b982" - integrity sha1-ElYDfsufDF9549bvE14wdwGEuYI= +cross-spawn@^7.0.3: + version "7.0.3" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" + integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== dependencies: - lru-cache "^4.0.1" - which "^1.2.9" + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" crypt@0.0.2: version "0.0.2" @@ -3088,34 +2871,34 @@ css-modules-loader-core@^1.1.0: postcss-modules-scope "1.1.0" postcss-modules-values "1.3.0" -css-select@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/css-select/-/css-select-1.2.0.tgz#2b3a110539c5355f1cd8d314623e870b121ec858" - integrity sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg= +css-select@^4.1.3: + version "4.1.3" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-4.1.3.tgz#a70440f70317f2669118ad74ff105e65849c7067" + integrity sha512-gT3wBNd9Nj49rAbmtFHj1cljIAOLYSX1nZ8CB7TBO3INYckygm5B7LISU/szY//YmdiSLbJvDLOx9VnMVpMBxA== dependencies: - boolbase "~1.0.0" - css-what "2.1" - domutils "1.5.1" - nth-check "~1.0.1" + boolbase "^1.0.0" + css-what "^5.0.0" + domhandler "^4.2.0" + domutils "^2.6.0" + nth-check "^2.0.0" css-selector-tokenizer@^0.7.0: - version "0.7.1" - resolved "https://registry.yarnpkg.com/css-selector-tokenizer/-/css-selector-tokenizer-0.7.1.tgz#a177271a8bca5019172f4f891fc6eed9cbf68d5d" - integrity sha512-xYL0AMZJ4gFzJQsHUKa5jiWWi2vH77WVNg7JYRyewwj6oPh4yb/y6Y9ZCw9dsj/9UauMhtuxR+ogQd//EdEVNA== + version "0.7.3" + resolved "https://registry.yarnpkg.com/css-selector-tokenizer/-/css-selector-tokenizer-0.7.3.tgz#735f26186e67c749aaf275783405cf0661fae8f1" + integrity sha512-jWQv3oCEL5kMErj4wRnK/OPoBi0D+P1FR2cDCKYPaMeD2eW3/mttav8HT4hT1CKopiJI/psEULjkClhvJo4Lvg== dependencies: - cssesc "^0.1.0" - fastparse "^1.1.1" - regexpu-core "^1.0.0" + cssesc "^3.0.0" + fastparse "^1.1.2" -css-what@2.1: - version "2.1.3" - resolved "https://registry.yarnpkg.com/css-what/-/css-what-2.1.3.tgz#a6d7604573365fe74686c3f311c56513d88285f2" - integrity sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg== +css-what@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/css-what/-/css-what-5.0.1.tgz#3efa820131f4669a8ac2408f9c32e7c7de9f4cad" + integrity sha512-FYDTSHb/7KXsWICVsxdmiExPjCfRC4qRFBdVwv7Ax9hMnvMmEjP9RfxTEZ3qPZGmADDn2vAKSo9UcN1jKVYscg== -cssesc@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-0.1.0.tgz#c814903e45623371a0477b40109aaafbeeaddbb4" - integrity sha1-yBSQPkViM3GgR3tAEJqq++6t27Q= +cssesc@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" + integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== cssom@0.3.x, "cssom@>= 0.3.2 < 0.4.0": version "0.3.8" @@ -3134,31 +2917,15 @@ csstype@^2.2.0: resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.6.tgz#c34f8226a94bbb10c32cc0d714afdf942291fc41" integrity sha512-RpFbQGUE74iyPgvr46U9t1xoQBM8T4BL8SxrN66Le2xYAPSaDJJKeztV3awugusb3g3G9iL8StmkBBXhcbbXhg== -cst@^0.4.3: - version "0.4.10" - resolved "https://registry.yarnpkg.com/cst/-/cst-0.4.10.tgz#9c05c825290a762f0a85c0aabb8c0fe035ae8516" - integrity sha512-U5ETe1IOjq2h56ZcBE3oe9rT7XryCH6IKgPMv0L7sSk6w29yR3p5egCK0T3BDNHHV95OoUBgXsqiVG+3a900Ag== - dependencies: - babel-runtime "^6.9.2" - babylon "^6.8.1" - source-map-support "^0.4.0" - -currently-unhandled@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" - integrity sha1-mI3zP+qxke95mmE2nddsF635V+o= - dependencies: - array-find-index "^1.0.1" +csstype@^3.0.2: + version "3.0.8" + resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.0.8.tgz#d2266a792729fb227cd216fb572f43728e1ad340" + integrity sha512-jXKhWqXPmlUeoQnF/EhTtTl4C9SnrxSH/jZUih3jmO6lBKr99rP3/+FmrMj4EFpOXzMtXHAZkd3x0E6h6Fgflw== -cycle@1.0.x: - version "1.0.3" - resolved "https://registry.yarnpkg.com/cycle/-/cycle-1.0.3.tgz#21e80b2be8580f98b468f379430662b046c34ad2" - integrity sha1-IegLK+hYD5i0aPN5QwZisEbDStI= - -cyclist@~0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-0.2.2.tgz#1b33792e11e914a2fd6d6ed6447464444e5fa640" - integrity sha1-GzN5LhHpFKL9bW7WRHRkRE5fpkA= +cyclist@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-1.0.1.tgz#596e9698fd0c80e12038c2b82d6eb1b35b6224d9" + integrity sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk= dagre@^0.8.2: version "0.8.4" @@ -3191,28 +2958,29 @@ debug@2.6.9, debug@^2.2.0, debug@^2.3.3: dependencies: ms "2.0.0" -debug@4: - version "4.2.0" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.2.0.tgz#7f150f93920e94c58f5574c2fd01a3110effe7f1" - integrity sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg== +debug@4, debug@^4.1.0, debug@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" + integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== dependencies: - ms "2.1.2" + ms "^2.1.1" -debug@^3.1.0, debug@^3.1.1, debug@^3.2.5, debug@^3.2.6: - version "3.2.6" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" - integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== +debug@^3.1.0, debug@^3.1.1, debug@^3.2.5: + version "3.2.7" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" + integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== dependencies: ms "^2.1.1" -debug@^4.1.0, debug@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" - integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== +decamelize-keys@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/decamelize-keys/-/decamelize-keys-1.1.0.tgz#d171a87933252807eb3cb61dc1c1445d078df2d9" + integrity sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk= dependencies: - ms "^2.1.1" + decamelize "^1.1.0" + map-obj "^1.0.0" -decamelize@^1.1.2, decamelize@^1.2.0: +decamelize@^1.1.0, decamelize@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= @@ -3232,27 +3000,24 @@ deep-diff@^0.3.5: resolved "https://registry.yarnpkg.com/deep-diff/-/deep-diff-0.3.8.tgz#c01de63efb0eec9798801d40c7e0dae25b582c84" integrity sha1-wB3mPvsO7JeYgB1Ax+Da4ltYLIQ= -deep-equal@*, deep-equal@^1.0.0, deep-equal@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.0.1.tgz#f5d260292b660e084eff4cdbc9f08ad3247448b5" - integrity sha1-9dJgKStmDghO/0zbyfCK0yR0SLU= - -deep-extend@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" - integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== +deep-equal@^1.0.0, deep-equal@^1.0.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.1.1.tgz#b5c98c942ceffaf7cb051e24e1434a25a2e6076a" + integrity sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g== + dependencies: + is-arguments "^1.0.4" + is-date-object "^1.0.1" + is-regex "^1.0.4" + object-is "^1.0.1" + object-keys "^1.1.1" + regexp.prototype.flags "^1.2.0" deep-is@~0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= -deepmerge@*: - version "4.0.0" - resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.0.0.tgz#3e3110ca29205f120d7cb064960a39c3d2087c09" - integrity sha512-YZ1rOP5+kHor4hMAH+HRQnBQHg+wvS1un1hAOuIcxcBy0hzcUf6Jg2a1w65kpoOUnurOfZbERwjI1TfZxNjcww== - -deepmerge@^3.2.0: +deepmerge@*, deepmerge@^3.2.0: version "3.3.0" resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-3.3.0.tgz#d3c47fd6f3a93d517b14426b0628a17b0125f5f7" integrity sha512-GRQOafGHwMHpjPx9iCvTgpu9NojZ49q794EEL94JVEw6VaeA8XTUyBKvAkOOjBX9oJNiV6G3P+T+tihFjo2TqA== @@ -3265,7 +3030,7 @@ default-gateway@^4.2.0: execa "^1.0.0" ip-regex "^2.1.0" -define-properties@^1.1.2: +define-properties@^1.1.2, define-properties@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== @@ -3340,41 +3105,41 @@ detect-file@^1.0.0: resolved "https://registry.yarnpkg.com/detect-file/-/detect-file-1.0.0.tgz#f0d66d03672a825cb1b73bdb3fe62310c8e552b7" integrity sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc= -detect-libc@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" - integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups= - detect-newline@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-2.1.0.tgz#f41f1c10be4b00e87b5f13da680759f2c5bfd3e2" integrity sha1-9B8cEL5LAOh7XxPaaAdZ8sW/0+I= detect-node@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.0.4.tgz#014ee8f8f669c5c58023da64b8179c083a28c46c" - integrity sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw== - -diff-match-patch@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/diff-match-patch/-/diff-match-patch-1.0.4.tgz#6ac4b55237463761c4daf0dc603eb869124744b1" - integrity sha512-Uv3SW8bmH9nAtHKaKSanOQmj2DnlH65fUpcrMdfdaOxUG02QQ4YGZ8AE7kKOMisF7UqvOlGKVYWRvezdncW9lg== + version "2.1.0" + resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.1.0.tgz#c9c70775a49c3d03bc2c06d9a73be550f978f8b1" + integrity sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g== diff-sequences@^24.9.0: version "24.9.0" resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-24.9.0.tgz#5715d6244e2aa65f48bba0bc972db0b0b11e95b5" integrity sha512-Dj6Wk3tWyTE+Fo1rW8v0Xhwk80um6yFYKbuAxc9c3EZxIHFDYwbi34Uk42u1CdnIiVorvt4RmlSDjIPyzGC2ew== +diff-sequences@^27.0.6: + version "27.0.6" + resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-27.0.6.tgz#3305cb2e55a033924054695cc66019fd7f8e5723" + integrity sha512-ag6wfpBFyNXZ0p8pcuIDS//D8H062ZQJ3fzYxjpmeKjnz8W4pekL3AI8VohmyZmsWW2PWaHgjsmqR6L13101VQ== + diff@^2.2.2: version "2.2.3" resolved "https://registry.yarnpkg.com/diff/-/diff-2.2.3.tgz#60eafd0d28ee906e4e8ff0a52c1229521033bf99" integrity sha1-YOr9DSjukG5Oj/ClLBIpUhAzv5k= -diff@^3.1.0, diff@^3.2.0: +diff@^3.1.0: version "3.5.0" resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" integrity sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA== +diff@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" + integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== + diffie-hellman@^5.0.0: version "5.0.3" resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" @@ -3411,47 +3176,49 @@ dns-txt@^2.0.2: dependencies: buffer-indexof "^1.0.0" -dom-converter@^0.2: +dom-converter@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/dom-converter/-/dom-converter-0.2.0.tgz#6721a9daee2e293682955b6afe416771627bb768" integrity sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA== dependencies: utila "~0.4" -dom-helpers@^3.4.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-3.4.0.tgz#e9b369700f959f62ecde5a6babde4bccd9169af8" - integrity sha512-LnuPJ+dwqKDIyotW1VzmOZ5TONUN7CwkCR5hrgawTUbkBGYdeoNLZo6nNfGkCrjtE1nXXaj7iMMpDa8/d9WoIA== +dom-helpers@^5.0.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-5.2.1.tgz#d9400536b2bf8225ad98fe052e029451ac40e902" + integrity sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA== dependencies: - "@babel/runtime" "^7.1.2" + "@babel/runtime" "^7.8.7" + csstype "^3.0.2" dom-scroll-into-view@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/dom-scroll-into-view/-/dom-scroll-into-view-1.0.1.tgz#32abb92f0d8feca6215162aef43e4b449ab8d99c" integrity sha1-Mqu5Lw2P7KYhUWKu9D5LRJq42Zw= -dom-serializer@0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.1.tgz#1ec4059e284babed36eec2941d4a970a189ce7c0" - integrity sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA== +dom-serializer@^1.0.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.3.2.tgz#6206437d32ceefaec7161803230c7a20bc1b4d91" + integrity sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig== dependencies: - domelementtype "^1.3.0" - entities "^1.1.1" + domelementtype "^2.0.1" + domhandler "^4.2.0" + entities "^2.0.0" dom-walk@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/dom-walk/-/dom-walk-0.1.1.tgz#672226dc74c8f799ad35307df936aba11acd6018" - integrity sha1-ZyIm3HTI95mtNTB9+TaroRrNYBg= + version "0.1.2" + resolved "https://registry.yarnpkg.com/dom-walk/-/dom-walk-0.1.2.tgz#0c548bef048f4d1f2a97249002236060daa3fd84" + integrity sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w== domain-browser@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda" integrity sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA== -domelementtype@1, domelementtype@^1.3.0, domelementtype@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f" - integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w== +domelementtype@^2.0.1, domelementtype@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.2.0.tgz#9a0b6c2782ed6a1c7323d42267183df9bd8b1d57" + integrity sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A== domexception@^1.0.1: version "1.0.1" @@ -3460,40 +3227,26 @@ domexception@^1.0.1: dependencies: webidl-conversions "^4.0.2" -domhandler@2.3: - version "2.3.0" - resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.3.0.tgz#2de59a0822d5027fabff6f032c2b25a2a8abe738" - integrity sha1-LeWaCCLVAn+r/28DLCsloqir5zg= - dependencies: - domelementtype "1" - -domhandler@^2.3.0: - version "2.4.2" - resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.4.2.tgz#8805097e933d65e85546f726d60f5eb88b44f803" - integrity sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA== +domhandler@^4.0.0, domhandler@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.2.0.tgz#f9768a5f034be60a89a27c2e4d0f74eba0d8b059" + integrity sha512-zk7sgt970kzPks2Bf+dwT/PLzghLnsivb9CcxkvR8Mzr66Olr0Ofd8neSbglHJHaHa2MadfoSdNlKYAaafmWfA== dependencies: - domelementtype "1" + domelementtype "^2.2.0" -dompurify@^2.0.12: - version "2.1.1" - resolved "https://registry.yarnpkg.com/dompurify/-/dompurify-2.1.1.tgz#b5aa988676b093a9c836d8b855680a8598af25fe" - integrity sha512-NijiNVkS/OL8mdQL1hUbCD6uty/cgFpmNiuFxrmJ5YPH2cXrPKIewoixoji56rbZ6XBPmtM8GA8/sf9unlSuwg== - -domutils@1.5, domutils@1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.5.1.tgz#dcd8488a26f563d61079e48c9f7b7e32373682cf" - integrity sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8= - dependencies: - dom-serializer "0" - domelementtype "1" +dompurify@^2.0.12: + version "2.3.0" + resolved "https://registry.yarnpkg.com/dompurify/-/dompurify-2.3.0.tgz#07bb39515e491588e5756b1d3e8375b5964814e2" + integrity sha512-VV5C6Kr53YVHGOBKO/F86OYX6/iLTw2yVSI721gKetxpHCK/V5TaLEf9ODjRgl1KLSWRMY6cUhAbv/c+IUnwQw== -domutils@^1.5.1: - version "1.7.0" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a" - integrity sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg== +domutils@^2.5.2, domutils@^2.6.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.7.0.tgz#8ebaf0c41ebafcf55b0b72ec31c56323712c5442" + integrity sha512-8eaHa17IwJUPAiB+SoTYBo5mCdeMgdcAoXJ59m6DT1vw+5iLS3gNoqYaRowaBKtGVrOF1Jz4yDTgYKLK2kvfJg== dependencies: - dom-serializer "0" - domelementtype "1" + dom-serializer "^1.0.1" + domelementtype "^2.2.0" + domhandler "^4.2.0" duplexify@^3.4.2, duplexify@^3.6.0: version "3.7.1" @@ -3519,9 +3272,9 @@ ee-first@1.1.1: integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= electron-to-chromium@^1.3.723: - version "1.3.737" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.737.tgz#196f2e9656f4f3c31930750e1899c091b72d36b5" - integrity sha512-P/B84AgUSQXaum7a8m11HUsYL8tj9h/Pt5f7Hg7Ty6bm5DxlFq+e5+ouHUoNQMsKDJ7u4yGfI8mOErCmSH9wyg== + version "1.3.772" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.772.tgz#fd1ed39f9f3149f62f581734e4f026e600369479" + integrity sha512-X/6VRCXWALzdX+RjCtBU6cyg8WZgoxm9YA02COmDOiNJEZ59WkQggDbWZ4t/giHi/3GS+cvdrP6gbLISANAGYA== elliptic@^6.5.3: version "6.5.4" @@ -3561,13 +3314,6 @@ encodeurl@~1.0.2: resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= -encoding@^0.1.11: - version "0.1.12" - resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.12.tgz#538b66f3ee62cd1ab51ec323829d1f9480c74beb" - integrity sha1-U4tm8+5izRq1HsMjgp0flIDHS+s= - dependencies: - iconv-lite "~0.4.13" - end-of-stream@^1.0.0, end-of-stream@^1.1.0: version "1.4.1" resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.1.tgz#ed29634d19baba463b6ce6b80a37213eab71ec43" @@ -3575,42 +3321,33 @@ end-of-stream@^1.0.0, end-of-stream@^1.1.0: dependencies: once "^1.4.0" -enhanced-resolve@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.1.0.tgz#41c7e0bfdfe74ac1ffe1e57ad6a5c6c9f3742a7f" - integrity sha512-F/7vkyTtyc/llOIn8oWclcB25KdRaiPBpZYDgJHgh/UHtpgT2p2eldQgtQnLtUvfMKPKxbRaQM/hHkvLHt1Vng== - dependencies: - graceful-fs "^4.1.2" - memory-fs "^0.4.0" - tapable "^1.0.0" - -enhanced-resolve@^4.1.1, enhanced-resolve@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.3.0.tgz#3b806f3bfafc1ec7de69551ef93cca46c1704126" - integrity sha512-3e87LvavsdxyoCfGusJnrZ5G8SLPOFeHSNpZI/ATL9a5leXo2k0w6MKnbqhdBad9qTobSfB20Ld7UmgoNbAZkQ== +enhanced-resolve@^4.0.0, enhanced-resolve@^4.1.1, enhanced-resolve@^4.3.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz#2f3cfd84dbe3b487f18f2db2ef1e064a571ca5ec" + integrity sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg== dependencies: graceful-fs "^4.1.2" memory-fs "^0.5.0" tapable "^1.0.0" -entities@1.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/entities/-/entities-1.0.0.tgz#b2987aa3821347fcde642b24fdfc9e4fb712bf26" - integrity sha1-sph6o4ITR/zeZCsk/fyeT7cSvyY= +entities@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" + integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== -entities@^1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.2.tgz#bdfa735299664dfafd34529ed4f8522a275fea56" - integrity sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w== +env-paths@^2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" + integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== errno@^0.1.3, errno@~0.1.7: - version "0.1.7" - resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618" - integrity sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg== + version "0.1.8" + resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.8.tgz#8bb3e9c7d463be4976ff888f76b4809ebc2e811f" + integrity sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A== dependencies: prr "~1.0.1" -error-ex@^1.2.0, error-ex@^1.3.1: +error-ex@^1.3.1: version "1.3.2" resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== @@ -3624,22 +3361,32 @@ error-stack-parser@^1.3.6: dependencies: stackframe "^0.3.1" -es-abstract@^1.5.1: - version "1.13.0" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.13.0.tgz#ac86145fdd5099d8dd49558ccba2eaf9b88e24e9" - integrity sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg== +es-abstract@^1.18.0-next.2: + version "1.18.3" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.3.tgz#25c4c3380a27aa203c44b2b685bba94da31b63e0" + integrity sha512-nQIr12dxV7SSxE6r6f1l3DtAeEYdsGpps13dR0TwJg1S8gyp4ZPgy3FZcHBgbiQqnoqSTb+oC+kO4UQ0C/J8vw== dependencies: - es-to-primitive "^1.2.0" + call-bind "^1.0.2" + es-to-primitive "^1.2.1" function-bind "^1.1.1" + get-intrinsic "^1.1.1" has "^1.0.3" - is-callable "^1.1.4" - is-regex "^1.0.4" - object-keys "^1.0.12" - -es-to-primitive@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.0.tgz#edf72478033456e8dda8ef09e00ad9650707f377" - integrity sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg== + has-symbols "^1.0.2" + is-callable "^1.2.3" + is-negative-zero "^2.0.1" + is-regex "^1.1.3" + is-string "^1.0.6" + object-inspect "^1.10.3" + object-keys "^1.1.1" + object.assign "^4.1.2" + string.prototype.trimend "^1.0.4" + string.prototype.trimstart "^1.0.4" + unbox-primitive "^1.0.1" + +es-to-primitive@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" + integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== dependencies: is-callable "^1.1.4" is-date-object "^1.0.1" @@ -3665,12 +3412,17 @@ escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= +escape-string-regexp@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" + integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== + escodegen@^1.9.1: - version "1.12.0" - resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.12.0.tgz#f763daf840af172bb3a2b6dd7219c0e17f7ff541" - integrity sha512-TuA+EhsanGcme5T3R0L80u4t8CpbXQjegRmf7+FPTJrtCTErXFeelblRgHQa1FofEzqYYJmJ/OqjTwREp9qgmg== + version "1.14.3" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.14.3.tgz#4e7b81fba61581dc97582ed78cab7f0e8d63f503" + integrity sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw== dependencies: - esprima "^3.1.3" + esprima "^4.0.1" estraverse "^4.2.0" esutils "^2.0.2" optionator "^0.8.1" @@ -3693,17 +3445,7 @@ eslint-scope@^4.0.3: esrecurse "^4.1.0" estraverse "^4.1.1" -esprima@^2.6.0: - version "2.7.3" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" - integrity sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE= - -esprima@^3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" - integrity sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM= - -esprima@^4.0.0: +esprima@^4.0.0, esprima@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== @@ -3715,11 +3457,6 @@ esrecurse@^4.1.0: dependencies: estraverse "^5.2.0" -estraverse@^4.1.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13" - integrity sha1-De4/7TH81GlhjOc0IJn8GvoL2xM= - estraverse@^4.1.1, estraverse@^4.2.0: version "4.3.0" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" @@ -3730,7 +3467,7 @@ estraverse@^5.2.0: resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880" integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ== -esutils@^2.0.0, esutils@^2.0.2: +esutils@^2.0.2: version "2.0.3" resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== @@ -3746,14 +3483,14 @@ eventemitter3@^4.0.0, eventemitter3@^4.0.4: integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== events@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/events/-/events-3.2.0.tgz#93b87c18f8efcd4202a461aec4dfc0556b639379" - integrity sha512-/46HWwbfCX2xTawVfkKLGxMifJYQBWMwY1mjywRtb4c9x8l5NP3KoJtnIOiL1hfdRkIuYhETxQlo62IF8tcnlg== + version "3.3.0" + resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" + integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== eventsource@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/eventsource/-/eventsource-1.0.7.tgz#8fbc72c93fcd34088090bc0a4e64f4b5cee6d8d0" - integrity sha512-4Ln17+vVT0k8aWq+t/bF5arcS3EpT9gYtW66EPacdj/mAFevznsnyoHLPy2BA8gbIQeIHoPsvwmfBftfcG//BQ== + version "1.1.0" + resolved "https://registry.yarnpkg.com/eventsource/-/eventsource-1.1.0.tgz#00e8ca7c92109e94b0ddf32dac677d841028cfaf" + integrity sha512-VSJjT5oCNrFvCS6igjzPAt5hBzQ2qPBFIbJ03zLI9SE0mxwZpMw6BfJrbFHm1a141AavMEB8JHmBhWAd66PfCg== dependencies: original "^1.0.0" @@ -3766,9 +3503,9 @@ evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: safe-buffer "^5.1.1" exec-sh@^0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.3.2.tgz#6738de2eb7c8e671d0366aea0b0db8c6f7d7391b" - integrity sha512-9sLAvzhI5nc8TpuQUh4ahMdCrWT00wPWz7j47/emR5+2qEfoZP5zzUXvx+vdx+H6ohhnsYC31iX04QLYJK8zTg== + version "0.3.6" + resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.3.6.tgz#ff264f9e325519a60cb5e273692943483cca63bc" + integrity sha512-nQn+hI3yp+oD0huYhKwvYI32+JFeq+XkNcD1GAo3Y/MjxsfVGmrrzrnzjWiNY6f+pUCP440fThsFh5gZrRAU/w== execa@^1.0.0: version "1.0.0" @@ -3783,12 +3520,7 @@ execa@^1.0.0: signal-exit "^3.0.0" strip-eof "^1.0.0" -exenv@^1.2.1: - version "1.2.2" - resolved "https://registry.yarnpkg.com/exenv/-/exenv-1.2.2.tgz#2ae78e85d9894158670b03d47bec1f03bd91bb9d" - integrity sha1-KueOhdmJQVhnCwPUe+wfA72Ru50= - -exit@^0.1.2, exit@~0.1.2: +exit@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" integrity sha1-BjJjj42HfMghB9MKD/8aF8uhzQw= @@ -3895,31 +3627,16 @@ extglob@^2.0.4: snapdragon "^0.8.1" to-regex "^3.0.1" -extsprintf@1.3.0: +extsprintf@1.3.0, extsprintf@^1.2.0: version "1.3.0" resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= -extsprintf@^1.2.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" - integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= - -eyes@0.1.x: - version "0.1.8" - resolved "https://registry.yarnpkg.com/eyes/-/eyes-0.1.8.tgz#62cf120234c683785d902348a800ef3e0cc20bc0" - integrity sha1-Ys8SAjTGg3hdkCNIqADvPgzCC8A= - fast-deep-equal@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz#c053477817c86b51daa853c81e059b733d023614" integrity sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ= -fast-deep-equal@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49" - integrity sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk= - fast-deep-equal@^3.1.1: version "3.1.3" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" @@ -3931,16 +3648,15 @@ fast-diff@^1.1.1: integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w== fast-glob@^3.1.1, fast-glob@^3.2.4: - version "3.2.4" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.4.tgz#d20aefbf99579383e7f3cc66529158c9b98554d3" - integrity sha512-kr/Oo6PX51265qeuCYsyGypiO5uJFgBS0jksyG7FUeCyQzNwYnzrNIMR1NXfkZXsMYXYLRAHgISHBz8gQcxKHQ== + version "3.2.7" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.7.tgz#fd6cb7a2d7e9aa7a7846111e85a196d6b2f766a1" + integrity sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q== dependencies: "@nodelib/fs.stat" "^2.0.2" "@nodelib/fs.walk" "^1.2.3" - glob-parent "^5.1.0" + glob-parent "^5.1.2" merge2 "^1.3.0" - micromatch "^4.0.2" - picomatch "^2.2.1" + micromatch "^4.0.4" fast-json-stable-stringify@2.x, fast-json-stable-stringify@^2.0.0: version "2.0.0" @@ -3953,19 +3669,19 @@ fast-levenshtein@~2.0.6: integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= fast-safe-stringify@^2.0.7: - version "2.0.7" - resolved "https://registry.yarnpkg.com/fast-safe-stringify/-/fast-safe-stringify-2.0.7.tgz#124aa885899261f68aedb42a7c080de9da608743" - integrity sha512-Utm6CdzT+6xsDk2m8S6uL8VHxNwI6Jub+e9NYTcAms28T84pTa25GJQV9j0CY0N1rM8hK4x6grpF2BQf+2qwVA== + version "2.0.8" + resolved "https://registry.yarnpkg.com/fast-safe-stringify/-/fast-safe-stringify-2.0.8.tgz#dc2af48c46cf712b683e849b2bbd446b32de936f" + integrity sha512-lXatBjf3WPjmWD6DpIZxkeSsCOwqI0maYMpgDlx8g4U2qi4lbjA9oH/HD2a87G+KfsUmo5WbJFmqBZlPxtptag== -fastparse@^1.1.1: +fastparse@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/fastparse/-/fastparse-1.1.2.tgz#91728c5a5942eced8531283c79441ee4122c35a9" integrity sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ== fastq@^1.6.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.8.0.tgz#550e1f9f59bbc65fe185cb6a9b4d95357107f481" - integrity sha512-SMIZoZdLh/fgofivvIkmknUXyPnvxRE3DhtZ5Me3Mrsk5gyPL42F0xr51TdRXskBxHfMp+07bcYzfsYEsSQA9Q== + version "1.11.1" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.11.1.tgz#5d8175aae17db61947f8b162cfc7f63264d22807" + integrity sha512-HOnr8Mc60eNYl1gzwp6r5RoUyAn5/glBolUzP/Ez6IFVPMPirxn/9phgL6zhOtaTy7ISwPvQ+wT+hfcRZh/bzw== dependencies: reusify "^1.0.4" @@ -3977,31 +3693,18 @@ faye-websocket@^0.10.0: websocket-driver ">=0.5.1" faye-websocket@~0.11.1: - version "0.11.3" - resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.3.tgz#5c0e9a8968e8912c286639fde977a8b209f2508e" - integrity sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA== + version "0.11.4" + resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.4.tgz#7f0d9275cfdd86a1c963dc8b65fcc451edcbb1da" + integrity sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g== dependencies: websocket-driver ">=0.5.1" fb-watchman@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.0.tgz#54e9abf7dfa2f26cd9b1636c588c1afc05de5d58" - integrity sha1-VOmr99+i8mzZsWNsWIwa/AXeXVg= - dependencies: - bser "^2.0.0" - -fbjs@^0.8.1: - version "0.8.17" - resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.17.tgz#c4d598ead6949112653d6588b01a5cdcd9f90fdd" - integrity sha1-xNWY6taUkRJlPWWIsBpc3Nn5D90= + version "2.0.1" + resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.1.tgz#fc84fb39d2709cf3ff6d743706157bb5708a8a85" + integrity sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg== dependencies: - core-js "^1.0.0" - isomorphic-fetch "^2.1.1" - loose-envify "^1.0.0" - object-assign "^4.1.0" - promise "^7.1.1" - setimmediate "^1.0.5" - ua-parser-js "^0.7.18" + bser "2.1.1" fd-slicer@~1.1.0: version "1.1.0" @@ -4015,6 +3718,11 @@ figgy-pudding@^3.5.1: resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.2.tgz#b4eee8148abb01dcf1d1ac34367d59e12fa61d6e" integrity sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw== +file-uri-to-path@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" + integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== + fill-range@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" @@ -4032,6 +3740,11 @@ fill-range@^7.0.1: dependencies: to-regex-range "^5.0.1" +filter-obj@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/filter-obj/-/filter-obj-1.1.0.tgz#9b311112bc6c6127a16e016c6c5d7f19e0805c5b" + integrity sha1-mzERErxsYSehbgFsbF1/GeCAXFs= + finalhandler@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d" @@ -4063,14 +3776,6 @@ find-cache-dir@^3.3.1: make-dir "^3.0.2" pkg-dir "^4.1.0" -find-up@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" - integrity sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8= - dependencies: - path-exists "^2.0.0" - pinkie-promise "^2.0.0" - find-up@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" @@ -4105,9 +3810,9 @@ flush-write-stream@^1.0.0: readable-stream "^2.3.6" follow-redirects@^1.0.0: - version "1.13.0" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.13.0.tgz#b42e8d93a2a7eea5ed88633676d6597bc8e384db" - integrity sha512-aq6gF1BEKje4a9i9+5jimNFIpq4Q1WiwBToeRK5NvZBd/TRsmW8BsJfOEGkr76TbOyPVD3OVDN910EcUNtRYEA== + version "1.14.1" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.1.tgz#d9114ded0a1cfdd334e164e6662ad02bfd91ff43" + integrity sha512-HWqDgT7ZEkqRzBvc2s64vSZ/hfOceEol3ac/7tKwzuvEyWx3/4UegXh5oBOIotkGsObyk3xznnSRVADBgWSQVg== for-in@^0.1.3: version "0.1.8" @@ -4136,16 +3841,7 @@ forever-agent@~0.6.1: resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= -form-data@^2.3.1: - version "2.5.0" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.5.0.tgz#094ec359dc4b55e7d62e0db4acd76e89fe874d37" - integrity sha512-WXieX3G/8side6VIqx44ablyULoGruSde5PNTxoUyo5CeyAMX6nVWUd0rgist/EuX655cjhUhTo1Fo3tRYqbcA== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.6" - mime-types "^2.1.12" - -form-data@~2.3.2: +form-data@^2.3.1, form-data@~2.3.2: version "2.3.3" resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== @@ -4160,14 +3856,14 @@ format-util@^1.0.3: integrity sha512-varLbTj0e0yVyRpqQhuWV+8hlePAgaoFRhNFj50BNjEIrw1/DphHSObtqwskVCPWNgzwPoQrZAbfa/SBiicNeg== formidable@^1.2.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/formidable/-/formidable-1.2.1.tgz#70fb7ca0290ee6ff961090415f4b3df3d2082659" - integrity sha512-Fs9VRguL0gqGHkXS5GQiMCr1VhZBxz0JnJs4JmMp/2jL18Fmbzvv7vOFRU+U8TBkHEE/CX1qDXzJplVULgsLeg== + version "1.2.2" + resolved "https://registry.yarnpkg.com/formidable/-/formidable-1.2.2.tgz#bf69aea2972982675f00865342b982986f6b8dd9" + integrity sha512-V8gLm+41I/8kguQ4/o1D3RIHRmhYFG4pnNyonvua+40rqcEmT4+V71yaZ3B457xbbgCsCfjSPi65u/W6vK1U5Q== -forwarded@~0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84" - integrity sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ= +forwarded@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" + integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== foundation-sites@^6.4.3: version "6.5.3" @@ -4194,13 +3890,6 @@ from2@^2.1.0: inherits "^2.0.1" readable-stream "^2.0.0" -fs-minipass@^1.2.5: - version "1.2.7" - resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.7.tgz#ccff8570841e7fe4265693da88936c55aed7f7c7" - integrity sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA== - dependencies: - minipass "^2.6.0" - fs-minipass@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" @@ -4224,27 +3913,17 @@ fs.realpath@^1.0.0: integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= fsevents@^1.2.7: - version "1.2.9" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.9.tgz#3f5ed66583ccd6f400b5a00db6f7e861363e388f" - integrity sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw== + version "1.2.13" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.13.tgz#f325cb0455592428bcf11b383370ef70e3bfcc38" + integrity sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw== dependencies: + bindings "^1.5.0" nan "^2.12.1" - node-pre-gyp "^0.12.0" -fsevents@~2.1.2: - version "2.1.3" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.3.tgz#fb738703ae8d2f9fe900c33836ddebee8b97f23e" - integrity sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ== - -fstream@^1.0.0, fstream@^1.0.12: - version "1.0.12" - resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.12.tgz#4e8ba8ee2d48be4f7d0de505455548eae5932045" - integrity sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg== - dependencies: - graceful-fs "^4.1.2" - inherits "~2.0.0" - mkdirp ">=0.5 0" - rimraf "2" +fsevents@~2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" + integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== function-bind@^1.1.1: version "1.1.1" @@ -4279,11 +3958,20 @@ generic-names@^1.0.3: dependencies: loader-utils "^0.2.16" -get-caller-file@^2.0.1: +get-caller-file@^2.0.1, get-caller-file@^2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== +get-intrinsic@^1.0.2, get-intrinsic@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6" + integrity sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q== + dependencies: + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.1" + get-stdin@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" @@ -4309,12 +3997,12 @@ getpass@^0.1.1: assert-plus "^1.0.0" git-up@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/git-up/-/git-up-4.0.1.tgz#cb2ef086653640e721d2042fe3104857d89007c0" - integrity sha512-LFTZZrBlrCrGCG07/dm1aCjjpL1z9L3+5aEeI9SBhAqSc+kiA9Or1bgZhQFNppJX6h/f5McrvJt1mQXTFm6Qrw== + version "4.0.5" + resolved "https://registry.yarnpkg.com/git-up/-/git-up-4.0.5.tgz#e7bb70981a37ea2fb8fe049669800a1f9a01d759" + integrity sha512-YUvVDg/vX3d0syBsk/CKUTib0srcQME0JyHkL5BaYdwLsiCslPWmDSi8PUMo9pXYjrryMcmsCoCgsTpSCJEQaA== dependencies: is-ssh "^1.3.0" - parse-url "^5.0.0" + parse-url "^6.0.0" git-url-parse@^11.1.2: version "11.1.2" @@ -4331,25 +4019,14 @@ glob-parent@^3.1.0: is-glob "^3.1.0" path-dirname "^1.0.0" -glob-parent@^5.1.0, glob-parent@^5.1.1, glob-parent@~5.1.0: - version "5.1.1" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.1.tgz#b6c1ef417c4e5663ea498f1c45afac6916bbc229" - integrity sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ== +glob-parent@^5.1.1, glob-parent@^5.1.2, glob-parent@~5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== dependencies: is-glob "^4.0.1" -glob@^5.0.1: - version "5.0.15" - resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1" - integrity sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E= - dependencies: - inflight "^1.0.4" - inherits "2" - minimatch "2 || 3" - once "^1.3.0" - path-is-absolute "^1.0.0" - -glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@~7.1.1: +glob@^7.0.0, glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@~7.1.1: version "7.1.6" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== @@ -4411,9 +4088,9 @@ globals@^11.1.0: integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== globby@^11.0.1: - version "11.0.1" - resolved "https://registry.yarnpkg.com/globby/-/globby-11.0.1.tgz#9a2bf107a068f3ffeabc49ad702c79ede8cfd357" - integrity sha512-iH9RmgwCmUJHi2z5o2l3eTtGBtXek1OYlHrbcxOYugyHLmAsZrPj43OtHThd62Buh/Vv6VyCBD2bdyWcGNQqoQ== + version "11.0.4" + resolved "https://registry.yarnpkg.com/globby/-/globby-11.0.4.tgz#2cbaff77c2f2a62e71e9b2813a67b97a3a3001a5" + integrity sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg== dependencies: array-union "^2.1.0" dir-glob "^3.0.1" @@ -4434,28 +4111,23 @@ globby@^6.1.0: pinkie-promise "^2.0.0" globule@^1.0.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/globule/-/globule-1.2.1.tgz#5dffb1b191f22d20797a9369b49eab4e9839696d" - integrity sha512-g7QtgWF4uYSL5/dn71WxubOrS7JVGCnFPEnoeChJmBnyR9Mw8nGoEwOgJL/RC2Te0WhbsEUCejfH8SZNJ+adYQ== + version "1.3.2" + resolved "https://registry.yarnpkg.com/globule/-/globule-1.3.2.tgz#d8bdd9e9e4eef8f96e245999a5dee7eb5d8529c4" + integrity sha512-7IDTQTIu2xzXkT+6mlluidnWo+BypnbSoEVVQCGfzqnl5Ik8d3e1d4wycb8Rj9tWW+Z39uPWsdlquqiqPCd/pA== dependencies: glob "~7.1.1" lodash "~4.17.10" minimatch "~3.0.2" -graceful-fs@^4.1.11, graceful-fs@^4.1.2: - version "4.2.3" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.3.tgz#4a12ff1b60376ef09862c2093edd908328be8423" - integrity sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ== - -graceful-fs@^4.1.15: +graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2: version "4.2.0" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.0.tgz#8d8fdc73977cb04104721cb53666c1ca64cd328b" integrity sha512-jpSvDPV4Cq/bgtpndIWbI5hmYxhQGHPC4d4cqBPb4DLniCfhJokdXhwhaDuLBGLQdvvRum/UiX6ECVIPvDXqdg== -"graceful-readlink@>= 1.0.0": - version "1.0.1" - resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725" - integrity sha1-TK+tdrxi8C+gObL5Tpo906ORpyU= +graceful-fs@^4.2.3: + version "4.2.6" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.6.tgz#ff040b2b0853b23c3d31027523706f1885d76bee" + integrity sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ== grapheme-splitter@^1.0.4: version "1.0.4" @@ -4463,11 +4135,11 @@ grapheme-splitter@^1.0.4: integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ== graphlib@^2.1.7: - version "2.1.7" - resolved "https://registry.yarnpkg.com/graphlib/-/graphlib-2.1.7.tgz#b6a69f9f44bd9de3963ce6804a2fc9e73d86aecc" - integrity sha512-TyI9jIy2J4j0qgPmOOrHTCtpPqJGN/aurBwc6ZT+bRii+di1I+Wv3obRhVrmBEXet+qkMaEX67dXrwsd3QQM6w== + version "2.1.8" + resolved "https://registry.yarnpkg.com/graphlib/-/graphlib-2.1.8.tgz#5761d414737870084c92ec7b5dbcb0592c9d35da" + integrity sha512-jcLLfkpoVGmH7/InMC/1hIvOPSUh38oJtGhvrOFGzioE1DZ+0YW16RgmOJhHiuWTvGiJQ9Z1Ik43JvkRPRvE+A== dependencies: - lodash "^4.17.5" + lodash "^4.17.15" growly@^1.3.0: version "1.3.0" @@ -4479,35 +4151,28 @@ handle-thing@^2.0.0: resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-2.0.1.tgz#857f79ce359580c340d43081cc648970d0bb234e" integrity sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg== -handlebars@^4.1.2: - version "4.7.7" - resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.7.tgz#9ce33416aad02dbd6c8fafa8240d5d98004945a1" - integrity sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA== - dependencies: - minimist "^1.2.5" - neo-async "^2.6.0" - source-map "^0.6.1" - wordwrap "^1.0.0" - optionalDependencies: - uglify-js "^3.1.4" - har-schema@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= -har-validator@~5.1.0: - version "5.1.3" - resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.3.tgz#1ef89ebd3e4996557675eed9893110dc350fa080" - integrity sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g== +har-validator@~5.1.0, har-validator@~5.1.3: + version "5.1.5" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.5.tgz#1f0803b9f8cb20c0fa13822df1ecddb36bde1efd" + integrity sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w== dependencies: - ajv "^6.5.5" + ajv "^6.12.3" har-schema "^2.0.0" +hard-rejection@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/hard-rejection/-/hard-rejection-2.1.0.tgz#1c6eda5c1685c63942766d79bb40ae773cecd883" + integrity sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA== + harmony-reflect@^1.4.6: - version "1.6.1" - resolved "https://registry.yarnpkg.com/harmony-reflect/-/harmony-reflect-1.6.1.tgz#c108d4f2bb451efef7a37861fdbdae72c9bdefa9" - integrity sha512-WJTeyp0JzGtHcuMsi7rw2VwtkvLa+JyfEKJCFyfcS0+CDkjQ5lHPu7zEhFZP+PDSRrEgXa5Ah0l1MbgbE41XjA== + version "1.6.2" + resolved "https://registry.yarnpkg.com/harmony-reflect/-/harmony-reflect-1.6.2.tgz#31ecbd32e648a34d030d86adb67d4d47547fe710" + integrity sha512-HIp/n38R9kQjDEziXyDTuW3vvoxxyxjxFzXLrBr18uB47GnSt+G9D29fqrpM5ZkspMcPICud3XsBJQ4Y2URg8g== has-ansi@^2.0.0: version "2.0.0" @@ -4516,10 +4181,10 @@ has-ansi@^2.0.0: dependencies: ansi-regex "^2.0.0" -has-color@~0.1.0: - version "0.1.7" - resolved "https://registry.yarnpkg.com/has-color/-/has-color-0.1.7.tgz#67144a5260c34fc3cca677d041daf52fe7b78b2f" - integrity sha1-ZxRKUmDDT8PMpnfQQdr1L+e3iy8= +has-bigints@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.1.tgz#64fe6acb020673e3b78db035a5af69aa9d07b113" + integrity sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA== has-flag@^1.0.0: version "1.0.0" @@ -4531,10 +4196,15 @@ has-flag@^3.0.0: resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= -has-symbols@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.0.tgz#ba1a8f1af2a0fc39650f5c850367704122063b44" - integrity sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q= +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +has-symbols@^1.0.1, has-symbols@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.2.tgz#165d3070c00309752a1236a479331e3ac56f1423" + integrity sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw== has-unicode@^2.0.0: version "2.0.1" @@ -4572,7 +4242,7 @@ has-values@^1.0.0: is-number "^3.0.0" kind-of "^4.0.0" -has@^1.0.1, has@^1.0.3: +has@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== @@ -4602,16 +4272,16 @@ he@1.2.x: integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== history@^4.7.2: - version "4.9.0" - resolved "https://registry.yarnpkg.com/history/-/history-4.9.0.tgz#84587c2068039ead8af769e9d6a6860a14fa1bca" - integrity sha512-H2DkjCjXf0Op9OAr6nJ56fcRkTSNrUiv41vNJ6IswJjif6wlpZK0BTfFbi7qK9dXLSYZxkq5lBsj3vUjlYBYZA== + version "4.10.1" + resolved "https://registry.yarnpkg.com/history/-/history-4.10.1.tgz#33371a65e3a83b267434e2b3f3b1b4c58aad4cf3" + integrity sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew== dependencies: "@babel/runtime" "^7.1.2" loose-envify "^1.2.0" - resolve-pathname "^2.2.0" + resolve-pathname "^3.0.0" tiny-invariant "^1.0.2" tiny-warning "^1.0.0" - value-equal "^0.4.0" + value-equal "^1.0.1" hmac-drbg@^1.0.1: version "1.0.1" @@ -4622,15 +4292,15 @@ hmac-drbg@^1.0.1: minimalistic-assert "^1.0.0" minimalistic-crypto-utils "^1.0.1" -hoist-non-react-statics@^2.3.1, hoist-non-react-statics@^2.5.0: +hoist-non-react-statics@^2.5.0: version "2.5.5" resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-2.5.5.tgz#c5903cf409c0dfd908f388e619d86b9c1174cb47" integrity sha512-rqcy4pJo55FTTLWt+bU8ukscqHeE/e9KWvsOW2b/a3afxQZhwkQdT1rPPCJ0rYXdj4vNcasY8zHTH+jF/qStxw== -hoist-non-react-statics@^3.1.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.0.tgz#b09178f0122184fb95acf525daaecb4d8f45958b" - integrity sha512-0XsbTXxgiaCDYDIWFcwkmerZPSwywfUqYmwT4jzewKTQSWoE6FCMoUVOeBJWK3E/CrWbxRG3m5GzY4lnIwGRBA== +hoist-non-react-statics@^3.3.0: + version "3.3.2" + resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45" + integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw== dependencies: react-is "^16.7.0" @@ -4646,6 +4316,13 @@ hosted-git-info@^2.1.4: resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== +hosted-git-info@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-4.0.2.tgz#5e425507eede4fea846b7262f0838456c4209961" + integrity sha512-c9OGXbZ3guC/xOlCg1Ci/VgWlwsqDv1yMQL1CWqXDL0hDjXuNcq0zuR4xqPSuasI3kqFDhqSyTjREz5gzq0fXg== + dependencies: + lru-cache "^6.0.0" + hpack.js@^2.1.6: version "2.1.6" resolved "https://registry.yarnpkg.com/hpack.js/-/hpack.js-2.1.6.tgz#87774c0949e513f42e84575b3c45681fade2a0b2" @@ -4664,9 +4341,14 @@ html-encoding-sniffer@^1.0.2: whatwg-encoding "^1.0.1" html-entities@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.3.1.tgz#fb9a1a4b5b14c5daba82d3e34c6ae4fe701a0e44" - integrity sha512-rhE/4Z3hIhzHAUKbW8jVcCyuT5oJCXXqhN/6mXXVCpzTmvJnoH2HL/bt3EZ6p55jbFJBeAe1ZNpL5BugLujxNA== + version "1.4.0" + resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.4.0.tgz#cfbd1b01d2afaf9adca1b10ae7dffab98c71d2dc" + integrity sha512-8nxjcBcd8wovbeKx7h3wTji4e6+rhaVuPNpMqwWgnHh+N9ToqsCs6XztWRBPQ+UtzsoMAdKZtUENoVzU/EMtZA== + +html-escaper@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" + integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== html-minifier@^3.2.3: version "3.5.21" @@ -4694,35 +4376,22 @@ html-webpack-plugin@^3.2.0: toposort "^1.0.0" util.promisify "1.0.0" -htmlparser2@3.8.3: - version "3.8.3" - resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.8.3.tgz#996c28b191516a8be86501a7d79757e5c70c1068" - integrity sha1-mWwosZFRaovoZQGn15dX5ccMEGg= - dependencies: - domelementtype "1" - domhandler "2.3" - domutils "1.5" - entities "1.0" - readable-stream "1.1" - -htmlparser2@^3.3.0: - version "3.10.1" - resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.10.1.tgz#bd679dc3f59897b6a34bb10749c855bb53a9392f" - integrity sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ== - dependencies: - domelementtype "^1.3.1" - domhandler "^2.3.0" - domutils "^1.5.1" - entities "^1.1.1" - inherits "^2.0.1" - readable-stream "^3.1.1" +htmlparser2@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-6.1.0.tgz#c4d762b6c3371a05dbe65e94ae43a9f845fb8fb7" + integrity sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A== + dependencies: + domelementtype "^2.0.1" + domhandler "^4.0.0" + domutils "^2.5.2" + entities "^2.0.0" http-deceiver@^1.2.7: version "1.2.7" resolved "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87" integrity sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc= -http-errors@1.7.2: +http-errors@1.7.2, http-errors@~1.7.2: version "1.7.2" resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.2.tgz#4f5029cf13239f31036e5b2e55292bcfbcc85c8f" integrity sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg== @@ -4743,22 +4412,6 @@ http-errors@~1.6.2: setprototypeof "1.1.0" statuses ">= 1.4.0 < 2" -http-errors@~1.7.2: - version "1.7.3" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06" - integrity sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw== - dependencies: - depd "~1.1.2" - inherits "2.0.4" - setprototypeof "1.1.1" - statuses ">= 1.5.0 < 2" - toidentifier "1.0.0" - -http-parser-js@>=0.5.1: - version "0.5.2" - resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.2.tgz#da2e31d237b393aae72ace43882dd7e270a8ff77" - integrity sha512-opCO9ASqg5Wy2FNo7A0sxy71yGbbkJJXLdgMK04Tcypw9jr2MgWbyubb0+WdmDmGnFflO7fRbqbaihh/ENDlRQ== - http-proxy-agent@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz#8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a" @@ -4814,12 +4467,7 @@ https-proxy-agent@^4.0.0: agent-base "5" debug "4" -i@0.3.x: - version "0.3.6" - resolved "https://registry.yarnpkg.com/i/-/i-0.3.6.tgz#d96c92732076f072711b6b10fd7d4f65ad8ee23d" - integrity sha1-2WyScyB28HJxG2sQ/X1PZa2O4j0= - -iconv-lite@0.4.24, iconv-lite@^0.4.4, iconv-lite@~0.4.13: +iconv-lite@0.4.24: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== @@ -4839,16 +4487,16 @@ identity-obj-proxy@^3.0.0: harmony-reflect "^1.4.6" ieee754@^1.1.4: - version "1.1.13" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84" - integrity sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg== + version "1.2.1" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" + integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== iferr@^0.1.5: version "0.1.5" resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" integrity sha1-xg7taebY/bazEEofy8ocGS3FtQE= -ignore-walk@3.0.3, ignore-walk@^3.0.1: +ignore-walk@3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.3.tgz#017e2447184bfeade7c238e4aefdd1e8f95b1e37" integrity sha512-m7o6xuOaT1aqheYHKf8W6J5pYH85ZI9w077erOzLje3JsB1gkafkAhHHY19dqjulgIZHFm32Cp5uNZgcQqdJKw== @@ -4887,18 +4535,6 @@ imurmurhash@^0.1.4: resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= -in-publish@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/in-publish/-/in-publish-2.0.0.tgz#e20ff5e3a2afc2690320b6dc552682a9c7fadf51" - integrity sha1-4g/146KvwmkDILbcVSaCqcf631E= - -indent-string@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80" - integrity sha1-ji1INIdCEhtKghi3oTfppSBJ3IA= - dependencies: - repeating "^2.0.0" - indent-string@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" @@ -4917,12 +4553,7 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherit@^2.2.2: - version "2.2.7" - resolved "https://registry.yarnpkg.com/inherit/-/inherit-2.2.7.tgz#4e238e289bc7adddf8ff5053d0f26a2fcda94b9f" - integrity sha512-dxJmC1j0Q32NFAjvbd6g3lXYLZ49HgzotgbSMwMkoiTXGhC9412Oc24g7A7M9cPPkw/vDsF2cSII+2zJwocUtQ== - -inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.0, inherits@~2.0.1, inherits@~2.0.3: +inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== @@ -4937,10 +4568,10 @@ inherits@2.0.3: resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= -ini@^1.3.4, ini@^1.3.5, ini@~1.3.0: - version "1.3.7" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.7.tgz#a09363e1911972ea16d7a8851005d84cf09a9a84" - integrity sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ== +ini@^1.3.4, ini@^1.3.5: + version "1.3.8" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" + integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== internal-ip@^4.3.0: version "4.3.0" @@ -4996,6 +4627,13 @@ is-accessor-descriptor@^1.0.0: dependencies: kind-of "^6.0.0" +is-arguments@^1.0.4: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.0.tgz#62353031dfbee07ceb34656a6bde59efecae8dd9" + integrity sha512-1Ij4lOMPl/xB5kBDn7I+b2ttPMKa8szhEIrXDuXQD/oe3HJLTLhqhgGspwgyGd6MOywBUqVvYicF72lkgDnIHg== + dependencies: + call-bind "^1.0.0" + is-arrayish@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" @@ -5006,6 +4644,11 @@ is-arrayish@^0.3.1: resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03" integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== +is-bigint@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.2.tgz#ffb381442503235ad245ea89e45b3dbff040ee5a" + integrity sha512-0JV5+SOCQkIdzjBK9buARcV804Ddu7A0Qet6sHi3FimE9ne6m4BGQZfRn+NZiXbBk4F4XmHfDZIipLj9pX8dSA== + is-binary-path@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" @@ -5020,15 +4663,22 @@ is-binary-path@~2.1.0: dependencies: binary-extensions "^2.0.0" +is-boolean-object@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.1.tgz#3c0878f035cb821228d350d2e1e36719716a3de8" + integrity sha512-bXdQWkECBUIAcCkeH1unwJLIpZYaa5VvuygSyS/c2lf719mTKZDU5UdDRlpd01UjADgmW8RfqaP+mRaVPdr/Ng== + dependencies: + call-bind "^1.0.2" + is-buffer@^1.1.5, is-buffer@~1.1.6: version "1.1.6" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== -is-callable@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.4.tgz#1e1adf219e1eeb684d691f9d6a05ff0d30a24d75" - integrity sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA== +is-callable@^1.1.4, is-callable@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.3.tgz#8b1e0500b73a1d76c70487636f368e519de8db8e" + integrity sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ== is-ci@^2.0.0: version "2.0.0" @@ -5037,6 +4687,13 @@ is-ci@^2.0.0: dependencies: ci-info "^2.0.0" +is-core-module@^2.2.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.4.0.tgz#8e9fc8e15027b011418026e98f0e6f4d86305cc1" + integrity sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A== + dependencies: + has "^1.0.3" + is-data-descriptor@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" @@ -5052,9 +4709,9 @@ is-data-descriptor@^1.0.0: kind-of "^6.0.0" is-date-object@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16" - integrity sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY= + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.4.tgz#550cfcc03afada05eea3dd30981c7b09551f73e5" + integrity sha512-/b4ZVsG7Z5XVtIxs/h9W8nvfLgSAyKYdtGWQLbqy6jA1icmgjf8WCoTKgeS4wy5tYaPePouzFMANbnj94c2Z+A== is-descriptor@^0.1.0: version "0.1.6" @@ -5096,13 +4753,6 @@ is-extglob@^2.1.0, is-extglob@^2.1.1: resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= -is-finite@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa" - integrity sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko= - dependencies: - number-is-nan "^1.0.0" - is-fullwidth-code-point@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" @@ -5139,6 +4789,16 @@ is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1: dependencies: is-extglob "^2.1.1" +is-negative-zero@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.1.tgz#3de746c18dda2319241a53675908d8f766f11c24" + integrity sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w== + +is-number-object@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.5.tgz#6edfaeed7950cff19afedce9fbfca9ee6dd289eb" + integrity sha512-RU0lI/n95pMoUKu9v1BZP5MBcZuNSVJkMkAG2dJqC4z2GlkGUNeH68SuHuBKBD/XFe+LHZ+f9BKkLET60Niedw== + is-number@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" @@ -5170,6 +4830,11 @@ is-path-inside@^2.1.0: dependencies: path-is-inside "^1.0.2" +is-plain-obj@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" + integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4= + is-plain-object@^2.0.3, is-plain-object@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" @@ -5177,42 +4842,43 @@ is-plain-object@^2.0.3, is-plain-object@^2.0.4: dependencies: isobject "^3.0.1" -is-regex@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491" - integrity sha1-VRdIm1RwkbCTDglWVM7SXul+lJE= +is-regex@^1.0.4, is-regex@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.3.tgz#d029f9aff6448b93ebbe3f33dac71511fdcbef9f" + integrity sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ== dependencies: - has "^1.0.1" + call-bind "^1.0.2" + has-symbols "^1.0.2" is-ssh@^1.3.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/is-ssh/-/is-ssh-1.3.1.tgz#f349a8cadd24e65298037a522cf7520f2e81a0f3" - integrity sha512-0eRIASHZt1E68/ixClI8bp2YK2wmBPVWEismTs6M+M099jKgrzl/3E976zIbImSIob48N2/XGe9y7ZiYdImSlg== + version "1.3.3" + resolved "https://registry.yarnpkg.com/is-ssh/-/is-ssh-1.3.3.tgz#7f133285ccd7f2c2c7fc897b771b53d95a2b2c7e" + integrity sha512-NKzJmQzJfEEma3w5cJNcUMxoXfDjz0Zj0eyCalHn2E6VOwlzjZo0yuO2fcBSf8zhFuVCL/82/r5gRcoi6aEPVQ== dependencies: protocols "^1.1.0" -is-stream@^1.0.1, is-stream@^1.1.0: +is-stream@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= -is-symbol@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.2.tgz#a055f6ae57192caee329e7a860118b497a950f38" - integrity sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw== +is-string@^1.0.5, is-string@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.6.tgz#3fe5d5992fb0d93404f32584d4b0179a71b54a5f" + integrity sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w== + +is-symbol@^1.0.2, is-symbol@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" + integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== dependencies: - has-symbols "^1.0.0" + has-symbols "^1.0.2" is-typedarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= -is-utf8@^0.2.0: - version "0.2.1" - resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" - integrity sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI= - is-windows@^1.0.1, is-windows@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" @@ -5250,15 +4916,7 @@ isobject@^3.0.0, isobject@^3.0.1: resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= -isomorphic-fetch@^2.1.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz#611ae1acf14f5e81f729507472819fe9733558a9" - integrity sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk= - dependencies: - node-fetch "^1.0.1" - whatwg-fetch ">=0.10.0" - -isstream@0.1.x, isstream@~0.1.2: +isstream@~0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= @@ -5302,11 +4960,11 @@ istanbul-lib-source-maps@^3.0.1: source-map "^0.6.1" istanbul-reports@^2.2.6: - version "2.2.6" - resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-2.2.6.tgz#7b4f2660d82b29303a8fe6091f8ca4bf058da1af" - integrity sha512-SKi4rnMyLBKe0Jy2uUdx28h8oG7ph2PPuQPvIAh31d+Ci+lSiEu4C+h3oBPuJ9+mPKhOyW0M8gY4U5NM1WLeXA== + version "2.2.7" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-2.2.7.tgz#5d939f6237d7b48393cc0959eab40cd4fd056931" + integrity sha512-uu1F/L1o5Y6LzPVSVZXNOoD/KXpJue9aeLRd0sM9uMXfZvzomB0WxVamWb5ue8kA2vVWEmW7EG+A5n3f1kqHKg== dependencies: - handlebars "^4.1.2" + html-escaper "^2.0.0" jest-changed-files@^24.9.0: version "24.9.0" @@ -5359,6 +5017,16 @@ jest-config@^24.9.0: pretty-format "^24.9.0" realpath-native "^1.1.0" +jest-diff@*: + version "27.0.6" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-27.0.6.tgz#4a7a19ee6f04ad70e0e3388f35829394a44c7b5e" + integrity sha512-Z1mqgkTCSYaFgwTlP/NUiRzdqgxmmhzHY1Tq17zL94morOHfHu3K4bgSgl+CR4GLhpV8VxkuOYuIWnQ9LnFqmg== + dependencies: + chalk "^4.0.0" + diff-sequences "^27.0.6" + jest-get-type "^27.0.6" + pretty-format "^27.0.6" + jest-diff@^24.9.0: version "24.9.0" resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-24.9.0.tgz#931b7d0d5778a1baf7452cb816e325e3724055da" @@ -5375,9 +5043,9 @@ jest-docblock@^21.0.0: integrity sha512-5IZ7sY9dBAYSV+YjQ0Ovb540Ku7AO9Z5o2Cg789xj167iQuZ2cG+z0f3Uct6WeYLbU6aQiM2pCs7sZ+4dotydw== jest-docblock@^24.3.0: - version "24.3.0" - resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-24.3.0.tgz#b9c32dac70f72e4464520d2ba4aec02ab14db5dd" - integrity sha512-nlANmF9Yq1dufhFlKG9rasfQlrY7wINJbo3q01tu56Jv5eBU5jirylhF2O5ZBnLxzOVBGRDz/9NAwNyBtG4Nyg== + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-24.9.0.tgz#7970201802ba560e1c4092cc25cbedf5af5a8ce2" + integrity sha512-F1DjdpDMJMA1cN6He0FNYNZlo3yYmOtRUnktrT9Q37njYzC5WEaDdmbynIgy0L/IvXvvgsG8OsqhLPXTpfmZAA== dependencies: detect-newline "^2.1.0" @@ -5415,16 +5083,16 @@ jest-environment-node@^24.9.0: jest-mock "^24.9.0" jest-util "^24.9.0" -jest-get-type@^24.8.0: - version "24.8.0" - resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-24.8.0.tgz#a7440de30b651f5a70ea3ed7ff073a32dfe646fc" - integrity sha512-RR4fo8jEmMD9zSz2nLbs2j0zvPpk/KCEz3a62jJWbd2ayNo0cb+KFRxPHVhE4ZmgGJEQp0fosmNz84IfqM8cMQ== - jest-get-type@^24.9.0: version "24.9.0" resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-24.9.0.tgz#1684a0c8a50f2e4901b6644ae861f579eed2ef0e" integrity sha512-lUseMzAley4LhIcpSP9Jf+fTrQ4a1yHQwLNeeVa2cEmbCGeoZAtYPOIv8JaxLD/sUpKxetKGP+gsHl8f8TSj8Q== +jest-get-type@^27.0.6: + version "27.0.6" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-27.0.6.tgz#0eb5c7f755854279ce9b68a9f1a4122f69047cfe" + integrity sha512-XTkK5exIeUbbveehcSR8w0bhH+c0yloW/Wpl+9vZrjzztCPWrxhHwkIFpZzCt71oRBsgxmuUfxEqOYoZI2macg== + jest-haste-map@^24.9.0: version "24.9.0" resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-24.9.0.tgz#b38a5d64274934e21fa417ae9a9fbeb77ceaac7d" @@ -5516,16 +5184,11 @@ jest-mock@^24.9.0: "@jest/types" "^24.9.0" jest-pnp-resolver@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.1.tgz#ecdae604c077a7fbc70defb6d517c3c1c898923a" - integrity sha512-pgFw2tm54fzgYvc/OHrnysABEObZCUNFnhjoRjaVOCN8NYc032/gVjPaHD4Aq6ApkSieWtfKAFQtmDKAmhupnQ== - -jest-regex-util@^24.3.0: - version "24.3.0" - resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-24.3.0.tgz#d5a65f60be1ae3e310d5214a0307581995227b36" - integrity sha512-tXQR1NEOyGlfylyEjg1ImtScwMq8Oh3iJbGTjN7p0J23EuVX1MA8rwU69K4sLbCmwzgCUbVkm0FkSF9TdzOhtg== + version "1.2.2" + resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz#b704ac0ae028a89108a4d040b3f919dfddc8e33c" + integrity sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w== -jest-regex-util@^24.9.0: +jest-regex-util@^24.3.0, jest-regex-util@^24.9.0: version "24.9.0" resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-24.9.0.tgz#c13fb3380bde22bf6575432c493ea8fe37965636" integrity sha512-05Cmb6CuxaA+Ys6fjr3PhvV3bGQmO+2p2La4hFbU+W5uOc479f7FdLXUWXw4pYMAhhSZIuKHwSXSu6CsSBAXQA== @@ -5658,19 +5321,7 @@ jest-util@^24.9.0: slash "^2.0.0" source-map "^0.6.0" -jest-validate@^24.0.0: - version "24.8.0" - resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-24.8.0.tgz#624c41533e6dfe356ffadc6e2423a35c2d3b4849" - integrity sha512-+/N7VOEMW1Vzsrk3UWBDYTExTPwf68tavEPKDnJzrC6UlHtUDU/fuEdXqFoHzv9XnQ+zW6X3qMZhJ3YexfeLDA== - dependencies: - "@jest/types" "^24.8.0" - camelcase "^5.0.0" - chalk "^2.0.1" - jest-get-type "^24.8.0" - leven "^2.1.0" - pretty-format "^24.8.0" - -jest-validate@^24.9.0: +jest-validate@^24.0.0, jest-validate@^24.9.0: version "24.9.0" resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-24.9.0.tgz#0775c55360d173cd854e40180756d4ff52def8ab" integrity sha512-HPIt6C5ACwiqSiwi+OfSSHbK8sG7akG8eATl+IPKaeIjtPOeBUd/g3J7DghugzxrGjI93qS/+RPKe1H6PqvhRQ== @@ -5695,15 +5346,7 @@ jest-watcher@^24.9.0: jest-util "^24.9.0" string-length "^2.0.0" -jest-worker@^24.6.0: - version "24.6.0" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-24.6.0.tgz#7f81ceae34b7cde0c9827a6980c35b7cdc0161b3" - integrity sha512-jDwgW5W9qGNvpI1tNnvajh0a5IE/PuGLFmHk6aR/BZFz8tSgGw17GsDPXAJ6p91IvYDjOw8GpFbvvZGAK+DPQQ== - dependencies: - merge-stream "^1.0.1" - supports-color "^6.1.0" - -jest-worker@^24.9.0: +jest-worker@^24.6.0, jest-worker@^24.9.0: version "24.9.0" resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-24.9.0.tgz#5dbfdb5b2d322e98567898238a9697bcce67b3e5" integrity sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw== @@ -5720,9 +5363,9 @@ jest@^24.9.0: jest-cli "^24.9.0" js-base64@^2.1.8: - version "2.5.1" - resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.5.1.tgz#1efa39ef2c5f7980bb1784ade4a8af2de3291121" - integrity sha512-M7kLczedRMYX4L8Mdh4MzyAMM9O5osx+4FcOQuTvr3A9F2D9S5JXheN0ewNbrvK2UatkTRhL5ejGmGSjNMiZuw== + version "2.6.4" + resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.6.4.tgz#f4e686c5de1ea1f867dbcad3d46d969428df98c4" + integrity sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ== js-levenshtein@^1.1.3: version "1.1.6" @@ -5734,7 +5377,7 @@ js-levenshtein@^1.1.3: resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== -js-yaml@3.13.1, js-yaml@^3.13.1, js-yaml@^3.9.0: +js-yaml@3.13.1, js-yaml@^3.12.1, js-yaml@^3.13.1, js-yaml@^3.9.0: version "3.13.1" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw== @@ -5742,80 +5385,11 @@ js-yaml@3.13.1, js-yaml@^3.13.1, js-yaml@^3.9.0: argparse "^1.0.7" esprima "^4.0.0" -js-yaml@^3.12.1: - version "3.14.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.0.tgz#a7a34170f26a21bb162424d8adacb4113a69e482" - integrity sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A== - dependencies: - argparse "^1.0.7" - esprima "^4.0.0" - -js-yaml@~3.4.0: - version "3.4.6" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.4.6.tgz#6be1b23f6249f53d293370fd4d1aaa63ce1b4eb0" - integrity sha1-a+GyP2JJ9T0pM3D9TRqqY84bTrA= - dependencies: - argparse "^1.0.2" - esprima "^2.6.0" - inherit "^2.2.2" - jsbn@~0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= -jscs-jsdoc@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/jscs-jsdoc/-/jscs-jsdoc-2.0.0.tgz#f53ebce029aa3125bd88290ba50d64d4510a4871" - integrity sha1-9T684CmqMSW9iCkLpQ1k1FEKSHE= - dependencies: - comment-parser "^0.3.1" - jsdoctypeparser "~1.2.0" - -jscs-preset-wikimedia@~1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/jscs-preset-wikimedia/-/jscs-preset-wikimedia-1.0.1.tgz#a6a5fa5967fd67a5d609038e1c794eaf41d4233d" - integrity sha512-RWqu6IYSUlnYuCRCF0obCOHjJV0vhpLcvKbauwxmLQoZ0PiXDTWBYlfpsEfdhg7pmREAEwrARfDRz5qWD6qknA== - -jscs@^3.0.7: - version "3.0.7" - resolved "https://registry.yarnpkg.com/jscs/-/jscs-3.0.7.tgz#7141b4dff5b86e32d0e99d764b836767c30d201a" - integrity sha1-cUG03/W4bjLQ6Z12S4NnZ8MNIBo= - dependencies: - chalk "~1.1.0" - cli-table "~0.3.1" - commander "~2.9.0" - cst "^0.4.3" - estraverse "^4.1.0" - exit "~0.1.2" - glob "^5.0.1" - htmlparser2 "3.8.3" - js-yaml "~3.4.0" - jscs-jsdoc "^2.0.0" - jscs-preset-wikimedia "~1.0.0" - jsonlint "~1.6.2" - lodash "~3.10.0" - minimatch "~3.0.0" - natural-compare "~1.2.2" - pathval "~0.1.1" - prompt "~0.2.14" - reserved-words "^0.1.1" - resolve "^1.1.6" - strip-bom "^2.0.0" - strip-json-comments "~1.0.2" - to-double-quotes "^2.0.0" - to-single-quotes "^2.0.0" - vow "~0.4.8" - vow-fs "~0.3.4" - xmlbuilder "^3.1.0" - -jsdoctypeparser@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/jsdoctypeparser/-/jsdoctypeparser-1.2.0.tgz#e7dedc153a11849ffc5141144ae86a7ef0c25392" - integrity sha1-597cFToRhJ/8UUEUSuhqfvDCU5I= - dependencies: - lodash "^3.7.0" - jsdom@^11.5.1: version "11.12.0" resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-11.12.0.tgz#1a80d40ddd378a1de59656e9e6dc5a3ba8657bc8" @@ -5870,7 +5444,12 @@ json-parse-better-errors@^1.0.1, json-parse-better-errors@^1.0.2: resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== -json-pointer@^0.6.0: +json-parse-even-better-errors@^2.3.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" + integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== + +json-pointer@^0.6.0, json-pointer@^0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/json-pointer/-/json-pointer-0.6.1.tgz#3c6caa6ac139e2599f5a1659d39852154015054d" integrity sha512-3OvjqKdCBvH41DLpV4iSt6v2XhZXV1bPB4OROuknvUXI7ZQNofieCPkmE26stEJ9zdQuvIxDHCuYhfgxFAAs+Q== @@ -5919,12 +5498,12 @@ json3@^3.3.2: resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.3.tgz#7fc10e375fc5ae42c4705a5cc0aa6f62be305b81" integrity sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA== -json5@2.x: - version "2.1.1" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.1.tgz#81b6cb04e9ba496f1c7005d07b4368a2638f90b6" - integrity sha512-l+3HXD0GEI3huGq1njuqtzYK8OYJyXMkOLtQ53pjWh89tvWS2h6l+1zMkYWqlb57+SiQodKZyvMEFb2X+KrFhQ== +json5@2.x, json5@^2.1.0, json5@^2.1.2: + version "2.2.0" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.0.tgz#2dfefe720c6ba525d9ebd909950f0515316c89a3" + integrity sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA== dependencies: - minimist "^1.2.0" + minimist "^1.2.5" json5@^0.5.0: version "0.5.1" @@ -5938,28 +5517,6 @@ json5@^1.0.1: dependencies: minimist "^1.2.0" -json5@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.0.tgz#e7a0c62c48285c628d20a10b85c89bb807c32850" - integrity sha512-8Mh9h6xViijj36g7Dxi+Y4S6hNGV96vcJZr/SrlHh1LR/pEn/8j/+qIBbs44YKl69Lrfctp4QD+AdWLTMqEZAQ== - dependencies: - minimist "^1.2.0" - -json5@^2.1.2: - version "2.1.3" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.3.tgz#c9b0f7fa9233bfe5807fe66fcf3a5617ed597d43" - integrity sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA== - dependencies: - minimist "^1.2.5" - -jsonlint@~1.6.2: - version "1.6.3" - resolved "https://registry.yarnpkg.com/jsonlint/-/jsonlint-1.6.3.tgz#cb5e31efc0b78291d0d862fbef05900adf212988" - integrity sha512-jMVTMzP+7gU/IyC6hvKyWpUU8tmTkK5b3BPNuMI9U8Sit+YAWLlZwB6Y6YrdCxfg2kNz05p3XY3Bmm4m26Nv3A== - dependencies: - JSV "^4.0.x" - nomnom "^1.5.x" - jsonpointer@^4.0.1: version "4.1.0" resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-4.1.0.tgz#501fb89986a2389765ba09e6053299ceb4f2c2cc" @@ -5999,12 +5556,12 @@ kind-of@^5.0.0: resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== -kind-of@^6.0.0, kind-of@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051" - integrity sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA== +kind-of@^6.0.0, kind-of@^6.0.2, kind-of@^6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" + integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== -kleur@^3.0.2: +kleur@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== @@ -6014,11 +5571,6 @@ left-pad@^1.3.0: resolved "https://registry.yarnpkg.com/left-pad/-/left-pad-1.3.0.tgz#5b8a3a7765dfe001261dde915589e782f8c94d1e" integrity sha512-XI5MPzVNApjAyhQzphX8BkmKsKUxD4LdyK24iZeQGinBN9yTQT3bFlCBy/aVx2HrNcqQGsdot8ghrjyrvMCoEA== -leven@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/leven/-/leven-2.1.0.tgz#c2e7a9f772094dee9d34202ae8acce4687875580" - integrity sha1-wuep93IJTe6dNCAq6KzORoeHVYA= - leven@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" @@ -6037,17 +5589,6 @@ lines-and-columns@^1.1.6: resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00" integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA= -load-json-file@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" - integrity sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA= - dependencies: - graceful-fs "^4.1.2" - parse-json "^2.2.0" - pify "^2.0.0" - pinkie-promise "^2.0.0" - strip-bom "^2.0.0" - load-json-file@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b" @@ -6073,7 +5614,7 @@ loader-utils@^0.2.16: json5 "^0.5.0" object-assign "^4.0.1" -loader-utils@^1.0.1, loader-utils@^1.0.2, loader-utils@^1.1.0: +loader-utils@^1.0.1, loader-utils@^1.0.2, loader-utils@^1.1.0, loader-utils@^1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.2.3.tgz#1ff5dc6911c9f0a062531a4c04b609406108c2c7" integrity sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA== @@ -6082,7 +5623,7 @@ loader-utils@^1.0.1, loader-utils@^1.0.2, loader-utils@^1.1.0: emojis-list "^2.0.0" json5 "^1.0.1" -loader-utils@^1.2.3, loader-utils@^1.4.0: +loader-utils@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.4.0.tgz#c579b5e34cb34b1a74edc6c1fb36bfa371d5a613" integrity sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA== @@ -6116,9 +5657,9 @@ locate-path@^5.0.0: p-locate "^4.1.0" lodash-es@^4.2.1: - version "4.17.15" - resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.15.tgz#21bd96839354412f23d7a10340e5eac6ee455d78" - integrity sha512-rlrc3yU3+JNOpZ9zj5pQtxnx2THmvRykwL4Xlxoa8I9lHBlVbbyPhgyPMioxVZ4NqyxaVVtaJnzsyOidQIhyyQ== + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.21.tgz#43e626c46e6591b7750beb2b50117390c609e3ee" + integrity sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw== lodash.camelcase@^4.3.0: version "4.3.0" @@ -6140,49 +5681,28 @@ lodash.tail@^4.1.1: resolved "https://registry.yarnpkg.com/lodash.tail/-/lodash.tail-4.1.1.tgz#d2333a36d9e7717c8ad2f7cacafec7c32b444664" integrity sha1-0jM6NtnncXyK0vfKyv7HwytERmQ= -lodash@^3.5.0, lodash@^3.7.0, lodash@~3.10.0: - version "3.10.1" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-3.10.1.tgz#5bf45e8e49ba4189e17d482789dfd15bd140b7b6" - integrity sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y= - -lodash@^4.0.0, lodash@^4.17.11, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.3, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.2.1, lodash@^4.6.1, lodash@~4.17.10: - version "4.17.15" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" - integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== +lodash@^4.0.0, lodash@^4.17.11, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.17.3, lodash@^4.17.4, lodash@^4.2.1, lodash@^4.6.1, lodash@~4.17.10: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== loglevel@^1.6.8: - version "1.7.0" - resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.7.0.tgz#728166855a740d59d38db01cf46f042caa041bb0" - integrity sha512-i2sY04nal5jDcagM3FMfG++T69GEEM8CYuOfeOIvmXzOIcwE9a/CJPR0MFM97pYMj/u10lzz7/zd7+qwhrBTqQ== + version "1.7.1" + resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.7.1.tgz#005fde2f5e6e47068f935ff28573e125ef72f197" + integrity sha512-Hesni4s5UkWkwCGJMQGAh71PaLUmKFM60dHvq0zi/vDhhrzuk+4GgNbTXJ12YYQJn6ZKBDNIjYcuQGKudvqrIw== loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.2.0, loose-envify@^1.3.1, loose-envify@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== dependencies: - js-tokens "^3.0.0 || ^4.0.0" - -loud-rejection@^1.0.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f" - integrity sha1-W0b4AUft7leIcPCG0Eghz5mOVR8= - dependencies: - currently-unhandled "^0.4.1" - signal-exit "^3.0.0" + js-tokens "^3.0.0 || ^4.0.0" lower-case@^1.1.1: version "1.1.4" resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-1.1.4.tgz#9a2cabd1b9e8e0ae993a4bf7d5875c39c42e8eac" integrity sha1-miyr0bno4K6ZOkv31YdcOcQujqw= -lru-cache@^4.0.1: - version "4.1.5" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" - integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g== - dependencies: - pseudomap "^1.0.2" - yallist "^2.1.2" - lru-cache@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" @@ -6234,11 +5754,16 @@ map-cache@^0.2.2: resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= -map-obj@^1.0.0, map-obj@^1.0.1: +map-obj@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" integrity sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0= +map-obj@^4.0.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-4.2.1.tgz#e4ea399dbc979ae735c83c863dd31bdf364277b7" + integrity sha512-+WA2/1sPmDj1dlvvJmB5G6JKfY9dpn7EVBUL06+y6PoljPkh+6V1QihwxNkbcGxCRjt2b0F9K0taiCuo7MbdFQ== + map-visit@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" @@ -6284,7 +5809,7 @@ memoize-one@~5.1.1: resolved "https://registry.yarnpkg.com/memoize-one/-/memoize-one-5.1.1.tgz#047b6e3199b508eaec03504de71229b8eb1d75c0" integrity sha512-HKeeBpWvqiVJD57ZUAsJNm71eHTykffzcLZVYWiVfQeI1rJtuEaS7hQiEpWfVVk18donPwJEcFKIkCmPJNOhHA== -memory-fs@^0.4.0, memory-fs@^0.4.1: +memory-fs@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552" integrity sha1-OpoguEYlI+RHz7x+i7gO1me/xVI= @@ -6300,34 +5825,29 @@ memory-fs@^0.5.0: errno "^0.1.3" readable-stream "^2.0.1" -meow@^3.7.0: - version "3.7.0" - resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb" - integrity sha1-cstmi0JSKCkKu/qFaJJYcwioAfs= - dependencies: - camelcase-keys "^2.0.0" - decamelize "^1.1.2" - loud-rejection "^1.0.0" - map-obj "^1.0.1" - minimist "^1.1.3" - normalize-package-data "^2.3.4" - object-assign "^4.0.1" - read-pkg-up "^1.0.1" - redent "^1.0.0" - trim-newlines "^1.0.0" +meow@^9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/meow/-/meow-9.0.0.tgz#cd9510bc5cac9dee7d03c73ee1f9ad959f4ea364" + integrity sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ== + dependencies: + "@types/minimist" "^1.2.0" + camelcase-keys "^6.2.2" + decamelize "^1.2.0" + decamelize-keys "^1.1.0" + hard-rejection "^2.1.0" + minimist-options "4.1.0" + normalize-package-data "^3.0.0" + read-pkg-up "^7.0.1" + redent "^3.0.0" + trim-newlines "^3.0.0" + type-fest "^0.18.0" + yargs-parser "^20.2.3" merge-descriptors@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E= -merge-stream@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-1.0.1.tgz#4041202d508a342ba00174008df0c251b8c135e1" - integrity sha1-QEEgLVCKNCugAXQAjfDCUbjBNeE= - dependencies: - readable-stream "^2.0.1" - merge-stream@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" @@ -6362,13 +5882,13 @@ micromatch@^3.0.4, micromatch@^3.1.10, micromatch@^3.1.4: snapdragon "^0.8.1" to-regex "^3.0.2" -micromatch@^4.0.0, micromatch@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.2.tgz#4fcb0999bf9fbc2fcbdd212f6d629b9a56c39259" - integrity sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q== +micromatch@^4.0.0, micromatch@^4.0.4: + version "4.0.4" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.4.tgz#896d519dfe9db25fce94ceb7a500919bf881ebf9" + integrity sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg== dependencies: braces "^3.0.1" - picomatch "^2.0.5" + picomatch "^2.2.3" miller-rabin@^4.0.0: version "4.0.1" @@ -6378,34 +5898,17 @@ miller-rabin@^4.0.0: bn.js "^4.0.0" brorand "^1.0.1" -mime-db@1.40.0: - version "1.40.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.40.0.tgz#a65057e998db090f732a68f6c276d387d4126c32" - integrity sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA== +mime-db@1.48.0, "mime-db@>= 1.43.0 < 2": + version "1.48.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.48.0.tgz#e35b31045dd7eada3aaad537ed88a33afbef2d1d" + integrity sha512-FM3QwxV+TnZYQ2aRqhlKBMHxk10lTbMt3bBkMAp54ddrNeVSfcQYOOKuGuy3Ddrm38I04If834fOUSq1yzslJQ== -mime-db@1.44.0: - version "1.44.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.44.0.tgz#fa11c5eb0aca1334b4233cb4d52f10c5a6272f92" - integrity sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg== - -"mime-db@>= 1.43.0 < 2": - version "1.45.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.45.0.tgz#cceeda21ccd7c3a745eba2decd55d4b73e7879ea" - integrity sha512-CkqLUxUk15hofLoLyljJSrukZi8mAtgd+yE5uO4tqRZsdsAJKv0O+rFMhVDRJgozy+yG6md5KwuXhD4ocIoP+w== - -mime-types@^2.1.12, mime-types@~2.1.19: - version "2.1.24" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.24.tgz#b6f8d0b3e951efb77dedeca194cff6d16f676f81" - integrity sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ== - dependencies: - mime-db "1.40.0" - -mime-types@~2.1.17, mime-types@~2.1.24: - version "2.1.27" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.27.tgz#47949f98e279ea53119f5722e0f34e529bec009f" - integrity sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w== +mime-types@^2.1.12, mime-types@~2.1.17, mime-types@~2.1.19, mime-types@~2.1.24: + version "2.1.31" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.31.tgz#a00d76b74317c61f9c2db2218b8e9f8e9c5c9e6b" + integrity sha512-XGZnNzm3QvgKxa8dpzyhFTHmpP3l5YNusmne07VUOXxou9CqUqYa/HBy124RqtVh/O2pECas/MOcsDgpilPOPg== dependencies: - mime-db "1.44.0" + mime-db "1.48.0" mime@1.6.0, mime@^1.4.1: version "1.6.0" @@ -6413,9 +5916,9 @@ mime@1.6.0, mime@^1.4.1: integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== mime@^2.4.4: - version "2.4.6" - resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.6.tgz#e5b407c90db442f2beb5b162373d07b69affa4d1" - integrity sha512-RZKhC3EmpBchfTGBVb8fb+RL2cWyw/32lshnsETttkBAyAUXSGHxbEJWWRXc751DrIxG1q04b8QwMbAwkRPpUA== + version "2.5.2" + resolved "https://registry.yarnpkg.com/mime/-/mime-2.5.2.tgz#6e3dc6cc2b9510643830e5f19d5cb753da5eeabe" + integrity sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg== min-document@^2.19.0: version "2.19.0" @@ -6424,6 +5927,11 @@ min-document@^2.19.0: dependencies: dom-walk "^0.1.0" +min-indent@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" + integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== + minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" @@ -6434,14 +5942,23 @@ minimalistic-crypto-utils@^1.0.1: resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= -"minimatch@2 || 3", minimatch@^3.0.4, minimatch@~3.0.0, minimatch@~3.0.2: +minimatch@^3.0.4, minimatch@~3.0.2: version "3.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== dependencies: brace-expansion "^1.1.7" -minimist@^1.1.1, minimist@^1.1.3, minimist@^1.2.0, minimist@^1.2.5: +minimist-options@4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/minimist-options/-/minimist-options-4.1.0.tgz#c0655713c53a8a2ebd77ffa247d342c40f010619" + integrity sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A== + dependencies: + arrify "^1.0.1" + is-plain-obj "^1.1.0" + kind-of "^6.0.3" + +minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.5: version "1.2.5" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== @@ -6467,14 +5984,6 @@ minipass-pipeline@^1.2.2: dependencies: minipass "^3.0.0" -minipass@^2.6.0, minipass@^2.8.6, minipass@^2.9.0: - version "2.9.0" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.9.0.tgz#e713762e7d3e32fed803115cf93e04bca9fcc9a6" - integrity sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg== - dependencies: - safe-buffer "^5.1.2" - yallist "^3.0.0" - minipass@^3.0.0, minipass@^3.1.1: version "3.1.3" resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.1.3.tgz#7d42ff1f39635482e15f9cdb53184deebd5815fd" @@ -6482,13 +5991,6 @@ minipass@^3.0.0, minipass@^3.1.1: dependencies: yallist "^4.0.0" -minizlib@^1.2.1: - version "1.3.3" - resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.3.3.tgz#2290de96818a34c29551c8a8d301216bd65a861d" - integrity sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q== - dependencies: - minipass "^2.9.0" - minizlib@^2.1.1: version "2.1.2" resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931" @@ -6529,7 +6031,7 @@ mixin-object@^2.0.1: for-in "^0.1.3" is-extendable "^0.1.1" -mkdirp@0.x, mkdirp@0.x.x, "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@^0.5.3, mkdirp@^0.5.5: +mkdirp@0.x, mkdirp@^0.5.1, mkdirp@^0.5.3, mkdirp@^0.5.5: version "0.5.5" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== @@ -6592,7 +6094,7 @@ ms@2.1.1: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== -ms@2.1.2, ms@^2.1.1: +ms@^2.1.1: version "2.1.2" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== @@ -6610,15 +6112,10 @@ multicast-dns@^6.0.1: dns-packet "^1.3.1" thunky "^1.0.2" -mute-stream@~0.0.4: - version "0.0.8" - resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" - integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== - nan@^2.12.1, nan@^2.13.2: - version "2.14.0" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.0.tgz#7818f722027b2459a86f0295d434d1fc2336c52c" - integrity sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg== + version "2.14.2" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.2.tgz#f5376400695168f4cc694ac9393d0c9585eeea19" + integrity sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ== nanoid@^3.1.22: version "3.1.23" @@ -6647,31 +6144,12 @@ natural-compare@^1.4.0: resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= -natural-compare@~1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.2.2.tgz#1f96d60e3141cac1b6d05653ce0daeac763af6aa" - integrity sha1-H5bWDjFBysG20FZTzg2urHY69qo= - -ncp@0.4.x: - version "0.4.2" - resolved "https://registry.yarnpkg.com/ncp/-/ncp-0.4.2.tgz#abcc6cbd3ec2ed2a729ff6e7c1fa8f01784a8574" - integrity sha1-q8xsvT7C7Spyn/bnwfqPAXhKhXQ= - -needle@^2.2.1: - version "2.4.0" - resolved "https://registry.yarnpkg.com/needle/-/needle-2.4.0.tgz#6833e74975c444642590e15a750288c5f939b57c" - integrity sha512-4Hnwzr3mi5L97hMYeNl8wRW/Onhy4nUKR/lVemJ8gJedxxUyBLm9kkrDColJvoSfwi0jCNhD+xCdOtiGDQiRZg== - dependencies: - debug "^3.2.6" - iconv-lite "^0.4.4" - sax "^1.2.4" - negotiator@0.6.2: version "0.6.2" resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== -neo-async@^2.5.0, neo-async@^2.6.0, neo-async@^2.6.1: +neo-async@^2.5.0, neo-async@^2.6.1: version "2.6.2" resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== @@ -6695,14 +6173,6 @@ node-fetch-h2@^2.3.0: dependencies: http2-client "^1.2.5" -node-fetch@^1.0.1: - version "1.7.3" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.7.3.tgz#980f6f72d85211a5347c6b2bc18c5b84c3eb47ef" - integrity sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ== - dependencies: - encoding "^0.1.11" - is-stream "^1.0.1" - node-fetch@^2.1.2, node-fetch@^2.2.0: version "2.6.1" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052" @@ -6713,23 +6183,21 @@ node-forge@^0.10.0: resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.10.0.tgz#32dea2afb3e9926f02ee5ce8794902691a676bf3" integrity sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA== -node-gyp@^3.8.0: - version "3.8.0" - resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-3.8.0.tgz#540304261c330e80d0d5edce253a68cb3964218c" - integrity sha512-3g8lYefrRRzvGeSowdJKAKyks8oUpLEd/DyPV4eMhVlhJ0aNaZqIrNUIPuEWWTAoPqyFkfGrM67MC69baqn6vA== +node-gyp@^7.1.0: + version "7.1.2" + resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-7.1.2.tgz#21a810aebb187120251c3bcec979af1587b188ae" + integrity sha512-CbpcIo7C3eMu3dL1c3d0xw449fHIGALIJsRP4DDPHpyiW8vcriNY7ubh9TE4zEKfSxscY7PjeFnshE7h75ynjQ== dependencies: - fstream "^1.0.0" - glob "^7.0.3" - graceful-fs "^4.1.2" - mkdirp "^0.5.0" - nopt "2 || 3" - npmlog "0 || 1 || 2 || 3 || 4" - osenv "0" - request "^2.87.0" - rimraf "2" - semver "~5.3.0" - tar "^2.0.0" - which "1" + env-paths "^2.2.0" + glob "^7.1.4" + graceful-fs "^4.2.3" + nopt "^5.0.0" + npmlog "^4.1.2" + request "^2.88.2" + rimraf "^3.0.2" + semver "^7.3.2" + tar "^6.0.2" + which "^2.0.2" node-int64@^0.4.0: version "0.4.0" @@ -6771,9 +6239,9 @@ node-modules-regexp@^1.0.0: integrity sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA= node-notifier@^5.4.2: - version "5.4.3" - resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-5.4.3.tgz#cb72daf94c93904098e28b9c590fd866e464bd50" - integrity sha512-M4UBGcs4jeOK9CjTsYwkvH6/MzuUmGCyTW+kCY7uO+1ZVr0+FHGdPdIf5CCLqAaxnRrWidyoQlNkMIIVwbKB8Q== + version "5.4.5" + resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-5.4.5.tgz#0cbc1a2b0f658493b4025775a13ad938e96091ef" + integrity sha512-tVbHs7DyTLtzOiN78izLA85zRqB9NvEXkAf014Vx3jtSvn/xBl6bR8ZYifj+dFcFrKI21huSQgJZ6ZtL3B4HfQ== dependencies: growly "^1.3.0" is-wsl "^1.1.0" @@ -6781,22 +6249,6 @@ node-notifier@^5.4.2: shellwords "^0.1.1" which "^1.3.0" -node-pre-gyp@^0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.12.0.tgz#39ba4bb1439da030295f899e3b520b7785766149" - integrity sha512-4KghwV8vH5k+g2ylT+sLTjy5wmUOb9vPhnM8NHvRf9dHmnW/CndrFXy2aRPaPST6dugXSdHXfeaHQm77PIz/1A== - dependencies: - detect-libc "^1.0.2" - mkdirp "^0.5.1" - needle "^2.2.1" - nopt "^4.0.1" - npm-packlist "^1.1.6" - npmlog "^4.0.2" - rc "^1.2.7" - rimraf "^2.6.1" - semver "^5.3.0" - tar "^4" - node-readfiles@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/node-readfiles/-/node-readfiles-0.2.0.tgz#dbbd4af12134e2e635c245ef93ffcf6f60673a5d" @@ -6805,57 +6257,39 @@ node-readfiles@^0.2.0: es6-promise "^3.2.1" node-releases@^1.1.71: - version "1.1.72" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.72.tgz#14802ab6b1039a79a0c7d662b610a5bbd76eacbe" - integrity sha512-LLUo+PpH3dU6XizX3iVoubUNheF/owjXCZZ5yACDxNnPtgFuludV1ZL3ayK1kVep42Rmm0+R9/Y60NQbZ2bifw== + version "1.1.73" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.73.tgz#dd4e81ddd5277ff846b80b52bb40c49edf7a7b20" + integrity sha512-uW7fodD6pyW2FZNZnp/Z3hvWKeEW1Y8R1+1CnErE8cXFXzl5blBOoVB41CvMer6P6Q0S5FXDwcHgFd1Wj0U9zg== -node-sass@^4.14.1: - version "4.14.1" - resolved "https://registry.yarnpkg.com/node-sass/-/node-sass-4.14.1.tgz#99c87ec2efb7047ed638fb4c9db7f3a42e2217b5" - integrity sha512-sjCuOlvGyCJS40R8BscF5vhVlQjNN069NtQ1gSxyK1u9iqvn6tf7O1R4GNowVZfiZUCRt5MmMs1xd+4V/7Yr0g== +node-sass@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/node-sass/-/node-sass-6.0.1.tgz#cad1ccd0ce63e35c7181f545d8b986f3a9a887fe" + integrity sha512-f+Rbqt92Ful9gX0cGtdYwjTrWAaGURgaK5rZCWOgCNyGWusFYHhbqCCBoFBeat+HKETOU02AyTxNhJV0YZf2jQ== dependencies: async-foreach "^0.1.3" chalk "^1.1.1" - cross-spawn "^3.0.0" + cross-spawn "^7.0.3" gaze "^1.0.0" get-stdin "^4.0.1" glob "^7.0.3" - in-publish "^2.0.0" lodash "^4.17.15" - meow "^3.7.0" - mkdirp "^0.5.1" + meow "^9.0.0" nan "^2.13.2" - node-gyp "^3.8.0" + node-gyp "^7.1.0" npmlog "^4.0.0" request "^2.88.0" sass-graph "2.2.5" stdout-stream "^1.4.0" "true-case-path" "^1.0.2" -nomnom@^1.5.x: - version "1.8.1" - resolved "https://registry.yarnpkg.com/nomnom/-/nomnom-1.8.1.tgz#2151f722472ba79e50a76fc125bb8c8f2e4dc2a7" - integrity sha1-IVH3Ikcrp55Qp2/BJbuMjy5Nwqc= - dependencies: - chalk "~0.4.0" - underscore "~1.6.0" - -"nopt@2 || 3": - version "3.0.6" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9" - integrity sha1-xkZdvwirzU2zWTF/eaxopkayj/k= - dependencies: - abbrev "1" - -nopt@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" - integrity sha1-0NRoWv1UFRk8jHUFYC0NF81kR00= +nopt@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-5.0.0.tgz#530942bb58a512fccafe53fe210f13a25355dc88" + integrity sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ== dependencies: abbrev "1" - osenv "^0.1.4" -normalize-package-data@^2.3.2, normalize-package-data@^2.3.4: +normalize-package-data@^2.3.2, normalize-package-data@^2.5.0: version "2.5.0" resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== @@ -6865,6 +6299,16 @@ normalize-package-data@^2.3.2, normalize-package-data@^2.3.4: semver "2 || 3 || 4 || 5" validate-npm-package-license "^3.0.1" +normalize-package-data@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-3.0.2.tgz#cae5c410ae2434f9a6c1baa65d5bc3b9366c8699" + integrity sha512-6CdZocmfGaKnIHPVFhJJZ3GuR8SsLKvDANFp47Jmy51aKIr8akjAWTSxtpI+MBgBFdSMRyo4hMpDlT6dTffgZg== + dependencies: + hosted-git-info "^4.0.1" + resolve "^1.20.0" + semver "^7.3.4" + validate-npm-package-license "^3.0.1" + normalize-path@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" @@ -6877,23 +6321,10 @@ normalize-path@^3.0.0, normalize-path@~3.0.0: resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== -normalize-url@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-3.3.0.tgz#b2e1c4dc4f7c6d57743df733a4f5978d18650559" - integrity sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg== - -npm-bundled@^1.0.1: - version "1.0.6" - resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.0.6.tgz#e7ba9aadcef962bb61248f91721cd932b3fe6bdd" - integrity sha512-8/JCaftHwbd//k6y2rEWp6k1wxVfpFzB6t1p825+cUb7Ym2XQfhwIC5KwhrvzZRJu+LtDE585zVaS32+CGtf0g== - -npm-packlist@^1.1.6: - version "1.4.6" - resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.6.tgz#53ba3ed11f8523079f1457376dd379ee4ea42ff4" - integrity sha512-u65uQdb+qwtGvEJh/DgQgW1Xg7sqeNbmxYyrvlNznaVTjV3E5P6F/EFjM+BVHXl7JJlsdG8A64M0XI8FI/IOlg== - dependencies: - ignore-walk "^3.0.1" - npm-bundled "^1.0.1" +normalize-url@4.3.0, normalize-url@^6.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.3.0.tgz#9c49e10fc1876aeb76dba88bf1b2b5d9fa57b2ee" + integrity sha512-0NLtR71o4k6GLP+mr6Ty34c5GA6CMoEsncKJxvQd8NzPxaHRJNnb5gZE8R1XF4CPIS7QPHLJ74IFszwtNVAHVQ== npm-run-path@^2.0.0: version "2.0.2" @@ -6902,7 +6333,7 @@ npm-run-path@^2.0.0: dependencies: path-key "^2.0.0" -"npmlog@0 || 1 || 2 || 3 || 4", npmlog@^4.0.0, npmlog@^4.0.2: +npmlog@^4.0.0, npmlog@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg== @@ -6912,12 +6343,12 @@ npm-run-path@^2.0.0: gauge "~2.7.3" set-blocking "~2.0.0" -nth-check@~1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.2.tgz#b2bd295c37e3dd58a3bf0700376663ba4d9cf05c" - integrity sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg== +nth-check@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.0.0.tgz#1bb4f6dac70072fc313e8c9cd1417b5074c0a125" + integrity sha512-i4sc/Kj8htBrAiH1viZ0TgU8Y5XqCaV/FziYK6TBczxmeKm3AEFWqqF3195yKudrarqy7Zu80Ra5dobFjn9X/Q== dependencies: - boolbase "~1.0.0" + boolbase "^1.0.0" number-is-nan@^1.0.0: version "1.0.1" @@ -6937,24 +6368,24 @@ oas-kit-common@^1.0.8: fast-safe-stringify "^2.0.7" oas-linter@^3.1.3: - version "3.2.1" - resolved "https://registry.yarnpkg.com/oas-linter/-/oas-linter-3.2.1.tgz#1a6d9117d146805b58e56df479861de0293b6e5b" - integrity sha512-e5G6bbq3Nrfxm+SDPR5AiZ6n2smVUmhLA1OgI2/Bl8e2ywfWsKw/yuqrwiXXiNHb1wdM/GyPMX6QjCGJODlaaA== + version "3.2.2" + resolved "https://registry.yarnpkg.com/oas-linter/-/oas-linter-3.2.2.tgz#ab6a33736313490659035ca6802dc4b35d48aa1e" + integrity sha512-KEGjPDVoU5K6swgo9hJVA/qYGlwfbFx+Kg2QB/kd7rzV5N8N5Mg6PlsoCMohVnQmo+pzJap/F610qTodKzecGQ== dependencies: "@exodus/schemasafe" "^1.0.0-rc.2" should "^13.2.1" yaml "^1.10.0" oas-resolver@^2.4.3: - version "2.5.2" - resolved "https://registry.yarnpkg.com/oas-resolver/-/oas-resolver-2.5.2.tgz#62d26f8db7a4afd697f27ae9b283e79300dd2366" - integrity sha512-dEuG5nE9IMl0FQNQuROsoriP4/944PajSBKAoZMyp9b2eXfmPv9ZKeHRCKjf5RWLm0GezaPKcdCLbB0/Xiqtdw== + version "2.5.6" + resolved "https://registry.yarnpkg.com/oas-resolver/-/oas-resolver-2.5.6.tgz#10430569cb7daca56115c915e611ebc5515c561b" + integrity sha512-Yx5PWQNZomfEhPPOphFbZKi9W93CocQj18NlD2Pa4GWZzdZpSJvYwoiuurRI7m3SpcChrnO08hkuQDL3FGsVFQ== dependencies: node-fetch-h2 "^2.3.0" oas-kit-common "^1.0.8" - reftools "^1.1.6" + reftools "^1.1.9" yaml "^1.10.0" - yargs "^15.3.1" + yargs "^17.0.1" oas-schema-walker@^1.1.5: version "1.1.5" @@ -6996,7 +6427,20 @@ object-copy@^0.1.0: define-property "^0.2.5" kind-of "^3.0.3" -object-keys@^1.0.11, object-keys@^1.0.12: +object-inspect@^1.10.3, object-inspect@^1.9.0: + version "1.10.3" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.10.3.tgz#c2aa7d2d09f50c99375704f7a0adf24c5782d369" + integrity sha512-e5mCJlSH7poANfC8z8S9s9S2IN5/4Zb3aZ33f5s8YqoazCFzNLloLU8r5VCG+G7WoqLvAAZoVMcy3tp/3X0Plw== + +object-is@^1.0.1: + version "1.1.5" + resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.5.tgz#b9deeaa5fc7f1846a0faecdceec138e5778f53ac" + integrity sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + +object-keys@^1.0.12, object-keys@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== @@ -7008,23 +6452,24 @@ object-visit@^1.0.0: dependencies: isobject "^3.0.0" -object.assign@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da" - integrity sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w== +object.assign@^4.1.0, object.assign@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940" + integrity sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ== dependencies: - define-properties "^1.1.2" - function-bind "^1.1.1" - has-symbols "^1.0.0" - object-keys "^1.0.11" + call-bind "^1.0.0" + define-properties "^1.1.3" + has-symbols "^1.0.1" + object-keys "^1.1.1" object.getownpropertydescriptors@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz#8758c846f5b407adab0f236e0986f14b051caa16" - integrity sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY= + version "2.1.2" + resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.2.tgz#1bd63aeacf0d5d2d2f31b5e393b03a7c601a23f7" + integrity sha512-WtxeKSzfBjlzL+F9b7M7hewDzMwy+C8NRssHd1YrNlzHzIDrXcXiNOMrezdAEM4UXixgV+vvnyBeN7Rygl2ttQ== dependencies: - define-properties "^1.1.2" - es-abstract "^1.5.1" + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.18.0-next.2" object.pick@^1.3.0: version "1.3.0" @@ -7065,11 +6510,12 @@ ono@^4.0.11: format-util "^1.0.3" openapi-sampler@^1.0.0-beta.16: - version "1.0.0-beta.18" - resolved "https://registry.yarnpkg.com/openapi-sampler/-/openapi-sampler-1.0.0-beta.18.tgz#9e0845616a669e048860625ea5c10d0f554f1b53" - integrity sha512-nG/0kvvSY5FbrU5A+Dbp1xTQN++7pKIh87/atryZlxrzDuok5Y6TCbpxO1jYqpUKLycE4ReKGHCywezngG6xtQ== + version "1.1.0" + resolved "https://registry.yarnpkg.com/openapi-sampler/-/openapi-sampler-1.1.0.tgz#73e45a599e8f7892be5a728ff21e784b8d2284bd" + integrity sha512-/LhZYKNBWphLEpbAG5BdpBZbIbmLgC4vTiTj8N/MV0LF9ptmKOiJ2nETVlacNjXHt7iqDgZDELJCIoZ3q5ZG6A== dependencies: - json-pointer "^0.6.0" + "@types/json-schema" "^7.0.7" + json-pointer "^0.6.1" opn@^5.5.0: version "5.5.0" @@ -7102,24 +6548,6 @@ os-browserify@^0.3.0: resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" integrity sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc= -os-homedir@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" - integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M= - -os-tmpdir@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" - integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= - -osenv@0, osenv@^0.1.4: - version "0.1.5" - resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" - integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g== - dependencies: - os-homedir "^1.0.0" - os-tmpdir "^1.0.0" - p-each-series@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-each-series/-/p-each-series-1.0.0.tgz#930f3d12dd1f50e7434457a22cd6f04ac6ad7f71" @@ -7132,14 +6560,7 @@ p-finally@^1.0.0: resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= -p-limit@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.2.0.tgz#417c9941e6027a9abcba5092dd2904e255b5fbc2" - integrity sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ== - dependencies: - p-try "^2.0.0" - -p-limit@^2.2.0: +p-limit@^2.0.0, p-limit@^2.2.0: version "2.3.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== @@ -7147,11 +6568,11 @@ p-limit@^2.2.0: p-try "^2.0.0" p-limit@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.0.2.tgz#1664e010af3cadc681baafd3e2a437be7b0fb5fe" - integrity sha512-iwqZSOoWIW+Ew4kAGUlN16J4M7OB3ysMLSZtnhmqx7njIHFPlxWBX8xo3lVTyFVq6mI/lL9qt2IsN1sHwaxJkg== + version "3.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== dependencies: - p-try "^2.0.0" + yocto-queue "^0.1.0" p-locate@^3.0.0: version "3.0.0" @@ -7202,11 +6623,11 @@ pako@~1.0.5: integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== parallel-transform@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/parallel-transform/-/parallel-transform-1.1.0.tgz#d410f065b05da23081fcd10f28854c29bda33b06" - integrity sha1-1BDwZbBdojCB/NEPKIVMKb2jOwY= + version "1.2.0" + resolved "https://registry.yarnpkg.com/parallel-transform/-/parallel-transform-1.2.0.tgz#9049ca37d6cb2182c3b1d2c720be94d14a5814fc" + integrity sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg== dependencies: - cyclist "~0.2.2" + cyclist "^1.0.1" inherits "^2.0.3" readable-stream "^2.1.5" @@ -7228,13 +6649,6 @@ parse-asn1@^5.0.0, parse-asn1@^5.1.5: pbkdf2 "^3.0.3" safe-buffer "^5.1.1" -parse-json@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" - integrity sha1-9ID0BDTvgHQfhGkJn43qGPVaTck= - dependencies: - error-ex "^1.2.0" - parse-json@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" @@ -7243,26 +6657,38 @@ parse-json@^4.0.0: error-ex "^1.3.1" json-parse-better-errors "^1.0.1" +parse-json@^5.0.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" + integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== + dependencies: + "@babel/code-frame" "^7.0.0" + error-ex "^1.3.1" + json-parse-even-better-errors "^2.3.0" + lines-and-columns "^1.1.6" + parse-passwd@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" integrity sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY= parse-path@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/parse-path/-/parse-path-4.0.1.tgz#0ec769704949778cb3b8eda5e994c32073a1adff" - integrity sha512-d7yhga0Oc+PwNXDvQ0Jv1BuWkLVPXcAoQ/WREgd6vNNoKYaW52KI+RdOFjI63wjkmps9yUE8VS4veP+AgpQ/hA== + version "4.0.3" + resolved "https://registry.yarnpkg.com/parse-path/-/parse-path-4.0.3.tgz#82d81ec3e071dcc4ab49aa9f2c9c0b8966bb22bf" + integrity sha512-9Cepbp2asKnWTJ9x2kpw6Fe8y9JDbqwahGCTvklzd/cEq5C5JC59x2Xb0Kx+x0QZ8bvNquGO8/BWP0cwBHzSAA== dependencies: is-ssh "^1.3.0" protocols "^1.4.0" + qs "^6.9.4" + query-string "^6.13.8" -parse-url@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/parse-url/-/parse-url-5.0.1.tgz#99c4084fc11be14141efa41b3d117a96fcb9527f" - integrity sha512-flNUPP27r3vJpROi0/R3/2efgKkyXqnXwyP1KQ2U0SfFRgdizOdWfvrrvJg1LuOoxs7GQhmxJlq23IpQ/BkByg== +parse-url@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/parse-url/-/parse-url-6.0.0.tgz#f5dd262a7de9ec00914939220410b66cff09107d" + integrity sha512-cYyojeX7yIIwuJzledIHeLUBVJ6COVLeT4eF+2P6aKVzwvgKQPndCBv3+yQ7pcWjqToYwaligxzSYNNmGoMAvw== dependencies: is-ssh "^1.3.0" - normalize-url "^3.3.0" + normalize-url "^6.1.0" parse-path "^4.0.0" protocols "^1.4.0" @@ -7291,13 +6717,6 @@ path-dirname@^1.0.0: resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA= -path-exists@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" - integrity sha1-D+tsZPD8UY2adU3V77YscCJ2H0s= - dependencies: - pinkie-promise "^2.0.0" - path-exists@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" @@ -7323,6 +6742,11 @@ path-key@^2.0.0, path-key@^2.0.1: resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= +path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + path-parse@^1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" @@ -7334,21 +6758,12 @@ path-to-regexp@0.1.7: integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w= path-to-regexp@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-1.7.0.tgz#59fde0f435badacba103a84e9d3bc64e96b9937d" - integrity sha1-Wf3g9DW62suhA6hOnTvGTpa5k30= + version "1.8.0" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-1.8.0.tgz#887b3ba9d84393e87a0a0b9f4cb756198b53548a" + integrity sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA== dependencies: isarray "0.0.1" -path-type@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" - integrity sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE= - dependencies: - graceful-fs "^4.1.2" - pify "^2.0.0" - pinkie-promise "^2.0.0" - path-type@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" @@ -7361,15 +6776,10 @@ path-type@^4.0.0: resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== -pathval@~0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/pathval/-/pathval-0.1.1.tgz#08f911cdca9cce5942880da7817bc0b723b66d82" - integrity sha1-CPkRzcqczllCiA2ngXvAtyO2bYI= - pbkdf2@^3.0.3: - version "3.1.1" - resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.1.tgz#cb8724b0fada984596856d1a6ebafd3584654b94" - integrity sha512-4Ejy1OPxi9f2tt1rRV7Go7zmfDQ+ZectEQz3VGUQhgq62HtIRPDyG/JtnwIxs6x3uNMwo2V7q1fMvKjb+Tnpqg== + version "3.1.2" + resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.2.tgz#dd822aa0887580e52f1a039dc3eda108efae3075" + integrity sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA== dependencies: create-hash "^1.1.2" create-hmac "^1.1.4" @@ -7383,24 +6793,19 @@ pend@~1.2.0: integrity sha1-elfrVQpng/kRUzH89GY9XI4AelA= perfect-scrollbar@^1.4.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/perfect-scrollbar/-/perfect-scrollbar-1.5.0.tgz#821d224ed8ff61990c23f26db63048cdc75b6b83" - integrity sha512-NrNHJn5mUGupSiheBTy6x+6SXCFbLlm8fVZh9moIzw/LgqElN5q4ncR4pbCBCYuCJ8Kcl9mYM0NgDxvW+b4LxA== + version "1.5.1" + resolved "https://registry.yarnpkg.com/perfect-scrollbar/-/perfect-scrollbar-1.5.1.tgz#8ee5b3ca06ce9c3f7338fd4ab67a55248a6cf3be" + integrity sha512-MrSImINnIh3Tm1hdPT6bji6fmIeRorVEegQvyUnhqko2hDGTHhmjPefHXfxG/Jb8xVbfCwgmUIlIajERGXjVXQ== performance-now@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= -picomatch@^2.0.4, picomatch@^2.2.1: - version "2.2.2" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" - integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== - -picomatch@^2.0.5: - version "2.0.7" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.0.7.tgz#514169d8c7cd0bdbeecc8a2609e34a7163de69f6" - integrity sha512-oLHIdio3tZ0qH76NybpeneBhYVj0QFTfXEFTc/B3zKQspYfYYkWYgFsmzo+4kvId/bQRcNkVeguI3y+CD22BtA== +picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3: + version "2.3.0" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.0.tgz#f1f061de8f6a4bf022892e2d128234fb98302972" + integrity sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw== pify@^2.0.0: version "2.3.0" @@ -7450,32 +6855,22 @@ pkg-dir@^4.1.0: dependencies: find-up "^4.0.0" -pkginfo@0.3.x: - version "0.3.1" - resolved "https://registry.yarnpkg.com/pkginfo/-/pkginfo-0.3.1.tgz#5b29f6a81f70717142e09e765bbeab97b4f81e21" - integrity sha1-Wyn2qB9wcXFC4J52W76rl7T4HiE= - -pkginfo@0.x.x: - version "0.4.1" - resolved "https://registry.yarnpkg.com/pkginfo/-/pkginfo-0.4.1.tgz#b5418ef0439de5425fc4995042dced14fb2a84ff" - integrity sha1-tUGO8EOd5UJfxJlQQtztFPsqhP8= - pn@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/pn/-/pn-1.1.0.tgz#e2f4cef0e219f463c179ab37463e4e1ecdccbafb" integrity sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA== polished@^3.6.5: - version "3.6.7" - resolved "https://registry.yarnpkg.com/polished/-/polished-3.6.7.tgz#44cbd0047f3187d83db0c479ef0c7d5583af5fb6" - integrity sha512-b4OViUOihwV0icb9PHmWbR+vPqaSzSAEbgLskvb7ANPATVXGiYv/TQFHQo65S53WU9i5EQ1I03YDOJW7K0bmYg== + version "3.7.2" + resolved "https://registry.yarnpkg.com/polished/-/polished-3.7.2.tgz#ec5ddc17a7d322a574d5e10ddd2a6f01d3e767d1" + integrity sha512-pQKtpZGmsZrW8UUpQMAnR7s3ppHeMQVNyMDKtUyKwuvDmklzcEyM5Kllb3JyE/sE/x7arDmyd35i+4vp99H6sQ== dependencies: - "@babel/runtime" "^7.9.2" + "@babel/runtime" "^7.12.5" popper.js@^1.14.7: - version "1.15.0" - resolved "https://registry.yarnpkg.com/popper.js/-/popper.js-1.15.0.tgz#5560b99bbad7647e9faa475c6b8056621f5a4ff2" - integrity sha512-w010cY1oCUmI+9KwwlWki+r5jxKfTFDVoadl7MSrIujHU5MJ5OR6HTDj6Xo8aoR/QsA56x8jKjA59qGH4ELtrA== + version "1.16.1" + resolved "https://registry.yarnpkg.com/popper.js/-/popper.js-1.16.1.tgz#2a223cb3dc7b6213d740e40372be40de43e65b1b" + integrity sha512-Wb4p1J4zyFTbM+u6WuO4XstYx4Ky9Cewe4DWrel7B0w6VVICvPwdOpotjzcf6eD8TsckVnIMNONQyPIUFOUbCQ== portfinder@^1.0.26: version "1.0.28" @@ -7560,9 +6955,9 @@ postcss@^6.0.1: supports-color "^5.4.0" postcss@^7.0.1: - version "7.0.21" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.21.tgz#06bb07824c19c2021c5d056d5b10c35b989f7e17" - integrity sha512-uIFtJElxJo29QC753JzhidoAhvp/e/Exezkdhfmt8AymWT6/5B7W1WmponYWkHk2eg6sONyTch0A3nkMPun3SQ== + version "7.0.36" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.36.tgz#056f8cffa939662a8f5905950c07d5285644dfcb" + integrity sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw== dependencies: chalk "^2.4.2" source-map "^0.6.1" @@ -7582,28 +6977,18 @@ prelude-ls@~1.1.2: resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= -prettier@^1.18.2: - version "1.18.2" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.18.2.tgz#6823e7c5900017b4bd3acf46fe9ac4b4d7bda9ea" - integrity sha512-OeHeMc0JhFE9idD4ZdtNibzY0+TPHSpSSb9h8FqtP+YnoZZ1sl8Vc9b1sasjfymH3SonAF4QcA2+mzHPhMvIiw== +prettier@1.19: + version "1.19.1" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.19.1.tgz#f7d7f5ff8a9cd872a7be4ca142095956a60797cb" + integrity sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew== pretty-error@^2.0.2: - version "2.1.1" - resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-2.1.1.tgz#5f4f87c8f91e5ae3f3ba87ab4cf5e03b1a17f1a3" - integrity sha1-X0+HyPkeWuPzuoerTPXgOxoX8aM= - dependencies: - renderkid "^2.0.1" - utila "~0.4" - -pretty-format@^24.8.0: - version "24.8.0" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-24.8.0.tgz#8dae7044f58db7cb8be245383b565a963e3c27f2" - integrity sha512-P952T7dkrDEplsR+TuY7q3VXDae5Sr7zmQb12JU/NDQa/3CH7/QW0yvqLcGN6jL+zQFKaoJcPc+yJxMTGmosqw== + version "2.1.2" + resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-2.1.2.tgz#be89f82d81b1c86ec8fdfbc385045882727f93b6" + integrity sha512-EY5oDzmsX5wvuynAByrmY0P0hcp+QpnAKbJng2A2MPjVKXCxrDSUkzghVJ4ZGPIv+JC4gX8fPUWscC0RtjsWGw== dependencies: - "@jest/types" "^24.8.0" - ansi-regex "^4.0.0" - ansi-styles "^3.2.0" - react-is "^16.8.4" + lodash "^4.17.20" + renderkid "^2.0.4" pretty-format@^24.9.0: version "24.9.0" @@ -7615,15 +7000,20 @@ pretty-format@^24.9.0: ansi-styles "^3.2.0" react-is "^16.8.4" -prismjs@^1.20.0: - version "1.24.0" - resolved "https://registry.yarnpkg.com/prismjs/-/prismjs-1.24.0.tgz#0409c30068a6c52c89ef7f1089b3ca4de56be2ac" - integrity sha512-SqV5GRsNqnzCL8k5dfAjCNhUrF3pR0A9lTDSCUZeh/LIshheXJEaP0hwLz2t4XHivd2J/v2HR+gRnigzeKe3cQ== +pretty-format@^27.0.6: + version "27.0.6" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-27.0.6.tgz#ab770c47b2c6f893a21aefc57b75da63ef49a11f" + integrity sha512-8tGD7gBIENgzqA+UBzObyWqQ5B778VIFZA/S66cclyd5YkFLYs2Js7gxDKf0MXtTc9zcS7t1xhdfcElJ3YIvkQ== + dependencies: + "@jest/types" "^27.0.6" + ansi-regex "^5.0.0" + ansi-styles "^5.0.0" + react-is "^17.0.1" -private@^0.1.6: - version "0.1.8" - resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" - integrity sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg== +prismjs@^1.20.0: + version "1.24.1" + resolved "https://registry.yarnpkg.com/prismjs/-/prismjs-1.24.1.tgz#c4d7895c4d6500289482fa8936d9cdd192684036" + integrity sha512-mNPsedLuk90RVJioIky8ANZEwYm5w9LcvCXrxHlwf4fNVSn8jEipMybMkWUyyF0JhnC+C4VcOVSBuHRKs1L5Ow== process-nextick-args@~2.0.0: version "2.0.1" @@ -7640,31 +7030,13 @@ promise-inflight@^1.0.1: resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM= -promise@^7.1.1: - version "7.3.1" - resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" - integrity sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg== - dependencies: - asap "~2.0.3" - -prompt@~0.2.14: - version "0.2.14" - resolved "https://registry.yarnpkg.com/prompt/-/prompt-0.2.14.tgz#57754f64f543fd7b0845707c818ece618f05ffdc" - integrity sha1-V3VPZPVD/XsIRXB8gY7OYY8F/9w= - dependencies: - pkginfo "0.x.x" - read "1.0.x" - revalidator "0.1.x" - utile "0.2.x" - winston "0.8.x" - prompts@^2.0.1: - version "2.1.0" - resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.1.0.tgz#bf90bc71f6065d255ea2bdc0fe6520485c1b45db" - integrity sha512-+x5TozgqYdOwWsQFZizE/Tra3fKvAoy037kOyU6cgz84n8f6zxngLOV4O32kTwt9FcLCxAqw0P/c8rOr9y+Gfg== + version "2.4.1" + resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.1.tgz#befd3b1195ba052f9fd2fde8a486c4e82ee77f61" + integrity sha512-EQyfIuO2hPDsX1L/blblV+H7I0knhgAd82cVneCwcdND9B8AuCDuRcBH6yIcG4dFzlOUqbazQqwGjx5xmsNLuQ== dependencies: - kleur "^3.0.2" - sisteransi "^1.0.0" + kleur "^3.0.3" + sisteransi "^1.0.5" prop-types@^15.5.0, prop-types@^15.5.10, prop-types@^15.5.4, prop-types@^15.6.0, prop-types@^15.6.1, prop-types@^15.6.2, prop-types@^15.7.2: version "15.7.2" @@ -7676,16 +7048,16 @@ prop-types@^15.5.0, prop-types@^15.5.10, prop-types@^15.5.4, prop-types@^15.6.0, react-is "^16.8.1" protocols@^1.1.0, protocols@^1.4.0: - version "1.4.7" - resolved "https://registry.yarnpkg.com/protocols/-/protocols-1.4.7.tgz#95f788a4f0e979b291ffefcf5636ad113d037d32" - integrity sha512-Fx65lf9/YDn3hUX08XUc0J8rSux36rEsyiv21ZGUC1mOyeM3lTRpZLcrm8aAolzS4itwVfm7TAPyxC2E5zd6xg== + version "1.4.8" + resolved "https://registry.yarnpkg.com/protocols/-/protocols-1.4.8.tgz#48eea2d8f58d9644a4a32caae5d5db290a075ce8" + integrity sha512-IgjKyaUSjsROSO8/D49Ab7hP8mJgTYcqApOqdPhLoPxAplXmkp+zRvsrSQjFn5by0rhm4VH0GAUELIPpx7B1yg== proxy-addr@~2.0.5: - version "2.0.6" - resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.6.tgz#fdc2336505447d3f2f2c638ed272caf614bbb2bf" - integrity sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw== + version "2.0.7" + resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" + integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== dependencies: - forwarded "~0.1.2" + forwarded "0.2.0" ipaddr.js "1.9.1" prr@~1.0.1: @@ -7693,11 +7065,6 @@ prr@~1.0.1: resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" integrity sha1-0/wRS6BplaRexok/SEzrHXj19HY= -pseudomap@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" - integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= - psl@^1.1.24, psl@^1.1.28: version "1.4.0" resolved "https://registry.yarnpkg.com/psl/-/psl-1.4.0.tgz#5dd26156cdb69fa1fdb8ab1991667d3f80ced7c2" @@ -7755,16 +7122,33 @@ punycode@^2.1.0, punycode@^2.1.1: resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== -qs@6.7.0, qs@^6.5.1: +qs@6.7.0: version "6.7.0" resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc" integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ== +qs@^6.5.1, qs@^6.9.4: + version "6.10.1" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.10.1.tgz#4931482fa8d647a5aab799c5271d2133b981fb6a" + integrity sha512-M528Hph6wsSVOBiYUnGf+K/7w0hNshs/duGsNXPUCLH5XAqjEtiPGwNONLV0tBH8NoGb0mvD5JubnUTrujKDTg== + dependencies: + side-channel "^1.0.4" + qs@~6.5.2: version "6.5.2" resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== +query-string@^6.13.8: + version "6.14.1" + resolved "https://registry.yarnpkg.com/query-string/-/query-string-6.14.1.tgz#7ac2dca46da7f309449ba0f86b1fd28255b0c86a" + integrity sha512-XDxAeVmpfu1/6IjyT/gXHOl+S0vQ9owggJ30hhWKdHAsNPOcasn5o9BW0eejZqL2e4vMjhAxoW3jVHcD6mbcYw== + dependencies: + decode-uri-component "^0.2.0" + filter-obj "^1.1.0" + split-on-first "^1.0.0" + strict-uri-encode "^2.0.0" + querystring-es3@^0.2.0: version "0.2.1" resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" @@ -7780,6 +7164,16 @@ querystringify@^2.1.1: resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6" integrity sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ== +queue-microtask@^1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" + integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== + +quick-lru@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-4.0.1.tgz#5b8878f113a58217848c6482026c73e1ba57727f" + integrity sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g== + randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5, randombytes@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" @@ -7815,16 +7209,6 @@ raw-loader@^0.5.1: resolved "https://registry.yarnpkg.com/raw-loader/-/raw-loader-0.5.1.tgz#0c3d0beaed8a01c966d9787bf778281252a979aa" integrity sha1-DD0L6u2KAclm2Xh793goElKpeao= -rc@^1.2.7: - version "1.2.8" - resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" - integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== - dependencies: - deep-extend "^0.6.0" - ini "~1.3.0" - minimist "^1.2.0" - strip-json-comments "~2.0.1" - react-autocomplete@^1.8.1: version "1.8.1" resolved "https://registry.yarnpkg.com/react-autocomplete/-/react-autocomplete-1.8.1.tgz#ebbbc400006aa91ad538b2d14727b9e7e5d06310" @@ -7838,16 +7222,10 @@ react-deep-force-update@^2.1.1: resolved "https://registry.yarnpkg.com/react-deep-force-update/-/react-deep-force-update-2.1.3.tgz#740612322e617bcced38f61794a4af75dc3d98e7" integrity sha512-lqD4eHKVuB65RyO/hGbEST53E2/GPbcIPcFYyeW/p4vNngtH4G7jnKGlU6u1OqrFo0uNfIvwuBOg98IbLHlNEA== -react-diff-view@^2.1.4: - version "2.1.4" - resolved "https://registry.yarnpkg.com/react-diff-view/-/react-diff-view-2.1.4.tgz#556926eab30f6d47cbd074f23f7e9a81b11c6326" - integrity sha512-l1e9SPQdf8BgzRZQOzfeR14t0RScwstGArA/GF6vriRi0ip4+Aia0XZdg5qDb28mx57VnFgPHbkgCfyaeIOvPQ== - dependencies: - classnames "^2.2.6" - diff-match-patch "^1.0.4" - recompose "^0.30.0" - shallow-equal "^1.0.0" - warning "^4.0.2" +react-diff-view@^2.4.7: + version "2.4.7" + resolved "https://registry.yarnpkg.com/react-diff-view/-/react-diff-view-2.4.7.tgz#b0583ed85d61db300872014b08a289b2f363ac7e" + integrity sha512-M8NrVffIOPLqnQGfbv8VVnUVi80GefATRtneMQKo+uuqTx3IORO1mjrPUe3L0rmW/0xJucINjLWuLhSd1JX/tg== react-dom@^16.9.3: version "16.14.0" @@ -7869,7 +7247,7 @@ react-fast-compare@^3.1.1: resolved "https://registry.yarnpkg.com/react-fast-compare/-/react-fast-compare-3.2.0.tgz#641a9da81b6a6320f270e89724fb45a0b39e43bb" integrity sha512-rtGImPZ0YyLrscKI9xTpV8psd6I8VAtjKCzQDlzyDvqJA8XOW78TXYQwNRNd8g8JZnDu8q9Fu/1v4HPAVwVdHA== -react-form@2.16.0: +react-form@2.16.0, react-form@^2.16.0: version "2.16.0" resolved "https://registry.yarnpkg.com/react-form/-/react-form-2.16.0.tgz#db7c4d1145a0daa0056010c12bbc5a2f0d749f5f" integrity sha512-Y2MAqOTplvmw34THQmXhfzus6IMW5w/7xr7t3RQ0Zfb7YCOfT/hP8YeRDU8QWhyGatSunpc3e/CA3rgfWN8i0A== @@ -7883,20 +7261,6 @@ react-form@2.16.0: redux-logger "^3.0.6" redux-thunk "^2.2.0" -react-form@^2.16.0: - version "2.16.3" - resolved "https://registry.yarnpkg.com/react-form/-/react-form-2.16.3.tgz#c45a575483696ea3f99cf271984fcabcf470f1b2" - integrity sha512-Pp0XFvEUkIWUImEsyi8DQ7j3Ls6h8J7BCXPwIzBOv5ZgOynLFwJX+/gYqQRNtSZbjPP4+3FVA4zW3Qktq7H+lw== - dependencies: - babel-runtime "^6.26.0" - circular-json "^0.4.0" - classnames "^2.2.5" - prop-types "^15.5.10" - react-redux "^5.0.6" - redux "^3.7.2" - redux-logger "^3.0.6" - redux-thunk "^2.2.0" - react-ga@^2.6.0: version "2.6.0" resolved "https://registry.yarnpkg.com/react-ga/-/react-ga-2.6.0.tgz#c3fe830ead2ad25117e1d33280d9698de9b28496" @@ -7933,15 +7297,15 @@ react-hot-loader@^3.1.3: redbox-react "^1.3.6" source-map "^0.6.1" -react-is@^16.6.0, react-is@^16.7.0, react-is@^16.8.1, react-is@^16.8.4: +react-is@^16.6.0, react-is@^16.7.0, react-is@^16.8.1, react-is@^16.8.3, react-is@^16.8.4: version "16.8.6" resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.8.6.tgz#5bbc1e2d29141c9fbdfed456343fe2bc430a6a16" integrity sha512-aUk3bHfZ2bRSVFFbbeVS4i+lNPZr3/WM5jT2J5omUVV1zzcs1nAaf3l51ctA5FFvCRbhrH0bdAsRRQddFJZPtA== -react-is@^16.8.3: - version "16.11.0" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.11.0.tgz#b85dfecd48ad1ce469ff558a882ca8e8313928fa" - integrity sha512-gbBVYR2p8mnriqAwWx9LbuUrShnAuSCNnuPGyc7GJrMVQtPDAh8iLpv7FRuMPFb56KkaVZIYSz1PrjI9q0QPCw== +react-is@^17.0.1: + version "17.0.2" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0" + integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== react-keyhooks@^0.2.0: version "0.2.0" @@ -7951,7 +7315,7 @@ react-keyhooks@^0.2.0: "@types/react" "^17.0.2" react "^17.0.1" -react-lifecycles-compat@^3.0.0, react-lifecycles-compat@^3.0.2, react-lifecycles-compat@^3.0.4: +react-lifecycles-compat@^3.0.0: version "3.0.4" resolved "https://registry.yarnpkg.com/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz#4f1a273afdfc8f3488a8c516bfda78f872352362" integrity sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA== @@ -7976,12 +7340,12 @@ react-proxy@^3.0.0-alpha.0: lodash "^4.6.1" react-redux@^5.0.6: - version "5.1.1" - resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-5.1.1.tgz#88e368682c7fa80e34e055cd7ac56f5936b0f52f" - integrity sha512-LE7Ned+cv5qe7tMV5BPYkGQ5Lpg8gzgItK07c67yHvJ8t0iaD9kPFPAli/mYkiyJYrs2pJgExR2ZgsGqlrOApg== + version "5.1.2" + resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-5.1.2.tgz#b19cf9e21d694422727bf798e934a916c4080f57" + integrity sha512-Ns1G0XXc8hDyH/OcBHOxNgQx9ayH3SPxBnFCOidGKSle8pKihysQw2rG/PmciUQRoclhVBO8HMhiRmGXnDja9Q== dependencies: "@babel/runtime" "^7.1.2" - hoist-non-react-statics "^3.1.0" + hoist-non-react-statics "^3.3.0" invariant "^2.2.4" loose-envify "^1.1.0" prop-types "^15.6.1" @@ -8014,17 +7378,16 @@ react-router@^4.3.1: warning "^4.0.1" react-side-effect@^1.1.0: - version "1.1.5" - resolved "https://registry.yarnpkg.com/react-side-effect/-/react-side-effect-1.1.5.tgz#f26059e50ed9c626d91d661b9f3c8bb38cd0ff2d" - integrity sha512-Z2ZJE4p/jIfvUpiUMRydEVpQRf2f8GMHczT6qLcARmX7QRb28JDBTpnM2g/i5y/p7ZDEXYGHWg0RbhikE+hJRw== + version "1.2.0" + resolved "https://registry.yarnpkg.com/react-side-effect/-/react-side-effect-1.2.0.tgz#0e940c78faba0c73b9b0eba9cd3dda8dfb7e7dae" + integrity sha512-v1ht1aHg5k/thv56DRcjw+WtojuuDHFUgGfc+bFHOWsF4ZK6C2V57DO0Or0GPsg6+LSTE0M6Ry/gfzhzSwbc5w== dependencies: - exenv "^1.2.1" shallowequal "^1.0.1" react-side-effect@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/react-side-effect/-/react-side-effect-2.1.0.tgz#1ce4a8b4445168c487ed24dab886421f74d380d3" - integrity sha512-IgmcegOSi5SNX+2Snh1vqmF0Vg/CbkycU9XZbOHJlZ6kMzTmi3yc254oB1WCkgA7OQtIAoLmcSFuHTc/tlcqXg== + version "2.1.1" + resolved "https://registry.yarnpkg.com/react-side-effect/-/react-side-effect-2.1.1.tgz#66c5701c3e7560ab4822a4ee2742dee215d72eb3" + integrity sha512-2FoTQzRNTncBVtnzxFOk2mCpcfxQpenBMbk5kSVBg5UcPqV9fRbgY2zhb7GTWWOlpFmAxhClBDlIq8Rsubz1yQ== react-svg-piechart@^2.1.1: version "2.4.0" @@ -8032,9 +7395,9 @@ react-svg-piechart@^2.1.1: integrity sha512-IXqvZCxTuiipwPgROyHi6TihR9PVaGDSnqd14Q2NUXx2PzbNnNcW2nVwLOPLUZm3xEVPzaQhBwxrwrsGLh1uDQ== react-tabs@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/react-tabs/-/react-tabs-3.1.1.tgz#b363a239f76046bb2158875a1e5921b11064052f" - integrity sha512-HpySC29NN1BkzBAnOC+ajfzPbTaVZcSWzMSjk56uAhPC/rBGtli8lTysR4CfPAyEE/hfweIzagOIoJ7nu80yng== + version "3.2.2" + resolved "https://registry.yarnpkg.com/react-tabs/-/react-tabs-3.2.2.tgz#07bdc3cdb17bdffedd02627f32a93cd4b3d6e4d0" + integrity sha512-/o52eGKxFHRa+ssuTEgSM8qORnV4+k7ibW+aNQzKe+5gifeVz8nLxCrsI9xdRhfb0wCLdgIambIpb1qCxaMN+A== dependencies: clsx "^1.1.0" prop-types "^15.5.0" @@ -8050,24 +7413,24 @@ react-test-renderer@16.8.3: scheduler "^0.13.3" react-toastify@^5.0.1: - version "5.3.2" - resolved "https://registry.yarnpkg.com/react-toastify/-/react-toastify-5.3.2.tgz#9de4b426656587722f7e2f99f5f90e974ba5fee6" - integrity sha512-YHTTey7JWqXVkkBIeJ34PAvQELmGfLEGCx9bu68aIZYd+kRU2u9k/nG3AydgbX/uevIb4QNpeeE98DjkooMs5w== + version "5.5.0" + resolved "https://registry.yarnpkg.com/react-toastify/-/react-toastify-5.5.0.tgz#f55de44f6b5e3ce3b13b69e5bb4427f2c9404822" + integrity sha512-jsVme7jALIFGRyQsri/g4YTsRuaaGI70T6/ikjwZMB4mwTZaCWqj5NqxhGrRStKlJc5npXKKvKeqTiRGQl78LQ== dependencies: "@babel/runtime" "^7.4.2" classnames "^2.2.6" prop-types "^15.7.2" - react-transition-group "^2.6.1" + react-transition-group "^4" -react-transition-group@^2.6.1: - version "2.9.0" - resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-2.9.0.tgz#df9cdb025796211151a436c69a8f3b97b5b07c8d" - integrity sha512-+HzNTCHpeQyl4MJ/bdE0u6XRMe9+XG/+aL4mCxVN4DnPBQ0/5bfHWPDuOZUzYdMj94daZaZdCCc1Dzt9R/xSSg== +react-transition-group@^4: + version "4.4.2" + resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-4.4.2.tgz#8b59a56f09ced7b55cbd53c36768b922890d5470" + integrity sha512-/RNYfRAMlZwDSr6z4zNKV6xu53/e2BuaBbGhbyYIXTrmgu/bGHzmqOs7mJSJBHy9Ud+ApHx3QjrkKSp1pxvlFg== dependencies: - dom-helpers "^3.4.0" + "@babel/runtime" "^7.5.5" + dom-helpers "^5.0.1" loose-envify "^1.4.0" prop-types "^15.6.2" - react-lifecycles-compat "^3.0.4" react@^16.9.3: version "16.14.0" @@ -8086,14 +7449,6 @@ react@^17.0.1: loose-envify "^1.1.0" object-assign "^4.1.1" -read-pkg-up@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" - integrity sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI= - dependencies: - find-up "^1.0.0" - read-pkg "^1.0.0" - read-pkg-up@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-4.0.0.tgz#1b221c6088ba7799601c808f91161c66e58f8978" @@ -8102,14 +7457,14 @@ read-pkg-up@^4.0.0: find-up "^3.0.0" read-pkg "^3.0.0" -read-pkg@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" - integrity sha1-9f+qXs0pyzHAR0vKfXVra7KePyg= +read-pkg-up@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-7.0.1.tgz#f3a6135758459733ae2b95638056e1854e7ef507" + integrity sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg== dependencies: - load-json-file "^1.0.0" - normalize-package-data "^2.3.2" - path-type "^1.0.0" + find-up "^4.1.0" + read-pkg "^5.2.0" + type-fest "^0.8.1" read-pkg@^3.0.0: version "3.0.0" @@ -8120,14 +7475,17 @@ read-pkg@^3.0.0: normalize-package-data "^2.3.2" path-type "^3.0.0" -read@1.0.x: - version "1.0.7" - resolved "https://registry.yarnpkg.com/read/-/read-1.0.7.tgz#b3da19bd052431a97671d44a42634adf710b40c4" - integrity sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ= +read-pkg@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-5.2.0.tgz#7bf295438ca5a33e56cd30e053b34ee7250c93cc" + integrity sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg== dependencies: - mute-stream "~0.0.4" + "@types/normalize-package-data" "^2.4.0" + normalize-package-data "^2.5.0" + parse-json "^5.0.0" + type-fest "^0.6.0" -"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.4, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.5, readable-stream@^2.3.6, readable-stream@~2.3.6: +"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.5, readable-stream@^2.3.6, readable-stream@~2.3.6: version "2.3.6" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" integrity sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw== @@ -8140,29 +7498,6 @@ read@1.0.x: string_decoder "~1.1.1" util-deprecate "~1.0.1" -readable-stream@1.1: - version "1.1.13" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.13.tgz#f6eef764f514c89e2b9e23146a75ba106756d23e" - integrity sha1-9u73ZPUUyJ4rniMUanW6EGdW0j4= - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.1" - isarray "0.0.1" - string_decoder "~0.10.x" - -readable-stream@^2.3.3: - version "2.3.7" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" - integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.3" - isarray "~1.0.0" - process-nextick-args "~2.0.0" - safe-buffer "~5.1.1" - string_decoder "~1.1.1" - util-deprecate "~1.0.1" - readable-stream@^3.0.6, readable-stream@^3.6.0: version "3.6.0" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" @@ -8172,15 +7507,6 @@ readable-stream@^3.0.6, readable-stream@^3.6.0: string_decoder "^1.1.1" util-deprecate "^1.0.1" -readable-stream@^3.1.1: - version "3.4.0" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.4.0.tgz#a51c26754658e0a3c21dbf59163bd45ba6f447fc" - integrity sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ== - dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" - readdirp@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525" @@ -8190,10 +7516,10 @@ readdirp@^2.2.1: micromatch "^3.1.10" readable-stream "^2.0.2" -readdirp@~3.4.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.4.0.tgz#9fdccdf9e9155805449221ac645e8303ab5b9ada" - integrity sha512-0xe001vZBnJEK+uKcj8qOhyAKPzIT+gStxWr3LCB0DwcXR5NZJ3IaC+yGnHCYzB/S7ov3m3EEbZI2zeNvX+hGQ== +readdirp@~3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" + integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== dependencies: picomatch "^2.2.1" @@ -8204,18 +7530,6 @@ realpath-native@^1.1.0: dependencies: util.promisify "^1.0.0" -recompose@^0.30.0: - version "0.30.0" - resolved "https://registry.yarnpkg.com/recompose/-/recompose-0.30.0.tgz#82773641b3927e8c7d24a0d87d65aeeba18aabd0" - integrity sha512-ZTrzzUDa9AqUIhRk4KmVFihH0rapdCSMFXjhHbNrjAWxBuUD/guYlyysMnuHjlZC/KRiOKRtB4jf96yYSkKE8w== - dependencies: - "@babel/runtime" "^7.0.0" - change-emitter "^0.1.2" - fbjs "^0.8.1" - hoist-non-react-statics "^2.3.1" - react-lifecycles-compat "^3.0.2" - symbol-observable "^1.0.4" - redbox-react@^1.3.6: version "1.6.0" resolved "https://registry.yarnpkg.com/redbox-react/-/redbox-react-1.6.0.tgz#e753ac02595bc1bf695b3935889a4f5b1b5a21a1" @@ -8226,13 +7540,13 @@ redbox-react@^1.3.6: prop-types "^15.5.4" sourcemapped-stacktrace "^1.1.6" -redent@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde" - integrity sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94= +redent@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/redent/-/redent-3.0.0.tgz#e557b7998316bb53c9f1f56fa626352c6963059f" + integrity sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg== dependencies: - indent-string "^2.1.0" - strip-indent "^1.0.1" + indent-string "^4.0.0" + strip-indent "^3.0.0" redoc@^2.0.0-rc.40: version "2.0.0-rc.40" @@ -8286,44 +7600,39 @@ redux@^3.7.2: loose-envify "^1.1.0" symbol-observable "^1.0.3" -reftools@^1.1.5, reftools@^1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/reftools/-/reftools-1.1.6.tgz#841b1ac241259632d63167bf708eccfbfbbba5b5" - integrity sha512-rQfJ025lvPjw9qyQuNPqE+cRs5qVs7BMrZwgRJnmuMcX/8r/eJE8f5/RCunJWViXKHmN5K2DFafYzglLOHE/tw== +reftools@^1.1.5, reftools@^1.1.9: + version "1.1.9" + resolved "https://registry.yarnpkg.com/reftools/-/reftools-1.1.9.tgz#e16e19f662ccd4648605312c06d34e5da3a2b77e" + integrity sha512-OVede/NQE13xBQ+ob5CKd5KyeJYU2YInb1bmV4nRoOfquZPkAkxuOXicSe1PvqIuZZ4kD13sPKBbR7UFDmli6w== -regenerate-unicode-properties@^8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.1.0.tgz#ef51e0f0ea4ad424b77bf7cb41f3e015c70a3f0e" - integrity sha512-LGZzkgtLY79GeXLm8Dp0BVLdQlWICzBnJz/ipWUgo59qBaZ+BHtq51P2q1uVZlppMuUAT37SDk39qUbjTWB7bA== +regenerate-unicode-properties@^8.2.0: + version "8.2.0" + resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz#e5de7111d655e7ba60c057dbe9ff37c87e65cdec" + integrity sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA== dependencies: regenerate "^1.4.0" -regenerate@^1.2.1, regenerate@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.0.tgz#4a856ec4b56e4077c557589cae85e7a4c8869a11" - integrity sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg== +regenerate@^1.4.0: + version "1.4.2" + resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" + integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== regenerator-runtime@^0.11.0: version "0.11.1" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg== -regenerator-runtime@^0.13.2: - version "0.13.3" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.3.tgz#7cf6a77d8f5c6f60eb73c5fc1955b2ceb01e6bf5" - integrity sha512-naKIZz2GQ8JWh///G7L3X6LaQUAMp2lvb1rvwwsURe/VXwD6VMfr+/1NuNw3ag8v2kY1aQ/go5SNn79O9JU7yw== - regenerator-runtime@^0.13.4: version "0.13.7" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz#cac2dacc8a1ea675feaabaeb8ae833898ae46f55" integrity sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew== -regenerator-transform@^0.14.0: - version "0.14.1" - resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.14.1.tgz#3b2fce4e1ab7732c08f665dfdb314749c7ddd2fb" - integrity sha512-flVuee02C3FKRISbxhXl9mGzdbWUVHubl1SMaknjxkFB1/iqpJhArQUvRxOOPEc/9tAiX0BaQ28FJH10E4isSQ== +regenerator-transform@^0.14.2: + version "0.14.5" + resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.14.5.tgz#c98da154683671c9c4dcb16ece736517e1b7feb4" + integrity sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw== dependencies: - private "^0.1.6" + "@babel/runtime" "^7.8.4" regex-not@^1.0.0, regex-not@^1.0.2: version "1.0.2" @@ -8333,48 +7642,35 @@ regex-not@^1.0.0, regex-not@^1.0.2: extend-shallow "^3.0.2" safe-regex "^1.1.0" -regexpu-core@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-1.0.0.tgz#86a763f58ee4d7c2f6b102e4764050de7ed90c6b" - integrity sha1-hqdj9Y7k18L2sQLkdkBQ3n7ZDGs= +regexp.prototype.flags@^1.2.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz#7ef352ae8d159e758c0eadca6f8fcb4eef07be26" + integrity sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA== dependencies: - regenerate "^1.2.1" - regjsgen "^0.2.0" - regjsparser "^0.1.4" + call-bind "^1.0.2" + define-properties "^1.1.3" -regexpu-core@^4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.6.0.tgz#2037c18b327cfce8a6fea2a4ec441f2432afb8b6" - integrity sha512-YlVaefl8P5BnFYOITTNzDvan1ulLOiXJzCNZxduTIosN17b87h3bvG9yHMoHaRuo88H4mQ06Aodj5VtYGGGiTg== +regexpu-core@^4.7.1: + version "4.7.1" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.7.1.tgz#2dea5a9a07233298fbf0db91fa9abc4c6e0f8ad6" + integrity sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ== dependencies: regenerate "^1.4.0" - regenerate-unicode-properties "^8.1.0" - regjsgen "^0.5.0" - regjsparser "^0.6.0" + regenerate-unicode-properties "^8.2.0" + regjsgen "^0.5.1" + regjsparser "^0.6.4" unicode-match-property-ecmascript "^1.0.4" - unicode-match-property-value-ecmascript "^1.1.0" - -regjsgen@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.2.0.tgz#6c016adeac554f75823fe37ac05b92d5a4edb1f7" - integrity sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc= + unicode-match-property-value-ecmascript "^1.2.0" -regjsgen@^0.5.0: - version "0.5.1" - resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.1.tgz#48f0bf1a5ea205196929c0d9798b42d1ed98443c" - integrity sha512-5qxzGZjDs9w4tzT3TPhCJqWdCc3RLYwy9J2NB0nm5Lz+S273lvWcpjaTGHsT1dc6Hhfq41uSEOw8wBmxrKOuyg== - -regjsparser@^0.1.4: - version "0.1.5" - resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.1.5.tgz#7ee8f84dc6fa792d3fd0ae228d24bd949ead205c" - integrity sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw= - dependencies: - jsesc "~0.5.0" +regjsgen@^0.5.1: + version "0.5.2" + resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.2.tgz#92ff295fb1deecbf6ecdab2543d207e91aa33733" + integrity sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A== -regjsparser@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.0.tgz#f1e6ae8b7da2bae96c99399b868cd6c933a2ba9c" - integrity sha512-RQ7YyokLiQBomUJuUG8iGVvkgOLxwyZM8k6d3q5SAXpg4r5TZJZigKFvC6PpD+qQ98bCDC5YelPeA3EucDoNeQ== +regjsparser@^0.6.4: + version "0.6.9" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.9.tgz#b489eef7c9a2ce43727627011429cf833a7183e6" + integrity sha512-ZqbNRz1SNjLAiYuwY0zoXW8Ne675IX5q+YHioAGbCw4X96Mjl2+dcX9B2ciaeyYjViDAfvIjFpQjJgLttTEERQ== dependencies: jsesc "~0.5.0" @@ -8388,47 +7684,40 @@ remove-trailing-separator@^1.0.1: resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8= -renderkid@^2.0.1: - version "2.0.3" - resolved "https://registry.yarnpkg.com/renderkid/-/renderkid-2.0.3.tgz#380179c2ff5ae1365c522bf2fcfcff01c5b74149" - integrity sha512-z8CLQp7EZBPCwCnncgf9C4XAi3WR0dv+uWu/PjIyhhAb5d6IJ/QZqlHFprHeKT+59//V6BNUsLbvN8+2LarxGA== +renderkid@^2.0.4: + version "2.0.7" + resolved "https://registry.yarnpkg.com/renderkid/-/renderkid-2.0.7.tgz#464f276a6bdcee606f4a15993f9b29fc74ca8609" + integrity sha512-oCcFyxaMrKsKcTY59qnCAtmDVSLfPbrv6A3tVbPdFMMrv5jaK10V6m40cKsoPNhAqN6rmHW9sswW4o3ruSrwUQ== dependencies: - css-select "^1.1.0" - dom-converter "^0.2" - htmlparser2 "^3.3.0" - strip-ansi "^3.0.0" - utila "^0.4.0" + css-select "^4.1.3" + dom-converter "^0.2.0" + htmlparser2 "^6.1.0" + lodash "^4.17.21" + strip-ansi "^3.0.1" repeat-element@^1.1.2: - version "1.1.3" - resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" - integrity sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g== + version "1.1.4" + resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.4.tgz#be681520847ab58c7568ac75fbfad28ed42d39e9" + integrity sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ== repeat-string@^1.6.1: version "1.6.1" resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= -repeating@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" - integrity sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo= - dependencies: - is-finite "^1.0.0" - -request-promise-core@1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.3.tgz#e9a3c081b51380dfea677336061fea879a829ee9" - integrity sha512-QIs2+ArIGQVp5ZYbWD5ZLCY29D5CfWizP8eWnm8FoGD1TX61veauETVQbrV60662V0oFBkrDOuaBI8XgtuyYAQ== +request-promise-core@1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.4.tgz#3eedd4223208d419867b78ce815167d10593a22f" + integrity sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw== dependencies: - lodash "^4.17.15" + lodash "^4.17.19" request-promise-native@^1.0.5: - version "1.0.8" - resolved "https://registry.yarnpkg.com/request-promise-native/-/request-promise-native-1.0.8.tgz#a455b960b826e44e2bf8999af64dff2bfe58cb36" - integrity sha512-dapwLGqkHtwL5AEbfenuzjTYg35Jd6KPytsC2/TLkVMz8rm+tNt72MGUWT1RP/aYawMpN6HqbNGBQaRcBtjQMQ== + version "1.0.9" + resolved "https://registry.yarnpkg.com/request-promise-native/-/request-promise-native-1.0.9.tgz#e407120526a5efdc9a39b28a5679bf47b9d9dc28" + integrity sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g== dependencies: - request-promise-core "1.1.3" + request-promise-core "1.1.4" stealthy-require "^1.1.1" tough-cookie "^2.3.3" @@ -8458,6 +7747,32 @@ request@^2.87.0, request@^2.88.0: tunnel-agent "^0.6.0" uuid "^3.3.2" +request@^2.88.2: + version "2.88.2" + resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" + integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== + dependencies: + aws-sign2 "~0.7.0" + aws4 "^1.8.0" + caseless "~0.12.0" + combined-stream "~1.0.6" + extend "~3.0.2" + forever-agent "~0.6.1" + form-data "~2.3.2" + har-validator "~5.1.3" + http-signature "~1.2.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.19" + oauth-sign "~0.9.0" + performance-now "^2.1.0" + qs "~6.5.2" + safe-buffer "^5.1.2" + tough-cookie "~2.5.0" + tunnel-agent "^0.6.0" + uuid "^3.3.2" + require-directory@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" @@ -8478,11 +7793,6 @@ requires-port@^1.0.0: resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8= -reserved-words@^0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/reserved-words/-/reserved-words-0.1.2.tgz#00a0940f98cd501aeaaac316411d9adc52b31ab1" - integrity sha1-AKCUD5jNUBrqqsMWQR2a3FKzGrE= - resolve-cwd@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a" @@ -8503,10 +7813,10 @@ resolve-from@^3.0.0: resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" integrity sha1-six699nWiBvItuZTM17rywoYh0g= -resolve-pathname@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/resolve-pathname/-/resolve-pathname-2.2.0.tgz#7e9ae21ed815fd63ab189adeee64dc831eefa879" - integrity sha512-bAFz9ld18RzJfddgrO2e/0S2O81710++chRMUxHjXOYKF6jTAMrUNZrEZ1PvV0zlhfjidm08iRPdTLPno1FuRg== +resolve-pathname@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/resolve-pathname/-/resolve-pathname-3.0.0.tgz#99d02224d3cf263689becbb393bc560313025dcd" + integrity sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng== resolve-url@^0.2.1: version "0.2.1" @@ -8518,20 +7828,21 @@ resolve@1.1.7: resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" integrity sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs= -resolve@1.x, resolve@^1.10.0: - version "1.12.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.12.0.tgz#3fc644a35c84a48554609ff26ec52b66fa577df6" - integrity sha512-B/dOmuoAik5bKcD6s6nXDCjzUKnaDvdkRyAk6rsmsKLipWj4797iothd7jmmUhWTfinVMU+wc56rYKsit2Qy4w== - dependencies: - path-parse "^1.0.6" - -resolve@^1.1.6, resolve@^1.3.2: +resolve@1.x, resolve@^1.10.0, resolve@^1.3.2: version "1.11.1" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.11.1.tgz#ea10d8110376982fef578df8fc30b9ac30a07a3e" integrity sha512-vIpgF6wfuJOZI7KKKSP+HmiKggadPQAdsp5HiC1mvqnfp0gF1vdwgBWZIdrVft9pgqoMFQN+R7BSWZiBxx+BBw== dependencies: path-parse "^1.0.6" +resolve@^1.20.0: + version "1.20.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975" + integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A== + dependencies: + is-core-module "^2.2.0" + path-parse "^1.0.6" + ret@~0.1.10: version "0.1.15" resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" @@ -8547,25 +7858,13 @@ reusify@^1.0.4: resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== -revalidator@0.1.x: - version "0.1.8" - resolved "https://registry.yarnpkg.com/revalidator/-/revalidator-0.1.8.tgz#fece61bfa0c1b52a206bd6b18198184bdd523a3b" - integrity sha1-/s5hv6DBtSoga9axgZgYS91SOjs= - -rimraf@2, rimraf@2.x.x, rimraf@^2.5.4, rimraf@^2.6.3: +rimraf@^2.5.4, rimraf@^2.6.3: version "2.6.3" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== dependencies: glob "^7.1.3" -rimraf@^2.6.1: - version "2.7.1" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" - integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== - dependencies: - glob "^7.1.3" - rimraf@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" @@ -8587,9 +7886,11 @@ rsvp@^4.8.4: integrity sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA== run-parallel@^1.1.9: - version "1.1.9" - resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.1.9.tgz#c9dd3a7cf9f4b2c4b6244e173a6ed866e61dd679" - integrity sha512-DEqnSRTDw/Tc3FXf49zedI638Z9onwUotBMiUFKmrO2sdFKIbXamXGQ3Axd4qgphxKB4kw/qP1w5kTxnfU1B9Q== + version "1.2.0" + resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" + integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== + dependencies: + queue-microtask "^1.2.2" run-queue@^1.0.0, run-queue@^1.0.3: version "1.0.3" @@ -8610,7 +7911,7 @@ safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== -safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@~5.2.0: +safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0: version "5.2.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== @@ -8724,31 +8025,33 @@ select-hose@^2.0.0: integrity sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo= selfsigned@^1.10.7: - version "1.10.8" - resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-1.10.8.tgz#0d17208b7d12c33f8eac85c41835f27fc3d81a30" - integrity sha512-2P4PtieJeEwVgTU9QEcwIRDQ/mXJLX8/+I3ur+Pg16nS8oNbrGxEso9NyYWy8NAmXiNl4dlAp5MwoNeCWzON4w== + version "1.10.11" + resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-1.10.11.tgz#24929cd906fe0f44b6d01fb23999a739537acbe9" + integrity sha512-aVmbPOfViZqOZPgRBT0+3u4yZFHpmnIghLMlAcb5/xhp5ZtB/RVnKhz5vl2M32CLXAqR4kha9zfhNg0Lf/sxKA== dependencies: node-forge "^0.10.0" -"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.5: - version "5.7.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" - integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== - -semver@^5.4.1, semver@^5.5.0, semver@^5.6.0: +"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.4.1, semver@^5.5, semver@^5.5.0, semver@^5.6.0: version "5.7.0" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.0.tgz#790a7cf6fea5459bac96110b29b60412dc8ff96b" integrity sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA== +semver@7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" + integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== + semver@^6.0.0, semver@^6.2.0, semver@^6.3.0: version "6.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== -semver@~5.3.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" - integrity sha1-myzl094C0XxgEq0yaqa00M9U+U8= +semver@^7.3.2, semver@^7.3.4: + version "7.3.5" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" + integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== + dependencies: + lru-cache "^6.0.0" send@0.17.1: version "0.17.1" @@ -8821,7 +8124,7 @@ set-value@^2.0.0, set-value@^2.0.1: is-plain-object "^2.0.3" split-string "^3.0.1" -setimmediate@^1.0.4, setimmediate@^1.0.5: +setimmediate@^1.0.4: version "1.0.5" resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= @@ -8853,11 +8156,6 @@ shallow-clone@^1.0.0: kind-of "^5.0.0" mixin-object "^2.0.1" -shallow-equal@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/shallow-equal/-/shallow-equal-1.2.0.tgz#fd828d2029ff4e19569db7e19e535e94e2d1f5cc" - integrity sha512-Z21pVxR4cXsfwpMKMhCEIO1PCi5sp7KEp+CmOpBQ+E8GpHwKOw2sEzk7sgblM3d/j4z4gakoWEoPcjK0VJQogA== - shallowequal@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/shallowequal/-/shallowequal-1.1.0.tgz#188d521de95b9087404fd4dcb68b13df0ae4e7f8" @@ -8870,11 +8168,23 @@ shebang-command@^1.2.0: dependencies: shebang-regex "^1.0.0" +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + shebang-regex@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + shellwords@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b" @@ -8924,6 +8234,15 @@ should@^13.2.1: should-type-adaptors "^1.0.1" should-util "^1.0.0" +side-channel@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" + integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== + dependencies: + call-bind "^1.0.0" + get-intrinsic "^1.0.2" + object-inspect "^1.9.0" + signal-exit@^3.0.0, signal-exit@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" @@ -8936,10 +8255,10 @@ simple-swizzle@^0.2.2: dependencies: is-arrayish "^0.3.1" -sisteransi@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.2.tgz#ec57d64b6f25c4f26c0e2c7dd23f2d7f12f7e418" - integrity sha512-ZcYcZcT69nSLAR2oLN2JwNmLkJEKGooFMCdvOkFrToUt/WfcRWqhIg4P4KwY4dmLbuyXIx4o4YmPsvMRJYJd/w== +sisteransi@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" + integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== slash@^2.0.0: version "2.0.0" @@ -8952,9 +8271,9 @@ slash@^3.0.0: integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== slugify@^1.4.4: - version "1.4.5" - resolved "https://registry.yarnpkg.com/slugify/-/slugify-1.4.5.tgz#a7517acf5f4c02a4df41e735354b660a4ed1efcf" - integrity sha512-WpECLAgYaxHoEAJ8Q1Lo8HOs1ngn7LN7QjXgOLbmmfkcWvosyk4ZTXkTzKyhngK640USTZUlgoQJfED1kz5fnQ== + version "1.5.3" + resolved "https://registry.yarnpkg.com/slugify/-/slugify-1.5.3.tgz#36e009864f5476bfd5db681222643d92339c890d" + integrity sha512-/HkjRdwPY3yHJReXu38NiusZw2+LLE2SrhkWJtmlPDB1fqFSvioYj62NkPcrKiNCgRLeGcGK7QBvr1iQwybeXw== snapdragon-node@^2.0.1: version "2.1.1" @@ -9021,40 +8340,17 @@ source-map-loader@^0.2.3: loader-utils "^1.1.0" source-map-resolve@^0.5.0: - version "0.5.2" - resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.2.tgz#72e2cc34095543e43b2c62b2c4c10d4a9054f259" - integrity sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA== + version "0.5.3" + resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" + integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw== dependencies: - atob "^2.1.1" + atob "^2.1.2" decode-uri-component "^0.2.0" resolve-url "^0.2.1" source-map-url "^0.4.0" urix "^0.1.0" -source-map-support@^0.4.0: - version "0.4.18" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.18.tgz#0286a6de8be42641338594e97ccea75f0a2c585f" - integrity sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA== - dependencies: - source-map "^0.5.6" - -source-map-support@^0.5.0: - version "0.5.16" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.16.tgz#0ae069e7fe3ba7538c64c98515e35339eac5a042" - integrity sha512-efyLRJDr68D9hBBNIPWFjhpFzURh+KJykQwvMyW5UiZzYwoF6l4YMMDIJJEyFWxWCqfyxLzz6tSfUFR+kXXsVQ== - dependencies: - buffer-from "^1.0.0" - source-map "^0.6.0" - -source-map-support@^0.5.6: - version "0.5.12" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.12.tgz#b4f3b10d51857a5af0138d3ce8003b201613d599" - integrity sha512-4h2Pbvyy15EE02G+JOZpUCmqWJuqrs+sEkzewTm++BPi7Hvn/HwcqLAcNxYAyI0x13CpPPn+kMjl+hplXMHITQ== - dependencies: - buffer-from "^1.0.0" - source-map "^0.6.0" - -source-map-support@~0.5.12: +source-map-support@^0.5.0, source-map-support@^0.5.6, source-map-support@~0.5.12: version "0.5.19" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw== @@ -9063,9 +8359,9 @@ source-map-support@~0.5.12: source-map "^0.6.0" source-map-url@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" - integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM= + version "0.4.1" + resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.1.tgz#0af66605a745a5a2f91cf1bbf8a7afbc283dec56" + integrity sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw== source-map@0.5.6: version "0.5.6" @@ -9089,38 +8385,43 @@ source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1: resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== +source-map@^0.7.3: + version "0.7.3" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" + integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== + sourcemapped-stacktrace@^1.1.6: - version "1.1.9" - resolved "https://registry.yarnpkg.com/sourcemapped-stacktrace/-/sourcemapped-stacktrace-1.1.9.tgz#c744a99936b33b6891409f4d45c3d2b28ecded4a" - integrity sha512-N6SLOT+9OQZdoSpu1PkSjyrxx/B2SGom9LuxjbwZFNNz7+FpMEUpwb3JV+UpaxWvoGM/8k7guuOJxcB6BWEU9Q== + version "1.1.11" + resolved "https://registry.yarnpkg.com/sourcemapped-stacktrace/-/sourcemapped-stacktrace-1.1.11.tgz#e2dede7fc148599c52a4f883276e527f8452657d" + integrity sha512-O0pcWjJqzQFVsisPlPXuNawJHHg9N9UgpJ/aDmvi9+vnS3x1C0NhwkVFzzZ1VN0Xo+bekyweoqYvBw5ZBKiNnQ== dependencies: source-map "0.5.6" spdx-correct@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.0.tgz#fb83e504445268f154b074e218c87c003cd31df4" - integrity sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q== + version "3.1.1" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" + integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== dependencies: spdx-expression-parse "^3.0.0" spdx-license-ids "^3.0.0" spdx-exceptions@^2.1.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz#2ea450aee74f2a89bfb94519c07fcd6f41322977" - integrity sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA== + version "2.3.0" + resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" + integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== spdx-expression-parse@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz#99e119b7a5da00e05491c9fa338b7904823b41d0" - integrity sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg== + version "3.0.1" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" + integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== dependencies: spdx-exceptions "^2.1.0" spdx-license-ids "^3.0.0" spdx-license-ids@^3.0.0: - version "3.0.5" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz#3694b5804567a458d3c8045842a6358632f62654" - integrity sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q== + version "3.0.9" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.9.tgz#8a595135def9592bda69709474f1cbeea7c2467f" + integrity sha512-Ki212dKK4ogX+xDo4CtOZBVIwhsKBEfsEEcwmJfLQzirgc2jIWdzg40Unxz/HzEUqM1WFzVlQSMF9kZZ2HboLQ== spdy-transport@^3.0.0: version "3.0.0" @@ -9145,6 +8446,11 @@ spdy@^4.0.2: select-hose "^2.0.0" spdy-transport "^3.0.0" +split-on-first@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/split-on-first/-/split-on-first-1.1.0.tgz#f610afeee3b12bce1d0c30425e76398b78249a5f" + integrity sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw== + split-string@^3.0.1, split-string@^3.0.2: version "3.1.0" resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" @@ -9179,22 +8485,19 @@ ssri@^6.0.1: dependencies: figgy-pudding "^3.5.1" -ssri@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/ssri/-/ssri-8.0.0.tgz#79ca74e21f8ceaeddfcb4b90143c458b8d988808" - integrity sha512-aq/pz989nxVYwn16Tsbj1TqFpD5LLrQxHf5zaHuieFV+R0Bbr4y8qUsOA45hXT/N4/9UNXTarBjnjVmjSOVaAA== +ssri@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/ssri/-/ssri-8.0.1.tgz#638e4e439e2ffbd2cd289776d5ca457c4f51a2af" + integrity sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ== dependencies: minipass "^3.1.1" -stack-trace@0.0.x: - version "0.0.10" - resolved "https://registry.yarnpkg.com/stack-trace/-/stack-trace-0.0.10.tgz#547c70b347e8d32b4e108ea1a2a159e5fdde19c0" - integrity sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA= - stack-utils@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-1.0.2.tgz#33eba3897788558bebfc2db059dc158ec36cebb8" - integrity sha512-MTX+MeG5U994cazkjd/9KNAapsHnibjMLnfXodlkXw76JEea0UiNzrqidzo1emMwk7w5Qhc9jd4Bn9TBb1MFwA== + version "1.0.5" + resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-1.0.5.tgz#a19b0b01947e0029c8e451d5d61a498f5bb1471b" + integrity sha512-KZiTzuV3CnSnSvgMRrARVCj+Ht7rMbauGDK0LdVFRGyenwdylpajAp4Q0i6SX8rEmbTpMMf6ryq2gb8pPq2WgQ== + dependencies: + escape-string-regexp "^2.0.0" stackframe@^0.3.1: version "0.3.1" @@ -9266,9 +8569,14 @@ stream-http@^2.7.2: xtend "^4.0.0" stream-shift@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.0.tgz#d5c752825e5367e786f78e18e445ea223a155952" - integrity sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI= + version "1.0.1" + resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d" + integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ== + +strict-uri-encode@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz#b9c7330c7042862f6b142dc274bbcc5866ce3546" + integrity sha1-ucczDHBChi9rFC3CdLvMWGbONUY= string-hash@^1.1.1: version "1.1.3" @@ -9310,34 +8618,31 @@ string-width@^3.0.0, string-width@^3.1.0: strip-ansi "^5.1.0" string-width@^4.1.0, string-width@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.0.tgz#952182c46cc7b2c313d1596e623992bd163b72b5" - integrity sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg== + version "4.2.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.2.tgz#dafd4f9559a7585cfba529c6a0a4f73488ebd4c5" + integrity sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA== dependencies: emoji-regex "^8.0.0" is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.0" -string_decoder@^1.0.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" - integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== +string.prototype.trimend@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz#e75ae90c2942c63504686c18b287b4a0b1a45f80" + integrity sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A== dependencies: - safe-buffer "~5.2.0" + call-bind "^1.0.2" + define-properties "^1.1.3" -string_decoder@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.2.0.tgz#fe86e738b19544afe70469243b2a1ee9240eae8d" - integrity sha512-6YqyX6ZWEYguAxgZzHGL7SsCeGx3V2TtOTqZz1xSTSWnqsbWwbptafNyvf/ACquZUXV3DANr5BDIwNYe1mN42w== +string.prototype.trimstart@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz#b36399af4ab2999b4c9c648bd7a3fb2bb26feeed" + integrity sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw== dependencies: - safe-buffer "~5.1.0" + call-bind "^1.0.2" + define-properties "^1.1.3" -string_decoder@~0.10.x: - version "0.10.31" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" - integrity sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ= - -string_decoder@~1.1.1: +string_decoder@^1.0.0, string_decoder@^1.1.1, string_decoder@~1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== @@ -9372,18 +8677,6 @@ strip-ansi@^6.0.0: dependencies: ansi-regex "^5.0.0" -strip-ansi@~0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-0.1.1.tgz#39e8a98d044d150660abe4a6808acf70bb7bc991" - integrity sha1-OeipjQRNFQZgq+SmgIrPcLt7yZE= - -strip-bom@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" - integrity sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4= - dependencies: - is-utf8 "^0.2.0" - strip-bom@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" @@ -9394,23 +8687,18 @@ strip-eof@^1.0.0: resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= -strip-indent@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2" - integrity sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI= +strip-indent@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-3.0.0.tgz#c32e1cee940b6b3432c771bc2c54bcce73cd3001" + integrity sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ== dependencies: - get-stdin "^4.0.1" + min-indent "^1.0.0" -strip-json-comments@^2.0.0, strip-json-comments@~2.0.1: +strip-json-comments@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= -strip-json-comments@~1.0.2: - version "1.0.4" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-1.0.4.tgz#1e15fbcac97d3ee99bf2d73b4c656b082bbafb91" - integrity sha1-HhX7ysl9Pumb8tc7TGVrCCu6+5E= - stubs@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/stubs/-/stubs-3.0.0.tgz#e8d2ba1fa9c90570303c030b6900f7d5f89abe5b" @@ -9476,6 +8764,13 @@ supports-color@^6.1.0: dependencies: has-flag "^3.0.0" +supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + swagger2openapi@^6.2.1: version "6.2.3" resolved "https://registry.yarnpkg.com/swagger2openapi/-/swagger2openapi-6.2.3.tgz#4a8059f89d851aee4c9ab178f9b7190debd904e2" @@ -9493,7 +8788,7 @@ swagger2openapi@^6.2.1: yaml "^1.8.3" yargs "^15.3.1" -symbol-observable@^1.0.3, symbol-observable@^1.0.4: +symbol-observable@^1.0.3: version "1.2.0" resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804" integrity sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ== @@ -9508,32 +8803,10 @@ tapable@^1.0.0, tapable@^1.1.3: resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== -tar@^2.0.0: - version "2.2.2" - resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.2.tgz#0ca8848562c7299b8b446ff6a4d60cdbb23edc40" - integrity sha512-FCEhQ/4rE1zYv9rYXJw/msRqsnmlje5jHP6huWeBZ704jUTy02c5AZyWujpMR1ax6mVw9NyJMfuK2CMDWVIfgA== - dependencies: - block-stream "*" - fstream "^1.0.12" - inherits "2" - -tar@^4: - version "4.4.13" - resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.13.tgz#43b364bc52888d555298637b10d60790254ab525" - integrity sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA== - dependencies: - chownr "^1.1.1" - fs-minipass "^1.2.5" - minipass "^2.8.6" - minizlib "^1.2.1" - mkdirp "^0.5.0" - safe-buffer "^5.1.2" - yallist "^3.0.3" - tar@^6.0.2: - version "6.0.5" - resolved "https://registry.yarnpkg.com/tar/-/tar-6.0.5.tgz#bde815086e10b39f1dcd298e89d596e1535e200f" - integrity sha512-0b4HOimQHj9nXNEAA7zWwMM91Zhhba3pspja6sQbgTpynOJf+bkjBnfybNYzbpLbnwXnbyB4LOREvlyXLkCHSg== + version "6.1.0" + resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.0.tgz#d1724e9bcc04b977b18d5c573b333a2207229a83" + integrity sha512-DUCttfhsnLCjwoDoFcI+B2iJgYa93vBnDUATYEeRx6sntCTdN01VnqsIuTlALXla/LWooNg0yEGeB+Y8WdFxGA== dependencies: chownr "^2.0.0" fs-minipass "^2.0.0" @@ -9606,16 +8879,16 @@ thunky@^1.0.2: integrity sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA== timers-browserify@^2.0.4: - version "2.0.11" - resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.11.tgz#800b1f3eee272e5bc53ee465a04d0e804c31211f" - integrity sha512-60aV6sgJ5YEbzUdn9c8kYGIqOubPoUdqQCul3SBAsRCZ40s6Y5cMcrW4dt3/k/EsbLVJNl9n6Vz3fTc+k2GeKQ== + version "2.0.12" + resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.12.tgz#44a45c11fbf407f34f97bccd1577c652361b00ee" + integrity sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ== dependencies: setimmediate "^1.0.4" tiny-invariant@^1.0.2: - version "1.0.6" - resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.0.6.tgz#b3f9b38835e36a41c843a3b0907a5a7b3755de73" - integrity sha512-FOyLWWVjG+aC0UqG76V53yAWdXfH8bO6FNmyZOuUrzDzK8DI3/JRY25UD7+g49JWM1LXwymsKERB+DzI0dTEQA== + version "1.1.0" + resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.1.0.tgz#634c5f8efdc27714b7f386c35e6760991d230875" + integrity sha512-ytxQvrb1cPc9WBEI/HSeYYoGD0kWnGEOR8RY6KomWLBVhqz0RgTwVO9dLrGz7dC+nN9llyI7OKAgRq8Vq4ZBSw== tiny-warning@^1.0.0: version "1.0.3" @@ -9623,9 +8896,9 @@ tiny-warning@^1.0.0: integrity sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA== tippy.js@^4.3.4: - version "4.3.4" - resolved "https://registry.yarnpkg.com/tippy.js/-/tippy.js-4.3.4.tgz#9a91fd5ce8c401f181b7adaa6b2c27f3d105f3ba" - integrity sha512-O2ukxHOJTLVYZ/TfHjNd8WgAWoefX9uk5QiWRdHfX2PR2lBpUU4BJQLl7U2Ykc8K7o16gTeHEElpuRfgD5b0aA== + version "4.3.5" + resolved "https://registry.yarnpkg.com/tippy.js/-/tippy.js-4.3.5.tgz#882bff8d92f09bb0546d2826d5668c0560006f54" + integrity sha512-NDq3efte8nGK6BOJ1dDN1/WelAwfmh3UtIYXXck6+SxLzbIQNZE/cmRSnwScZ/FyiKdIcvFHvYUgqmoGx8CcyA== dependencies: popper.js "^1.14.7" @@ -9639,11 +8912,6 @@ to-arraybuffer@^1.0.0: resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" integrity sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M= -to-double-quotes@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/to-double-quotes/-/to-double-quotes-2.0.0.tgz#aaf231d6fa948949f819301bbab4484d8588e4a7" - integrity sha1-qvIx1vqUiUn4GTAburRITYWI5Kc= - to-fast-properties@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" @@ -9681,11 +8949,6 @@ to-regex@^3.0.1, to-regex@^3.0.2: regex-not "^1.0.2" safe-regex "^1.1.0" -to-single-quotes@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/to-single-quotes/-/to-single-quotes-2.0.1.tgz#7cc29151f0f5f2c41946f119f5932fe554170125" - integrity sha1-fMKRUfD18sQZRvEZ9ZMv5VQXASU= - toidentifier@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" @@ -9696,7 +8959,7 @@ toposort@^1.0.0: resolved "https://registry.yarnpkg.com/toposort/-/toposort-1.0.7.tgz#2e68442d9f64ec720b8cc89e6443ac6caa950029" integrity sha1-LmhELZ9k7HILjMieZEOsbKqVACk= -tough-cookie@^2.3.3, tough-cookie@^2.3.4: +tough-cookie@^2.3.3, tough-cookie@^2.3.4, tough-cookie@~2.5.0: version "2.5.0" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== @@ -9719,15 +8982,10 @@ tr46@^1.0.1: dependencies: punycode "^2.1.0" -trim-newlines@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613" - integrity sha1-WIeWa7WCpFA6QetST301ARgVphM= - -trim-right@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" - integrity sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM= +trim-newlines@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-3.0.1.tgz#260a5d962d8b752425b32f3a7db0dcacd176c144" + integrity sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw== "true-case-path@^1.0.2": version "1.0.3" @@ -9789,20 +9047,20 @@ tsconfig@^7.0.0: strip-bom "^3.0.0" strip-json-comments "^2.0.0" -tslib@^1.7.1, tslib@^1.8.0, tslib@^1.8.1: +tslib@^1.13.0: + version "1.14.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" + integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== + +tslib@^1.7.1, tslib@^1.8.1, tslib@^1.9.0: version "1.10.0" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.10.0.tgz#c3c19f95973fb0a62973fb09d90d961ee43e5c8a" integrity sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ== -tslib@^1.9.0: - version "1.13.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.13.0.tgz#c881e13cc7015894ed914862d276436fa9a47043" - integrity sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q== - tslib@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.0.3.tgz#8e0741ac45fc0c226e58a17bfc3e64b9bc6ca61c" - integrity sha512-uZtkfKblCEQtZKBF6EBXVZeQNl82yqtDQdv+eck8u7tdPxjLu2/lp5/uPW+um2tpuxINHWy3GhiccY7QgEaVHQ== + version "2.3.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.0.tgz#803b8cdab3e12ba581a4ca41c8839bbb0dacb09e" + integrity sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg== tslint-config-prettier@^1.18.0: version "1.18.0" @@ -9825,23 +9083,23 @@ tslint-react@^3.4.0: dependencies: tsutils "^2.13.1" -tslint@^5.16.0: - version "5.18.0" - resolved "https://registry.yarnpkg.com/tslint/-/tslint-5.18.0.tgz#f61a6ddcf372344ac5e41708095bbf043a147ac6" - integrity sha512-Q3kXkuDEijQ37nXZZLKErssQVnwCV/+23gFEMROi8IlbaBG6tXqLPQJ5Wjcyt/yHPKBC+hD5SzuGaMora+ZS6w== +tslint@^6.1.3: + version "6.1.3" + resolved "https://registry.yarnpkg.com/tslint/-/tslint-6.1.3.tgz#5c23b2eccc32487d5523bd3a470e9aa31789d904" + integrity sha512-IbR4nkT96EQOvKE2PW/djGz8iGNeJ4rF2mBfiYaR/nvUWYKJhLwimoJKgjIFEIDibBtOevj7BqCRL4oHeWWUCg== dependencies: "@babel/code-frame" "^7.0.0" builtin-modules "^1.1.1" chalk "^2.3.0" commander "^2.12.1" - diff "^3.2.0" + diff "^4.0.1" glob "^7.1.1" js-yaml "^3.13.1" minimatch "^3.0.4" - mkdirp "^0.5.1" + mkdirp "^0.5.3" resolve "^1.3.2" semver "^5.3.0" - tslib "^1.8.0" + tslib "^1.13.0" tsutils "^2.29.0" tsutils@^2.13.1, tsutils@^2.29.0: @@ -9875,6 +9133,21 @@ type-check@~0.3.2: dependencies: prelude-ls "~1.1.2" +type-fest@^0.18.0: + version "0.18.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.18.1.tgz#db4bc151a4a2cf4eebf9add5db75508db6cc841f" + integrity sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw== + +type-fest@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b" + integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg== + +type-fest@^0.8.1: + version "0.8.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" + integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== + type-is@~1.6.17, type-is@~1.6.18: version "1.6.18" resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" @@ -9893,11 +9166,6 @@ typescript@^4.0.3: resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.0.3.tgz#153bbd468ef07725c1df9c77e8b453f8d36abba5" integrity sha512-tEu6DGxGgRJPb/mVPIZ48e69xCn2yRmCgYmDugAVwmJ6o+0u1RI18eO7E7WBTLYLaEVVOhwQmcdhQHweux/WPg== -ua-parser-js@^0.7.18: - version "0.7.28" - resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.28.tgz#8ba04e653f35ce210239c64661685bf9121dec31" - integrity sha512-6Gurc1n//gjp9eQNXjD9O3M/sMwVtN5S8Lv9bvOYBfKfDNiIIhqiyi01vMBO45u4zkDE420w/e0se7Vs+sIg+g== - uglify-js@3.4.x: version "3.4.10" resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.4.10.tgz#9ad9563d8eb3acdfb8d38597d2af1d815f6a755f" @@ -9906,15 +9174,15 @@ uglify-js@3.4.x: commander "~2.19.0" source-map "~0.6.1" -uglify-js@^3.1.4: - version "3.13.5" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.13.5.tgz#5d71d6dbba64cf441f32929b1efce7365bb4f113" - integrity sha512-xtB8yEqIkn7zmOyS2zUNBsYCBRhDkvlNxMMY2smuJ/qA8NCHeQvKCF3i9Z4k8FJH4+PJvZRtMrPynfZ75+CSZw== - -underscore@~1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.6.0.tgz#8b38b10cacdef63337b8b24e4ff86d45aea529a8" - integrity sha1-izixDKze9jM3uLJOT/htRa6lKag= +unbox-primitive@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.1.tgz#085e215625ec3162574dc8859abee78a59b14471" + integrity sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw== + dependencies: + function-bind "^1.1.1" + has-bigints "^1.0.1" + has-symbols "^1.0.2" + which-boxed-primitive "^1.0.2" unicode-canonical-property-names-ecmascript@^1.0.4: version "1.0.4" @@ -9929,15 +9197,15 @@ unicode-match-property-ecmascript@^1.0.4: unicode-canonical-property-names-ecmascript "^1.0.4" unicode-property-aliases-ecmascript "^1.0.4" -unicode-match-property-value-ecmascript@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.1.0.tgz#5b4b426e08d13a80365e0d657ac7a6c1ec46a277" - integrity sha512-hDTHvaBk3RmFzvSl0UVrUmC3PuW9wKVnpoUDYH0JDkSIovzw+J5viQmeYHxVSBptubnr7PbH2e0fnpDRQnQl5g== +unicode-match-property-value-ecmascript@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz#0d91f600eeeb3096aa962b1d6fc88876e64ea531" + integrity sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ== unicode-property-aliases-ecmascript@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.5.tgz#a9cc6cc7ce63a0a3023fc99e341b94431d405a57" - integrity sha512-L5RAqCfXqAwR3RriF8pM0lU0w4Ryf/GgzONwi6KnL1taJQa7x1TCxdJnILX59WIGOwR57IVxn7Nej0fz1Ny6fw== + version "1.1.0" + resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz#dd57a99f6207bedff4628abefb94c50db941c8f4" + integrity sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg== unidiff@^1.0.2: version "1.0.2" @@ -9984,9 +9252,9 @@ unset-value@^1.0.0: isobject "^3.0.0" upath@^1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/upath/-/upath-1.1.2.tgz#3db658600edaeeccbe6db5e684d67ee8c2acd068" - integrity sha512-kXpym8nmDmlCBr7nKdIx8P2jNBa+pBpIUFRnKJ4dr8htyYGJFokkr2ZvERRtUN+9SY+JqXouNgUPtv6JQva/2Q== + version "1.2.0" + resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" + integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== upper-case@^1.1.1: version "1.1.3" @@ -10063,33 +9331,16 @@ util@^0.11.0: dependencies: inherits "2.0.3" -utila@^0.4.0, utila@~0.4: +utila@~0.4: version "0.4.0" resolved "https://registry.yarnpkg.com/utila/-/utila-0.4.0.tgz#8a16a05d445657a3aea5eecc5b12a4fa5379772c" integrity sha1-ihagXURWV6Oupe7MWxKk+lN5dyw= -utile@0.2.x: - version "0.2.1" - resolved "https://registry.yarnpkg.com/utile/-/utile-0.2.1.tgz#930c88e99098d6220834c356cbd9a770522d90d7" - integrity sha1-kwyI6ZCY1iIINMNWy9mncFItkNc= - dependencies: - async "~0.2.9" - deep-equal "*" - i "0.3.x" - mkdirp "0.x.x" - ncp "0.4.x" - rimraf "2.x.x" - utils-merge@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= -uuid@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-2.0.3.tgz#67e2e863797215530dff318e5bf9dcebfd47b21a" - integrity sha1-Z+LoY3lyFVMN/zGOW/nc6/1Hsho= - uuid@^3.3.2: version "3.3.3" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.3.tgz#4568f0216e78760ee1dbf3a4d2cf53e224112866" @@ -10101,14 +9352,14 @@ uuid@^3.4.0: integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== v8-compile-cache@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz#54bc3cdd43317bca91e35dcaf305b1a7237de745" - integrity sha512-8OQ9CL+VWyt3JStj7HX7/ciTL2V3Rl1Wf5OL+SNTm0yK1KvtReVulksyeRnCANHHuUxHlQig+JJDlUhBt1NQDQ== + version "2.3.0" + resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" + integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== v8flags@^3.0.0: - version "3.1.3" - resolved "https://registry.yarnpkg.com/v8flags/-/v8flags-3.1.3.tgz#fc9dc23521ca20c5433f81cc4eb9b3033bb105d8" - integrity sha512-amh9CCg3ZxkzQ48Mhcb8iX7xpAfYJgePHxWMQCBWECpOSqJUXgY26ncA61UTV0BkPqfhcy6mzwCIoP4ygxpW8w== + version "3.2.0" + resolved "https://registry.yarnpkg.com/v8flags/-/v8flags-3.2.0.tgz#b243e3b4dfd731fa774e7492128109a0fe66d656" + integrity sha512-mH8etigqMfiGWdeXpaaqGfs6BndypxusHHcv2qSHyZkGEznCd/qAXCWWRzeowtL54147cktFOC4P5y+kl8d8Jg== dependencies: homedir-polyfill "^1.0.1" @@ -10120,10 +9371,10 @@ validate-npm-package-license@^3.0.1: spdx-correct "^3.0.0" spdx-expression-parse "^3.0.0" -value-equal@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/value-equal/-/value-equal-0.4.0.tgz#c5bdd2f54ee093c04839d71ce2e4758a6890abc7" - integrity sha512-x+cYdNnaA3CxvMaTX0INdTCN8m8aF2uY9BvEqmxuYp8bL09cs/kWVQPVGcA35fMktdOsP69IgU7wFj/61dJHEw== +value-equal@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/value-equal/-/value-equal-1.0.1.tgz#1e0b794c734c5c0cade179c437d356d931a34d6c" + integrity sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw== vary@~1.1.2: version "1.1.2" @@ -10144,34 +9395,12 @@ vm-browserify@^1.0.1: resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0" integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ== -vow-fs@~0.3.4: - version "0.3.6" - resolved "https://registry.yarnpkg.com/vow-fs/-/vow-fs-0.3.6.tgz#2d4c59be22e2bf2618ddf597ab4baa923be7200d" - integrity sha1-LUxZviLivyYY3fWXq0uqkjvnIA0= - dependencies: - glob "^7.0.5" - uuid "^2.0.2" - vow "^0.4.7" - vow-queue "^0.4.1" - -vow-queue@^0.4.1: - version "0.4.3" - resolved "https://registry.yarnpkg.com/vow-queue/-/vow-queue-0.4.3.tgz#4ba8f64b56e9212c0dbe57f1405aeebd54cce78d" - integrity sha512-/poAKDTFL3zYbeQg7cl4BGcfP4sGgXKrHnRFSKj97dteUFu8oyXMwIcdwu8NSx/RmPGIuYx1Bik/y5vU4H/VKw== - dependencies: - vow "^0.4.17" - -vow@^0.4.17, vow@^0.4.7, vow@~0.4.8: - version "0.4.20" - resolved "https://registry.yarnpkg.com/vow/-/vow-0.4.20.tgz#77ca6ef0828e0043a93e55dc37030226519ce711" - integrity sha512-YYoSYXUYABqY08D/WrjcWJxJSErcILRRTQpcPyUc0SFfgIPKSUFzVt7u1HC3TXGJZM/qhsSjCLNQstxqf7asgQ== - w3c-hr-time@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.1.tgz#82ac2bff63d950ea9e3189a58a65625fedf19045" - integrity sha1-gqwr/2PZUOqeMYmlimViX+3xkEU= + version "1.0.2" + resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd" + integrity sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ== dependencies: - browser-process-hrtime "^0.1.2" + browser-process-hrtime "^1.0.0" walker@^1.0.7, walker@~1.0.5: version "1.0.7" @@ -10180,30 +9409,30 @@ walker@^1.0.7, walker@~1.0.5: dependencies: makeerror "1.0.x" -warning@^4.0.1, warning@^4.0.2: +warning@^4.0.1: version "4.0.3" resolved "https://registry.yarnpkg.com/warning/-/warning-4.0.3.tgz#16e9e077eb8a86d6af7d64aa1e05fd85b4678ca3" integrity sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w== dependencies: loose-envify "^1.0.0" -watchpack-chokidar2@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/watchpack-chokidar2/-/watchpack-chokidar2-2.0.0.tgz#9948a1866cbbd6cb824dea13a7ed691f6c8ddff0" - integrity sha512-9TyfOyN/zLUbA288wZ8IsMZ+6cbzvsNyEzSBp6e/zkifi6xxbl8SmQ/CxQq32k8NNqrdVEVUVSEf56L4rQ/ZxA== +watchpack-chokidar2@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz#38500072ee6ece66f3769936950ea1771be1c957" + integrity sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww== dependencies: chokidar "^2.1.8" watchpack@^1.7.4: - version "1.7.4" - resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.7.4.tgz#6e9da53b3c80bb2d6508188f5b200410866cd30b" - integrity sha512-aWAgTW4MoSJzZPAicljkO1hsi1oKj/RRq/OJQh2PKI2UKL04c2Bs+MBOB+BBABHTXJpf9mCwHN7ANCvYsvY2sg== + version "1.7.5" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.7.5.tgz#1267e6c55e0b9b5be44c2023aed5437a2c26c453" + integrity sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ== dependencies: graceful-fs "^4.1.2" neo-async "^2.5.0" optionalDependencies: chokidar "^3.4.1" - watchpack-chokidar2 "^2.0.0" + watchpack-chokidar2 "^2.0.1" wbuf@^1.1.0, wbuf@^1.7.3: version "1.7.3" @@ -10235,9 +9464,9 @@ webpack-cli@^3.3.12: yargs "^13.3.2" webpack-dev-middleware@^3.7.2: - version "3.7.2" - resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-3.7.2.tgz#0019c3db716e3fa5cecbf64f2ab88a74bab331f3" - integrity sha512-1xC42LxbYoqLNAhV6YzTYacicgMZQTqRd27Sim9wn5hJrX3I5nxYy1SxSd4+gjUFsz1dQFj+yEe6zEVmSkeJjw== + version "3.7.3" + resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-3.7.3.tgz#0639372b143262e2b84ab95d3b91a7597061c2c5" + integrity sha512-djelc/zGiz9nZj/U7PTBi2ViorGJXEWo/3ltkPbDyxCXhhEXkW0ce99falaok4TPj+AsxLiXJR0EBOb0zh9fKQ== dependencies: memory-fs "^0.4.1" mime "^2.4.4" @@ -10329,22 +9558,13 @@ webpack@^4.44.2: watchpack "^1.7.4" webpack-sources "^1.4.1" -websocket-driver@0.6.5: +websocket-driver@0.6.5, websocket-driver@>=0.5.1: version "0.6.5" resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.6.5.tgz#5cb2556ceb85f4373c6d8238aa691c8454e13a36" integrity sha1-XLJVbOuF9Dc8bYI4qmkchFThOjY= dependencies: websocket-extensions ">=0.1.1" -websocket-driver@>=0.5.1: - version "0.7.4" - resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.4.tgz#89ad5295bbf64b480abcba31e4953aca706f5760" - integrity sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg== - dependencies: - http-parser-js ">=0.5.1" - safe-buffer ">=5.1.0" - websocket-extensions ">=0.1.1" - websocket-extensions@>=0.1.1: version "0.1.4" resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.4.tgz#7f8473bc839dfd87608adb95d7eb075211578a42" @@ -10357,11 +9577,6 @@ whatwg-encoding@^1.0.1, whatwg-encoding@^1.0.3: dependencies: iconv-lite "0.4.24" -whatwg-fetch@>=0.10.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.0.0.tgz#fc804e458cc460009b1a2b966bc8817d2578aefb" - integrity sha512-9GSJUgz1D4MfyKU7KRqwOjXCXTqWdFNvEr7eUBYchQiVc744mqK/MzXPNR2WsPkmkOa4ywfg8C2n8h+13Bey1Q== - whatwg-mimetype@^2.1.0, whatwg-mimetype@^2.2.0: version "2.3.0" resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" @@ -10385,18 +9600,36 @@ whatwg-url@^7.0.0: tr46 "^1.0.1" webidl-conversions "^4.0.2" +which-boxed-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" + integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== + dependencies: + is-bigint "^1.0.1" + is-boolean-object "^1.1.0" + is-number-object "^1.0.4" + is-string "^1.0.5" + is-symbol "^1.0.3" + which-module@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= -which@1, which@^1.2.14, which@^1.2.9, which@^1.3.0, which@^1.3.1: +which@^1.2.14, which@^1.2.9, which@^1.3.0, which@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== dependencies: isexe "^2.0.0" +which@^2.0.1, which@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + wide-align@^1.1.0: version "1.1.3" resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" @@ -10404,29 +9637,11 @@ wide-align@^1.1.0: dependencies: string-width "^1.0.2 || 2" -winston@0.8.x: - version "0.8.3" - resolved "https://registry.yarnpkg.com/winston/-/winston-0.8.3.tgz#64b6abf4cd01adcaefd5009393b1d8e8bec19db0" - integrity sha1-ZLar9M0Brcrv1QCTk7HY6L7BnbA= - dependencies: - async "0.2.x" - colors "0.6.x" - cycle "1.0.x" - eyes "0.1.x" - isstream "0.1.x" - pkginfo "0.3.x" - stack-trace "0.0.x" - word-wrap@~1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== -wordwrap@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" - integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus= - worker-farm@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.7.0.tgz#26a94c5391bbca926152002f69b84a4bf772e5a8" @@ -10452,6 +9667,15 @@ wrap-ansi@^6.2.0: string-width "^4.1.0" strip-ansi "^6.0.0" +wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" @@ -10474,9 +9698,9 @@ ws@^5.2.0: async-limiter "~1.0.0" ws@^6.2.1: - version "6.2.1" - resolved "https://registry.yarnpkg.com/ws/-/ws-6.2.1.tgz#442fdf0a47ed64f59b6a5d8ff130f4748ed524fb" - integrity sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA== + version "6.2.2" + resolved "https://registry.yarnpkg.com/ws/-/ws-6.2.2.tgz#dd5cdbd57a9979916097652d78f1cc5faea0c32e" + integrity sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw== dependencies: async-limiter "~1.0.0" @@ -10490,13 +9714,6 @@ xml@^1.0.1: resolved "https://registry.yarnpkg.com/xml/-/xml-1.0.1.tgz#78ba72020029c5bc87b8a81a3cfcd74b4a2fc1e5" integrity sha1-eLpyAgApxbyHuKgaPPzXS0ovweU= -xmlbuilder@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-3.1.0.tgz#2c86888f2d4eade850fa38ca7f7223f7209516e1" - integrity sha1-LIaIjy1OrehQ+jjKf3Ij9yCVFuE= - dependencies: - lodash "^3.5.0" - xtend@^4.0.0, xtend@~4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" @@ -10512,12 +9729,12 @@ y18n@^4.0.0: resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.1.tgz#8db2b83c31c5d75099bb890b23f3094891e247d4" integrity sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ== -yallist@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" - integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= +y18n@^5.0.5: + version "5.0.8" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" + integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== -yallist@^3.0.0, yallist@^3.0.2, yallist@^3.0.3: +yallist@^3.0.2: version "3.1.1" resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== @@ -10528,9 +9745,9 @@ yallist@^4.0.0: integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== yaml@^1.10.0, yaml@^1.8.3: - version "1.10.0" - resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.0.tgz#3b593add944876077d4d683fee01081bd9fff31e" - integrity sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg== + version "1.10.2" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" + integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== yargs-parser@10.x: version "10.1.0" @@ -10539,14 +9756,6 @@ yargs-parser@10.x: dependencies: camelcase "^4.1.0" -yargs-parser@^13.1.1: - version "13.1.1" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.1.tgz#d26058532aa06d365fe091f6a1fc06b2f7e5eca0" - integrity sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ== - dependencies: - camelcase "^5.0.0" - decamelize "^1.2.0" - yargs-parser@^13.1.2: version "13.1.2" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38" @@ -10563,23 +9772,12 @@ yargs-parser@^18.1.2: camelcase "^5.0.0" decamelize "^1.2.0" -yargs@^13.3.0: - version "13.3.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.0.tgz#4c657a55e07e5f2cf947f8a366567c04a0dedc83" - integrity sha512-2eehun/8ALW8TLoIl7MVaRUrg+yCnenu8B4kBlRxj3GJGDKU1Og7sMXPNm1BYyM1DOJmTZ4YeN/Nwxv+8XJsUA== - dependencies: - cliui "^5.0.0" - find-up "^3.0.0" - get-caller-file "^2.0.1" - require-directory "^2.1.1" - require-main-filename "^2.0.0" - set-blocking "^2.0.0" - string-width "^3.0.0" - which-module "^2.0.0" - y18n "^4.0.0" - yargs-parser "^13.1.1" +yargs-parser@^20.2.2, yargs-parser@^20.2.3: + version "20.2.9" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" + integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== -yargs@^13.3.2: +yargs@^13.3.0, yargs@^13.3.2: version "13.3.2" resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd" integrity sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw== @@ -10612,6 +9810,19 @@ yargs@^15.3.1: y18n "^4.0.0" yargs-parser "^18.1.2" +yargs@^17.0.1: + version "17.0.1" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.0.1.tgz#6a1ced4ed5ee0b388010ba9fd67af83b9362e0bb" + integrity sha512-xBBulfCc8Y6gLFcrPvtqKz9hz8SO0l1Ni8GgDekvBX2ro0HRQImDGnikfc33cgzcYUSncapnNcZDjVFIH3f6KQ== + dependencies: + cliui "^7.0.2" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.0" + y18n "^5.0.5" + yargs-parser "^20.2.2" + yarn@^1.22.10: version "1.22.10" resolved "https://registry.yarnpkg.com/yarn/-/yarn-1.22.10.tgz#c99daa06257c80f8fa2c3f1490724e394c26b18c" @@ -10629,3 +9840,8 @@ yn@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/yn/-/yn-2.0.0.tgz#e5adabc8acf408f6385fc76495684c88e6af689a" integrity sha1-5a2ryKz0CPY4X8dklWhMiOavaJo= + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== diff --git a/util/argo/argo.go b/util/argo/argo.go index 6e4b5a23235cd..4caecfdc44546 100644 --- a/util/argo/argo.go +++ b/util/argo/argo.go @@ -289,9 +289,15 @@ func enrichSpec(spec *argoappv1.ApplicationSpec, appDetails *apiclient.RepoAppDe } } -// ValidateDestination checks: -// if we used destination name we infer the server url -// if we used both name and server then we return an invalid spec error +// ValidateDestination sets the 'Server' value of the ApplicationDestination, if it is not set. +// NOTE: this function WILL write to the object pointed to by the 'dest' parameter. +// +// If an ApplicationDestination has a Name field, but has an empty Server (URL) field, +// ValidationDestination will look up the cluster by name (to get the server URL), and +// set the corresponding Server field value. +// +// It also checks: +// - If we used both name and server then we return an invalid spec error func ValidateDestination(ctx context.Context, dest *argoappv1.ApplicationDestination, db db.ArgoDB) error { if dest.Name != "" { if dest.Server == "" { @@ -580,7 +586,7 @@ func GetGlobalProjects(proj *argoappv1.AppProject, projLister applicationsv1.App } } if !matchMe { - break + continue } //If proj is a match for this global project setting, then it is its global project globalProj, err := projLister.AppProjects(proj.Namespace).Get(gp.ProjectName) diff --git a/util/argo/argo_test.go b/util/argo/argo_test.go index beea8c489805a..09af834fa0105 100644 --- a/util/argo/argo_test.go +++ b/util/argo/argo_test.go @@ -758,3 +758,89 @@ func TestFilterByName(t *testing.T) { assert.Len(t, res, 0) }) } + +func TestGetGlobalProjects(t *testing.T) { + t.Run("Multiple global projects", func(t *testing.T) { + namespace := "default" + + cm := corev1.ConfigMap{ + ObjectMeta: metav1.ObjectMeta{ + Name: "argocd-cm", + Namespace: test.FakeArgoCDNamespace, + Labels: map[string]string{ + "app.kubernetes.io/part-of": "argocd", + }, + }, + Data: map[string]string{ + "globalProjects": ` + - projectName: default-x + labelSelector: + matchExpressions: + - key: is-x + operator: Exists + - projectName: default-non-x + labelSelector: + matchExpressions: + - key: is-x + operator: DoesNotExist +`, + }, + } + + defaultX := &argoappv1.AppProject{ + ObjectMeta: metav1.ObjectMeta{Name: "default-x", Namespace: namespace}, + Spec: argoappv1.AppProjectSpec{ + ClusterResourceWhitelist: []metav1.GroupKind{ + {Group: "*", Kind: "*"}, + }, + ClusterResourceBlacklist: []metav1.GroupKind{ + {Kind: "Volume"}, + }, + }, + } + + defaultNonX := &argoappv1.AppProject{ + ObjectMeta: metav1.ObjectMeta{Name: "default-non-x", Namespace: namespace}, + Spec: argoappv1.AppProjectSpec{ + ClusterResourceBlacklist: []metav1.GroupKind{ + {Group: "*", Kind: "*"}, + }, + }, + } + + isX := &argoappv1.AppProject{ + ObjectMeta: metav1.ObjectMeta{ + Name: "is-x", + Namespace: namespace, + Labels: map[string]string{ + "is-x": "yep", + }, + }, + } + + isNoX := &argoappv1.AppProject{ + ObjectMeta: metav1.ObjectMeta{Name: "is-no-x", Namespace: namespace}, + } + + projClientset := appclientset.NewSimpleClientset(defaultX, defaultNonX, isX, isNoX) + ctx, cancel := context.WithCancel(context.Background()) + defer cancel() + indexers := cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc} + informer := v1alpha1.NewAppProjectInformer(projClientset, namespace, 0, indexers) + go informer.Run(ctx.Done()) + cache.WaitForCacheSync(ctx.Done(), informer.HasSynced) + + kubeClient := fake.NewSimpleClientset(&cm) + settingsMgr := settings.NewSettingsManager(context.Background(), kubeClient, test.FakeArgoCDNamespace) + + projLister := applisters.NewAppProjectLister(informer.GetIndexer()) + + xGlobalProjects := GetGlobalProjects(isX, projLister, settingsMgr) + assert.Len(t, xGlobalProjects, 1) + assert.Equal(t, xGlobalProjects[0].Name, "default-x") + + nonXGlobalProjects := GetGlobalProjects(isNoX, projLister, settingsMgr) + assert.Len(t, nonXGlobalProjects, 1) + assert.Equal(t, nonXGlobalProjects[0].Name, "default-non-x") + }) +} diff --git a/util/cache/cache.go b/util/cache/cache.go index 510d6fbe79a4e..fa24ca7bfef05 100644 --- a/util/cache/cache.go +++ b/util/cache/cache.go @@ -7,10 +7,14 @@ import ( "os" "time" + "crypto/tls" + "crypto/x509" + "github.com/go-redis/redis/v8" "github.com/spf13/cobra" "github.com/argoproj/argo-cd/v2/common" + certutil "github.com/argoproj/argo-cd/v2/util/cert" "github.com/argoproj/argo-cd/v2/util/env" ) @@ -33,6 +37,11 @@ func AddCacheFlagsToCmd(cmd *cobra.Command, opts ...func(client *redis.Client)) sentinelAddresses := make([]string, 0) sentinelMaster := "" redisDB := 0 + redisCACerticate := "" + redisClientCertificate := "" + redisClientKey := "" + redisUseTLS := false + insecureRedis := false var defaultCacheExpiration time.Duration cmd.Flags().StringVar(&redisAddress, "redis", env.StringFromEnv("REDIS_SERVER", ""), "Redis server hostname and port (e.g. argocd-redis:6379). ") @@ -40,7 +49,38 @@ func AddCacheFlagsToCmd(cmd *cobra.Command, opts ...func(client *redis.Client)) cmd.Flags().StringArrayVar(&sentinelAddresses, "sentinel", []string{}, "Redis sentinel hostname and port (e.g. argocd-redis-ha-announce-0:6379). ") cmd.Flags().StringVar(&sentinelMaster, "sentinelmaster", "master", "Redis sentinel master group name.") cmd.Flags().DurationVar(&defaultCacheExpiration, "default-cache-expiration", env.ParseDurationFromEnv("ARGOCD_DEFAULT_CACHE_EXPIRATION", 24*time.Hour, 0, math.MaxInt32), "Cache expiration default") + cmd.Flags().BoolVar(&redisUseTLS, "redis-use-tls", false, "Use TLS when connecting to Redis. ") + cmd.Flags().StringVar(&redisClientCertificate, "redis-client-certificate", "", "Path to Redis client certificate (e.g. /etc/certs/redis/client.crt).") + cmd.Flags().StringVar(&redisClientKey, "redis-client-key", "", "Path to Redis client key (e.g. /etc/certs/redis/client.crt).") + cmd.Flags().BoolVar(&insecureRedis, "redis-insecure-skip-tls-verify", false, "Skip Redis server certificate validation.") + cmd.Flags().StringVar(&redisCACerticate, "redis-ca-certificate", "", "Path to Redis server CA certificate (e.g. /etc/certs/redis/ca.crt). If not specified, system trusted CAs will be used for server certificate validation.") return func() (*Cache, error) { + var tlsConfig *tls.Config = nil + if redisUseTLS { + tlsConfig = &tls.Config{} + if redisClientCertificate != "" { + clientCert, err := tls.LoadX509KeyPair(redisClientCertificate, redisClientKey) + if err != nil { + return nil, err + } + tlsConfig.Certificates = []tls.Certificate{clientCert} + } + if insecureRedis { + tlsConfig.InsecureSkipVerify = true + } else if redisCACerticate != "" { + redisCA, err := certutil.ParseTLSCertificatesFromPath(redisCACerticate) + if err != nil { + return nil, err + } + tlsConfig.RootCAs = certutil.GetCertPoolFromPEMData(redisCA) + } else { + var err error + tlsConfig.RootCAs, err = x509.SystemCertPool() + if err != nil { + return nil, err + } + } + } password := os.Getenv(envRedisPassword) maxRetries := env.ParseNumFromEnv(envRedisRetryCount, defaultRedisRetryCount, 0, math.MaxInt32) if len(sentinelAddresses) > 0 { @@ -50,21 +90,23 @@ func AddCacheFlagsToCmd(cmd *cobra.Command, opts ...func(client *redis.Client)) DB: redisDB, Password: password, MaxRetries: maxRetries, + TLSConfig: tlsConfig, }) for i := range opts { opts[i](client) } return NewCache(NewRedisCache(client, defaultCacheExpiration)), nil } - if redisAddress == "" { redisAddress = common.DefaultRedisAddr } + client := redis.NewClient(&redis.Options{ Addr: redisAddress, Password: password, DB: redisDB, MaxRetries: maxRetries, + TLSConfig: tlsConfig, }) for i := range opts { opts[i](client) diff --git a/util/cli/cli.go b/util/cli/cli.go index eb4b0cf5df5f4..c37b5269f0659 100644 --- a/util/cli/cli.go +++ b/util/cli/cli.go @@ -14,6 +14,7 @@ import ( "strconv" "strings" + "github.com/argoproj/gitops-engine/pkg/utils/text" "github.com/google/shlex" log "github.com/sirupsen/logrus" "github.com/spf13/cobra" @@ -147,7 +148,7 @@ func SetLogFormat(logFormat string) { switch strings.ToLower(logFormat) { case utillog.JsonFormat: os.Setenv(common.EnvLogFormat, utillog.JsonFormat) - case utillog.TextFormat: + case utillog.TextFormat, "": os.Setenv(common.EnvLogFormat, utillog.TextFormat) default: log.Fatalf("Unknown log format '%s'", logFormat) @@ -158,9 +159,10 @@ func SetLogFormat(logFormat string) { // SetLogLevel parses and sets a logrus log level func SetLogLevel(logLevel string) { - level, err := log.ParseLevel(logLevel) + level, err := log.ParseLevel(text.FirstNonEmpty(logLevel, log.InfoLevel.String())) errors.CheckError(err) os.Setenv(common.EnvLogLevel, level.String()) + log.SetLevel(level) } // SetGLogLevel set the glog level for the k8s go-client diff --git a/util/db/OWNERS b/util/db/OWNERS new file mode 100644 index 0000000000000..03538861101ae --- /dev/null +++ b/util/db/OWNERS @@ -0,0 +1,2 @@ +owners: +- alexmt diff --git a/util/db/cluster.go b/util/db/cluster.go index 684e6b7378f80..41cf740410c0e 100644 --- a/util/db/cluster.go +++ b/util/db/cluster.go @@ -261,6 +261,9 @@ func clusterToSecret(c *appv1.Cluster, secret *apiv1.Secret) error { if c.Shard != nil { data["shard"] = []byte(strconv.Itoa(int(*c.Shard))) } + if c.ClusterResources { + data["clusterResources"] = []byte("true") + } secret.Data = data if secret.Annotations == nil { @@ -312,6 +315,7 @@ func secretToCluster(s *apiv1.Secret) (*appv1.Cluster, error) { Server: strings.TrimRight(string(s.Data["server"]), "/"), Name: string(s.Data["name"]), Namespaces: namespaces, + ClusterResources: string(s.Data["clusterResources"]) == "true", Config: config, RefreshRequestedAt: refreshRequestedAt, Shard: shard, diff --git a/util/git/OWNERS b/util/git/OWNERS new file mode 100644 index 0000000000000..4fb7a97c281fe --- /dev/null +++ b/util/git/OWNERS @@ -0,0 +1,3 @@ +owners: +- alexmt +- jannfis diff --git a/util/git/git_test.go b/util/git/git_test.go index 1af0baf592bb0..e340fbbe45b4d 100644 --- a/util/git/git_test.go +++ b/util/git/git_test.go @@ -336,7 +336,7 @@ func TestNewFactory(t *testing.T) { name string args args }{ - {"Github", args{url: "https://github.com/argoproj/argocd-example-apps"}}, + {"GitHub", args{url: "https://github.com/argoproj/argocd-example-apps"}}, {"Azure", args{url: "https://jsuen0437@dev.azure.com/jsuen0437/jsuen/_git/jsuen"}}, } for _, tt := range tests { diff --git a/util/gpg/OWNERS b/util/gpg/OWNERS new file mode 100644 index 0000000000000..c33fbff67fb73 --- /dev/null +++ b/util/gpg/OWNERS @@ -0,0 +1,2 @@ +owners: +- jannfis diff --git a/util/helm/OWNERS b/util/helm/OWNERS new file mode 100644 index 0000000000000..4fb7a97c281fe --- /dev/null +++ b/util/helm/OWNERS @@ -0,0 +1,3 @@ +owners: +- alexmt +- jannfis diff --git a/util/helm/client_test.go b/util/helm/client_test.go index 75a089548c765..849edd239ec2f 100644 --- a/util/helm/client_test.go +++ b/util/helm/client_test.go @@ -73,6 +73,16 @@ func Test_nativeHelmChart_ExtractChart(t *testing.T) { assert.True(t, info.IsDir()) } +func Test_nativeHelmChart_ExtractChart_insecure(t *testing.T) { + client := NewClient("https://argoproj.github.io/argo-helm", Creds{InsecureSkipVerify: true}, false, "") + path, closer, err := client.ExtractChart("argo-cd", "0.7.1") + assert.NoError(t, err) + defer io.Close(closer) + info, err := os.Stat(path) + assert.NoError(t, err) + assert.True(t, info.IsDir()) +} + func Test_normalizeChartName(t *testing.T) { t.Run("Test non-slashed name", func(t *testing.T) { n := normalizeChartName("mychart") diff --git a/util/helm/cmd.go b/util/helm/cmd.go index 57029a5916484..fb467e7d041b0 100644 --- a/util/helm/cmd.go +++ b/util/helm/cmd.go @@ -224,6 +224,9 @@ func (c *Cmd) Fetch(repo, chartName, version, destination string, creds Creds) ( if creds.Password != "" { args = append(args, "--password", creds.Password) } + if creds.InsecureSkipVerify && c.insecureSkipVerifySupported { + args = append(args, "--insecure-skip-tls-verify") + } args = append(args, "--repo", repo, chartName) diff --git a/util/jwt/jwt.go b/util/jwt/jwt.go index 995b014ecd72f..677b11016a948 100644 --- a/util/jwt/jwt.go +++ b/util/jwt/jwt.go @@ -12,6 +12,9 @@ import ( // MapClaims converts a jwt.Claims to a MapClaims func MapClaims(claims jwtgo.Claims) (jwtgo.MapClaims, error) { + if mapClaims, ok := claims.(*jwtgo.MapClaims); ok { + return *mapClaims, nil + } claimsBytes, err := json.Marshal(claims) if err != nil { return nil, err diff --git a/util/kube/portforwarder.go b/util/kube/portforwarder.go index 3148b6a5d6da2..c661cb6f850a7 100644 --- a/util/kube/portforwarder.go +++ b/util/kube/portforwarder.go @@ -4,12 +4,12 @@ import ( "bytes" "context" "fmt" - "log" "net" "net/http" "os" "github.com/pkg/errors" + corev1 "k8s.io/api/core/v1" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/client-go/kubernetes" "k8s.io/client-go/tools/clientcmd" @@ -19,7 +19,7 @@ import ( "github.com/argoproj/argo-cd/v2/util/io" ) -func PortForward(podSelector string, targetPort int, namespace string, overrides *clientcmd.ConfigOverrides) (int, error) { +func PortForward(targetPort int, namespace string, overrides *clientcmd.ConfigOverrides, podSelectors ...string) (int, error) { loadingRules := clientcmd.NewDefaultClientConfigLoadingRules() loadingRules.DefaultClientConfig = &clientcmd.DefaultClientConfig clientConfig := clientcmd.NewInteractiveDeferredLoadingClientConfig(loadingRules, overrides, os.Stdin) @@ -40,21 +40,30 @@ func PortForward(podSelector string, targetPort int, namespace string, overrides return -1, err } - pods, err := clientSet.CoreV1().Pods(namespace).List(context.Background(), v1.ListOptions{ - LabelSelector: podSelector, - }) - if err != nil { - return -1, err + var pod *corev1.Pod + + for _, podSelector := range podSelectors { + pods, err := clientSet.CoreV1().Pods(namespace).List(context.Background(), v1.ListOptions{ + LabelSelector: podSelector, + }) + if err != nil { + return -1, err + } + + if len(pods.Items) > 0 { + pod = &pods.Items[0] + break + } } - if len(pods.Items) == 0 { - return -1, fmt.Errorf("cannot find %s pod", podSelector) + if pod == nil { + return -1, fmt.Errorf("cannot find pod with selector: %v", podSelectors) } url := clientSet.CoreV1().RESTClient().Post(). Resource("pods"). - Namespace(pods.Items[0].Namespace). - Name(pods.Items[0].Name). + Namespace(pod.Namespace). + Name(pod.Name). SubResource("portforward").URL() transport, upgrader, err := spdy.RoundTripperFor(config) @@ -64,6 +73,7 @@ func PortForward(podSelector string, targetPort int, namespace string, overrides dialer := spdy.NewDialer(upgrader, &http.Client{Transport: transport}, "POST", url) readyChan := make(chan struct{}, 1) + failedChan := make(chan error, 1) out := new(bytes.Buffer) errOut := new(bytes.Buffer) @@ -82,10 +92,13 @@ func PortForward(podSelector string, targetPort int, namespace string, overrides go func() { err = forwarder.ForwardPorts() if err != nil { - log.Fatal(err) + failedChan <- err } }() - for range readyChan { + select { + case err = <-failedChan: + return -1, err + case <-readyChan: } if len(errOut.String()) != 0 { return -1, fmt.Errorf(errOut.String()) diff --git a/util/localconfig/localconfig.go b/util/localconfig/localconfig.go index 7bb10286b1088..6738e6d98377a 100644 --- a/util/localconfig/localconfig.go +++ b/util/localconfig/localconfig.go @@ -53,6 +53,8 @@ type Server struct { ClientCertificateKeyData string `json:"client-certificate-key-data,omitempty"` // PlainText indicates to connect with TLS disabled PlainText bool `json:"plain-text,omitempty"` + // Core indicates to talk to Kubernetes API without using Argo CD API server + Core bool `json:"core,omitempty"` } // User contains user authentication information diff --git a/util/lua/lua.go b/util/lua/lua.go index 7b51c9acee7ad..34d1caf0ca56a 100644 --- a/util/lua/lua.go +++ b/util/lua/lua.go @@ -68,7 +68,7 @@ func (vm VM) runLua(obj *unstructured.Unstructured, script string) (*lua.LState, {lua.LoadLibName, lua.OpenPackage}, {lua.BaseLibName, lua.OpenBase}, {lua.TabLibName, lua.OpenTable}, - // load our 'safe' version of the os library + // load our 'safe' version of the OS library {lua.OsLibName, OpenSafeOs}, } { if err := l.CallByParam(lua.P{ @@ -79,7 +79,7 @@ func (vm VM) runLua(obj *unstructured.Unstructured, script string) (*lua.LState, panic(err) } } - // preload our 'safe' version of the os library. Allows the 'local os = require("os")' to work + // preload our 'safe' version of the OS library. Allows the 'local os = require("os")' to work l.PreloadModule(lua.OsLibName, SafeOsLoader) ctx, cancel := context.WithTimeout(context.Background(), 1*time.Second) diff --git a/util/lua/oslib_safe.go b/util/lua/oslib_safe.go index e871ecc0c15a2..bbe659dbe303b 100644 --- a/util/lua/oslib_safe.go +++ b/util/lua/oslib_safe.go @@ -1,7 +1,7 @@ package lua -// oslib_safe contains a subset of the lua os library. For security reasons, we do not expose -// the entirety of lua os library to custom actions, such as ones which can exit, read files, etc. +// oslib_safe contains a subset of the lua OS library. For security reasons, we do not expose +// the entirety of lua OS library to custom actions, such as ones which can exit, read files, etc. // Only the safe functions like os.time(), os.date() are exposed. Implementation was copied from // github.com/yuin/gopher-lua. diff --git a/util/oidc/oidc.go b/util/oidc/oidc.go index 610abac6e6d52..50b42dd1b6333 100644 --- a/util/oidc/oidc.go +++ b/util/oidc/oidc.go @@ -197,7 +197,7 @@ func isValidRedirectURL(redirectURL string, allowedURLs []string) bool { if r.Path == "" { r.Path = "/" } - // Prevent CLRF in the redirectURL + // Prevent CRLF in the redirectURL if strings.ContainsAny(r.Path, "\r\n") { return false } diff --git a/util/rbac/rbac.go b/util/rbac/rbac.go index 5efcccb4a70c3..0828543c8cdb6 100644 --- a/util/rbac/rbac.go +++ b/util/rbac/rbac.go @@ -150,6 +150,14 @@ func (e *Enforcer) EnforceErr(rvals ...interface{}) error { // user-defined policy. This allows any explicit denies of the built-in, and user-defined policies // to override the run-time policy. Runs normal enforcement if run-time policy is empty. func (e *Enforcer) EnforceRuntimePolicy(policy string, rvals ...interface{}) bool { + enf := e.CreateEnforcerWithRuntimePolicy(policy) + return e.EnforceWithCustomEnforcer(enf, rvals...) +} + +// CreateEnforcerWithRuntimePolicy creates an enforcer with a policy defined at run-time which augments the built-in and +// user-defined policy. This allows any explicit denies of the built-in, and user-defined policies +// to override the run-time policy. Runs normal enforcement if run-time policy is empty. +func (e *Enforcer) CreateEnforcerWithRuntimePolicy(policy string) *casbin.Enforcer { var enf *casbin.Enforcer var err error if policy == "" { @@ -161,6 +169,11 @@ func (e *Enforcer) EnforceRuntimePolicy(policy string, rvals ...interface{}) boo enf = e.Enforcer } } + return enf +} + +// EnforceWithCustomEnforcer wraps enforce with an custom enforcer +func (e *Enforcer) EnforceWithCustomEnforcer(enf *casbin.Enforcer, rvals ...interface{}) bool { return enforce(enf, e.defaultRole, e.claimsEnforcerFunc, rvals...) } diff --git a/util/settings/settings.go b/util/settings/settings.go index f5d2e97261015..f95ff6321e95f 100644 --- a/util/settings/settings.go +++ b/util/settings/settings.go @@ -23,6 +23,7 @@ import ( apierrors "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/fields" + "k8s.io/apimachinery/pkg/labels" v1 "k8s.io/client-go/informers/core/v1" "k8s.io/client-go/kubernetes" v1listers "k8s.io/client-go/listers/core/v1" @@ -305,6 +306,8 @@ const ( initialPasswordLength = 16 // externalServerTLSSecretName defines the name of the external secret holding the server's TLS certificate externalServerTLSSecretName = "argocd-server-tls" + // partOfArgoCDSelector holds label selector that should be applied to config maps and secrets used to manage Argo CD + partOfArgoCDSelector = "app.kubernetes.io/part-of=argocd" ) // SettingsManager holds config info for a new manager with which to access Kubernetes ConfigMaps. @@ -386,7 +389,7 @@ func (mgr *SettingsManager) updateSecret(callback func(*apiv1.Secret) error) err return err } - if !createSecret && reflect.DeepEqual(argoCDSecret, updatedSecret) { + if !createSecret && reflect.DeepEqual(argoCDSecret.Data, updatedSecret.Data) { return nil } @@ -419,10 +422,14 @@ func (mgr *SettingsManager) updateConfigMap(callback func(*apiv1.ConfigMap) erro if argoCDCM.Data == nil { argoCDCM.Data = make(map[string]string) } + beforeUpdate := argoCDCM.DeepCopy() err = callback(argoCDCM) if err != nil { return err } + if reflect.DeepEqual(beforeUpdate.Data, argoCDCM.Data) { + return nil + } if createCM { _, err = mgr.clientset.CoreV1().ConfigMaps(mgr.namespace).Create(context.Background(), argoCDCM, metav1.CreateOptions{}) @@ -895,10 +902,18 @@ func (mgr *SettingsManager) GetSettings() (*ArgoCDSettings, error) { if err != nil { return nil, err } + selector, err := labels.Parse(partOfArgoCDSelector) + if err != nil { + return nil, err + } + secrets, err := mgr.secrets.Secrets(mgr.namespace).List(selector) + if err != nil { + return nil, err + } var settings ArgoCDSettings var errs []error updateSettingsFromConfigMap(&settings, argoCDCM) - if err := mgr.updateSettingsFromSecret(&settings, argoCDSecret); err != nil { + if err := mgr.updateSettingsFromSecret(&settings, argoCDSecret, secrets); err != nil { errs = append(errs, err) } if len(errs) > 0 { @@ -919,7 +934,7 @@ func (mgr *SettingsManager) invalidateCache() { func (mgr *SettingsManager) initialize(ctx context.Context) error { tweakConfigMap := func(options *metav1.ListOptions) { - cmLabelSelector := fields.ParseSelectorOrDie("app.kubernetes.io/part-of=argocd") + cmLabelSelector := fields.ParseSelectorOrDie(partOfArgoCDSelector) options.LabelSelector = cmLabelSelector.String() } @@ -1041,7 +1056,7 @@ func validateExternalURL(u string) error { } // updateSettingsFromSecret transfers settings from a Kubernetes secret into an ArgoCDSettings struct. -func (mgr *SettingsManager) updateSettingsFromSecret(settings *ArgoCDSettings, argoCDSecret *apiv1.Secret) error { +func (mgr *SettingsManager) updateSettingsFromSecret(settings *ArgoCDSettings, argoCDSecret *apiv1.Secret, secrets []*apiv1.Secret) error { var errs []error secretKey, ok := argoCDSecret.Data[settingServerSignatureKey] if ok { @@ -1091,6 +1106,11 @@ func (mgr *SettingsManager) updateSettingsFromSecret(settings *ArgoCDSettings, a } } secretValues := make(map[string]string, len(argoCDSecret.Data)) + for _, s := range secrets { + for k, v := range s.Data { + secretValues[fmt.Sprintf("%s:%s", s.Name, k)] = string(v) + } + } for k, v := range argoCDSecret.Data { secretValues[k] = string(v) } @@ -1161,7 +1181,7 @@ func (mgr *SettingsManager) SaveSettings(settings *ArgoCDSettings) error { return err } - err = mgr.updateSecret(func(argoCDSecret *apiv1.Secret) error { + return mgr.updateSecret(func(argoCDSecret *apiv1.Secret) error { argoCDSecret.Data[settingServerSignatureKey] = settings.ServerSignature if settings.WebhookGitHubSecret != "" { argoCDSecret.Data[settingsWebhookGitHubSecretKey] = []byte(settings.WebhookGitHubSecret) @@ -1190,12 +1210,6 @@ func (mgr *SettingsManager) SaveSettings(settings *ArgoCDSettings) error { } return nil }) - - if err != nil { - return err - } - - return mgr.ResyncInformers() } // Save the SSH known host data into the corresponding ConfigMap diff --git a/util/settings/settings_test.go b/util/settings/settings_test.go index 115557948ee9c..9f23a72fbd8f5 100644 --- a/util/settings/settings_test.go +++ b/util/settings/settings_test.go @@ -894,3 +894,56 @@ func Test_GetTLSConfiguration(t *testing.T) { assert.Contains(t, getCNFromCertificate(settings.Certificate), "Argo CD E2E") }) } + +func TestSecretKeyRef(t *testing.T) { + data := map[string]string{ + "oidc.config": `name: Okta +issuer: https://dev-123456.oktapreview.com +clientID: aaaabbbbccccddddeee +clientSecret: $acme:clientSecret +# Optional set of OIDC scopes to request. If omitted, defaults to: ["openid", "profile", "email", "groups"] +requestedScopes: ["openid", "profile", "email"] +# Optional set of OIDC claims to request on the ID token. +requestedIDTokenClaims: {"groups": {"essential": true}}`, + } + cm := &v1.ConfigMap{ + ObjectMeta: metav1.ObjectMeta{ + Name: common.ArgoCDConfigMapName, + Namespace: "default", + Labels: map[string]string{ + "app.kubernetes.io/part-of": "argocd", + }, + }, + Data: data, + } + argocdSecret := &v1.Secret{ + ObjectMeta: metav1.ObjectMeta{ + Name: common.ArgoCDSecretName, + Namespace: "default", + }, + Data: map[string][]byte{ + "admin.password": nil, + "server.secretkey": nil, + }, + } + secret := &v1.Secret{ + ObjectMeta: metav1.ObjectMeta{ + Name: "acme", + Namespace: "default", + Labels: map[string]string{ + "app.kubernetes.io/part-of": "argocd", + }, + }, + Data: map[string][]byte{ + "clientSecret": []byte("deadbeef"), + }, + } + kubeClient := fake.NewSimpleClientset(cm, secret, argocdSecret) + settingsManager := NewSettingsManager(context.Background(), kubeClient, "default") + + settings, err := settingsManager.GetSettings() + assert.NoError(t, err) + + oidcConfig := settings.OIDCConfig() + assert.Equal(t, oidcConfig.ClientSecret, "deadbeef") +} diff --git a/util/webhook/webhook.go b/util/webhook/webhook.go index 8ecafc7b0a5be..58e4d5c7e2939 100644 --- a/util/webhook/webhook.go +++ b/util/webhook/webhook.go @@ -52,11 +52,11 @@ type ArgoCDWebhookHandler struct { func NewHandler(namespace string, appClientset appclientset.Interface, set *settings.ArgoCDSettings, settingsSrc settingsSource, repoCache *cache.Cache, serverCache *servercache.Cache, argoDB db.ArgoDB) *ArgoCDWebhookHandler { githubWebhook, err := github.New(github.Options.Secret(set.WebhookGitHubSecret)) if err != nil { - log.Warnf("Unable to init the Github webhook") + log.Warnf("Unable to init the GitHub webhook") } gitlabWebhook, err := gitlab.New(gitlab.Options.Secret(set.WebhookGitLabSecret)) if err != nil { - log.Warnf("Unable to init the Gitlab webhook") + log.Warnf("Unable to init the GitLab webhook") } bitbucketWebhook, err := bitbucket.New(bitbucket.Options.UUID(set.WebhookBitbucketUUID)) if err != nil { @@ -88,21 +88,21 @@ func NewHandler(namespace string, appClientset appclientset.Interface, set *sett return &acdWebhook } +func parseRevision(ref string) string { + refParts := strings.SplitN(ref, "/", 3) + return refParts[len(refParts)-1] +} + // affectedRevisionInfo examines a payload from a webhook event, and extracts the repo web URL, // the revision, and whether or not this affected origin/HEAD (the default branch of the repository) func affectedRevisionInfo(payloadIf interface{}) (webURLs []string, revision string, change changeInfo, touchedHead bool, changedFiles []string) { - parseRef := func(ref string) string { - refParts := strings.SplitN(ref, "/", 3) - return refParts[len(refParts)-1] - } - switch payload := payloadIf.(type) { case github.PushPayload: // See: https://developer.github.com/v3/activity/events/types/#pushevent webURLs = append(webURLs, payload.Repository.HTMLURL) - revision = parseRef(payload.Ref) - change.shaAfter = parseRef(payload.After) - change.shaBefore = parseRef(payload.Before) + revision = parseRevision(payload.Ref) + change.shaAfter = parseRevision(payload.After) + change.shaBefore = parseRevision(payload.Before) touchedHead = bool(payload.Repository.DefaultBranch == revision) for _, commit := range payload.Commits { changedFiles = append(changedFiles, commit.Added...) @@ -112,9 +112,9 @@ func affectedRevisionInfo(payloadIf interface{}) (webURLs []string, revision str case gitlab.PushEventPayload: // See: https://docs.gitlab.com/ee/user/project/integrations/webhooks.html webURLs = append(webURLs, payload.Project.WebURL) - revision = parseRef(payload.Ref) - change.shaAfter = parseRef(payload.After) - change.shaBefore = parseRef(payload.Before) + revision = parseRevision(payload.Ref) + change.shaAfter = parseRevision(payload.After) + change.shaBefore = parseRevision(payload.Before) touchedHead = bool(payload.Project.DefaultBranch == revision) for _, commit := range payload.Commits { changedFiles = append(changedFiles, commit.Added...) @@ -125,9 +125,9 @@ func affectedRevisionInfo(payloadIf interface{}) (webURLs []string, revision str // See: https://docs.gitlab.com/ee/user/project/integrations/webhooks.html // NOTE: this is untested webURLs = append(webURLs, payload.Project.WebURL) - revision = parseRef(payload.Ref) - change.shaAfter = parseRef(payload.After) - change.shaBefore = parseRef(payload.Before) + revision = parseRevision(payload.Ref) + change.shaAfter = parseRevision(payload.After) + change.shaBefore = parseRevision(payload.Before) touchedHead = bool(payload.Project.DefaultBranch == revision) for _, commit := range payload.Commits { changedFiles = append(changedFiles, commit.Added...) @@ -166,7 +166,7 @@ func affectedRevisionInfo(payloadIf interface{}) (webURLs []string, revision str // TODO: bitbucket includes multiple changes as part of a single event. // We only pick the first but need to consider how to handle multiple for _, change := range payload.Changes { - revision = parseRef(change.Reference.ID) + revision = parseRevision(change.Reference.ID) break } // Not actually sure how to check if the incoming change affected HEAD just by examining the @@ -178,9 +178,9 @@ func affectedRevisionInfo(payloadIf interface{}) (webURLs []string, revision str case gogsclient.PushPayload: webURLs = append(webURLs, payload.Repo.HTMLURL) - revision = parseRef(payload.Ref) - change.shaAfter = parseRef(payload.After) - change.shaBefore = parseRef(payload.Before) + revision = parseRevision(payload.Ref) + change.shaAfter = parseRevision(payload.After) + change.shaBefore = parseRevision(payload.Before) touchedHead = bool(payload.Repo.DefaultBranch == revision) for _, commit := range payload.Commits { changedFiles = append(changedFiles, commit.Added...) @@ -332,7 +332,7 @@ func ensureAbsPath(input string) string { } func appRevisionHasChanged(app *v1alpha1.Application, revision string, touchedHead bool) bool { - targetRev := app.Spec.Source.TargetRevision + targetRev := parseRevision(app.Spec.Source.TargetRevision) if targetRev == "HEAD" || targetRev == "" { // revision is head return touchedHead } @@ -356,7 +356,7 @@ func (a *ArgoCDWebhookHandler) Handler(w http.ResponseWriter, r *http.Request) { var err error switch { - //Gogs needs to be checked before Github since it carries both Gogs and (incompatible) Github headers + //Gogs needs to be checked before GitHub since it carries both Gogs and (incompatible) GitHub headers case r.Header.Get("X-Gogs-Event") != "": payload, err = a.gogs.Parse(r, gogs.PushEvent) case r.Header.Get("X-GitHub-Event") != "": diff --git a/util/webhook/webhook_test.go b/util/webhook/webhook_test.go index 9e763187995b0..e31c0f4f8e541 100644 --- a/util/webhook/webhook_test.go +++ b/util/webhook/webhook_test.go @@ -237,4 +237,16 @@ func TestAppRevisionHasChanged(t *testing.T) { TargetRevision: "dev", }, }}, "dev", false)) + + assert.False(t, appRevisionHasChanged(&v1alpha1.Application{Spec: v1alpha1.ApplicationSpec{ + Source: v1alpha1.ApplicationSource{ + TargetRevision: "refs/heads/dev", + }, + }}, "master", true)) + + assert.True(t, appRevisionHasChanged(&v1alpha1.Application{Spec: v1alpha1.ApplicationSpec{ + Source: v1alpha1.ApplicationSource{ + TargetRevision: "refs/heads/dev", + }, + }}, "dev", false)) }