diff --git a/.github/workflows/go.yml b/.github/workflows/go.yml index ee810b7..c44e1b9 100644 --- a/.github/workflows/go.yml +++ b/.github/workflows/go.yml @@ -12,7 +12,7 @@ jobs: strategy: matrix: os: [ubuntu-latest] - go: [1.17] + go: [1.18, 1.19] name: ${{ matrix.os }} @ Go ${{ matrix.go }} runs-on: ${{ matrix.os }} steps: diff --git a/Dockerfile b/Dockerfile index e4e752d..bb60957 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -ARG GO_VERSION="1.17" +ARG GO_VERSION="1.18" #--------------------------------------------# #--------Build KSOPS and Kustomize-----------# diff --git a/Makefile b/Makefile index 348060f..008e357 100644 --- a/Makefile +++ b/Makefile @@ -16,9 +16,10 @@ build: .PHONY: clean clean: - rm $(PLUGIN_NAME) || true + rm -f $(PLUGIN_NAME) rm -rf $(XDG_CONFIG_HOME)/kustomize/plugin/viaduct.ai/v1/ || true rm -rf $(HOME)/sigs.k8s.io/kustomize/plugin/viaduct.ai/v1/ || true + rm -f $(shell command -v $(PLUGIN_NAME)) .PHONY: kustomize kustomize: diff --git a/README-legacy.md b/README-legacy.md new file mode 100644 index 0000000..61986f3 --- /dev/null +++ b/README-legacy.md @@ -0,0 +1,474 @@ +# KSOPS - A Flexible Kustomize Plugin for SOPS Encrypted Resources + +![Tests and Build](https://github.com/viaduct-ai/kustomize-sops/workflows/Run%20Tests%20and%20Build/badge.svg?branch=master) + +- [Background](#background) +- [Overview](#overview) +- [Requirements](#requirements) +- [Installation Options](#installation-options) +- [Getting Started](#getting-started) +- [Generator Options](#generator-options) +- [Development and Testing](#development-and-testing) +- [Argo CD Integration 🤖](#argo-cd-integration-) + +## Background + +At [Viaduct](https://www.viaduct.ai/), we manage our Kubernetes resources via the [GitOps](https://www.weave.works/blog/gitops-operations-by-pull-request) pattern; however, we could not find a solution compatible with our stack for managing secrets via the GitOps paradigm. We built `KSOPS` to connect [kustomize](https://github.com/kubernetes-sigs/kustomize/) to [SOPS](https://github.com/mozilla/sops) and integrated it with [Argo CD](https://github.com/argoproj/argo-cd) to safely manage our secrets the same way we manage the rest our Kubernetes manifest. + +## Overview + +`KSOPS`, or kustomize-SOPS, is a [kustomize](https://github.com/kubernetes-sigs/kustomize/) [exec plugin](https://kubectl.docs.kubernetes.io/guides/extending_kustomize/exec_plugins) for SOPS encrypted resources. `KSOPS` can be used to decrypt any Kubernetes resource, but is most commonly used to decrypt encrypted Kubernetes Secrets and ConfigMaps. As a [kustomize](https://github.com/kubernetes-sigs/kustomize/) plugin, `KSOPS` allows you to manage, build, and apply encrypted manifests the same way you manage the rest of your Kubernetes manifests. + +## Requirements + +- [kustomize](https://github.com/kubernetes-sigs/kustomize/) +- `XDG_CONFIG_HOME` environment variable is set in your shell. If it's not set, run the following + +```bash +# Don't forget to define XDG_CONFIG_HOME in your .bashrc or .zshrc +echo "export XDG_CONFIG_HOME=\$HOME/.config" >> $HOME/.zshrc +source $HOME/.zshrc +``` + +## Installation + +### Install the Latest Release + +Using curl +```bash +# Verify the $XDG_CONFIG_HOME environment variable exists then run +curl -s https://raw.githubusercontent.com/viaduct-ai/kustomize-sops/master/scripts/install-legacy-ksops-archive.sh | bash +``` + +Or using wget +```bash +# Verify the $XDG_CONFIG_HOME environment variable exists then run +wget -qcO - https://raw.githubusercontent.com/viaduct-ai/kustomize-sops/master/scripts/install-legacy-ksops-archive.sh | bash +``` + +### Install from Source + +```bash +# Optionally, install kustomize via +# make kustomize +# Verify the $XDG_CONFIG_HOME environment variable exists then run +make install +``` + +## Getting Started (Tutorial) + +### 0. Verify Requirements + +Before continuing, verify your installation of [kustomize](https://github.com/kubernetes-sigs/kustomize/) +and `gpg`. Below are a few non-comprehensive commands to quickly check your installations: + +```bash +# Verify kustomize is installed +kustomize version + +# Verify gpg is installed +gpg --help + +# Verify XDG_CONFIG_HOME environment variable is set +echo $XDG_CONFIG_HOME +``` + +### 1. Download and install KSOPS + +```bash +# Verify the $XDG_CONFIG_HOME environment variable exists then run +source <(curl -s https://raw.githubusercontent.com/viaduct-ai/kustomize-sops/master/scripts/install-legacy-ksops-archive.sh) +``` + +### 2. Import Test PGP Keys + +To simplify local development and testing, we use PGP test keys. To import the keys, run the following command from the repository's root directory: + +```bash +make import-test-keys +``` + +If you are following this tutorial, be sure to run this before the following steps. The PGP keys will also be imported when you run `make test` + +See [SOPS](https://github.com/mozilla/sops) for details. + +### 3. Configure SOPS via .sops.yaml + +For this example and testing, `KSOPS` relies on the `SOPS` creation rules defined in `.sops.yaml`. To make encrypted secrets more readable, we suggest using the following encryption regex to only encrypt `data` and `stringData` values. This leaves non-sensitive fields, like the secret's name, unencrypted and human readable. + +**Note:** You only have to modify `.sops.yaml` if you want to use your key management service in this example instead of the default PGP key imported in the previous step. + +```yaml +creation_rules: + - unencrypted_regex: "^(apiVersion|metadata|kind|type)$" + # Specify kms/pgp/etc encryption key + # This tutorial uses a local PGP key for encryption. + # DO NOT USE IN PRODUCTION ENV + pgp: "FBC7B9E2A4F9289AC0C1D4843D16CEE4A27381B4" + # Optionally you can configure to use a providers key store + # kms: XXXXXX + # gcp_kms: XXXXXX +``` + +### 4. Create a Resource + +```bash +# Create a local Kubernetes Secret +cat < secret.yaml +apiVersion: v1 +kind: Secret +metadata: + name: mysecret +type: Opaque +data: + username: YWRtaW4= + password: MWYyZDFlMmU2N2Rm +EOF +``` + +### 5. Encrypt the Resources + +```bash +# Encrypt with SOPS CLI +# Specify SOPS configuration in .sops.yaml +sops -e secret.yaml > secret.enc.yaml +``` + +### 6. Define KSOPS kustomize Generator + +```bash +# Create a local Kubernetes Secret +cat < secret-generator.yaml +apiVersion: viaduct.ai/v1 +kind: ksops +metadata: + # Specify a name + name: example-secret-generator +files: + - ./secret.enc.yaml +EOF +``` + +### 7. Create the kustomization.yaml + +[Read about kustomize plugins](https://kubectl.docs.kubernetes.io/guides/extending_kustomize/exec_plugins/) + +```bash +cat < kustomization.yaml +generators: + - ./secret-generator.yaml +EOF +``` + +### 8. Build with kustomize 🔑 + +```bash +# Build with kustomize to verify +# In kustomize v2 and v3 the command is +# kustomize build --enable_alpha_plugins . +kustomize build --enable-alpha-plugins . +``` + +### Troubleshooting + +#### Sanity Checks + +- Validate `ksops` is in the `kustomize` plugin path + - `$XDG_CONFIG_HOME/kustomize/plugin/viaduct.ai/v1/ksops/ksops` + +#### Check Existing Issues + +Someone might have already encountered your issue. + +https://github.com/viaduct-ai/kustomize-sops/issues + +## Generate secret directly from encrypted files + +`KSOPS` can also generate a Kubernetes Secret directly from encrypted files or dotenv files. + +```bash +# Create a Kubernetes Secret from encrypted file +cat < secret-generator.yaml +apiVersion: viaduct.ai/v1 +kind: ksops +metadata: + name: example-secret-generator +secretFrom: +- metadata: + name: secret-name + labels: + app: foo + annotations: + kustomize.config.k8s.io/needs-hash: "false" + type: Opaque + files: + - ./secret.enc.conf + - secret.yaml=./secret.enc.yaml +EOF +``` +```bash +# Create a Kubernetes Secret from encrypted dotenv file +cat < secret-generator.yaml +apiVersion: viaduct.ai/v1 +kind: ksops +metadata: + name: example-secret-generator +secretFrom: +- metadata: + name: secret-name + envs: + - ./secret.enc.env +EOF +``` + +## Generator Options + +`KSOPS` supports [kustomize exec plugins](https://kubectl.docs.kubernetes.io/guides/extending_kustomize/exec_plugins/#generator-options) annotation based generator options. At the time of writing, the supported annotations are: + +- `kustomize.config.k8s.io/needs-hash` +- `kustomize.config.k8s.io/behavior` + +For information, read the [kustomize generator options documentation](https://github.com/kubernetes-sigs/kustomize/blob/master/examples/generatorOptions.md). + +### Encrypted Secret Overlays w/ Generator Options + +Sometimes there is a default secret as part of a project's base manifests, like the [base Argo CD secret](https://github.com/argoproj/argo-cd/blob/master/manifests/base/config/argocd-secret.yaml), which you want to `replace` in your overlay. Other times, you have parts of base secret that are common across different overlays but you want to partially update, or `merge`, changes specific to each overlay as well. You can achieve both of these goals by simply adding the following annotations to your encrypted secrets: + +#### Replace a Base Secret + +```yaml +apiVersion: v1 +kind: Secret +metadata: + name: argocd-secret + annotations: + # replace the base secret data/stringData values with these encrypted data/stringData values + kustomize.config.k8s.io/behavior: replace +type: Opaque +data: + # Encrypted data here +stringData: + # Encrypted data here +``` + +#### Merge/Patch a Base Secret + +```yaml +apiVersion: v1 +kind: Secret +metadata: + name: argocd-secret + annotations: + # merge the base secret data/stringData values with these encrypted data/stringData values + kustomize.config.k8s.io/behavior: merge +type: Opaque +data: + # Encrypted data here +stringData: + # Encrypted data here +``` + +## Development and Testing + +Before developing or testing `KSOPS`, ensure all external [requirements](#requirements) are properly installed. + +```bash +# Setup development environment +make setup +``` + +### Development + +`KSOPS` implements the [kustomize](https://github.com/kubernetes-sigs/kustomize/) plugin API in `ksops.go`. + +`KSOPS`'s logic is intentionally simple. Given a list of SOPS encrypted Kubernetes manifests, it iterates over each file and decrypts it via SOPS [decrypt](https://godoc.org/go.mozilla.org/sops/decrypt) library. `KSOPS` assumes nothing about the structure of the encrypted resource and relies on [kustomize](https://github.com/kubernetes-sigs/kustomize/) for manifest validation. `KSOPS` expects the encryption key to be accessible. This is important to consider when using `KSOPS` for CI/CD. + +### Testing + +Testing `KSOPS` requires: + +Everything is handled for you by `make test`. Just run it from the repo's root directory: + +```bash +make test +``` + +## Migration from KSOPS v2.x.x to v3.x.x + +### Required Changes + +- The opt-in `ksops-exec` kind is deprecated. If you are using the `ksops-exec` kind, please migrate to `ksops` once you've upgrade to _v3.x.x_. + +### Background + +In `KSOPS` _v3.x.x_, the kustomize plugin `ksops` was migrated to an [exec plugin](https://kubectl.docs.kubernetes.io/guides/extending_kustomize/exec_plugins) from a [Go plugin](https://kubernetes-sigs.github.io/kustomize/guides/plugins/#go-plugins) because of simpler installation, dependency management, and package maintenance. + +`KSOPS` was originally developed as a [kustomize Go plugin](https://kubernetes-sigs.github.io/kustomize/guides/plugins/#go-plugins). Up until _v2.2.0_ this was the only installation option, but in _v2.2.0_, `KSOPS` introduced an opt-in [exec plugin](https://kubectl.docs.kubernetes.io/guides/extending_kustomize/exec_plugins) under via the `ksops-exec` kind. Now that `KSOPS` is only an [exec plugin](https://kubectl.docs.kubernetes.io/guides/extending_kustomize/exec_plugins), the `ksops-exec` kind is deprecated. + +## Argo CD Integration 🤖 + +`KSOPS` becomes even more powerful when integrated with a CI/CD pipeline. By combining `KSOPS` with [Argo CD](https://github.com/argoproj/argo-cd/), you can manage Kubernetes secrets via the same Git Ops pattern you use to manage the rest of your kubernetes manifests. To integrate `KSOPS` and [Argo CD](https://github.com/argoproj/argo-cd/), you will need to update the Argo CD ConifgMap and create a [strategic merge patch](https://github.com/kubernetes/community/blob/master/contributors/devel/sig-api-machinery/strategic-merge-patch.md) or a [custom Argo CD build](https://argoproj.github.io/argo-cd/operator-manual/custom_tools/#byoi-build-your-own-image). As an alternative you can also use the [Argo CD Helm Chart](https://github.com/argoproj/argo-helm/tree/master/charts/argo-cd) with [custom values](#argo-cd-helm-chart-with-custom-tooling). Don't forget to inject any necessary credentials (i.e AWS credentials) when deploying the [Argo CD](https://github.com/argoproj/argo-cd/) + `KSOPS` build! + +[KSOPS Docker Image](https://hub.docker.com/r/viaductoss/ksops) + +[KSOPS Quay.io Image](https://quay.io/repository/viaductoss/ksops) + +### Enable Kustomize Plugins via Argo CD ConfigMap + +As of now to allow [Argo CD](https://github.com/argoproj/argo-cd/) to use [kustomize](https://github.com/kubernetes-sigs/kustomize/) plugins you must use the `enable-alpha-plugins` flag. This is configured by the `kustomize.buildOptions` setting in the [Argo CD](https://github.com/argoproj/argo-cd/) ConfigMap + +```yaml +apiVersion: v1 +kind: ConfigMap +metadata: + name: argocd-cm + labels: + app.kubernetes.io/name: argocd-cm + app.kubernetes.io/part-of: argocd +data: + # For KSOPs versions < v2.5.0, use the old kustomize flag style + # kustomize.buildOptions: "--enable_alpha_plugins" + kustomize.buildOptions: "--enable-alpha-plugins" +``` + +### KSOPS Repo Sever Patch + +The simplest way to integrate `KSOPS` with [Argo CD](https://github.com/argoproj/argo-cd/) is with a [strategic merge patch](https://github.com/kubernetes/community/blob/master/contributors/devel/sig-api-machinery/strategic-merge-patch.md) on the Argo CD repo server deployment. The patch below uses an init container to build `KSOPS` and volume mount to inject the `KSOPS` plugin and, optionally, override the [kustomize](https://github.com/kubernetes-sigs/kustomize/) executable. + +```yaml +# argo-cd-repo-server-ksops-patch.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: argocd-repo-server +spec: + template: + spec: + # 1. Define an emptyDir volume which will hold the custom binaries + volumes: + - name: custom-tools + emptyDir: {} + # 2. Use an init container to download/copy custom binaries into the emptyDir + initContainers: + - name: install-ksops + image: viaductoss/ksops:v3.1.0 + command: ["/bin/sh", "-c"] + args: + - echo "Installing KSOPS..."; + mv ksops /custom-tools/; + mv $GOPATH/bin/kustomize /custom-tools/; + echo "Done."; + volumeMounts: + - mountPath: /custom-tools + name: custom-tools + # 3. Volume mount the custom binary to the bin directory (overriding the existing version) + containers: + - name: argocd-repo-server + volumeMounts: + - mountPath: /usr/local/bin/kustomize + name: custom-tools + subPath: kustomize + # Verify this matches a XDG_CONFIG_HOME=/.config env variable + - mountPath: /.config/kustomize/plugin/viaduct.ai/v1/ksops/ksops + name: custom-tools + subPath: ksops + # 4. Set the XDG_CONFIG_HOME env variable to allow kustomize to detect the plugin + env: + - name: XDG_CONFIG_HOME + value: /.config + ## If you use AWS or GCP KMS, don't forget to include the necessary credentials to decrypt the secrets! + # - name: AWS_ACCESS_KEY_ID + # valueFrom: + # secretKeyRef: + # name: argocd-aws-credentials + # key: accesskey + # - name: AWS_SECRET_ACCESS_KEY + # valueFrom: + # secretKeyRef: + # name: argocd-aws-credentials + # key: secretkey +``` + +### Custom Argo CD w/ KSOPS Dockerfile + +Alternatively, for more control and faster pod start times you can build a custom docker image. + +```Dockerfile +ARG ARGO_CD_VERSION="v1.7.7" +# https://github.com/argoproj/argo-cd/blob/master/Dockerfile +ARG KSOPS_VERSION="v3.1.0" + +#--------------------------------------------# +#--------Build KSOPS and Kustomize-----------# +#--------------------------------------------# + +FROM viaductoss/ksops:$KSOPS_VERSION as ksops-builder + +#--------------------------------------------# +#--------Build Custom Argo Image-------------# +#--------------------------------------------# + +FROM argoproj/argocd:$ARGO_CD_VERSION + +# Switch to root for the ability to perform install +USER root + +# Set the kustomize home directory +ENV XDG_CONFIG_HOME=$HOME/.config +ENV KUSTOMIZE_PLUGIN_PATH=$XDG_CONFIG_HOME/kustomize/plugin/ + +ARG PKG_NAME=ksops + +# Override the default kustomize executable with the Go built version +COPY --from=ksops-builder /go/bin/kustomize /usr/local/bin/kustomize + +# Copy the plugin to kustomize plugin path +COPY --from=ksops-builder /go/src/github.com/viaduct-ai/kustomize-sops/* $KUSTOMIZE_PLUGIN_PATH/viaduct.ai/v1/${PKG_NAME}/ + +# Switch back to non-root user +USER argocd +``` + +### Argo CD Helm Chart with Custom Tooling + +We can setup `KSOPS` custom tooling in the [Argo CD Chart](https://github.com/argoproj/argo-helm/tree/master/charts/argo-cd) with the following values: + +```yaml +# Enable Kustomize Alpha Plugins via Argo CD ConfigMap, required for ksops +server: + config: + kustomize.buildOptions: "--enable-alpha-plugins" + +repoServer: + # Set the XDG_CONFIG_HOME env variable to allow kustomize to detect the plugin + env: + - name: XDG_CONFIG_HOME + value: /.config + + # Use init containers to configure custom tooling + # https://argoproj.github.io/argo-cd/operator-manual/custom_tools/ + volumes: + - name: custom-tools + emptyDir: {} + + initContainers: + - name: install-ksops + image: viaductoss/ksops:v3.1.0 + command: ["/bin/sh", "-c"] + args: + - echo "Installing KSOPS..."; + mv ksops /custom-tools/; + mv $GOPATH/bin/kustomize /custom-tools/; + echo "Done."; + volumeMounts: + - mountPath: /custom-tools + name: custom-tools + volumeMounts: + - mountPath: /usr/local/bin/kustomize + name: custom-tools + subPath: kustomize + # Verify this matches a XDG_CONFIG_HOME=/.config env variable + - mountPath: /.config/kustomize/plugin/viaduct.ai/v1/ksops/ksops + name: custom-tools + subPath: ksops +``` diff --git a/README.md b/README.md index 49fbd6e..5053e80 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# KSOPS - A Flexible Kustomize Plugin for SOPS Encrypted Resource +# KSOPS - A Flexible Kustomize Plugin for SOPS Encrypted Resources ![Tests and Build](https://github.com/viaduct-ai/kustomize-sops/workflows/Run%20Tests%20and%20Build/badge.svg?branch=master) @@ -9,6 +9,7 @@ - [Getting Started](#getting-started) - [Generator Options](#generator-options) - [Development and Testing](#development-and-testing) +- [Legacy Exec Plugin](#legacy-exec-plugin) - [Argo CD Integration 🤖](#argo-cd-integration-) ## Background @@ -17,18 +18,11 @@ At [Viaduct](https://www.viaduct.ai/), we manage our Kubernetes resources via th ## Overview -`KSOPS`, or kustomize-SOPS, is a [kustomize](https://github.com/kubernetes-sigs/kustomize/) [exec plugin](https://kubectl.docs.kubernetes.io/guides/extending_kustomize/exec_plugins) for SOPS encrypted resources. `KSOPS` can be used to decrypt any Kubernetes resource, but is most commonly used to decrypt encrypted Kubernetes Secrets and ConfigMaps. As a [kustomize](https://github.com/kubernetes-sigs/kustomize/) plugin, `KSOPS` allows you to manage, build, and apply encrypted manifests the same way you manage the rest of your Kubernetes manifests. +`KSOPS`, or kustomize-SOPS, is a [kustomize](https://github.com/kubernetes-sigs/kustomize/) [KRM exec plugin](https://kubectl.docs.kubernetes.io/guides/extending_kustomize/exec_krm_functions/) for SOPS encrypted resources. `KSOPS` can be used to decrypt any Kubernetes resource, but is most commonly used to decrypt encrypted Kubernetes Secrets and ConfigMaps. As a [kustomize](https://github.com/kubernetes-sigs/kustomize/) plugin, `KSOPS` allows you to manage, build, and apply encrypted manifests the same way you manage the rest of your Kubernetes manifests. ## Requirements - [kustomize](https://github.com/kubernetes-sigs/kustomize/) -- `XDG_CONFIG_HOME` environment variable is set in your shell. If it's not set, run the following - -```bash -# Don't forget to define XDG_CONFIG_HOME in your .bashrc or .zshrc -echo "export XDG_CONFIG_HOME=\$HOME/.config" >> $HOME/.zshrc -source $HOME/.zshrc -``` ## Installation @@ -36,22 +30,22 @@ source $HOME/.zshrc Using curl ```bash -# Verify the $XDG_CONFIG_HOME environment variable exists then run curl -s https://raw.githubusercontent.com/viaduct-ai/kustomize-sops/master/scripts/install-ksops-archive.sh | bash ``` Or using wget ```bash -# Verify the $XDG_CONFIG_HOME environment variable exists then run wget -qcO - https://raw.githubusercontent.com/viaduct-ai/kustomize-sops/master/scripts/install-ksops-archive.sh | bash ``` ### Install from Source +_Note:_ Installing from source requires Go + ```bash # Optionally, install kustomize via # make kustomize -# Verify the $XDG_CONFIG_HOME environment variable exists then run +# Verify the $GOPATH environment variable exists make install ``` @@ -68,15 +62,12 @@ kustomize version # Verify gpg is installed gpg --help - -# Verify XDG_CONFIG_HOME environment variable is set -echo $XDG_CONFIG_HOME ``` ### 1. Download and install KSOPS +Make KSOPS available to your shell's PATH ```bash -# Verify the $XDG_CONFIG_HOME environment variable exists then run source <(curl -s https://raw.githubusercontent.com/viaduct-ai/kustomize-sops/master/scripts/install-ksops-archive.sh) ``` @@ -144,6 +135,13 @@ kind: ksops metadata: # Specify a name name: example-secret-generator + annotations: + config.kubernetes.io/function: | + exec: + # if the binary is in your PATH, you can do + path: ksops + # otherwise, path should be relative to manifest files, like + # path: ../../../ksops files: - ./secret.enc.yaml EOF @@ -166,15 +164,19 @@ EOF # Build with kustomize to verify # In kustomize v2 and v3 the command is # kustomize build --enable_alpha_plugins . -kustomize build --enable-alpha-plugins . +kustomize build --enable-alpha-plugins --enable-exec . ``` ### Troubleshooting #### Sanity Checks -- Validate `ksops` is in the `kustomize` plugin path - - `$XDG_CONFIG_HOME/kustomize/plugin/viaduct.ai/v1/ksops/ksops` +- Validate `ksops` command is in your path +```bash +# Should output a path to KSOPS executable +command -v ksops +``` +- If you prefer to not install `ksops` to your path, make sure the path to the executable in the generator manifest is relative to the manifests files #### Check Existing Issues @@ -193,6 +195,10 @@ apiVersion: viaduct.ai/v1 kind: ksops metadata: name: example-secret-generator + annotations: + config.kubernetes.io/function: | + exec: + path: ksops secretFrom: - metadata: name: secret-name @@ -213,6 +219,10 @@ apiVersion: viaduct.ai/v1 kind: ksops metadata: name: example-secret-generator + annotations: + config.kubernetes.io/function: | + exec: + path: ksops secretFrom: - metadata: name: secret-name @@ -223,7 +233,7 @@ EOF ## Generator Options -`KSOPS` supports [kustomize exec plugins](https://kubectl.docs.kubernetes.io/guides/extending_kustomize/exec_plugins/#generator-options) annotation based generator options. At the time of writing, the supported annotations are: +`KSOPS` supports kustomize annotation based generator options. At the time of writing, the supported annotations are: - `kustomize.config.k8s.io/needs-hash` - `kustomize.config.k8s.io/behavior` @@ -293,17 +303,9 @@ Everything is handled for you by `make test`. Just run it from the repo's root d make test ``` -## Migration from KSOPS v2.x.x to v3.x.x - -### Required Changes - -- The opt-in `ksops-exec` kind is deprecated. If you are using the `ksops-exec` kind, please migrate to `ksops` once you've upgrade to _v3.x.x_. +## Legacy Exec Plugin -### Background - -In `KSOPS` _v3.x.x_, the kustomize plugin `ksops` was migrated to an [exec plugin](https://kubectl.docs.kubernetes.io/guides/extending_kustomize/exec_plugins) from a [Go plugin](https://kubernetes-sigs.github.io/kustomize/guides/plugins/#go-plugins) because of simpler installation, dependency management, and package maintenance. - -`KSOPS` was originally developed as a [kustomize Go plugin](https://kubernetes-sigs.github.io/kustomize/guides/plugins/#go-plugins). Up until _v2.2.0_ this was the only installation option, but in _v2.2.0_, `KSOPS` introduced an opt-in [exec plugin](https://kubectl.docs.kubernetes.io/guides/extending_kustomize/exec_plugins) under via the `ksops-exec` kind. Now that `KSOPS` is only an [exec plugin](https://kubectl.docs.kubernetes.io/guides/extending_kustomize/exec_plugins), the `ksops-exec` kind is deprecated. +If you are on an older version (`<=v3.x.x`) of `KSOPS` or want to use legacy exec style plugin, the then read the [Legacy README](./README-legacy.md) for instructions. ## Argo CD Integration 🤖 @@ -315,7 +317,7 @@ In `KSOPS` _v3.x.x_, the kustomize plugin `ksops` was migrated to an [exec plugi ### Enable Kustomize Plugins via Argo CD ConfigMap -As of now to allow [Argo CD](https://github.com/argoproj/argo-cd/) to use [kustomize](https://github.com/kubernetes-sigs/kustomize/) plugins you must use the `enable-alpha-plugins` flag. This is configured by the `kustomize.buildOptions` setting in the [Argo CD](https://github.com/argoproj/argo-cd/) ConfigMap +As of now to allow [Argo CD](https://github.com/argoproj/argo-cd/) to use [kustomize](https://github.com/kubernetes-sigs/kustomize/) plugins you must use the `--enable-alpha-plugins` and `--enable-exec` flags. This is configured by the `kustomize.buildOptions` setting in the [Argo CD](https://github.com/argoproj/argo-cd/) ConfigMap ```yaml apiVersion: v1 @@ -326,9 +328,7 @@ metadata: app.kubernetes.io/name: argocd-cm app.kubernetes.io/part-of: argocd data: - # For KSOPs versions < v2.5.0, use the old kustomize flag style - # kustomize.buildOptions: "--enable_alpha_plugins" - kustomize.buildOptions: "--enable-alpha-plugins" + kustomize.buildOptions: "--enable-alpha-plugins --enable-exec" ``` ### KSOPS Repo Sever Patch @@ -368,15 +368,11 @@ spec: - mountPath: /usr/local/bin/kustomize name: custom-tools subPath: kustomize - # Verify this matches a XDG_CONFIG_HOME=/.config env variable - - mountPath: /.config/kustomize/plugin/viaduct.ai/v1/ksops/ksops + - mountPath: /usr/local/bin/ksops name: custom-tools subPath: ksops - # 4. Set the XDG_CONFIG_HOME env variable to allow kustomize to detect the plugin - env: - - name: XDG_CONFIG_HOME - value: /.config ## If you use AWS or GCP KMS, don't forget to include the necessary credentials to decrypt the secrets! + # env: # - name: AWS_ACCESS_KEY_ID # valueFrom: # secretKeyRef: @@ -413,17 +409,13 @@ FROM argoproj/argocd:$ARGO_CD_VERSION # Switch to root for the ability to perform install USER root -# Set the kustomize home directory -ENV XDG_CONFIG_HOME=$HOME/.config -ENV KUSTOMIZE_PLUGIN_PATH=$XDG_CONFIG_HOME/kustomize/plugin/ - ARG PKG_NAME=ksops # Override the default kustomize executable with the Go built version COPY --from=ksops-builder /go/bin/kustomize /usr/local/bin/kustomize -# Copy the plugin to kustomize plugin path -COPY --from=ksops-builder /go/src/github.com/viaduct-ai/kustomize-sops/* $KUSTOMIZE_PLUGIN_PATH/viaduct.ai/v1/${PKG_NAME}/ +# Add ksops executable to path +COPY --from=ksops-builder /go/bin/ksops /usr/local/bin/ksops # Switch back to non-root user USER argocd @@ -437,14 +429,9 @@ We can setup `KSOPS` custom tooling in the [Argo CD Chart](https://github.com/ar # Enable Kustomize Alpha Plugins via Argo CD ConfigMap, required for ksops server: config: - kustomize.buildOptions: "--enable-alpha-plugins" + kustomize.buildOptions: "--enable-alpha-plugins --enable-exec" repoServer: - # Set the XDG_CONFIG_HOME env variable to allow kustomize to detect the plugin - env: - - name: XDG_CONFIG_HOME - value: /.config - # Use init containers to configure custom tooling # https://argoproj.github.io/argo-cd/operator-manual/custom_tools/ volumes: @@ -467,8 +454,7 @@ repoServer: - mountPath: /usr/local/bin/kustomize name: custom-tools subPath: kustomize - # Verify this matches a XDG_CONFIG_HOME=/.config env variable - - mountPath: /.config/kustomize/plugin/viaduct.ai/v1/ksops/ksops + - mountPath: /usr/local/bin/ksops name: custom-tools subPath: ksops ``` diff --git a/go.mod b/go.mod index 63fca67..4a1d875 100644 --- a/go.mod +++ b/go.mod @@ -1,6 +1,6 @@ module github.com/viaduct-ai/kustomize-sops -go 1.17 +go 1.18 require ( github.com/joho/godotenv v1.4.0 @@ -9,6 +9,8 @@ require ( sigs.k8s.io/yaml v1.3.0 ) +require github.com/GoogleContainerTools/kpt-functions-sdk/go/fn v0.0.0-20221109010843-1f7d0c07a381 + require ( cloud.google.com/go/compute v1.5.0 // indirect filippo.io/age v1.0.0 // indirect @@ -23,6 +25,7 @@ require ( github.com/Azure/go-autorest/autorest/validation v0.3.1 // indirect github.com/Azure/go-autorest/logger v0.2.1 // indirect github.com/Azure/go-autorest/tracing v0.6.0 // indirect + github.com/GoogleContainerTools/kpt-functions-sdk/go/api v0.0.0-20220720212527-133180134b93 // indirect github.com/ProtonMail/go-crypto v0.0.0-20220407094043-a94812496cf5 // indirect github.com/PuerkitoBio/purell v1.1.1 // indirect github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 // indirect @@ -35,9 +38,11 @@ require ( github.com/dimchansky/utfbom v1.1.1 // indirect github.com/fatih/color v1.13.0 // indirect github.com/go-errors/errors v1.0.1 // indirect + github.com/go-logr/logr v1.2.0 // indirect github.com/go-openapi/jsonpointer v0.19.5 // indirect - github.com/go-openapi/jsonreference v0.19.5 // indirect - github.com/go-openapi/swag v0.19.14 // indirect + github.com/go-openapi/jsonreference v0.19.6 // indirect + github.com/go-openapi/swag v0.21.1 // indirect + github.com/gogo/protobuf v1.3.2 // indirect github.com/golang-jwt/jwt/v4 v4.3.0 // indirect github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect github.com/golang/protobuf v1.5.2 // indirect @@ -68,7 +73,7 @@ require ( github.com/jmespath/go-jmespath v0.4.0 // indirect github.com/josharian/intern v1.0.0 // indirect github.com/lib/pq v1.10.5 // indirect - github.com/mailru/easyjson v0.7.6 // indirect + github.com/mailru/easyjson v0.7.7 // indirect github.com/mattn/go-colorable v0.1.12 // indirect github.com/mattn/go-isatty v0.0.14 // indirect github.com/mitchellh/copystructure v1.2.0 // indirect @@ -77,18 +82,21 @@ require ( github.com/mitchellh/go-wordwrap v1.0.1 // indirect github.com/mitchellh/mapstructure v1.4.3 // indirect github.com/mitchellh/reflectwalk v1.0.2 // indirect + github.com/monochromegane/go-gitignore v0.0.0-20200626010858-205db1a8cc00 // indirect github.com/oklog/run v1.1.0 // indirect github.com/pierrec/lz4 v2.6.1+incompatible // indirect github.com/pkg/errors v0.9.1 // indirect github.com/ryanuber/go-glob v1.0.0 // indirect github.com/sirupsen/logrus v1.8.1 // indirect + github.com/stretchr/objx v0.4.0 // indirect + github.com/xlab/treeprint v1.1.0 // indirect go.mozilla.org/gopgagent v0.0.0-20170926210634-4d7ea76ff71a // indirect go.opencensus.io v0.23.0 // indirect go.uber.org/atomic v1.9.0 // indirect golang.org/x/crypto v0.0.0-20220411220226-7b82a4e95df4 // indirect - golang.org/x/net v0.0.0-20220420153159-1850ba15e1be // indirect + golang.org/x/net v0.0.0-20220722155237-a158d28d115b // indirect golang.org/x/oauth2 v0.0.0-20220411215720-9780585627b5 // indirect - golang.org/x/sys v0.0.0-20220412211240-33da011f77ad // indirect + golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a // indirect golang.org/x/term v0.0.0-20210927222741-03fcf44c2211 // indirect golang.org/x/text v0.3.7 // indirect golang.org/x/time v0.0.0-20220224211638-0e9765cccd65 // indirect @@ -101,7 +109,9 @@ require ( gopkg.in/square/go-jose.v2 v2.6.0 // indirect gopkg.in/urfave/cli.v1 v1.20.0 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect - gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b // indirect + gopkg.in/yaml.v3 v3.0.1 // indirect + k8s.io/apimachinery v0.24.0 // indirect + k8s.io/klog/v2 v2.60.1 // indirect k8s.io/kube-openapi v0.0.0-20220401212409-b28bf2818661 // indirect sigs.k8s.io/kustomize/kyaml v0.13.9 // indirect ) diff --git a/go.sum b/go.sum index 1cd9a5c..1687655 100644 --- a/go.sum +++ b/go.sum @@ -1,4 +1,3 @@ -bazil.org/fuse v0.0.0-20200407214033-5883e5a4b512/go.mod h1:FbcW6z/2VytnFDhZfumh8Ss8zxHE6qpMP5sHTRe0EaM= cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= @@ -27,7 +26,6 @@ cloud.google.com/go v0.93.3/go.mod h1:8utlLll2EF5XMAV15woO4lSbWQlk8rer9aLOfLh7+Y cloud.google.com/go v0.94.1/go.mod h1:qAlAugsXlC+JWO+Bke5vCtc9ONxjQT3drlTTnAplMW4= cloud.google.com/go v0.97.0/go.mod h1:GF7l59pYBVlXQIBLx3a761cZ41F9bBH3JUlihCt2Udc= cloud.google.com/go v0.99.0/go.mod h1:w0Xx2nLzqWJPuozYQX+hFfCSI8WioryfRDzkoI/Y2ZA= -cloud.google.com/go v0.100.2 h1:t9Iw5QH5v4XtlEQaCtUY7x6sCABps8sW0acw7e2WQ6Y= cloud.google.com/go v0.100.2/go.mod h1:4Xra9TjzAeYHrl5+oeLlzbM2k3mjVhZh4UqTZ//w99A= 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= @@ -41,7 +39,6 @@ cloud.google.com/go/compute v1.5.0 h1:b1zWmYuuHz7gO9kDcM/EpHGr06UgsYNRpNJzI2kFiL cloud.google.com/go/compute v1.5.0/go.mod h1:9SMHyhJlzhlkJqrPAc839t2BZFTSk6Jdj6mkzQJeu0M= cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= -cloud.google.com/go/iam v0.3.0/go.mod h1:XzJPvDayI+9zsASAFO68Hk07u3z+f+JrT2xXNdp4bnY= 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= @@ -51,15 +48,12 @@ cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0Zeo cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= -cloud.google.com/go/storage v1.22.0/go.mod h1:GbaLEoMqbVm6sx3Z0R++gSiBlgMv6yUi2q1DeGFKQgE= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= filippo.io/age v1.0.0 h1:V6q14n0mqYU3qKFkZ6oOaF9oXneOviS3ubXsSVBRSzc= filippo.io/age v1.0.0/go.mod h1:PaX+Si/Sd5G8LgfCwldsSba3H1DDQZhIhFGkhbHaBq8= -filippo.io/edwards25519 v1.0.0-rc.1/go.mod h1:N1IkdkCkiLB6tki+MYJoSx2JTY9NUlxZE7eHn5EwJns= github.com/Azure/azure-sdk-for-go v63.3.0+incompatible h1:INepVujzUrmArRZjDLHbtER+FkvCoEwyRCXGqOlmDII= github.com/Azure/azure-sdk-for-go v63.3.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 h1:UQHMgLO+TxOElx5B5HZ4hJQsoJ/PvUvKRhJHDQXO8P8= -github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= github.com/Azure/go-autorest 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.24/go.mod h1:G6kyRlFnTuSbEYkQGawPfsCswgme4iYf6rfSKUDzbCc= @@ -87,12 +81,13 @@ github.com/Azure/go-autorest/tracing v0.6.0/go.mod h1:+vhtPC754Xsa23ID7GlGsrdKBp github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= -github.com/Microsoft/go-winio v0.5.1/go.mod h1:JPGBdM1cNvN/6ISo+n8V5iA4v8pBzdOpzfwIujj1a84= +github.com/GoogleContainerTools/kpt-functions-sdk/go/api v0.0.0-20220720212527-133180134b93 h1:c1GhPzYzU2a3E+/2WB9OxoljK2pNYfsBF5Fz9GkdYXs= +github.com/GoogleContainerTools/kpt-functions-sdk/go/api v0.0.0-20220720212527-133180134b93/go.mod h1:gkK43tTaPXFNASpbIbQImzhmt1hdcdin++kvzTblykc= +github.com/GoogleContainerTools/kpt-functions-sdk/go/fn v0.0.0-20221109010843-1f7d0c07a381 h1:lHfxBfNKWuRpq3IIlijx8+lJ13HDVj4oEBk9xhMEkdc= +github.com/GoogleContainerTools/kpt-functions-sdk/go/fn v0.0.0-20221109010843-1f7d0c07a381/go.mod h1:mqc5jH6i0Ll6T4wCmTXsVNVxhwBGlVtrtmoF/g3E9lE= github.com/Microsoft/go-winio v0.5.2 h1:a9IhgEQBCUEk6QCdml9CiJGhAws+YwffDHEMp1VMrpA= -github.com/Microsoft/go-winio v0.5.2/go.mod h1:WpS1mjBmmwHBEWmogvA2mj8546UReBk4v8QkMxJ6pZY= github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ= github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5 h1:TngWCqHvy9oXAN6lEVMRuU21PR1EtLVZJmdB18Gu3Rw= -github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5/go.mod h1:lmUJ/7eu/Q8D7ML55dXQrVaamCz2vxCfdQBasLZfHKk= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/ProtonMail/go-crypto v0.0.0-20220407094043-a94812496cf5 h1:cSHEbLj0GZeHM1mWG84qEnGFojNEQ83W7cwaPRjcwXU= github.com/ProtonMail/go-crypto v0.0.0-20220407094043-a94812496cf5/go.mod h1:z4/9nQmJSSwwds7ejkxaJwO37dru3geImFUdJlaLzQo= @@ -105,13 +100,13 @@ github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuy github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= -github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= github.com/armon/go-metrics v0.3.9/go.mod h1:4O98XIr/9W0sxpJ8UaYkvjk10Iff7SnFrb4QAOwNTFc= github.com/armon/go-metrics v0.3.10 h1:FR+drcQStOe+32sYyJYyZ7FIdgoGGBnwLl+flodp8Uo= github.com/armon/go-metrics v0.3.10/go.mod h1:4O98XIr/9W0sxpJ8UaYkvjk10Iff7SnFrb4QAOwNTFc= github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= github.com/armon/go-radix v1.0.0 h1:F4z6KzEeeQIMeLFa97iZU6vupzoecKdU5TX24SNppXI= github.com/armon/go-radix v1.0.0/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= +github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= github.com/aws/aws-sdk-go v1.43.43 h1:1L06qzQvl4aC3Skfh5rV7xVhGHjIZoHcqy16NoyQ1o4= github.com/aws/aws-sdk-go v1.43.43/go.mod h1:y4AeaBuwd2Lk+GepC1E9v0qOiTws0MIWAX4oIKwKHZo= @@ -122,18 +117,15 @@ github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kB 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/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= -github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= github.com/cenkalti/backoff/v3 v3.0.0/go.mod h1:cIeZDE3IrqwwJl6VUwCN6trj1oXrTS4rc0ij+ULvLYs= github.com/cenkalti/backoff/v3 v3.2.2 h1:cfUAAO3yvKMYKPrvhDuHSwQnhZNk/RMHKdZqKTxfm6M= github.com/cenkalti/backoff/v3 v3.2.2/go.mod h1:cIeZDE3IrqwwJl6VUwCN6trj1oXrTS4rc0ij+ULvLYs= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/checkpoint-restore/go-criu/v5 v5.3.0/go.mod h1:E/eQpaFtUKGOOSEBZgmKAcn+zUUwWxqcaKZlF54wK8E= github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= -github.com/cilium/ebpf v0.7.0/go.mod h1:/oI2+1shJiTGAMgl6/RgJr36Eo1jzrRcAWbcXO2usCA= github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible/go.mod h1:nmEj6Dob7S7YxXgwXpfOuvO54S+tGdZdw9fuRZt25Ag= github.com/circonus-labs/circonusllhist v0.1.3/go.mod h1:kMXHVDlOchFAehlya5ePtbp5jckzBHf4XRpQvBOLI+I= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= @@ -145,33 +137,17 @@ github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWH github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/containerd/console v1.0.3/go.mod h1:7LqA/THxQ86k76b8c/EMSiaJ3h1eZkMkXar0TQ1gf3U= github.com/containerd/continuity v0.2.2 h1:QSqfxcn8c+12slxwu00AtzXrsami0MJb/MQs9lOLHLA= -github.com/containerd/continuity v0.2.2/go.mod h1:pWygW9u7LtS1o4N/Tn0FoCFDIXZ7rxcMX7HX1Dmibvk= -github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= -github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= -github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= -github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= -github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= -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/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= -github.com/cpuguy83/go-md2man/v2 v2.0.1/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= -github.com/cyphar/filepath-securejoin v0.2.3/go.mod h1:aPGpWjXOXUn2NCNjFvBE6aRxGGx79pTxQpKOJNYHHl4= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= -github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= github.com/dimchansky/utfbom v1.1.1 h1:vV6w1AhK4VMnhBno/TPVCoK9U/LP0PkLCS9tbxHdi/U= github.com/dimchansky/utfbom v1.1.1/go.mod h1:SxdoEBH5qIqFocHMyGOXVAybYJdr71b1Q/j0mACtrfE= 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.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/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE= -github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= +github.com/elazarl/goproxy v0.0.0-20180725130230-947c36da3153/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc= github.com/emicklei/go-restful v0.0.0-20170410110728-ff4f55a20633/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= @@ -182,7 +158,7 @@ github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.m github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ= github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/evanphx/json-patch v4.11.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= +github.com/evanphx/json-patch v4.12.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= github.com/evanphx/json-patch/v5 v5.5.0/go.mod h1:G79N1coSVB93tBe7j6PhzjmR3/2VvlbKOFpnXhI9Bw4= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/fatih/color v1.13.0 h1:8LOYc1KYPPmyKMuN8QV2DNRWNbLo6LZ0iLs8+mlH53w= @@ -190,10 +166,10 @@ github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYF github.com/fatih/structs v1.1.0 h1:Q7juDM0QtcnhCpeyLGQKyg4TOIghuNXrkL32pHAUMxo= github.com/fatih/structs v1.1.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga6PJ7M= github.com/frankban/quicktest v1.10.0/go.mod h1:ui7WezCLWMWxVWr1GETZY3smRy0G4KWq9vcPtJmFl7Y= -github.com/frankban/quicktest v1.11.3/go.mod h1:wRf/ReqHper53s+kmmSZizM8NamnL3IM0I9ntUbOk+k= github.com/frankban/quicktest v1.13.0 h1:yNZif1OkDfNoDfb9zZa9aXIpejNR4F23Wely0c+Qdqk= github.com/frankban/quicktest v1.13.0/go.mod h1:qLE0fzW0VuyUAJgPU19zByoIr0HtCHN/r/VLSOOIySU= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= +github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= github.com/getkin/kin-openapi v0.76.0/go.mod h1:660oXbgy5JFMKreazJaQTw7o+X00qeSyhcnluiMv+Xg= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/go-asn1-ber/asn1-ber v1.3.1/go.mod h1:hEBeB/ic+5LoWskz+yKT7vGhhPYkProFKoKdwZRWMe0= @@ -209,28 +185,28 @@ github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9 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= +github.com/go-logr/logr v1.2.0 h1:QK40JKJyMdUDz+h+xvCsru/bJhvG0UxvePV0ufL/AcE= +github.com/go-logr/logr v1.2.0/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= github.com/go-openapi/jsonpointer v0.19.5 h1:gZr+CIYByUqjcgeLXnQu2gHYQC9o73G2XUeOFYEICuY= github.com/go-openapi/jsonpointer v0.19.5/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= github.com/go-openapi/jsonreference v0.19.3/go.mod h1:rjx6GuL8TTa9VaixXglHmQmIL98+wF9xc8zWvFonSJ8= -github.com/go-openapi/jsonreference v0.19.5 h1:1WJP/wi4OjB4iV8KVbH73rQaoialJrqv8gitZLxGLtM= -github.com/go-openapi/jsonreference v0.19.5/go.mod h1:RdybgQwPxbL4UEjuAruzK1x3nE69AqPYEJeo/TWfEeg= +github.com/go-openapi/jsonreference v0.19.6 h1:UBIxjkht+AWIgYzCDSv2GN+E/togfwXUJFRTWhl2Jjs= +github.com/go-openapi/jsonreference v0.19.6/go.mod h1:diGHMEHg2IqXZGKxqyvWdfWU/aim5Dprw5bqpKkTvns= github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= -github.com/go-openapi/swag v0.19.14 h1:gm3vOOXfiuw5i9p5N9xJvfjvuofpyvLA9Wr6QfK5Fng= -github.com/go-openapi/swag v0.19.14/go.mod h1:QYRuS/SOXUCsnplDa677K7+DxSOj6IPNl/eQntq43wQ= +github.com/go-openapi/swag v0.21.1 h1:wm0rhTb5z7qpJRHBdPOMuY4QjVUMbF6/kwoYeRAOrKU= +github.com/go-openapi/swag v0.21.1/go.mod h1:QYRuS/SOXUCsnplDa677K7+DxSOj6IPNl/eQntq43wQ= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= github.com/go-test/deep v1.0.2 h1:onZX1rnHT3Wv6cqNgYyFOOlgVKJrksuCMCRvJStbMYw= github.com/go-test/deep v1.0.2/go.mod h1:wGDj63lr65AM2AQyKZd/NYHGb0R+1RLqB8NKt3aSFNA= -github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= -github.com/godbus/dbus/v5 v5.0.6/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= 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.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= +github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= github.com/golang-jwt/jwt/v4 v4.0.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg= github.com/golang-jwt/jwt/v4 v4.2.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg= github.com/golang-jwt/jwt/v4 v4.3.0 h1:kHL1vqdqWNfATmA0FNMdmZNMyZI1U6O31X4rlIPoBog= github.com/golang-jwt/jwt/v4 v4.3.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= @@ -282,8 +258,8 @@ github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.7 h1:81/ik6ipDQS2aGcBfIN5dHDB36BwrStyeAQquSYCV4o= github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE= +github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= 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= @@ -306,7 +282,6 @@ github.com/google/pprof v0.0.0-20210601050228-01bbb1931b22/go.mod h1:kpwsk12EmLe github.com/google/pprof v0.0.0-20210609004039-a478d1d731e9/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= -github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510/go.mod h1:pupxD2MaaD3pAXIBCelhxNneeOaAeabZDe5s4K6zSpQ= 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/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= @@ -314,15 +289,10 @@ github.com/googleapis/gax-go/v2 v2.1.0/go.mod h1:Q3nei7sK6ybPYH7twZdmQpAd1MKb7pf github.com/googleapis/gax-go/v2 v2.1.1/go.mod h1:hddJymUZASv3XPyGkUpKj8pPO47Rmb0eJc8R6ouapiM= github.com/googleapis/gax-go/v2 v2.2.0 h1:s7jOdKSaksJVOxE0Y/S32otcfiP+UQ0cL8/GTKaONwE= github.com/googleapis/gax-go/v2 v2.2.0/go.mod h1:as02EH8zWkzwUoLbBaFeQ+arQaj/OthfcblKl4IGNaM= -github.com/googleapis/go-type-adapters v1.0.0/go.mod h1:zHW75FOG2aur7gAO2B+MLby+cLsWGBF62rFAi7WjWO4= github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= -github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= -github.com/gotestyourself/gotestyourself v2.2.0+incompatible/go.mod h1:zZKM6oeNM8k+FRljX1mnzVYeS8wiGgQyvST1/GafPbY= +github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/goware/prefixer v0.0.0-20160118172347-395022866408 h1:Y9iQJfEqnN3/Nce9cOegemcy/9Ai5k3huT6E80F3zaw= github.com/goware/prefixer v0.0.0-20160118172347-395022866408/go.mod h1:PE1ycukgRPJ7bJ9a1fdfQ9j8i/cEcRAoLZzbxYpNB/s= -github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= -github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= -github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I= @@ -386,10 +356,9 @@ github.com/hashicorp/yamux v0.0.0-20211028200310-0bc27b27de87 h1:xixZ2bWeofWV68J github.com/hashicorp/yamux v0.0.0-20211028200310-0bc27b27de87/go.mod h1:CtWFDAQgb7dxtzFs4tWbplKIe2jSi3+5vKbgIO0SLnQ= github.com/howeyc/gopass v0.0.0-20210920133722-c8aef6fb66ef h1:A9HsByNhogrvm9cWb28sjiS3i7tcKCkflWFEkHfuAgM= github.com/howeyc/gopass v0.0.0-20210920133722-c8aef6fb66ef/go.mod h1:lADxMC39cJJqL93Duh1xhAs4I2Zs8mKS89XWXFGp9cs= +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= github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= -github.com/imdario/mergo v0.3.6/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= -github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= github.com/jhump/protoreflect v1.6.0 h1:h5jfMVslIg6l29nsMs0D8Wj17RDVdNYti0vDN/PZZoE= github.com/jhump/protoreflect v1.6.0/go.mod h1:eaTn3RZAmMBcV0fifFvlm6VHNz3wSkYyXYWUh7ymB74= @@ -399,33 +368,33 @@ github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGw github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= github.com/joho/godotenv v1.4.0 h1:3l4+N6zfMWnkbPEXKng2o2/MR5mSwTrBih4ZEkkz1lg= github.com/joho/godotenv v1.4.0/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4= -github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= -github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= +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/konsorten/go-windows-terminal-sequences v1.0.1/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= github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= -github.com/kr/pretty v0.2.1 h1:Fmg33tUaq4/8ym9TJN1x7sLJnHVwhP33CNkpYV/7rwI= github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= +github.com/kr/pretty v0.3.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/lib/pq v1.10.5 h1:J+gdV2cUmX7ZqL2B0lFcW0m+egaHC2V3lpO8nWxyYiQ= github.com/lib/pq v1.10.5/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= -github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/mailru/easyjson v0.7.6 h1:8yTIVnZgCoiM1TgqoeTl+LfU5Jg6/xL3QhGQnimLYnA= github.com/mailru/easyjson v0.7.6/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= +github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0= +github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= github.com/mattn/go-colorable v0.1.6/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= @@ -460,36 +429,35 @@ github.com/mitchellh/mapstructure v1.4.3/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RR github.com/mitchellh/reflectwalk v1.0.0/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ= github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= -github.com/moby/sys/mountinfo v0.5.0/go.mod h1:3bMD3Rg+zkqx8MRYPi7Pyb0Ie97QEBmdxbhnCLlSvSU= +github.com/moby/spdystream v0.2.0/go.mod h1:f7i0iNDQJ059oMTcWxx8MA/zKFIuD/lY+0GqbN2Wy8c= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= +github.com/monochromegane/go-gitignore v0.0.0-20200626010858-205db1a8cc00 h1:n6/2gBQ3RWajuToeY6ZtZTIKv2v7ThUy5KKusIT0yc0= github.com/monochromegane/go-gitignore v0.0.0-20200626010858-205db1a8cc00/go.mod h1:Pm3mSP3c5uWn86xMLZ5Sa7JB9GsEZySvHYXCTK4E9q4= -github.com/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/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= -github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs= +github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= +github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA= github.com/oklog/run v1.1.0 h1:GEenZ1cK0+q0+wsJew9qUg/DyD8k3JzYsZAi5gYi2mA= github.com/oklog/run v1.1.0/go.mod h1:sVPdnTZT1zYwAJeCMu2Th4T21pA3FPOQRfWjQlk7DVU= -github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= github.com/onsi/ginkgo v0.0.0-20170829012221-11459a886d9c/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= +github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= +github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= +github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= 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.2 h1:9yCKha/T5XdGtO0q9Q9a6T5NUCsTn/DrBg0D7ufOcFM= -github.com/opencontainers/image-spec v1.0.2/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0= github.com/opencontainers/runc v1.1.0 h1:O9+X96OcDjkmmZyfaG996kV7yq8HsoU2h1XRRQcefG8= -github.com/opencontainers/runc v1.1.0/go.mod h1:Tj1hFw6eFWp/o33uxGf5yF2BX5yz2Z6iptFpuvbbKqc= -github.com/opencontainers/runtime-spec v1.0.3-0.20210326190908-1c3f411f0417/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= -github.com/opencontainers/selinux v1.10.0/go.mod h1:2i0OySw99QjzBBQByd1Gr9gSjvuho1lHsJxIJ3gGbJI= github.com/ory/dockertest v3.3.5+incompatible h1:iLLK6SQwIhcbrG783Dghaaa3WPzGc+4Emza6EbVUUGA= -github.com/ory/dockertest v3.3.5+incompatible/go.mod h1:1vX4m9wsvi00u5bseYwXaSnhNrne+V0E6LAcBILJdPs= github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0MwY= github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= -github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= github.com/pierrec/lz4 v2.5.2+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= github.com/pierrec/lz4 v2.6.1+incompatible h1:9UY3+iC23yxF0UfGaYrGplQ+79Rg+h/q9FV9ix19jjM= github.com/pierrec/lz4 v2.6.1+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= @@ -501,80 +469,51 @@ github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZb github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= -github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso= github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= github.com/prometheus/client_golang v1.4.0/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= -github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.9.1/go.mod h1:yhUN8i9wzaXS3w1O07YhxHEBxD+W35wd8bs7vj7HSQ4= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= -github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A= -github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= -github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= -github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= -github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8= github.com/ryanuber/columnize v2.1.0+incompatible/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= github.com/ryanuber/go-glob v1.0.0 h1:iQh3xXAumdQ+4Ufa5b25cRpC5TYKlno6hsv6Cb3pkBk= github.com/ryanuber/go-glob v1.0.0/go.mod h1:807d1WSdnB0XRJzKNil9Om6lcp/3a0v4qIHxIXzX/Yc= -github.com/seccomp/libseccomp-golang v0.9.2-0.20210429002308-3879420cc921/go.mod h1:JA8cRccbGaA1s33RQf7Y1+q9gHmZX1yB/z9WDN1C6fg= -github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= -github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= -github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= github.com/sirupsen/logrus v1.8.1 h1:dJKuHgqk1NNQlqoA6BTlM1Wf9DOH3NBjQyu0h9+AZZE= github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= -github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= -github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk= -github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= -github.com/spf13/cobra v1.0.0/go.mod h1:/6GTrnGXV9HjY+aR4k0oJ5tcvakLuG6EuKReYlHNrgE= -github.com/spf13/cobra v1.4.0/go.mod h1:Wo4iy3BUC+X2Fybo0PDqwJIv3dNRiZLHQymsfxlB84g= -github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= -github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= 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/stoewer/go-strcase v1.2.0/go.mod h1:IBiWB2sKIp3wVVQ3Y035++gc+knqhUQag1KpM8ahLw8= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= -github.com/stretchr/objx v0.3.0 h1:NGXK3lHquSN08v5vWalVI/L8XU9hdzE/G6xsrze47As= -github.com/stretchr/objx v0.3.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= +github.com/stretchr/objx v0.4.0 h1:M2gUjqZET1qApGOWNSnZ49BAIMX4F/1plDv3+l31EJ4= +github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.7.1 h1:5TQK59W5E3v0r2duFAb7P95B6hEeOyEnHRa8MjYSMTY= github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= -github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= +github.com/stretchr/testify v1.8.0 h1:pSgiaMZlXftHpm5L7V1+rVB+AZJydKsMxsQBIJw4PKk= github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= -github.com/tv42/httpunix v0.0.0-20191220191345-2ba4b9c3382c/go.mod h1:hzIxponao9Kjc7aWznkXaL4U4TWaDSs8zcsY4Ka08nM= -github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc= -github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= -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/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= +github.com/xlab/treeprint v1.1.0 h1:G/1DjNkPpfZCFt9CSh6b5/nY4VimlbHF3Rh4obvtzDk= github.com/xlab/treeprint v1.1.0/go.mod h1:gj5Gd3gPdKtR1ikdDK6fnFLdmIS0X30kTTuNd/WEJu0= -github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= -go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= go.mozilla.org/gopgagent v0.0.0-20170926210634-4d7ea76ff71a h1:N7VD+PwpJME2ZfQT8+ejxwA4Ow10IkGbU0MGf94ll8k= go.mozilla.org/gopgagent v0.0.0-20170926210634-4d7ea76ff71a/go.mod h1:YDKUvO0b//78PaaEro6CAPH6NqohCmL2Cwju5XI2HoE= go.mozilla.org/sops/v3 v3.7.3 h1:CYx02LnWTATWv6NqWJIt4JCKVKSnGV+MsRiDpvwWQhg= @@ -588,12 +527,8 @@ go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= go.opencensus.io v0.23.0 h1:gqCw0LfLxScz8irSi8exQc7fyQ0fKQU/qnC/X8+V/1M= go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= -go.starlark.net v0.0.0-20200306205701-8dd3e2ee1dd5/go.mod h1:nmDLcffg48OtT/PSW0Hg7FvpRQsQh5OSqIylirxKC7o= -go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.9.0 h1:ECmE8Bn/WFTYwEW/bpKD3M8VtR/zQVbavAoalC1PYyE= go.uber.org/atomic v1.9.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= -go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= -go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= @@ -602,7 +537,6 @@ golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8U golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.0.0-20210817164053-32db794688a5/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220411220226-7b82a4e95df4 h1:kUhD7nTDoI3fVd9G4ORWrbV5NY0liEs/Jg2pv5f+bBA= @@ -645,15 +579,14 @@ golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/net v0.0.0-20180530234432-1e491301e022/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190522155817-f3200d17e092/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= @@ -670,6 +603,7 @@ golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/ 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= @@ -678,18 +612,18 @@ golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwY golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= +golang.org/x/net v0.0.0-20210421230115-4e50805a0758/go.mod h1:72T/g9IO56b78aLF+1Kcs5dz7/ng1VjMUvfKvpfy+jM= golang.org/x/net v0.0.0-20210503060351-7fd8e65b6420/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220325170049-de3da57026de/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.0.0-20220420153159-1850ba15e1be h1:yx80W7nvY5ySWpaU8UWaj5o9e23YgO9BRhQol7Lc+JI= -golang.org/x/net v0.0.0-20220420153159-1850ba15e1be/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220722155237-a158d28d115b h1:PxfKdU9lEEDYjdIzOtC4qFWgkU2rGHdKlKowJSMN9h0= +golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= 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= @@ -724,7 +658,7 @@ golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJ 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= -golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -734,16 +668,15 @@ golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190606203320-7fc4e5ec1444/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-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-20191008105621-543471e840be/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191115151921-52ab43148777/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191210023423-ac6580df4449/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -757,6 +690,7 @@ golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7w 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-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -765,12 +699,12 @@ golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210305230114-8fe3ee5dd75b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210420072515-93ed5bcd2bfe/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210514084401-e8d321eab015/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -780,12 +714,8 @@ golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210903071746-97244b99971b/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210906170528-6f6e22806c34/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210908233432-aa78b53d3365/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211025201205-69cdffdb9359/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211116061358-0a5406a5449c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211124211545-fe61309f8881/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211210111614-af8b64212486/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -793,10 +723,9 @@ golang.org/x/sys v0.0.0-20220128215802-99c3d69c2c27/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220209214540-3681064d5158/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220227234510-4e6760a101f9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220328115105-d36c6a25d886/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220412211240-33da011f77ad h1:ntjMns5wyP/fN65tdBD4g8J5w8n015+iIIs9rtjXkY0= -golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a h1:dGzPydgVsqGcTRVwiLJ1jVbufYwmzD3LfVPLKsKg+0k= +golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/term v0.0.0-20210615171337-6886f2dfbf5b/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211 h1:JGgROgKl9N8DuW20oFS5gxc+lE67/N3FcwmBPMe7ArY= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -815,7 +744,6 @@ golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxb golang.org/x/time v0.0.0-20200416051211-89c76fbcd5d1/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20220224211638-0e9765cccd65 h1:M73Iuj3xbbb9Uk1DYhzydthsj6oOd6l9bpuFcNoUvTs= golang.org/x/time v0.0.0-20220224211638-0e9765cccd65/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= @@ -854,6 +782,7 @@ golang.org/x/tools v0.0.0-20200505023115-26f46d2f7ef8/go.mod h1:EkVYQZoAsY45+roY 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= @@ -862,6 +791,7 @@ golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4f golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.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/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= @@ -958,7 +888,6 @@ google.golang.org/genproto v0.0.0-20210222152913-aa3ee6e6a81c/go.mod h1:FWY/as6D google.golang.org/genproto v0.0.0-20210303154014-9728d6b83eeb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210310155132-4ce2db91004e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210319143718-93e7006c17a6/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210329143202-679c6ae281ee/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= google.golang.org/genproto v0.0.0-20210402141018-6c239bbf2bb1/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= google.golang.org/genproto v0.0.0-20210513213006-bf773b8c8384/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A= google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= @@ -992,7 +921,6 @@ google.golang.org/genproto v0.0.0-20220405205423-9d709892a2bf/go.mod h1:8w6bsBMX google.golang.org/grpc v1.8.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= -google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= @@ -1041,18 +969,19 @@ gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLks 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/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= +gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= +gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= gopkg.in/ini.v1 v1.66.4 h1:SsAcf+mM7mRZo2nJNGt8mZCjG8ZRaNGMURJw7BsIST4= gopkg.in/ini.v1 v1.66.4/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= -gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= gopkg.in/square/go-jose.v2 v2.5.1/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= gopkg.in/square/go-jose.v2 v2.6.0 h1:NGk74WTnPKBNUhNzQX7PYcTLUjoq7mzKk2OKbvwk2iI= gopkg.in/square/go-jose.v2 v2.6.0/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= +gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= gopkg.in/urfave/cli.v1 v1.20.0 h1:NdAVW6RYxDif9DhDHaAortIu956m2c0v+09AZBPTbE0= gopkg.in/urfave/cli.v1 v1.20.0/go.mod h1:vuBzUtMdQeixQj8LVd+/98pzhxNGQoyuPBlsXHOQNO0= -gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= @@ -1064,9 +993,9 @@ 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/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/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= @@ -1074,9 +1003,14 @@ honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWh 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/apimachinery v0.24.0 h1:ydFCyC/DjCvFCHK5OPMKBlxayQytB8pxy8YQInd5UyQ= +k8s.io/apimachinery v0.24.0/go.mod h1:82Bi4sCzVBdpYjyI4jY6aHX+YCUchUIrZrXKedjd2UM= k8s.io/gengo v0.0.0-20210813121822-485abfe95c7c/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E= 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.60.1 h1:VW25q3bZx9uE3vvdL6M8ezOX79vA2Aq1nEWLqNQclHc= +k8s.io/klog/v2 v2.60.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= +k8s.io/kube-openapi v0.0.0-20220328201542-3ee0da9b0b42/go.mod h1:Z/45zLw8lUo4wdiUkI+v/ImEGAvu3WatcZl3lPMR4Rk= k8s.io/kube-openapi v0.0.0-20220401212409-b28bf2818661 h1:nqYOUleKLC/0P1zbU29F5q6aoezM6MOAVz+iyfQbZ5M= k8s.io/kube-openapi v0.0.0-20220401212409-b28bf2818661/go.mod h1:daOouuuwd9JXpv1L7Y34iV3yf6nxzipkKMWWlqlvK9M= k8s.io/utils v0.0.0-20210802155522-efc7438f0176/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= @@ -1084,11 +1018,13 @@ k8s.io/utils v0.0.0-20220210201930-3a6ce19ff2f9/go.mod h1:jPW/WVKK9YHAvNhRxK0md/ rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= +sigs.k8s.io/json v0.0.0-20211208200746-9f7c6b3444d2/go.mod h1:B+TnT182UBxE84DiCz4CVE26eOSDAeYCpfDnC2kdKMY= sigs.k8s.io/kustomize/api v0.12.1 h1:7YM7gW3kYBwtKvoY216ZzY+8hM+lV53LUayghNRJ0vM= sigs.k8s.io/kustomize/api v0.12.1/go.mod h1:y3JUhimkZkR6sbLNwfJHxvo1TCLwuwm14sCYnkH6S1s= sigs.k8s.io/kustomize/kyaml v0.13.9 h1:Qz53EAaFFANyNgyOEJbT/yoIHygK40/ZcvU3rgry2Tk= sigs.k8s.io/kustomize/kyaml v0.13.9/go.mod h1:QsRbD0/KcU+wdk0/L0fIp2KLnohkVzs6fQ85/nOXac4= sigs.k8s.io/structured-merge-diff/v4 v4.0.2/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw= +sigs.k8s.io/structured-merge-diff/v4 v4.2.1/go.mod h1:j/nl6xW8vLS49O8YvXW1ocPhZawJtm+Yrr7PPRQ0Vg4= sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc= sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo= sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8= diff --git a/ksops.go b/ksops.go index f4bbb32..e8ada9b 100644 --- a/ksops.go +++ b/ksops.go @@ -2,7 +2,7 @@ Copyright 2019 viaduct.ai SPDX-License-Identifier: Apache-2.0 -KSOPS - A Flexible Kustomize Plugin for SOPS Encrypted Resource +# KSOPS - A Flexible Kustomize Plugin for SOPS Encrypted Resource KSOPS, or kustomize-SOPS, is a kustomize plugin for SOPS encrypted resources. KSOPS can be used to decrypt any Kubernetes resource, but is most commonly used to decrypt encrypted Kubernetes Secrets and ConfigMaps. As a kustomize plugin, KSOPS allows you to manage, build, and apply encrypted manifests the same way you manage the rest of your Kubernetes manifests. */ @@ -16,6 +16,7 @@ import ( "path/filepath" "strings" + "github.com/GoogleContainerTools/kpt-functions-sdk/go/fn" "github.com/joho/godotenv" "go.mozilla.org/sops/v3/cmd/sops/formats" "go.mozilla.org/sops/v3/decrypt" @@ -43,89 +44,139 @@ type ksops struct { SecretFrom []secretFrom `json:"secretFrom,omitempty" yaml:"secretFrom,omitempty"` } -func decryptFile(file string, generatorContent []byte) []byte { - b, err := ioutil.ReadFile(file) - if err != nil { - fmt.Fprintf(os.Stderr, "error reading %q: %q\n", file, err.Error()) - fmt.Fprintf(os.Stderr, "manifest content: %s", generatorContent) - os.Exit(1) - } +func help() { + msg := ` + KSOPS is a flexible kustomize plugin for SOPS encrypted resources. + KSOPS supports both legacy and KRM style exec kustomize functions. - format := formats.FormatForPath(file) - data, err := decrypt.DataWithFormat(b, format) - if err != nil { - fmt.Fprintf(os.Stderr, "trouble decrypting file %s", err.Error()) - os.Exit(1) - } - return data -} + kustomize Usage: + - kustomize build --enable-alpha-plugins --enable-exec -func getKeyPath(file string) (string, string) { - slices := strings.Split(file, "=") - if len(slices) == 1 { - return filepath.Base(file), file - } else if len(slices) > 2 { - fmt.Fprintf(os.Stderr, "invalid format in file generator %s", file) - os.Exit(1) - } - return slices[0], slices[1] + Standalone Usage : + - Legacy: ksops secret-generator.yaml + - KRM: cat secret-generator.yaml | ksops +` + fmt.Fprintf(os.Stderr, "%s", strings.ReplaceAll(msg, " ", "")) + os.Exit(1) } // main executes KOSPS as an exec plugin func main() { - if len(os.Args) != 2 { - fmt.Fprintln(os.Stderr, "received too few args:", os.Args) - fmt.Fprintln(os.Stderr, "always invoke this via kustomize plugins") - os.Exit(1) + nargs := len(os.Args) + if !(nargs == 1 || nargs == 2) { + help() } + // If one argument, assume KRM style + if nargs == 1 { + // https://stackoverflow.com/questions/22744443/check-if-there-is-something-to-read-on-stdin-in-golang + stat, _ := os.Stdin.Stat() + + // Check the StdIn content. + if !(stat.Mode()&os.ModeCharDevice == 0) { + help() + } + err := fn.AsMain(fn.ResourceListProcessorFunc(krm)) + if err != nil { + fmt.Fprintf(os.Stderr, "unable to generate manifests: %v", err) + os.Exit(1) + } + return + } + + // If two argument, assume legacy style + // ignore the first file name argument // load the second argument, the file path - generatorContent, err := ioutil.ReadFile(os.Args[1]) + manifest, err := ioutil.ReadFile(os.Args[1]) if err != nil { - fmt.Fprintln(os.Stderr, "unable to read in manifest", os.Args[1]) + fmt.Fprintf(os.Stderr, "unable to read in manifest: %s", os.Args[1]) os.Exit(1) } + result, err := generate(manifest) + if err != nil { + fmt.Fprintf(os.Stderr, "unable to generate manifests: %v", err) + os.Exit(1) + } + + fmt.Print(result) +} + +// https://pkg.go.dev/github.com/GoogleContainerTools/kpt-functions-sdk/go/fn#hdr-KRM_Function +func krm(rl *fn.ResourceList) (bool, error) { + var items fn.KubeObjects + for _, manifest := range rl.Items { + out, err := generate([]byte(manifest.String())) + if err != nil { + rl.LogResult(err) + return false, err + } + + // generate can return multiple manifests + objs, err := fn.ParseKubeObjects([]byte(out)) + if err != nil { + rl.LogResult(err) + return false, err + } + + items = append(items, objs...) + } + + rl.Items = items + + return true, nil +} + +func generate(raw []byte) (string, error) { var manifest ksops - err = yaml.Unmarshal(generatorContent, &manifest) + err := yaml.Unmarshal(raw, &manifest) if err != nil { - fmt.Fprintf(os.Stderr, "error unmarshalling manifest content: %q \n%s\n", err, generatorContent) - os.Exit(1) + return "", fmt.Errorf("error unmarshalling manifest content: %q \n%s", err, raw) } if manifest.Files == nil && manifest.SecretFrom == nil { - fmt.Fprintf(os.Stderr, "missing the required 'files' or 'secretFrom' key in the ksops manifests: %s", generatorContent) - os.Exit(1) + return "", fmt.Errorf("missing the required 'files' or 'secretFrom' key in the ksops manifests: %s", raw) } var output bytes.Buffer - for _, file := range manifest.Files { - data := decryptFile(file, generatorContent) + for i, file := range manifest.Files { + data, err := decryptFile(file) + if err != nil { + return "", fmt.Errorf("error decrypting file %q from manifest.Files: %w", file, err) + } output.Write(data) - output.WriteString("\n---\n") + // KRM treats will try parse (and fail) empty documents if there is a trailing separator + if i < len(manifest.Files)-1 { + output.WriteString("\n---\n") + } } - for _, secretFrom := range manifest.SecretFrom { + for i, secretFrom := range manifest.SecretFrom { stringData := make(map[string]string) for _, file := range secretFrom.Files { - key, path := getKeyPath(file) - data := decryptFile(path, generatorContent) + key, path := fileKeyPath(file) + data, err := decryptFile(path) + if err != nil { + return "", fmt.Errorf("error decrypting file %q from secretFrom.Files: %w", path, err) + } stringData[key] = string(data) } for _, file := range secretFrom.Envs { - data := decryptFile(file, generatorContent) + data, err := decryptFile(file) + if err != nil { + return "", fmt.Errorf("error decrypting file %q from secretFrom.Envs: %w", file, err) + } env, err := godotenv.Unmarshal(string(data)) if err != nil { - fmt.Fprintf(os.Stderr, "error unmarshalling .env file %s", err.Error()) - os.Exit(1) + return "", fmt.Errorf("error unmarshalling .env file %q: %w", file, err) } for k, v := range env { stringData[k] = v @@ -141,12 +192,39 @@ func main() { } d, err := yaml.Marshal(&s) if err != nil { - fmt.Fprintf(os.Stderr, "error marshalling manifest %s", err.Error()) - os.Exit(1) + return "", fmt.Errorf("error marshalling manifest: %w", err) } output.WriteString(string(d)) - output.WriteString("---\n") + // KRM treats will try parse (and fail) empty documents if there is a trailing separator + if i < len(manifest.SecretFrom)-1 { + output.WriteString("---\n") + } } - fmt.Print(output.String()) + return output.String(), nil +} + +func decryptFile(file string) ([]byte, error) { + b, err := ioutil.ReadFile(file) + if err != nil { + return nil, fmt.Errorf("error reading %q: %w", file, err) + } + + format := formats.FormatForPath(file) + data, err := decrypt.DataWithFormat(b, format) + if err != nil { + return nil, fmt.Errorf("trouble decrypting file: %w", err) + } + return data, nil +} + +func fileKeyPath(file string) (string, string) { + slices := strings.Split(file, "=") + if len(slices) == 1 { + return filepath.Base(file), file + } else if len(slices) > 2 { + fmt.Fprintf(os.Stderr, "invalid format in file generator %s", file) + os.Exit(1) + } + return slices[0], slices[1] } diff --git a/ksops_test.go b/ksops_test.go index c5a3c81..abfd140 100644 --- a/ksops_test.go +++ b/ksops_test.go @@ -18,12 +18,15 @@ func runKSOPSPluginIntegrationTest(t *testing.T, testDir string, kustomizeVersio t.Fatalf("error readding expected resources file %s: %v", path.Join(testDir, "want.yaml"), err) } - pluginFlag := "--enable-alpha-plugins" + arg := []string{"build"} + flags := []string{"--enable-alpha-plugins", "--enable-exec"} if kustomizeVersion == "v3" { - pluginFlag = "--enable_alpha_plugins" + flags = []string{"--enable_alpha_plugins"} } + arg = append(arg, flags...) + arg = append(arg, testDir) - cmd := exec.Command("kustomize", "build", pluginFlag, testDir) + cmd := exec.Command("kustomize", arg...) out := bytes.Buffer{} cmd.Stdout = &out cmd.Stderr = &out @@ -41,36 +44,68 @@ func TestKSOPSPluginInstallation(t *testing.T) { dir string }{ { - name: "Simple", - dir: "test/single", + name: "Legacy Single Resource", + dir: "test/legacy/single", }, { - name: "Multiple Resources", - dir: "test/multiple", + name: "Legacy Multiple Resources", + dir: "test/legacy/multiple", }, { - name: "Hash Suffix", - dir: "test/hash", + name: "Legacy Hash Suffix", + dir: "test/legacy/hash", }, { - name: "Replace Behavior", - dir: "test/behaviors", + name: "Legacy Replace Behavior", + dir: "test/legacy/behaviors", }, { - name: "From File", - dir: "test/file", + name: "Legacy From File", + dir: "test/legacy/file", }, { - name: "From Envs", - dir: "test/envs", + name: "Legacy From Envs", + dir: "test/legacy/envs", }, { - name: "Override Key", - dir: "test/override", + name: "Legacy Override Key", + dir: "test/legacy/override", }, { - name: "Secret Metadata", - dir: "test/metadata", + name: "Legacy Secret Metadata", + dir: "test/legacy/metadata", + }, + { + name: "KRM Single Resource", + dir: "test/krm/single", + }, + { + name: "KRM Multiple Resources", + dir: "test/krm/multiple", + }, + { + name: "KRM Hash Suffix", + dir: "test/krm/hash", + }, + { + name: "KRM Replace Behavior", + dir: "test/krm/behaviors", + }, + { + name: "KRM From File", + dir: "test/krm/file", + }, + { + name: "KRM From Envs", + dir: "test/krm/envs", + }, + { + name: "KRM Override Key", + dir: "test/krm/override", + }, + { + name: "KRM Secret Metadata", + dir: "test/krm/metadata", }, } diff --git a/scripts/install-ksops-archive.sh b/scripts/install-ksops-archive.sh index a57014a..122bf49 100755 --- a/scripts/install-ksops-archive.sh +++ b/scripts/install-ksops-archive.sh @@ -1,20 +1,11 @@ #!/bin/bash set -e -# Require $XDG_CONFIG_HOME to be set -if [[ -z "$XDG_CONFIG_HOME" ]]; then - echo "You must define XDG_CONFIG_HOME to use a kustomize plugin" - echo "Add 'export XDG_CONFIG_HOME=\$HOME/.config' to your .bashrc or .zshrc" - exit 1 -fi - - -PLUGIN_PATH="$XDG_CONFIG_HOME/kustomize/plugin/viaduct.ai/v1/ksops/" +PLUGIN_PATH="/usr/local/bin/" - -echo "Verify ksops plugin directory exists and is empty" -rm -rf $PLUGIN_PATH || true -mkdir -p $PLUGIN_PATH +if [[ ! -d "$PLUGIN_PATH" ]]; then + echo "$PLUGIN_PATH does not exist. Cannot add ksops to PATH." +fi get_machine_arch () { machine_arch="" diff --git a/scripts/install-ksops.sh b/scripts/install-ksops.sh index 96c4f6c..d9841ac 100755 --- a/scripts/install-ksops.sh +++ b/scripts/install-ksops.sh @@ -3,7 +3,7 @@ set -e # Require $XDG_CONFIG_HOME to be set if [[ -z "$XDG_CONFIG_HOME" ]]; then - echo "You must define XDG_CONFIG_HOME to use a kustomize plugin" + echo "You must define XDG_CONFIG_HOME to use a legacy kustomize plugin" echo "Add 'export XDG_CONFIG_HOME=\$HOME/.config' to your .bashrc or .zshrc" exit 1 fi @@ -11,7 +11,17 @@ fi PLUGIN_NAME="ksops" # ------------------------ -# ksops Plugin +# ksops KRM Plugin +# Install to Go executable path if it exists +# ------------------------ +if [[ -d "$GOPATH" ]]; then + echo "Copying plugin to the go executable path..." + echo "cp $PLUGIN_NAME $GOPATH/bin/" + cp $PLUGIN_NAME $GOPATH/bin/ +fi + +# ------------------------ +# ksops legacy Plugin # ------------------------ PLUGIN_PATH="$XDG_CONFIG_HOME/kustomize/plugin/viaduct.ai/v1/$PLUGIN_NAME/" @@ -24,7 +34,7 @@ echo "cp $PLUGIN_NAME $PLUGIN_PATH" cp $PLUGIN_NAME $PLUGIN_PATH # ------------------------ -# Deprecated ksops-exec Plugin +# Deprecated ksops-exec legacy Plugin # Please migrate to ksops if you are using ksops-exec # ------------------------ DEPRECATED_EXEC_PLUGIN_NAME="ksops-exec" diff --git a/scripts/install-kustomize.sh b/scripts/install-kustomize.sh index 734859b..5b7a7d4 100755 --- a/scripts/install-kustomize.sh +++ b/scripts/install-kustomize.sh @@ -16,7 +16,7 @@ function install_kustomize() { KSOPS_VERSION=$KSOPS_TAG fi LDFLAGS+=" -X sigs.k8s.io/kustomize/api/provenance.version=${KUSTOMIZE_VERSION}+ksops.${KSOPS_VERSION}" - GO111MODULE=on go get -ldflags "${LDFLAGS}" sigs.k8s.io/kustomize/kustomize/$KUSTOMIZE_MAJOR_VERSION@$KUSTOMIZE_VERSION + GO111MODULE=on go install -ldflags "${LDFLAGS}" sigs.k8s.io/kustomize/kustomize/$KUSTOMIZE_MAJOR_VERSION@$KUSTOMIZE_VERSION echo "Successfully installed $KUSTOMIZE!" kustomize version diff --git a/scripts/install-legacy-ksops-archive.sh b/scripts/install-legacy-ksops-archive.sh new file mode 100755 index 0000000..74131c5 --- /dev/null +++ b/scripts/install-legacy-ksops-archive.sh @@ -0,0 +1,63 @@ +#!/bin/bash +set -e + +# Require $XDG_CONFIG_HOME to be set +if [[ -z "$XDG_CONFIG_HOME" ]]; then + echo "You must define XDG_CONFIG_HOME to use a legacy kustomize plugin" + echo "Add 'export XDG_CONFIG_HOME=\$HOME/.config' to your .bashrc or .zshrc" + exit 1 +fi + + +PLUGIN_PATH="$XDG_CONFIG_HOME/kustomize/plugin/viaduct.ai/v1/ksops/" + + +echo "Verify ksops plugin directory exists and is empty" +rm -rf $PLUGIN_PATH || true +mkdir -p $PLUGIN_PATH + +get_machine_arch () { + machine_arch="" + case $(uname -m) in + i386) machine_arch="i386" ;; + i686) machine_arch="i386" ;; + x86_64) machine_arch="x86_64" ;; + aarch64) machine_arch="arm64" ;; + arm64) machine_arch="arm64" ;; + esac + echo $machine_arch +} + +ARCH=$(get_machine_arch) +OS="" +case $(uname | tr '[:upper:]' '[:lower:]') in + linux*) + OS="Linux" + ;; + darwin*) + OS="Darwin" + ;; + msys*) + OS="Windows" + ;; + windowsnt*) + OS="Windows" + ;; + *) + echo "Unknown OS type: $(uname)" + echo "Please consider contributing to this script to support your OS." + exit 1 + ;; +esac + + +echo "Downloading latest release to ksops plugin path" +if [ -x "$(command -v wget)" ]; then + wget -c https://github.com/viaduct-ai/kustomize-sops/releases/latest/download/ksops_latest_${OS}_${ARCH}.tar.gz -O - | tar -xz -C $PLUGIN_PATH +elif [ -x "$(command -v curl)" ]; then + curl -s -L https://github.com/viaduct-ai/kustomize-sops/releases/latest/download/ksops_latest_${OS}_${ARCH}.tar.gz | tar -xz -C $PLUGIN_PATH +else + echo "This script requires either wget or curl." + exit 1 +fi +echo "Successfully installed ksops" diff --git a/test/behaviors/base/kustomization.yaml b/test/krm/behaviors/base/kustomization.yaml similarity index 100% rename from test/behaviors/base/kustomization.yaml rename to test/krm/behaviors/base/kustomization.yaml diff --git a/test/behaviors/base/secret.yaml b/test/krm/behaviors/base/secret.yaml similarity index 100% rename from test/behaviors/base/secret.yaml rename to test/krm/behaviors/base/secret.yaml diff --git a/test/krm/behaviors/generate-resources.yaml b/test/krm/behaviors/generate-resources.yaml new file mode 100644 index 0000000..1bb79d1 --- /dev/null +++ b/test/krm/behaviors/generate-resources.yaml @@ -0,0 +1,15 @@ +apiVersion: viaduct.ai/v2 +kind: ksops +metadata: + name: ksops-behavior-replace-file-generator + annotations: + config.kubernetes.io/function: | + exec: + # if the binary is your PATH, you can do + path: ksops + # otherwise, path should be relative to manifest files, like + # path: ../../../ksops +files: + # NOTE: File is relative to the /base manifest! + # This is different from the legacy plugin + - ../secret.enc.yaml diff --git a/test/behaviors/kustomization.yaml b/test/krm/behaviors/kustomization.yaml similarity index 100% rename from test/behaviors/kustomization.yaml rename to test/krm/behaviors/kustomization.yaml diff --git a/test/behaviors/secret.enc.yaml b/test/krm/behaviors/secret.enc.yaml similarity index 100% rename from test/behaviors/secret.enc.yaml rename to test/krm/behaviors/secret.enc.yaml diff --git a/test/behaviors/want.yaml b/test/krm/behaviors/want.yaml similarity index 100% rename from test/behaviors/want.yaml rename to test/krm/behaviors/want.yaml diff --git a/test/krm/envs/generate-resources.yaml b/test/krm/envs/generate-resources.yaml new file mode 100644 index 0000000..c3cd96d --- /dev/null +++ b/test/krm/envs/generate-resources.yaml @@ -0,0 +1,16 @@ +apiVersion: viaduct.ai/v1 +kind: ksops +metadata: + name: ksops-secret-from-generator + annotations: + config.kubernetes.io/function: | + exec: + # if the binary is your PATH, you can do + path: ksops + # otherwise, path should be relative to manifest files, like + # path: ../../../ksops +secretFrom: +- metadata: + name: mysecret + envs: + - ./secret.enc.env diff --git a/test/envs/kustomization.yaml b/test/krm/envs/kustomization.yaml similarity index 100% rename from test/envs/kustomization.yaml rename to test/krm/envs/kustomization.yaml diff --git a/test/envs/secret.enc.env b/test/krm/envs/secret.enc.env similarity index 100% rename from test/envs/secret.enc.env rename to test/krm/envs/secret.enc.env diff --git a/test/envs/want.yaml b/test/krm/envs/want.yaml similarity index 100% rename from test/envs/want.yaml rename to test/krm/envs/want.yaml diff --git a/test/krm/file/generate-resources.yaml b/test/krm/file/generate-resources.yaml new file mode 100644 index 0000000..fd712aa --- /dev/null +++ b/test/krm/file/generate-resources.yaml @@ -0,0 +1,17 @@ +apiVersion: viaduct.ai/v1 +kind: ksops +metadata: + name: ksops-secret-from-generator + annotations: + config.kubernetes.io/function: | + exec: + # if the binary is your PATH, you can do + path: ksops + # otherwise, path should be relative to manifest files, like + # path: ../../../ksops +secretFrom: +- metadata: + name: mysecret + type: Opaque + files: + - ./secret.enc.yaml diff --git a/test/file/kustomization.yaml b/test/krm/file/kustomization.yaml similarity index 100% rename from test/file/kustomization.yaml rename to test/krm/file/kustomization.yaml diff --git a/test/file/secret.enc.yaml b/test/krm/file/secret.enc.yaml similarity index 100% rename from test/file/secret.enc.yaml rename to test/krm/file/secret.enc.yaml diff --git a/test/file/want.yaml b/test/krm/file/want.yaml similarity index 100% rename from test/file/want.yaml rename to test/krm/file/want.yaml diff --git a/test/krm/hash/generate-resources.yaml b/test/krm/hash/generate-resources.yaml new file mode 100644 index 0000000..a616136 --- /dev/null +++ b/test/krm/hash/generate-resources.yaml @@ -0,0 +1,13 @@ +apiVersion: viaduct.ai/v1 +kind: ksops +metadata: + name: ksops-hashed-file-generator + annotations: + config.kubernetes.io/function: | + exec: + # if the binary is your PATH, you can do + path: ksops + # otherwise, path should be relative to manifest files, like + # path: ../../../ksops +files: + - ./secret.enc.yaml diff --git a/test/hash/kustomization.yaml b/test/krm/hash/kustomization.yaml similarity index 100% rename from test/hash/kustomization.yaml rename to test/krm/hash/kustomization.yaml diff --git a/test/hash/secret.enc.yaml b/test/krm/hash/secret.enc.yaml similarity index 100% rename from test/hash/secret.enc.yaml rename to test/krm/hash/secret.enc.yaml diff --git a/test/hash/want.yaml b/test/krm/hash/want.yaml similarity index 100% rename from test/hash/want.yaml rename to test/krm/hash/want.yaml diff --git a/test/krm/metadata/generate-resources.yaml b/test/krm/metadata/generate-resources.yaml new file mode 100644 index 0000000..90662b7 --- /dev/null +++ b/test/krm/metadata/generate-resources.yaml @@ -0,0 +1,21 @@ +apiVersion: viaduct.ai/v1 +kind: ksops +metadata: + name: ksops-secret-from-generator + annotations: + config.kubernetes.io/function: | + exec: + # if the binary is your PATH, you can do + path: ksops + # otherwise, path should be relative to manifest files, like + # path: ../../../ksops +secretFrom: +- metadata: + name: mysecret + namespace: test + labels: + foo: bar + annotations: + abc: xyz + envs: + - ./secret.enc.env diff --git a/test/metadata/kustomization.yaml b/test/krm/metadata/kustomization.yaml similarity index 100% rename from test/metadata/kustomization.yaml rename to test/krm/metadata/kustomization.yaml diff --git a/test/metadata/secret.enc.env b/test/krm/metadata/secret.enc.env similarity index 100% rename from test/metadata/secret.enc.env rename to test/krm/metadata/secret.enc.env diff --git a/test/metadata/want.yaml b/test/krm/metadata/want.yaml similarity index 100% rename from test/metadata/want.yaml rename to test/krm/metadata/want.yaml diff --git a/test/krm/multiple/generate-resources.yaml b/test/krm/multiple/generate-resources.yaml new file mode 100644 index 0000000..3e3c817 --- /dev/null +++ b/test/krm/multiple/generate-resources.yaml @@ -0,0 +1,15 @@ +apiVersion: viaduct.ai/v1 +kind: ksops +metadata: + name: ksops-multiple-generator + annotations: + config.kubernetes.io/function: | + exec: + # if the binary is your PATH, you can do + path: ksops + # otherwise, path should be relative to manifest files, like + # path: ../../../ksops +files: + - ./secret-A.enc.yaml + - ./secret-B.enc.yaml + - ./secret-C.enc.yaml diff --git a/test/multiple/kustomization.yaml b/test/krm/multiple/kustomization.yaml similarity index 100% rename from test/multiple/kustomization.yaml rename to test/krm/multiple/kustomization.yaml diff --git a/test/multiple/secret-A.enc.yaml b/test/krm/multiple/secret-A.enc.yaml similarity index 100% rename from test/multiple/secret-A.enc.yaml rename to test/krm/multiple/secret-A.enc.yaml diff --git a/test/multiple/secret-B.enc.yaml b/test/krm/multiple/secret-B.enc.yaml similarity index 100% rename from test/multiple/secret-B.enc.yaml rename to test/krm/multiple/secret-B.enc.yaml diff --git a/test/multiple/secret-C.enc.yaml b/test/krm/multiple/secret-C.enc.yaml similarity index 100% rename from test/multiple/secret-C.enc.yaml rename to test/krm/multiple/secret-C.enc.yaml diff --git a/test/multiple/want.yaml b/test/krm/multiple/want.yaml similarity index 100% rename from test/multiple/want.yaml rename to test/krm/multiple/want.yaml diff --git a/test/krm/override/generate-resources.yaml b/test/krm/override/generate-resources.yaml new file mode 100644 index 0000000..4555e83 --- /dev/null +++ b/test/krm/override/generate-resources.yaml @@ -0,0 +1,17 @@ +apiVersion: viaduct.ai/v1 +kind: ksops +metadata: + name: ksops-secret-from-generator + annotations: + config.kubernetes.io/function: | + exec: + # if the binary is your PATH, you can do + path: ksops + # otherwise, path should be relative to manifest files, like + # path: ../../../ksops +secretFrom: +- metadata: + name: mysecret + type: Opaque + files: + - secret.yaml=secret.enc.yaml diff --git a/test/override/kustomization.yaml b/test/krm/override/kustomization.yaml similarity index 100% rename from test/override/kustomization.yaml rename to test/krm/override/kustomization.yaml diff --git a/test/override/secret.enc.yaml b/test/krm/override/secret.enc.yaml similarity index 100% rename from test/override/secret.enc.yaml rename to test/krm/override/secret.enc.yaml diff --git a/test/override/want.yaml b/test/krm/override/want.yaml similarity index 100% rename from test/override/want.yaml rename to test/krm/override/want.yaml diff --git a/test/krm/single/generate-resources.yaml b/test/krm/single/generate-resources.yaml new file mode 100644 index 0000000..b30669c --- /dev/null +++ b/test/krm/single/generate-resources.yaml @@ -0,0 +1,14 @@ +apiVersion: viaduct.ai/v1 +kind: ksops +metadata: + name: ksops-single-file-generator + annotations: + config.kubernetes.io/function: | + exec: + # if the binary is your PATH, you can do + path: ksops + # otherwise, path should be relative to manifest files, like + # path: ../../../ksops +files: + - ./secret.enc.yaml + diff --git a/test/single/kustomization.yaml b/test/krm/single/kustomization.yaml similarity index 100% rename from test/single/kustomization.yaml rename to test/krm/single/kustomization.yaml diff --git a/test/single/secret.enc.yaml b/test/krm/single/secret.enc.yaml similarity index 100% rename from test/single/secret.enc.yaml rename to test/krm/single/secret.enc.yaml diff --git a/test/single/want.yaml b/test/krm/single/want.yaml similarity index 100% rename from test/single/want.yaml rename to test/krm/single/want.yaml diff --git a/test/legacy/behaviors/base/kustomization.yaml b/test/legacy/behaviors/base/kustomization.yaml new file mode 100644 index 0000000..b4ac25b --- /dev/null +++ b/test/legacy/behaviors/base/kustomization.yaml @@ -0,0 +1,2 @@ +resources: + - ./secret.yaml diff --git a/test/legacy/behaviors/base/secret.yaml b/test/legacy/behaviors/base/secret.yaml new file mode 100644 index 0000000..2321e0e --- /dev/null +++ b/test/legacy/behaviors/base/secret.yaml @@ -0,0 +1,7 @@ +apiVersion: v1 +kind: Secret +metadata: + name: my-base-secret +stringData: + application: kustomize-sops +type: Opaque diff --git a/test/behaviors/generate-resources.yaml b/test/legacy/behaviors/generate-resources.yaml similarity index 100% rename from test/behaviors/generate-resources.yaml rename to test/legacy/behaviors/generate-resources.yaml diff --git a/test/legacy/behaviors/kustomization.yaml b/test/legacy/behaviors/kustomization.yaml new file mode 100644 index 0000000..09c0e2d --- /dev/null +++ b/test/legacy/behaviors/kustomization.yaml @@ -0,0 +1,6 @@ +# Test replacing a base secret +resources: + - ./base + +generators: + - ./generate-resources.yaml diff --git a/test/legacy/behaviors/secret.enc.yaml b/test/legacy/behaviors/secret.enc.yaml new file mode 100644 index 0000000..497a0a5 --- /dev/null +++ b/test/legacy/behaviors/secret.enc.yaml @@ -0,0 +1,38 @@ +apiVersion: v1 +data: + password: ENC[AES256_GCM,data:0fBeqB61eNd2EdiZpmm6Zg==,iv:NSzj5IKHZCaLx3NV2D9YXH0rqmo4DYltpORtlT0pDPg=,tag:VPgf4B6dAxvIn9YNaQ/Znw==,type:str] + username: ENC[AES256_GCM,data:aIBt+MIxD/0=,iv:gHeevm4wbY0iuGt6MxeetGpPS15TXnRFBcOGZF2p+RE=,tag:4c2DqbB1QX+hE5a/DhnTWQ==,type:str] +kind: Secret +metadata: + name: my-base-secret + annotations: + kustomize.config.k8s.io/behavior: replace +stringData: + application: ENC[AES256_GCM,data:tjy4jEUvcLBao9eFP/4=,iv:6rGjfBhi3LxH+MZ5Y8FJTmrFFUqCU/uYOTFOtN4/V4Q=,tag:UIs+ub7wqlv4MAytGLYGDg==,type:str] +type: Opaque +sops: + kms: [] + gcp_kms: [] + azure_kv: [] + hc_vault: [] + age: [] + lastmodified: "2022-12-14T18:18:58Z" + mac: ENC[AES256_GCM,data:XLyq51JJiz+9+uQkjB7snu7z9yoX50QW8q7y2ivO4E11wE7ab7womD0Ga3tYn8JR1wzDpVZ+F3434fR4tTaIt9WRZfKANsjtFBgOjhMJAQ1u7zcJiiDEID8VktUowK3p/pScEHy7Zsj2Mlf7Kpez0ZgeSzDgz1+aHquRb9Wj0mw=,iv:A/Th8d5C/3f2nVUxtsC70rWcpzIcGECvc9Qdm5S87rg=,tag:p1405TW+6zzEmcKrmojMjA==,type:str] + pgp: + - created_at: "2022-12-14T18:18:52Z" + enc: | + -----BEGIN PGP MESSAGE----- + + hQEMAyUpShfNkFB/AQgAm6fqwqD8HqVNcxYuOV2vEWKH2eANVCdOyhEP8g5BqFni + BYOrWoIiZPGiH1XXLvpUC0b6ZbRM7Mi6CAhsLI5Msk+9mTwP/3uUCue+7fkodqg2 + CUnXPL3dVsaE6HtRnbq5eWajPOxyiPIWjjjZFSajJ9JN62d5Itq+KvdJlJuIsIay + hTGYSpX1+fFOPk0Y7NxRi4dTaYPJbIrWVR+EDoIBt0QEYkKgTY5YrG0Yk8ovDeey + iUDNIQFnhA+ci2hcMjvub1Nd9URPF8Zv+uMjE7fivG4/ORX5cVV137J5oSLhIUEk + E4Z9j6EHdYF2a//Cnf2lzjjt3xslRgrsjClykzI1e9JeAZEFmQc6q73Qcgt5ZAK4 + g2iQ1CgXbbnvjBF49kHWshe2MQcFz3KyhSSDqgf4LAIV+znYfpTqvmo3WXvELuKx + N36A0PwW1qmxSay9wVer4cvsTrNqBk77uJIaYpGv3w== + =ER/2 + -----END PGP MESSAGE----- + fp: FBC7B9E2A4F9289AC0C1D4843D16CEE4A27381B4 + unencrypted_regex: ^(apiVersion|metadata|kind|type)$ + version: 3.7.2 diff --git a/test/legacy/behaviors/want.yaml b/test/legacy/behaviors/want.yaml new file mode 100644 index 0000000..2366a27 --- /dev/null +++ b/test/legacy/behaviors/want.yaml @@ -0,0 +1,10 @@ +apiVersion: v1 +data: + password: MWYyZDFlMmU2N2Rm + username: YWRtaW4= +kind: Secret +metadata: + name: my-base-secret +stringData: + application: kustomize-sops +type: Opaque diff --git a/test/envs/generate-resources.yaml b/test/legacy/envs/generate-resources.yaml similarity index 100% rename from test/envs/generate-resources.yaml rename to test/legacy/envs/generate-resources.yaml diff --git a/test/legacy/envs/kustomization.yaml b/test/legacy/envs/kustomization.yaml new file mode 100644 index 0000000..052a7d7 --- /dev/null +++ b/test/legacy/envs/kustomization.yaml @@ -0,0 +1,2 @@ +generators: + - ./generate-resources.yaml diff --git a/test/legacy/envs/secret.enc.env b/test/legacy/envs/secret.enc.env new file mode 100644 index 0000000..b5a667f --- /dev/null +++ b/test/legacy/envs/secret.enc.env @@ -0,0 +1,9 @@ +password=ENC[AES256_GCM,data:POoodkvLJlYkuFwZ,iv:zAqcWK57VQr59EkJ3Bx6utY1wexj1+zDZasl76fzMho=,tag:1z4RJr+7BTeYMs3P7WFKGw==,type:str] +username=ENC[AES256_GCM,data:Cpxi7uQ=,iv:qEmlgTHiOsEF83VR7sranL4uuvS/EsF9Udlt9ykcGd0=,tag:80Rg/s0jsvefbSwjgIcUTQ==,type:str] +sops_version=3.7.2 +sops_lastmodified=2022-12-14T18:15:04Z +sops_unencrypted_regex=^(apiVersion|metadata|kind|type)$ +sops_mac=ENC[AES256_GCM,data:KHJWDwHp9AjlQhXmOOIIOs3zsiIA4UkE5O9ue81qffkUIEvG0ts8RqSI0JetdxvqFN8jMAwgxKZlslsViMxTU9dD9h3WCXCteh6wcBxSSNLbuAnxAlZke2tR10ZCWizGA3oBcTcd/maN+hZq5fNqBMzdUpqyhmJZ9/OV9w6CNiU=,iv:wpUpAzsyEcUByWU9Km2gfiTyCE3RQjvkbW5EV/7OZ80=,tag:I4PMdJiPJ63l0KDmWFZmwg==,type:str] +sops_pgp__list_0__map_enc=-----BEGIN PGP MESSAGE-----\n\nhQEMAyUpShfNkFB/AQgAkk0vfCLQKkP8tDXe5Bmu4s1bndkH5YyyNlUgOTDeCzDx\nkYGv8lXwCpGBlc2RQxzB4Ygr8k80M76IGZHDWrDLuNkNuKriPZQPP4OIpbOSGnHs\nQmLvJpICisZjUbo6gQpHi5iRZ3GiGFyX386bASDJbDM6FKft6MBarXApt1LYfL9z\no83MK4ZYVR0Nh4ttUXwDbug2de9hIGmnnXCWOQ7XLAlK+TT6/qdocAksTb+7Te1l\n8lQz/Slq1vyctOChZG/m2Vc6w6Ux0c01BOUB7uCcMnygndbHkgbsMBw6pru3Dv8V\n+Kpb40+3rY+u1dXediYV62vX48SUv6XPChUlAK2k1NJeAdd0s0ukU6thdloWjKZa\n7KH2RGDS7D7khRP5dyIQYf1DiLEUNfG/+J6zgU7DJep05mOvoapRp/vBHGTssjtj\nHjjSa4/kV89Brm6mPRbCnOj4HHWrP/0lKfecmEsBPg==\n=h8SP\n-----END PGP MESSAGE-----\n +sops_pgp__list_0__map_fp=FBC7B9E2A4F9289AC0C1D4843D16CEE4A27381B4 +sops_pgp__list_0__map_created_at=2022-12-14T18:14:54Z diff --git a/test/legacy/envs/want.yaml b/test/legacy/envs/want.yaml new file mode 100644 index 0000000..dc42fc2 --- /dev/null +++ b/test/legacy/envs/want.yaml @@ -0,0 +1,7 @@ +apiVersion: v1 +kind: Secret +metadata: + name: mysecret +stringData: + password: 1f2d1e2e67df + username: admin diff --git a/test/file/generate-resources.yaml b/test/legacy/file/generate-resources.yaml similarity index 100% rename from test/file/generate-resources.yaml rename to test/legacy/file/generate-resources.yaml diff --git a/test/legacy/file/kustomization.yaml b/test/legacy/file/kustomization.yaml new file mode 100644 index 0000000..052a7d7 --- /dev/null +++ b/test/legacy/file/kustomization.yaml @@ -0,0 +1,2 @@ +generators: + - ./generate-resources.yaml diff --git a/test/legacy/file/secret.enc.yaml b/test/legacy/file/secret.enc.yaml new file mode 100644 index 0000000..244f070 --- /dev/null +++ b/test/legacy/file/secret.enc.yaml @@ -0,0 +1,28 @@ +username: ENC[AES256_GCM,data:wm8jYTk=,iv:uODPx9IQmb2gQi2oZ6gpmIGddMN7n2ogKdweMjIZIHw=,tag:xnfYKwnirnOV3tV7CFvlvA==,type:str] +password: ENC[AES256_GCM,data:Lpu0v6Qjt6wLmYZv,iv:P7kfBIuJ7M86Oh43q9FpUDgUCK4REColGTTFGFdhjD0=,tag:wSNv3kOLhdNxBK0r3MNLpw==,type:str] +sops: + kms: [] + gcp_kms: [] + azure_kv: [] + hc_vault: [] + age: [] + lastmodified: "2022-12-14T18:15:56Z" + mac: ENC[AES256_GCM,data:mJUZQ0L26QeAkip3WnGxE/p3JAfgLbF5F2MXElcQRLvKberT0cF6MiOXXXCXFyc1/G/HMYVFGMevEuqFEMwAzZCp4oa70KclZTnE3r8/7lmtvNsF+YbLvRRy5Ib5pwpVYBSFp3RNeRHXmw+lUjz2q61DBK40tyHbRrbXvq0ITy4=,iv:shT/5S+8sjj3gdVSYTNX1r0y0db3rNiQ3YIjIP/0BUM=,tag:VPXX7gTNpsnQDe2U++hexA==,type:str] + pgp: + - created_at: "2022-12-14T18:15:50Z" + enc: | + -----BEGIN PGP MESSAGE----- + + hQEMAyUpShfNkFB/AQf/eWYqsnyMtmf1DpllbYFgViTaxTfZNbS+qF9BJeGoL/Q4 + etjpXqqkl61RBzuLxj7KlM00fFpXCwTLnhaUzGIPaAvojHhk3xIT3lBBci3tshlP + qZ8PVzKIhVfBT8zoZ5hhR5mH7iT0SwZaD6RLepe1ygwXcS33WSf7srvuIydeAaTE + nxOcszcw+1/gZ88rcqmNQ8EnD4gZeswOLQiLOCliHAmZBaW3yybwp3GWbbqiJLYl + RsKCOkIfX0gQVI+BXb8wB1FukXl3ZiefO0zDoTZzV/hP8tq2MEhYyMMb/w/5qJo5 + O49kCAo0nItiTFzMI1jKH3GdO9HSdAEvm4RZPGQSEdJeAWyJxw8Hy9HaecQchwCh + PU5nil4v656adnP+gAcmnUvjvq3WQESNkSYqGttXsxCN+0REP0mR2OuaK1LQJkY4 + zr6Ky43znNJ33mgVYF1NKKJN00Ip8GF4l/Km24FnvQ== + =4non + -----END PGP MESSAGE----- + fp: FBC7B9E2A4F9289AC0C1D4843D16CEE4A27381B4 + unencrypted_regex: ^(apiVersion|metadata|kind|type)$ + version: 3.7.2 diff --git a/test/legacy/file/want.yaml b/test/legacy/file/want.yaml new file mode 100644 index 0000000..9541e45 --- /dev/null +++ b/test/legacy/file/want.yaml @@ -0,0 +1,9 @@ +apiVersion: v1 +kind: Secret +metadata: + name: mysecret +stringData: + secret.enc.yaml: | + username: admin + password: 1f2d1e2e67df +type: Opaque diff --git a/test/hash/generate-resources.yaml b/test/legacy/hash/generate-resources.yaml similarity index 100% rename from test/hash/generate-resources.yaml rename to test/legacy/hash/generate-resources.yaml diff --git a/test/legacy/hash/kustomization.yaml b/test/legacy/hash/kustomization.yaml new file mode 100644 index 0000000..052a7d7 --- /dev/null +++ b/test/legacy/hash/kustomization.yaml @@ -0,0 +1,2 @@ +generators: + - ./generate-resources.yaml diff --git a/test/legacy/hash/secret.enc.yaml b/test/legacy/hash/secret.enc.yaml new file mode 100644 index 0000000..0f82631 --- /dev/null +++ b/test/legacy/hash/secret.enc.yaml @@ -0,0 +1,38 @@ +apiVersion: v1 +data: + password: ENC[AES256_GCM,data:afiEHgb4hv/GZQZoJmkMAw==,iv:MioL5FGwwpVRUpld0D89JQICJ+7PTSnCppt45HTfav8=,tag:2xGdihQUI5w5mlcRZIiseA==,type:str] + username: ENC[AES256_GCM,data:BViwRTkq9h8=,iv:xbjGUrYV4eTsHQbI4oIoSai5sYNMK+XA2e+1kzG052A=,tag:6niraiNXXNOyddLYI6/vTw==,type:str] +kind: Secret +metadata: + name: mysecret-hash + annotations: + kustomize.config.k8s.io/needs-hash: "true" +stringData: + application: ENC[AES256_GCM,data:G7QzzAy0yjEZYCC2QaY=,iv:GeVHZo2toJ0GSlrDjwZNBQnHwdMmQWV63cK68fUREgk=,tag:ao2Y70t+vwOdLq++83oFEg==,type:str] +type: Opaque +sops: + kms: [] + gcp_kms: [] + azure_kv: [] + hc_vault: [] + age: [] + lastmodified: "2022-12-14T18:18:00Z" + mac: ENC[AES256_GCM,data:IjTGJoHkjFwqT6iVD54vpImyJQQkDsA5k58MMcIRKQAQYVc+Rd5NXlLTEJLs44uISPfHpGLg2MwlSFWBs+rHV7SnCN3BMQfEEpBRS7IHRLuUPM1WM1HgBE4R6o1Pd/gJMhpk+4M6FMeGJGfYWnvKyaK2q0ueVCV6XyFX754M0xg=,iv:ZDzaaLwzjKej3h2AQED2Wd0Vqr6grTzqc33rVh07Bo0=,tag:x+iyT0xhy13+QWq1RQDXqg==,type:str] + pgp: + - created_at: "2022-12-14T18:17:51Z" + enc: | + -----BEGIN PGP MESSAGE----- + + hQEMAyUpShfNkFB/AQgAqFMstQ7tmsSgfuvxaQCojJ9CBpdw2d/dlvvIDTJEI3jE + /mJYTkj7XC9edrESg4mt3RIn0JPYcCpwEiRu7TjtTWImU0HYQYk+KFe7el+4HuDi + goxNDIDUM6fyyCH2rrmEfjVGmivq8vf5NJiyUeC6MBN+gADq95uzRFQoFLSrlQmY + LmqyTiq6rMHSvPrcwg7s19gl9/dWcjoxb3wU4fdmf2Ya5HVHcVogrpbRq5XsMI/c + 42T05+EWEP2fBr/kT648MAevLuH3DN6iqTaGGcbbNB7NroqKs6JUoVpbDjEkZWYp + IZTbEwWCZ13adeD/VVBzSP/BJQQQIQqb0P2z0uzLZdJeAaFo+ZI7vcUuR55CKd8r + 9oU7/hJL8P92pq8Rx4Y42CYT4LRsAtszWhOfGWqkm7kkoIiktO+Pvtfwyn3FS0Nl + 0zN1uAB+o6XourM7+R0AkWiyXng5nCOwitTvTWwzyg== + =2ZyG + -----END PGP MESSAGE----- + fp: FBC7B9E2A4F9289AC0C1D4843D16CEE4A27381B4 + unencrypted_regex: ^(apiVersion|metadata|kind|type)$ + version: 3.7.2 diff --git a/test/legacy/hash/want.yaml b/test/legacy/hash/want.yaml new file mode 100644 index 0000000..f5ca440 --- /dev/null +++ b/test/legacy/hash/want.yaml @@ -0,0 +1,10 @@ +apiVersion: v1 +data: + password: MWYyZDFlMmU2N2Rm + username: YWRtaW4= +kind: Secret +metadata: + name: mysecret-hash-h55dbmfg7b +stringData: + application: kustomize-sops +type: Opaque diff --git a/test/metadata/generate-resources.yaml b/test/legacy/metadata/generate-resources.yaml similarity index 100% rename from test/metadata/generate-resources.yaml rename to test/legacy/metadata/generate-resources.yaml diff --git a/test/legacy/metadata/kustomization.yaml b/test/legacy/metadata/kustomization.yaml new file mode 100644 index 0000000..052a7d7 --- /dev/null +++ b/test/legacy/metadata/kustomization.yaml @@ -0,0 +1,2 @@ +generators: + - ./generate-resources.yaml diff --git a/test/legacy/metadata/secret.enc.env b/test/legacy/metadata/secret.enc.env new file mode 100644 index 0000000..22e73a5 --- /dev/null +++ b/test/legacy/metadata/secret.enc.env @@ -0,0 +1,9 @@ +password=ENC[AES256_GCM,data:2/S3BgCEC5oHZXSF,iv:LYilY/KmLkuSBW/iClveEL4UWSvclTT/xQxYTwU4uqs=,tag:+tAQRaPW8uEQ4s7V4Iy48g==,type:str] +username=ENC[AES256_GCM,data:yrx8CY4=,iv:kHt6IrditbpwwwgHIguC+QvfmmhzbI3nkGPpUWZb7aw=,tag:v0Nr+2XXt0FnF3Kh0I07dA==,type:str] +sops_unencrypted_regex=^(apiVersion|metadata|kind|type)$ +sops_version=3.7.2 +sops_mac=ENC[AES256_GCM,data:0Niu2YrxtpN7kdyXAQtoJsQ0eJadx8OKAB9i/Y+CUXldqCkWXx2wl4A/4tPdE9lT9bTMsaThL5GtC0w0bnphnHnKTro4WlstSzhIv0SUK+fRPF1VcnUJBjUevR/w4EE5XdKhVzPNbaSk5BseoYxgqPTwtFWb7TEoZq+GH4Cchg8=,iv:2H7VC03CvWzYxdO93YGjdNtb0dxtqaA0nYAoCwrNhzk=,tag:rzFyiwTCvdNBTFnANKG00g==,type:str] +sops_pgp__list_0__map_fp=FBC7B9E2A4F9289AC0C1D4843D16CEE4A27381B4 +sops_pgp__list_0__map_created_at=2022-12-14T18:16:58Z +sops_pgp__list_0__map_enc=-----BEGIN PGP MESSAGE-----\n\nhQEMAyUpShfNkFB/AQf+OAk9IAotpZMoRpSxQkiqWuq38nHeSj/xnGh6hQadWzl3\nyDuO5bgPSqgFikfM/jSJp8LP6tUJgV2bRVcaLWSE+1nQdwuPsvR67UiywpcAFpzK\nrH17H+6DNsY70IWW2+qpox5GAvASmirFn6vTBWto4ohMDhruXem97ojMS2Ait6Wq\nSGL6u/trFYq22YIGAz7VpD8abLUYsLqT4nGIBSQgjREINqSTE4h9llHqWvaTfwSU\n4NmkzzwDX5vIfcNfgaFKu6dUj9VakVIdhrAVq0+vtCF5uNo+TlL3qCRefw4m+vlP\n6nTbVZZTg/IDUOXBbQjjqg4EK7XIfF8aokN/iqBertJcAXEUdB9+8c+6UHqZ1Mmx\nx21hjWs9OC9POHy6Blr7GEfuYanzhF/PVK/Os29hYOmsjsE2nCNW+08xdYeNC9P7\nJnUu/aDyn9DtD7JqMbp8Oj7yHPp4Uuh0ekTe7jE=\n=v3sB\n-----END PGP MESSAGE-----\n +sops_lastmodified=2022-12-14T18:17:05Z diff --git a/test/legacy/metadata/want.yaml b/test/legacy/metadata/want.yaml new file mode 100644 index 0000000..e586fa9 --- /dev/null +++ b/test/legacy/metadata/want.yaml @@ -0,0 +1,12 @@ +apiVersion: v1 +kind: Secret +metadata: + annotations: + abc: xyz + labels: + foo: bar + name: mysecret + namespace: test +stringData: + password: 1f2d1e2e67df + username: admin diff --git a/test/multiple/generate-resources.yaml b/test/legacy/multiple/generate-resources.yaml similarity index 100% rename from test/multiple/generate-resources.yaml rename to test/legacy/multiple/generate-resources.yaml diff --git a/test/legacy/multiple/kustomization.yaml b/test/legacy/multiple/kustomization.yaml new file mode 100644 index 0000000..e8653e4 --- /dev/null +++ b/test/legacy/multiple/kustomization.yaml @@ -0,0 +1,2 @@ +generators: + - generate-resources.yaml diff --git a/test/legacy/multiple/secret-A.enc.yaml b/test/legacy/multiple/secret-A.enc.yaml new file mode 100644 index 0000000..11fa529 --- /dev/null +++ b/test/legacy/multiple/secret-A.enc.yaml @@ -0,0 +1,36 @@ +apiVersion: v1 +data: + password: ENC[AES256_GCM,data:cP+06M8wJ8afPGhMHVkL3A==,iv:sCaKl6bK4oGLViFB9ln2VFPYB+dGd2hWL18sIaF/sA8=,tag:7cucCunB2BAWxtvIZD3NTg==,type:str] + username: ENC[AES256_GCM,data:6gyC8VS5OAw=,iv:UmMQWqnBChmGZkr7nLnE7RrsZ9wTmoWM7qa6+oK4AiI=,tag:sMf6J/b8MlQh7lVaufn5Ig==,type:str] +kind: Secret +metadata: + name: mysecret-A +stringData: + application: ENC[AES256_GCM,data:gVZxVdadkt+2EhKnbLs=,iv:BXbJXCWZHQw2D1V1RaK1aV9y/Dj1vYbbTcNgin9u0rs=,tag:Lo/vbEiaj2NFesdJV4V0RA==,type:str] +type: Opaque +sops: + kms: [] + gcp_kms: [] + azure_kv: [] + hc_vault: [] + age: [] + lastmodified: "2022-12-14T18:25:03Z" + mac: ENC[AES256_GCM,data:tK0GxvVEECPx6TnLtyiZW5ARl1bUxLScfNbXFTR1VfQAgYVrydGbMD+OAs7KTGkAEm8j1BQ9LoRg8zsdJMU+iyL9P2oJsH53PYdTXqGacDjhp4ImkxXi8FJVSQvnSSuv2/veI10vLalCSYbYstmMn9zVuUbb6LMPBtBYlKO9mWI=,iv:xpJHfJK7M/T6vSa/MFZkqK8dXILSMhSb4EPI6L9t/J8=,tag:aVbwkgLp2EIVlGS8qfY+zw==,type:str] + pgp: + - created_at: "2022-12-14T18:24:56Z" + enc: | + -----BEGIN PGP MESSAGE----- + + hQEMAyUpShfNkFB/AQf/Qg3PLBU69w2bVf5zF345T9WJ6K/tsMT7UrorK1yHr+me + fdZVAd2hUQfgU7Nkq4rIKryu5xgkW9AnpPw6RHag7IQ1FQwxSkiiVJMKMOt63hML + 78Cmov3P2Ttj8WQkntUKdDCn6b4/Ayfk3aLdp/ayQL20PuG+429/cJDbZ8puWXHL + 4odeFlQzcd8cOiNTgxOk0aVBl8ZZ06MIqZPDuvGQgCsHaMGxh6UY21FrGil7k25F + Ay11QK4LK3yxMDkXLzp+CftEcMlQ/BiCzZFVPGqxbrKG5MldQwF6Jtz5v/lQ0vjg + SFucfAOy49SbxHEApca6Wd9Le4mq8GT/6g9j6c13i9JcAQH9PJZjv4DymNGPdJYR + dEl5doMjFW+vYhacKfAlzoYVy3qcIwPnRE2oSdndh8P20dMtwwoGmh3lF8ljvKuO + RI6H1CzM/rKj9ru3/9oO0ZsQSS4TdiGKsvEH5ZI= + =+gOn + -----END PGP MESSAGE----- + fp: FBC7B9E2A4F9289AC0C1D4843D16CEE4A27381B4 + unencrypted_regex: ^(apiVersion|metadata|kind|type)$ + version: 3.7.2 diff --git a/test/legacy/multiple/secret-B.enc.yaml b/test/legacy/multiple/secret-B.enc.yaml new file mode 100644 index 0000000..99a2d8e --- /dev/null +++ b/test/legacy/multiple/secret-B.enc.yaml @@ -0,0 +1,36 @@ +apiVersion: v1 +data: + password: ENC[AES256_GCM,data:yGF6qOOnhqtLikJbhujcXg==,iv:YBzeasguvTfQVNLQ8K4BY6YoOUGZ43f3FWLLsDC/H00=,tag:Sh+gSi6iGuUOV2QYCo+zGg==,type:str] + username: ENC[AES256_GCM,data:lcP8rFxuCe4=,iv:fIiF4L52jQCvjEzeaGhfgGfuVxvPz+6P/cVtVyPnTvA=,tag:p/LG0Yk/DO2jNS+gcanGww==,type:str] +kind: Secret +metadata: + name: mysecret-B +stringData: + application: ENC[AES256_GCM,data:QEhR0MU3lOYke4JrPCo=,iv:UTr8FE2yt3YXaCNlX/8tiGnZjOndS1m7romcEhTykIw=,tag:QCelUoYzuEkxGjGIJ5cXvg==,type:str] +type: Opaque +sops: + kms: [] + gcp_kms: [] + azure_kv: [] + hc_vault: [] + age: [] + lastmodified: "2022-12-14T18:25:25Z" + mac: ENC[AES256_GCM,data:AT/zWw0XSpyfXkvXLzV7ouailQE3nM60ogAyzEUxjaFHQYwOcTVns0Lo+z4+MTWtK6NEygDalgqAKlosu/DQ2qtlRJy2eQjVGxqpNTw8ulpHDkbQ9PkPO9QJjKJbSt7N3q+THoikKI+70lrUOE8VlGIWwssYzap4l4S6bVD6le0=,iv:95NY/YxVbFGW4EcFePqFkC3DIRNasB1EV5ovOisptCg=,tag:aDsFG4N9NpvY9CiKfrrPvw==,type:str] + pgp: + - created_at: "2022-12-14T18:25:18Z" + enc: | + -----BEGIN PGP MESSAGE----- + + hQEMAyUpShfNkFB/AQf/fVxN/9x75z+bAONeqrN1hUt57ziDfyvJxi/X9O8fSObx + hm5L2ioZiGonN5DpFuVcM7SEU74Lx5E+WcPzW9KjNKunt8UlTrGU2/7A+4jsZNPL + oOfzj4icnS9547RGVO8kpCSX0P6+kmmfLkTVq4YvfyNLSB3mDyVoikLE1qlGKAa3 + XPtV9QZOxK2TnWI/JjhA5y0oKqb7IcOXVbrr+RU1jFHOYHLg1UnrJ1hKGxUkJU68 + yEX5HtbHLxV97bT7ElNmh03esw0Z+BCtcFvhF2O0MRbGJNNijqEIrHXIrJFDzyAz + zr6KxNEglC2rUM7A/UII66TpYTcM7nU3N4Q0CGC02dJeAT6lBXjJtT0vjGe4N56P + oXHsppQDDwEmPqHvQvZ75Wi689lZqGW75Js9jl+1ldAm8YXQCbdaRRfuu9I/bYDM + zpMu0CFZR0c61+Qj4EMoilHdVqc+WvX7lex6ccLi+g== + =zmL0 + -----END PGP MESSAGE----- + fp: FBC7B9E2A4F9289AC0C1D4843D16CEE4A27381B4 + unencrypted_regex: ^(apiVersion|metadata|kind|type)$ + version: 3.7.2 diff --git a/test/legacy/multiple/secret-C.enc.yaml b/test/legacy/multiple/secret-C.enc.yaml new file mode 100644 index 0000000..28115e0 --- /dev/null +++ b/test/legacy/multiple/secret-C.enc.yaml @@ -0,0 +1,36 @@ +apiVersion: v1 +data: + password: ENC[AES256_GCM,data:GfmvlMs8P4GwAz+isCRjXg==,iv:9La7z/t83tx5yQcp2ztzKE1TxKTEKhTS1OqnOapHkq8=,tag:J2dTdTbeK8syH6i+i+SfyA==,type:str] + username: ENC[AES256_GCM,data:8BEGuHHozv8=,iv:ho5kDedUpeGGBBMdJwQZ5edbfXP/tz98yil2dcnbKLo=,tag:lIyaFF/4V4yzIsZt1TcHgA==,type:str] +kind: Secret +metadata: + name: mysecret-C +stringData: + application: ENC[AES256_GCM,data:2CZ5eojFPlSWdichL54=,iv:QJibja5MTIrV6G3EZc9n2l832cqREfJQlJHFs+NUasA=,tag:JzmsTUXdIJcakv8N779YLA==,type:str] +type: Opaque +sops: + kms: [] + gcp_kms: [] + azure_kv: [] + hc_vault: [] + age: [] + lastmodified: "2022-12-14T18:25:55Z" + mac: ENC[AES256_GCM,data:A190HwpZF9rBbGgecv13LnHElh9WGAsmA9iUgPk/o5DguwSdXcRk5C/LK3FOvVKwPBCJCI6OgClitTQZG+tyGKTG+xO/MX+yvFo2fPT3OPlF2OHKZXmAiJWFhV5XIGVaFCTOvpO1z03Gz4U06f5n8sS2HGtvdgV6XOkekjc5Cd8=,iv:/8b67a0QGXQzWNwYZoRY3jGgZGtMpqVnSb99pt85JKs=,tag:gAUMWR10LI8Qn3p9SA4pxg==,type:str] + pgp: + - created_at: "2022-12-14T18:25:49Z" + enc: | + -----BEGIN PGP MESSAGE----- + + hQEMAyUpShfNkFB/AQgAlYE5Codqs5FVuFGEJKtIEpiNnHhuRZSelr12pftkIejX + wuitS17HvkFNg1BHSn4cdTJhdQe+K/ZZdOUrQbhaGI1TAAhbIj1OYS8WnazWAMfP + xTFN+IIIH9hDZQxSP3RoNLlI241FGM+peJCX7rHr4etMy7ZjHKHBXpJrRUwq9EX0 + e8N7ORmECy79KHq4R4IMnIHGGK9IkF/l42bwmfx2arQilKd/LJxOf6NOVcz1hnPx + pzwcYX1e0ZlzVxeJYjUAtlGgnd5bQZZCP4MtvejU0hDkfzedSoAcezSAstcuwI1h + 6VQLmQJh2tTdNsWtPld06HUA0GYXy8mLorXhowRRStJeARLvcweGFMQ8rB0wQDX0 + GefeUfr99wfMviKdsyV8IuJG5F6nt9RIp28Ms+KOQ7oDehuXt66AUWKXt6NNCAny + o/PuMOFsnZnJsyJJWIiXvumvcuaLfLFQlKw1VWfxCw== + =nnZW + -----END PGP MESSAGE----- + fp: FBC7B9E2A4F9289AC0C1D4843D16CEE4A27381B4 + unencrypted_regex: ^(apiVersion|metadata|kind|type)$ + version: 3.7.2 diff --git a/test/legacy/multiple/want.yaml b/test/legacy/multiple/want.yaml new file mode 100644 index 0000000..873595a --- /dev/null +++ b/test/legacy/multiple/want.yaml @@ -0,0 +1,32 @@ +apiVersion: v1 +data: + password: MWYyZDFlMmU2N2Rm + username: YWRtaW4= +kind: Secret +metadata: + name: mysecret-A +stringData: + application: kustomize-sops +type: Opaque +--- +apiVersion: v1 +data: + password: MWYyZDFlMmU2N2Rm + username: YWRtaW4= +kind: Secret +metadata: + name: mysecret-B +stringData: + application: kustomize-sops +type: Opaque +--- +apiVersion: v1 +data: + password: MWYyZDFlMmU2N2Rm + username: YWRtaW4= +kind: Secret +metadata: + name: mysecret-C +stringData: + application: kustomize-sops +type: Opaque diff --git a/test/override/generate-resources.yaml b/test/legacy/override/generate-resources.yaml similarity index 100% rename from test/override/generate-resources.yaml rename to test/legacy/override/generate-resources.yaml diff --git a/test/legacy/override/kustomization.yaml b/test/legacy/override/kustomization.yaml new file mode 100644 index 0000000..052a7d7 --- /dev/null +++ b/test/legacy/override/kustomization.yaml @@ -0,0 +1,2 @@ +generators: + - ./generate-resources.yaml diff --git a/test/legacy/override/secret.enc.yaml b/test/legacy/override/secret.enc.yaml new file mode 100644 index 0000000..244f070 --- /dev/null +++ b/test/legacy/override/secret.enc.yaml @@ -0,0 +1,28 @@ +username: ENC[AES256_GCM,data:wm8jYTk=,iv:uODPx9IQmb2gQi2oZ6gpmIGddMN7n2ogKdweMjIZIHw=,tag:xnfYKwnirnOV3tV7CFvlvA==,type:str] +password: ENC[AES256_GCM,data:Lpu0v6Qjt6wLmYZv,iv:P7kfBIuJ7M86Oh43q9FpUDgUCK4REColGTTFGFdhjD0=,tag:wSNv3kOLhdNxBK0r3MNLpw==,type:str] +sops: + kms: [] + gcp_kms: [] + azure_kv: [] + hc_vault: [] + age: [] + lastmodified: "2022-12-14T18:15:56Z" + mac: ENC[AES256_GCM,data:mJUZQ0L26QeAkip3WnGxE/p3JAfgLbF5F2MXElcQRLvKberT0cF6MiOXXXCXFyc1/G/HMYVFGMevEuqFEMwAzZCp4oa70KclZTnE3r8/7lmtvNsF+YbLvRRy5Ib5pwpVYBSFp3RNeRHXmw+lUjz2q61DBK40tyHbRrbXvq0ITy4=,iv:shT/5S+8sjj3gdVSYTNX1r0y0db3rNiQ3YIjIP/0BUM=,tag:VPXX7gTNpsnQDe2U++hexA==,type:str] + pgp: + - created_at: "2022-12-14T18:15:50Z" + enc: | + -----BEGIN PGP MESSAGE----- + + hQEMAyUpShfNkFB/AQf/eWYqsnyMtmf1DpllbYFgViTaxTfZNbS+qF9BJeGoL/Q4 + etjpXqqkl61RBzuLxj7KlM00fFpXCwTLnhaUzGIPaAvojHhk3xIT3lBBci3tshlP + qZ8PVzKIhVfBT8zoZ5hhR5mH7iT0SwZaD6RLepe1ygwXcS33WSf7srvuIydeAaTE + nxOcszcw+1/gZ88rcqmNQ8EnD4gZeswOLQiLOCliHAmZBaW3yybwp3GWbbqiJLYl + RsKCOkIfX0gQVI+BXb8wB1FukXl3ZiefO0zDoTZzV/hP8tq2MEhYyMMb/w/5qJo5 + O49kCAo0nItiTFzMI1jKH3GdO9HSdAEvm4RZPGQSEdJeAWyJxw8Hy9HaecQchwCh + PU5nil4v656adnP+gAcmnUvjvq3WQESNkSYqGttXsxCN+0REP0mR2OuaK1LQJkY4 + zr6Ky43znNJ33mgVYF1NKKJN00Ip8GF4l/Km24FnvQ== + =4non + -----END PGP MESSAGE----- + fp: FBC7B9E2A4F9289AC0C1D4843D16CEE4A27381B4 + unencrypted_regex: ^(apiVersion|metadata|kind|type)$ + version: 3.7.2 diff --git a/test/legacy/override/want.yaml b/test/legacy/override/want.yaml new file mode 100644 index 0000000..39aef66 --- /dev/null +++ b/test/legacy/override/want.yaml @@ -0,0 +1,9 @@ +apiVersion: v1 +kind: Secret +metadata: + name: mysecret +stringData: + secret.yaml: | + username: admin + password: 1f2d1e2e67df +type: Opaque diff --git a/test/single/generate-resources.yaml b/test/legacy/single/generate-resources.yaml similarity index 100% rename from test/single/generate-resources.yaml rename to test/legacy/single/generate-resources.yaml diff --git a/test/legacy/single/kustomization.yaml b/test/legacy/single/kustomization.yaml new file mode 100644 index 0000000..052a7d7 --- /dev/null +++ b/test/legacy/single/kustomization.yaml @@ -0,0 +1,2 @@ +generators: + - ./generate-resources.yaml diff --git a/test/legacy/single/secret.enc.yaml b/test/legacy/single/secret.enc.yaml new file mode 100644 index 0000000..d916595 --- /dev/null +++ b/test/legacy/single/secret.enc.yaml @@ -0,0 +1,36 @@ +apiVersion: v1 +data: + password: ENC[AES256_GCM,data:8AvecSfm5bdKr17dicd4qQ==,iv:qvHkaVaC3HAvpL5kaHGGNNrvGPVtoNbVXZHqxa6n1DM=,tag:a9xMnyFVHMSL0kmM2vJL5w==,type:str] + username: ENC[AES256_GCM,data:4OaEINQrciw=,iv:TvY4akKEDqwJ2/SJyNWXOtY3+sKcXQ3PZB19QXotIFI=,tag:TRqXXNvhXP0+eT1421otSQ==,type:str] +kind: Secret +metadata: + name: mysecret +stringData: + application: ENC[AES256_GCM,data:zOtyctuLEwn8CnPNg9w=,iv:CqyBsO9VyDC5WyzsTvSWFel2RNMmSBVYdtiDtdFE9xI=,tag:J90fxXxz3KMjFNbTfMpg5Q==,type:str] +type: Opaque +sops: + kms: [] + gcp_kms: [] + azure_kv: [] + hc_vault: [] + age: [] + lastmodified: "2022-12-14T18:20:04Z" + mac: ENC[AES256_GCM,data:Lgni0QjHrmgREN/EDxfZWDqe1ttiIEQ4iDmknp6BgglWnWEBBHZGOBT34Kjekqg31FBTQwqU0CLwKPnQjtsdwvPx9rK9CNBTVsSG502LUU92TjZYHywBFchepUEg4paQLwcBxw5KBtDIIL4WaxT+/1aoAqdsBQGFcozEaknRa9w=,iv:cqiNBFYGd04r5SNXl9lDUE7blgxhsLCP/il6uPe3eDw=,tag:IrilbquCiwnySnDeUxF3eg==,type:str] + pgp: + - created_at: "2022-12-14T18:19:57Z" + enc: | + -----BEGIN PGP MESSAGE----- + + hQEMAyUpShfNkFB/AQgArsbaAfENume2Kq08rYk/cuiP/Zeebo0+TSCKLmbCNmGl + Mj1IsxICErkEZuJ5UlYueYYvvmzScup1SbA/f1hgXBcmrXY61hACsL8602Ix5ZqV + 2PVf0/9ADuHcgKv3jajk8UlewOOYu95HynRqdM67LBNV8/P9dfPO05fL953a4F6W + aqjdFYJwQXIbuzCQrGyu+OXPjurrbAq9qCSlJ3QT9tRazuEn88FzqYFeCtpK7sTF + C2JzvknIastjXndNzOKO+LFY+QV3AUjOF4TR5MWsvllleII35Zk5zo83dh2tuL0I + RpXx0yZ5P6Dxf96Y4ROFUjOps2386zFdlnUYvYRkZNJeAZ0/QnaEXw5zs7VsV8L4 + 3atMEE876Xd7OWvxTbc86bWGVXd9AxD9eb3LeAqHenuc0+cqxdOwdBYe+xQNMjOj + AoGrn9Z0Mp2GWdQ89y9T2Sp9lBilABSTRi4VOrVFKw== + =5Alf + -----END PGP MESSAGE----- + fp: FBC7B9E2A4F9289AC0C1D4843D16CEE4A27381B4 + unencrypted_regex: ^(apiVersion|metadata|kind|type)$ + version: 3.7.2 diff --git a/test/legacy/single/want.yaml b/test/legacy/single/want.yaml new file mode 100644 index 0000000..e16c94a --- /dev/null +++ b/test/legacy/single/want.yaml @@ -0,0 +1,10 @@ +apiVersion: v1 +data: + password: MWYyZDFlMmU2N2Rm + username: YWRtaW4= +kind: Secret +metadata: + name: mysecret +stringData: + application: kustomize-sops +type: Opaque diff --git a/test/secret.enc.yaml b/test/secret.enc.yaml deleted file mode 100644 index e69de29..0000000