Showing preview only (2,064K chars total). Download the full file or copy to clipboard to get everything.
Repository: vmware-tanzu/tanzu-framework
Branch: main
Commit: 93a508a39d94
Files: 317
Total size: 1.9 MB
Directory structure:
gitextract_d1c61wo8/
├── .codecov.yaml
├── .dockerignore
├── .github/
│ ├── ISSUE_TEMPLATE/
│ │ ├── bug_report.md
│ │ └── feature_request.md
│ ├── PULL_REQUEST_TEMPLATE.md
│ ├── dependabot.yml
│ └── workflows/
│ ├── build.yaml
│ ├── cve-scan.yaml
│ ├── lint-all.yaml
│ ├── verify-label.yaml
│ ├── verify.yaml
│ └── welcome-contributors.yaml
├── .gitignore
├── .golangci.yaml
├── .markdownlintrc
├── .trivy.yaml
├── .vale/
│ ├── config.ini
│ └── styles/
│ └── vmware/
│ └── inclusive.yml
├── ADOPTERS.md
├── CODE-OF-CONDUCT.md
├── CODEOWNERS
├── CONTRIBUTING.md
├── Dockerfile
├── GOVERNANCE.md
├── LICENSE
├── MAINTAINERS.md
├── Makefile
├── PROJECT
├── README.md
├── ROADMAP.md
├── SECURITY.md
├── apis/
│ ├── config/
│ │ ├── Makefile
│ │ ├── config/
│ │ │ └── crd/
│ │ │ └── bases/
│ │ │ ├── config.tanzu.vmware.com_featuregates.yaml
│ │ │ └── config.tanzu.vmware.com_features.yaml
│ │ ├── go.mod
│ │ ├── go.sum
│ │ └── v1alpha1/
│ │ ├── feature_types.go
│ │ ├── featuregate_types.go
│ │ ├── featuregate_webhook.go
│ │ ├── featuregate_webhook_test.go
│ │ ├── groupversion_info.go
│ │ └── zz_generated.deepcopy.go
│ └── core/
│ ├── Makefile
│ ├── config/
│ │ └── crd/
│ │ └── bases/
│ │ ├── core.tanzu.vmware.com_capabilities.yaml
│ │ ├── core.tanzu.vmware.com_featuregates.yaml
│ │ ├── core.tanzu.vmware.com_features.yaml
│ │ ├── core.tanzu.vmware.com_readinesses.yaml
│ │ └── core.tanzu.vmware.com_readinessproviders.yaml
│ ├── go.mod
│ ├── go.sum
│ ├── v1alpha1/
│ │ ├── capabilities_types.go
│ │ ├── groupversion_info.go
│ │ └── zz_generated.deepcopy.go
│ └── v1alpha2/
│ ├── capability_types.go
│ ├── feature_stability_policies.go
│ ├── feature_types.go
│ ├── featuregate_types.go
│ ├── featuregate_webhook.go
│ ├── featuregate_webhook_test.go
│ ├── groupversion_info.go
│ ├── readiness_types.go
│ ├── readinessprovider_types.go
│ ├── readinessprovider_webhook.go
│ └── zz_generated.deepcopy.go
├── build.mk
├── capabilities/
│ ├── client/
│ │ ├── README.md
│ │ ├── go.mod
│ │ ├── go.sum
│ │ └── pkg/
│ │ └── discovery/
│ │ ├── cluster_gvr.go
│ │ ├── cluster_object.go
│ │ ├── cluster_schema.go
│ │ ├── cluster_test.go
│ │ ├── discovery.go
│ │ ├── doc.go
│ │ ├── fake.go
│ │ ├── generate.go
│ │ ├── generate_test.go
│ │ └── tkg/
│ │ ├── README.md
│ │ ├── capabilities.go
│ │ ├── capabilities_test.go
│ │ ├── client.go
│ │ ├── cloudprovider.go
│ │ ├── cloudprovider_test.go
│ │ ├── clustermetadata.go
│ │ ├── doc.go
│ │ ├── fake.go
│ │ ├── infraprovider.go
│ │ ├── infraprovider_test.go
│ │ ├── resource.go
│ │ └── resource_test.go
│ ├── config/
│ │ ├── rbac.yaml
│ │ └── tanzu-capabilities-manager.yaml
│ ├── controller/
│ │ ├── go.mod
│ │ ├── go.sum
│ │ ├── main.go
│ │ └── pkg/
│ │ ├── capabilities/
│ │ │ ├── core/
│ │ │ │ ├── capability_controller.go
│ │ │ │ └── doc.go
│ │ │ ├── doc.go
│ │ │ └── suite_test.go
│ │ ├── config/
│ │ │ ├── config.go
│ │ │ ├── config_test.go
│ │ │ └── doc.go
│ │ └── constants/
│ │ ├── constants.go
│ │ └── doc.go
│ └── hack/
│ ├── generate-package-secret.sh
│ ├── generate-package-secret.test.sh
│ └── ytt/
│ ├── default-package-secret.yaml
│ ├── schema.yaml
│ └── values.yaml
├── cmd/
│ └── plugin/
│ ├── codegen/
│ │ ├── README.md
│ │ ├── generate.go
│ │ ├── generators/
│ │ │ └── feature/
│ │ │ ├── doc.go
│ │ │ ├── fakeData/
│ │ │ │ ├── bar.yaml
│ │ │ │ ├── baz.yaml
│ │ │ │ ├── cronjob_types.go
│ │ │ │ ├── doc.go
│ │ │ │ ├── foo.yaml
│ │ │ │ ├── memcached_types.go
│ │ │ │ └── mykind_types.go
│ │ │ ├── feature_suite_test.go
│ │ │ ├── gen.go
│ │ │ └── gen_integration_test.go
│ │ ├── go.mod
│ │ ├── go.sum
│ │ ├── main.go
│ │ └── test/
│ │ ├── fakeData/
│ │ │ └── mykind_types.go
│ │ └── main.go
│ └── feature/
│ ├── README.md
│ ├── activate.go
│ ├── activate_test.go
│ ├── deactivate.go
│ ├── deactivate_test.go
│ ├── go.mod
│ ├── go.sum
│ ├── list.go
│ ├── list_test.go
│ ├── main.go
│ ├── test/
│ │ └── main.go
│ └── testdata/
│ └── k8s_config.kube
├── common.mk
├── docs/
│ ├── README.md
│ ├── community/
│ │ ├── README.md
│ │ ├── contribution-ladder.md
│ │ ├── severity-definitions.md
│ │ └── support-process.md
│ ├── dev/
│ │ ├── README.md
│ │ ├── _proposal.md
│ │ ├── build.md
│ │ └── troubleshooting.md
│ ├── framework-use-cases.md
│ ├── glossary.md
│ ├── packages/
│ │ ├── README.md
│ │ ├── add-new-package-to-package-repo.md
│ │ ├── add-packageinstall-to-meta-package.md
│ │ ├── definitions.md
│ │ └── dev-workflow.md
│ ├── release/
│ │ ├── README.md
│ │ ├── cherry-pick.md
│ │ ├── kind-labels.md
│ │ ├── release-notes-gathering-process.md
│ │ ├── release-notes.md
│ │ └── release-process.md
│ ├── runtime-core/
│ │ ├── README.md
│ │ ├── capability-discovery.md
│ │ ├── features-and-featuregates.md
│ │ ├── guide/
│ │ │ ├── README.md
│ │ │ └── examples/
│ │ │ ├── controller.go.sample
│ │ │ └── megacache_types.go.sample
│ │ ├── readiness-framework/
│ │ │ ├── deploy-local-changes.md
│ │ │ └── guide-with-examples.md
│ │ ├── readiness-framework.md
│ │ └── tanzu-core-controllers.md
│ └── style-guide.md
├── e2e.mk
├── featuregates/
│ ├── client/
│ │ ├── go.mod
│ │ ├── go.sum
│ │ └── pkg/
│ │ ├── featuregateclient/
│ │ │ ├── client.go
│ │ │ ├── client_test.go
│ │ │ ├── doc.go
│ │ │ ├── errors.go
│ │ │ ├── fake/
│ │ │ │ ├── doc.go
│ │ │ │ └── objects.go
│ │ │ └── validation.go
│ │ └── util/
│ │ ├── doc.go
│ │ ├── featuregate.go
│ │ ├── featuregate_test.go
│ │ ├── namespace_selector.go
│ │ └── namespace_selector_test.go
│ └── controller/
│ ├── go.mod
│ ├── go.sum
│ ├── main.go
│ └── pkg/
│ ├── feature/
│ │ ├── doc.go
│ │ ├── feature_controller.go
│ │ ├── feature_suite_test.go
│ │ └── testdata/
│ │ └── webhook.yaml
│ └── featuregate/
│ ├── doc.go
│ └── featuregate_controller.go
├── go.mod
├── go.sum
├── hack/
│ ├── boilerplate.go.txt
│ ├── check/
│ │ ├── .misspellignore
│ │ ├── .yamllintconfig.yaml
│ │ ├── check-yaml.sh
│ │ └── misspell.sh
│ ├── check-license.sh
│ ├── check-mdlint.sh
│ ├── kind/
│ │ ├── Testing_Packages.md
│ │ ├── deploy_kind_with_capi_and_kapp.sh
│ │ └── kind_install_for_capd.sh
│ ├── packages/
│ │ ├── scripts/
│ │ │ └── create-package.sh
│ │ └── templates/
│ │ └── new-package/
│ │ ├── Makefile
│ │ ├── metadata.yaml
│ │ ├── package.yaml
│ │ ├── readme.md
│ │ ├── repo.yaml
│ │ ├── values.yaml
│ │ └── vendir.yml
│ ├── tools/
│ │ ├── Makefile
│ │ ├── go.mod
│ │ ├── go.sum
│ │ ├── main.go
│ │ └── tools.go
│ └── verify-dirty.sh
├── main.go
├── packages/
│ ├── README.md
│ ├── capabilities/
│ │ ├── Makefile
│ │ ├── README.md
│ │ ├── bundle/
│ │ │ └── config/
│ │ │ ├── overlays/
│ │ │ │ └── update-clusterrole-with-psp.yaml
│ │ │ ├── upstream/
│ │ │ │ ├── crds/
│ │ │ │ │ ├── core/
│ │ │ │ │ │ └── core.tanzu.vmware.com_capabilities.yaml
│ │ │ │ │ └── run/
│ │ │ │ │ └── run.tanzu.vmware.com_capabilities.yaml
│ │ │ │ ├── default-serviceaccount.yaml
│ │ │ │ ├── rbac.yaml
│ │ │ │ └── tanzu-capabilities-controller-manager.yaml
│ │ │ └── values.yaml
│ │ ├── kbld-config.yaml
│ │ ├── metadata.yaml
│ │ ├── package.yaml
│ │ ├── vendir.lock.yml
│ │ └── vendir.yml
│ ├── featuregates/
│ │ ├── Makefile
│ │ ├── README.md
│ │ ├── bundle/
│ │ │ └── config/
│ │ │ ├── upstream/
│ │ │ │ ├── crds/
│ │ │ │ │ ├── config/
│ │ │ │ │ │ ├── config.tanzu.vmware.com_featuregates.yaml
│ │ │ │ │ │ └── config.tanzu.vmware.com_features.yaml
│ │ │ │ │ └── core/
│ │ │ │ │ ├── core.tanzu.vmware.com_featuregates.yaml
│ │ │ │ │ └── core.tanzu.vmware.com_features.yaml
│ │ │ │ ├── helpers.star
│ │ │ │ ├── rbac.yaml
│ │ │ │ ├── service.yaml
│ │ │ │ ├── tanzu-featuregates-manager.yaml
│ │ │ │ ├── webhook-secret.yaml
│ │ │ │ └── webhooks/
│ │ │ │ ├── config/
│ │ │ │ │ └── webhook.yaml
│ │ │ │ └── core/
│ │ │ │ └── webhook.yaml
│ │ │ └── values.yaml
│ │ ├── kbld-config.yaml
│ │ ├── metadata.yaml
│ │ ├── package.yaml
│ │ ├── vendir.lock.yml
│ │ └── vendir.yml
│ ├── package-values.yaml
│ └── readiness/
│ ├── Makefile
│ ├── README.md
│ ├── bundle/
│ │ └── config/
│ │ ├── upstream/
│ │ │ ├── crds/
│ │ │ │ ├── core.tanzu.vmware.com_readinesses.yaml
│ │ │ │ └── core.tanzu.vmware.com_readinessproviders.yaml
│ │ │ ├── helpers.star
│ │ │ ├── rbac.yaml
│ │ │ ├── service.yaml
│ │ │ ├── tanzu-readiness-manager.yaml
│ │ │ ├── webhook-secret.yaml
│ │ │ └── webhooks/
│ │ │ └── core/
│ │ │ └── webhook.yaml
│ │ └── values.yaml
│ ├── kbld-config.yaml
│ ├── metadata.yaml
│ ├── package.yaml
│ ├── vendir.lock.yml
│ └── vendir.yml
├── readiness/
│ ├── controller/
│ │ ├── go.mod
│ │ ├── go.sum
│ │ ├── main.go
│ │ └── pkg/
│ │ ├── conditions/
│ │ │ ├── doc.go
│ │ │ ├── resourceexistence.go
│ │ │ ├── resourceexistence_test.go
│ │ │ └── testdata/
│ │ │ └── rbac.yaml
│ │ ├── readiness/
│ │ │ ├── doc.go
│ │ │ ├── readiness_controller.go
│ │ │ └── suite_test.go
│ │ └── readinessprovider/
│ │ ├── doc.go
│ │ ├── readinessprovider_controller.go
│ │ ├── suite_test.go
│ │ └── testdata/
│ │ ├── rbac.yaml
│ │ └── webhook.yaml
│ └── e2e/
│ ├── doc.go
│ ├── e2e_test.go
│ ├── go.mod
│ ├── go.sum
│ └── suite_test.go
└── util/
├── buildinfo/
│ ├── buildvar.go
│ └── metadata.go
├── cmp/
│ ├── compare.go
│ ├── compare_test.go
│ ├── doc.go
│ └── strings/
│ ├── doc.go
│ ├── slices.go
│ └── slices_test.go
├── go.mod
├── go.sum
├── kubeclient/
│ ├── doc.go
│ └── kubeclient.go
├── test/
│ ├── doc.go
│ └── kube.go
├── webhook/
│ └── certs/
│ ├── README.md
│ ├── certmanager.go
│ ├── certmanager_suite_test.go
│ ├── certmanager_test.go
│ ├── constants.go
│ ├── doc.go
│ └── options.go
└── ytt/
└── ytt.go
================================================
FILE CONTENTS
================================================
================================================
FILE: .codecov.yaml
================================================
# https://docs.codecov.com/docs/codecovyml-reference
coverage:
precision: 2
round: down
range: 39..75
status:
project:
default:
target: auto # automatically calculate coverage target - should increase
threshold: 1% # allow for 1% reduction without failing
if_ci_failed: error
only_pulls: false
patch:
default:
target: auto
if_ci_failed: error
only_pulls: false
changes: false
ignore:
- "**/zz_generated.deepcopy.go"
================================================
FILE: .dockerignore
================================================
artifacts/
artifacts-admin/
build/
!build/artifacts/
hack/
packages/
docs/
test/
bin/
================================================
FILE: .github/ISSUE_TEMPLATE/bug_report.md
================================================
---
name: Bug report
about: Report a bug to help us improve Tanzu Framework
labels: needs-triage, kind/bug
---
**Bug description**
**Affected product area (please put an X in all that apply)**
- ( ) APIs
- ( ) Addons
- ( ) CLI
- ( ) Docs
- ( ) IAM
- ( ) Installation
- ( ) Plugin
- ( ) Security
- ( ) Test and Release
- ( ) User Experience
- ( ) Developer Experience
**Expected behavior**
**Steps to reproduce the bug**
**Version** (include the SHA if the version is not obvious)
**Environment where the bug was observed (cloud, OS, etc)**
**Relevant Debug Output (Logs, manifests, etc)**
================================================
FILE: .github/ISSUE_TEMPLATE/feature_request.md
================================================
---
name: Feature request
about: Suggest an idea to improve Tanzu Framework
labels: needs-triage, kind/feature
---
<!-- This is used to request new product features -->
**Describe the feature request**
**Describe alternative(s) you've considered**
**Affected product area (please put an X in all that apply)**
- ( ) APIs
- ( ) Addons
- ( ) CLI
- ( ) Docs
- ( ) IAM
- ( ) Installation
- ( ) Plugin
- ( ) Security
- ( ) Test and Release
- ( ) User Experience
- ( ) Developer Experience
**Additional context**
================================================
FILE: .github/PULL_REQUEST_TEMPLATE.md
================================================
### What this PR does / why we need it
### Which issue(s) this PR fixes
<!--
Usage: Fixes #<issue number>.
Unless the PR is for a trivial change (e.g. fixing a typo), consider opening an issue first
(and reference it here) so that the problem the PR addresses can be discussed independently of
the solutions proposed by this PR.
-->
Fixes #
### Describe testing done for PR
<!-- Example: Created vSphere workload cluster to verify change. -->
### Release note
<!--
Please add a short text (limit to 1 to 2 sentences if possible) in the release-note block below if
there is anything in this PR that is worthy of mention in the next release.
See https://github.com/vmware-tanzu/tanzu-framework/blob/main/docs/release/release-notes.md#does-my-pull-request-need-a-release-note
for more details.
-->
```release-note
```
<!--
## PR Checklist
Please ensure the following:
- Use good commit [messages](https://github.com/vmware-tanzu/tanzu-framework/blob/main/CONTRIBUTING.md)
- Ensure PR contains terms all contributors can understand and links all contributors can access
- Squash the commits into one or a small number of logical commits
| This repository adopts a linear git history model where no merge commits are necessary. To
| keep the commit history tidy, it is recommended that authors be responsible for the decision
| whether to squash the PR's changes into a single commit (and tidy up the commit message in the
| process) or organizing them into a small number of self-contained and meaningful ones.
-->
### Additional information
#### Special notes for your reviewer
<!-- Add notes to that can aid in the review process, or leave blank -->
<!--
If this pull request is just an idea or POC, or is not ready for review, instead of "Create pull request", please select
"Create draft pull request" (https://docs.github.com/en/github/collaborating-with-issues-and-pull-requests/about-pull-requests#draft-pull-requests)
-->
================================================
FILE: .github/dependabot.yml
================================================
# Dependabot config for go mod version upgrades
#
# TODO(vuil):
# All version updates being disabled with
# 'open-pull-requests-limit: 0'
# restoring of version updates being tracked in
# https://github.com/vmware-tanzu/tanzu-framework/issues/4148
version: 2
updates:
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: "daily"
open-pull-requests-limit: 0
- package-ecosystem: "gomod"
directory: "/"
schedule:
interval: "daily"
open-pull-requests-limit: 0
================================================
FILE: .github/workflows/build.yaml
================================================
name: Build
on:
push:
branches: [main]
pull_request:
jobs:
build:
name: build
runs-on: ubuntu-latest
steps:
- name: Free some disk space on runner
run: |
echo "free space before cleanup:"
df -h
sudo rm -rf /usr/share/dotnet /opt/ghc /usr/local/share/boost /usr/lib/jvm /usr/lib/firefox /opt/microsoft/powershell /opt/hostedtoolcache
echo "free space after cleanup:"
df -h
- name: Set up Go 1.x
uses: actions/setup-go@v3
with:
go-version: 1.19
id: go
- name: Check out code into the Go module directory
uses: actions/checkout@v1
- name: go cache
uses: actions/cache@v3
with:
path: |
~/.cache/go-build
~/go/pkg/mod
key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }}
restore-keys: |
${{ runner.os }}-go-
- name: run make docker-build-all
run: |
make docker-build-all
- name: Upload coverage reports to Codecov with GitHub Action
uses: codecov/codecov-action@v3
with:
directory: ./build/
================================================
FILE: .github/workflows/cve-scan.yaml
================================================
name: CVE Scan
on: [pull_request]
permissions:
contents: read
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true # Run only for latest head
jobs:
trivy_scan:
permissions:
contents: read # for actions/checkout to fetch code
security-events: write # for github/codeql-action/upload-sarif to upload SARIF results
actions: read # only required for a private repository by github/codeql-action/upload-sarif to get the Action run status
name: Trivy Scan
runs-on: "ubuntu-latest"
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Run Trivy vulnerability scanner in repo mode
uses: aquasecurity/trivy-action@master
with:
scan-type: 'fs'
ignore-unfixed: true
exit-code: 1
format: 'sarif'
output: 'trivy-results.sarif'
severity: 'CRITICAL,HIGH'
skip-dirs: 'docs'
scanners: 'vuln'
limit-severities-for-sarif: true
- name: Upload Trivy scan results to GitHub Security tab
uses: github/codeql-action/upload-sarif@v2
if: always()
with:
sarif_file: 'trivy-results.sarif'
================================================
FILE: .github/workflows/lint-all.yaml
================================================
name: Lint
on:
pull_request:
branches: [ main, release-* ]
jobs:
lint:
name: lint
runs-on: ubuntu-latest
steps:
- name: Free some disk space on runner
run: |
echo "free space before cleanup:"
df -h
sudo rm -rf /usr/share/dotnet /opt/ghc /usr/local/share/boost /usr/lib/jvm /usr/lib/firefox /opt/microsoft/powershell /opt/hostedtoolcache
echo "free space after cleanup:"
df -h
- name: Set up Go 1.x
uses: actions/setup-go@v3
with:
go-version: 1.19
id: go
- name: Check out code into the Go module directory
uses: actions/checkout@v1
- name: go cache
uses: actions/cache@v3
with:
path: |
~/.cache/go-build
~/go/pkg/mod
key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }}
restore-keys: |
${{ runner.os }}-go-
- name: Cache linting
uses: actions/cache@v3
with:
path: ${{ runner.temp }}/lint_cache
key: ${{ runner.os }}-lint-cache-2
- name: Run lint checks
env:
GOLANGCI_LINT_CACHE: ${{ runner.temp }}/lint_cache
run: |
make lint-all
================================================
FILE: .github/workflows/verify-label.yaml
================================================
---
name: Merge Checker
on:
pull_request:
types:
- opened
- synchronize
- reopened
- labeled
- unlabeled
jobs:
check_labels:
name: Check labels
runs-on: ubuntu-latest
steps:
- uses: docker://agilepathway/pull-request-label-checker:latest
with:
none_of: do-not-merge/hold
one_of: ok-to-merge
repo_token: ${{ secrets.GITHUB_TOKEN }}
================================================
FILE: .github/workflows/verify.yaml
================================================
name: Verify
on:
pull_request:
branches: [ main, release-* ]
jobs:
verify:
name: verify
runs-on: ubuntu-latest
steps:
- name: Free some disk space on runner
run: |
echo "free space before cleanup:"
df -h
sudo rm -rf /usr/share/dotnet /opt/ghc /usr/local/share/boost /usr/lib/jvm /usr/lib/firefox /opt/microsoft/powershell /opt/hostedtoolcache
echo "free space after cleanup:"
df -h
- name: Set up Go 1.x
uses: actions/setup-go@v3
with:
go-version: 1.19
id: go
- name: Check out code into the Go module directory
uses: actions/checkout@v1
- name: go cache
uses: actions/cache@v3
with:
path: |
~/.cache/go-build
~/go/pkg/mod
key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }}
restore-keys: |
${{ runner.os }}-go-
- name: Run make verify
run: |
make verify
================================================
FILE: .github/workflows/welcome-contributors.yaml
================================================
name: 'Housekeeping - Welcome New Contributors'
on:
issues:
types: [opened]
pull_request_target:
types: [opened]
jobs:
welcome-new-contributor:
runs-on: ubuntu-latest
steps:
- name: 'Greet the contributor'
uses: garg3133/welcome-new-contributors@v1.2
with:
token: ${{ secrets.GITHUB_TOKEN }}
issue-message: 'Hey @contributor_name! Thanks for opening your first issue. We appreciate your contribution and welcome you to our community! We are glad to have you here and to have your input on Tanzu Framework.'
pr-message: 'Hi @contributor_name! And thank you for opening your first Pull Request. Someone will review it soon. Thank you for committing to making Tanzu Framework better.'
================================================
FILE: .gitignore
================================================
# NOTE: do not add IDE, editor, or OS-specific patterns here.
# Individuals should add these to their global gitignore.
#
# Example:
# git config --global core.excludesfile ~/.gitignore
#
# cat ~/.gitignore
.idea
# .vscode
# *~
# Binaries for programs and plugins
*.exe
*.exe~
*.dll
*.so
*.dylib
*.bak
bin
artifacts
# Build artifacts that may not be cleaned up properly
.rendered-output/
# Test binary, build with `go test -c`
*.test
# Output of the go coverage tool, specifically when used with LiteIDE
coverage.txt
*.out
coverage.txt
# Kubernetes Generated files - skip generated files, except for vendored files
!vendor/**/zz_generated.*
# Build artifacts related to packages
/build
/packages/package-values-sha256.yaml
/packages/**/.imgpkg
================================================
FILE: .golangci.yaml
================================================
linters-settings:
dupl:
threshold: 100
funlen:
lines: 100
statements: 50
goheader:
values:
const:
COMPANY: VMware, Inc.
LICENSE: Apache-2.0
regexp:
YEAR: 20\d*-*\d*
template: |-
Copyright {{ YEAR }} {{ COMPANY }} All Rights Reserved.
SPDX-License-Identifier: {{ LICENSE }}
goconst:
min-len: 2
min-occurrences: 2
gocritic:
enabled-tags:
- diagnostic
- experimental
- opinionated
- performance
- style
disabled-checks:
- dupImport # https://github.com/go-critic/go-critic/issues/845
- ifElseChain
- octalLiteral
- whyNoLint
- wrapperFunc
gocyclo:
min-complexity: 15
goimports:
local-prefixes: github.com/vmware-tanzu
govet:
check-shadowing: true
settings:
printf:
funcs:
- (github.com/aunum/log").Infof
- (github.com/aunum/log").Warnf
- (github.com/aunum/log").Errorf
- (github.com/aunum/log").Fatalf
misspell:
locale: US
nolintlint:
allow-leading-space: true # don't require machine-readable nolint directives (i.e. with no leading space)
allow-unused: false # report any unused nolint directives
require-explanation: false # don't require an explanation for nolint directives
require-specific: false # don't require nolint directives to be specific about which linter is being skipped
whitespace:
multi-func: true
linters:
disable-all: true
enable:
- bodyclose
- deadcode
- depguard
- dogsled
- dupl
- errcheck
- funlen
- goconst
- gocritic
- gocyclo
- goheader
- goimports
- goprintffuncname
- gosec
- gosimple
- govet
- ineffassign
- misspell
- nakedret
- noctx
- nolintlint
- revive
- rowserrcheck
- staticcheck
- structcheck
- stylecheck
- typecheck
- unconvert
- unparam
- unused
- varcheck
- whitespace
# don't enable:
# - asciicheck
# - exhaustive
# - gochecknoinits
# - gochecknoglobals
# - gocognit
# - godot
# - godox
# - goerr113
# - interfacer
# - lll
# - nestif
# - prealloc
# - testpackage
# - scopelint
# - wsl
issues:
exclude:
- 'declaration of "(err|ctx)" shadows declaration at'
- 'unnamedResult: consider giving a name to these results'
- '(Expect directory permissions to be 0750 or less|Expect (WriteFile|file) permissions to be 0600 or less)'
exclude-rules:
- path: _test\.go
linters:
- dupl
- gocritic
- funlen
# https://github.com/go-critic/go-critic/issues/926
- linters:
- gocritic
text: "unnecessaryDefer:"
- linters:
- revive
text: "that stutters"
- path: zz_.*\.go
linters:
- revive
text: "it will be inferred from"
include:
- EXC0011 # disable excluding of issues about missing package comments from stylecheck
# Show all errors for all linters. Setting these to 0 disables limiting error reporting.
max-same-issues: 0
max-issues-per-linter: 0
run:
skip-dirs:
- test/
- fakes/
timeout: 15m
# golangci.com configuration
# https://github.com/golangci/golangci/wiki/Configuration
service:
golangci-lint-version: 1.38.0 # use the fixed version to not introduce new linters unexpectedly
================================================
FILE: .markdownlintrc
================================================
{
"default": true,
"line_length": false,
"MD024": { "allow_different_nesting": true },
"MD026": { "punctuation": ".,;:!" },
"DM046": { "style": "fenced" },
"MD033": { "allowed_elements": [ "details", "summary" ] }
}
================================================
FILE: .trivy.yaml
================================================
# Ref: https://aquasecurity.github.io/trivy/v0.33/docs/references/customization/config-file
# Global Options
debug: true
# Report Options
exit-code: 1
format: 'sarif'
output: 'trivy-results.sarif'
severity:
- CRITICAL
- HIGH
# Scan Options
scan:
skip-dirs:
- docs
scanners:
- vuln
# Vulnerability Options
vulnerability:
ignore-unfixed: true
================================================
FILE: .vale/config.ini
================================================
StylesPath = styles
[{README,CONTRIBUTING,CODE-OF-CONDUCT,docs/*}.md]
BasedOnStyles = vmware
================================================
FILE: .vale/styles/vmware/inclusive.yml
================================================
extends: substitution
message: Use '%s' instead of '%s' for inclusivity
level: error
ignorecase: true
swap:
blacklist: denylist
disable: deactivate
disabled: deactivated
disabling: deactivating
master: main/primary/leader/controller
slave: follower/replica/secondary
whitelist: allowlist
================================================
FILE: ADOPTERS.md
================================================
# Tanzu Framework Adopters
If you're using Tanzu Framework and want to add your organization to this list,
[follow these directions][1]!
## Solutions built with Tanzu Framework
Below is a list of solutions where Tanzu Framework is being used as a component.
## Adding your organization to the list of Tanzu Framework Adopters
If you would like to be included here, please add an SVG/PNG version of your logo to the `/docs/adopters` directory in this repo and submit a pull request with your change. Name the image file something that reflects your company (e.g., if your company is called Acme, name the image acme.png).
[1]: #adding-your-organization-to-the-list-of-tanzu-framework-adopters
================================================
FILE: CODE-OF-CONDUCT.md
================================================
# Contributor Covenant Code of Conduct
## Our Pledge
We as members, contributors, and leaders pledge to make participation in Tanzu
projects and our commuity a harassment-free experience for everyone, regardless
of age, body size, visible or invisible disability, ethnicity, sex
characteristics, gender identity and expression, level of experience,
education, socio-economic status, nationality, personal appearance, race,
religion, or sexual identity and orientation.
We pledge to act and interact in ways that contribute to an open, welcoming,
diverse, inclusive, and healthy community.
## Our Standards
Examples of behavior that contributes to a positive environment for our
community include:
* Demonstrating empathy and kindness toward other people
* Being respectful of differing opinions, viewpoints, and experiences
* Giving and gracefully accepting constructive feedback
* Accepting responsibility and apologizing to those affected by our mistakes,
and learning from the experience
* Focusing on what is best not just for us as individuals, but for the
overall community
Examples of unacceptable behavior include:
* The use of sexualized language or imagery, and sexual attention or
advances of any kind
* Trolling, insulting or derogatory comments, and personal or political attacks
* Public or private harassment
* Publishing others' private information, such as a physical or email
address, without their explicit permission
* Other conduct which could reasonably be considered inappropriate in a
professional setting
## Enforcement Responsibilities
Community leaders are responsible for clarifying and enforcing our standards of
acceptable behavior and will take appropriate and fair corrective action in
response to any behavior that they deem inappropriate, threatening, offensive,
or harmful.
Community leaders have the right and responsibility to remove, edit, or reject
comments, commits, code, wiki edits, issues, and other contributions that are
not aligned to this Code of Conduct, and will communicate reasons for moderation
decisions when appropriate.
## Scope
This Code of Conduct applies within all community spaces, and also applies when
an individual is officially representing the community in public spaces.
Examples of representing our community include using an official e-mail address,
posting via an official social media account, or acting as an appointed
representative at an online or offline event.
## Enforcement
Instances of abusive, harassing, or otherwise unacceptable behavior may be
reported to the community leaders responsible for enforcement at oss-coc@vmware.com.
All complaints will be reviewed and investigated promptly and fairly.
All community leaders are obligated to respect the privacy and security of the
reporter of any incident.
## Enforcement Guidelines
Community leaders will follow these Community Impact Guidelines in determining
the consequences for any action they deem in violation of this Code of Conduct:
### 1. Correction
**Community Impact**: Use of inappropriate language or other behavior deemed
unprofessional or unwelcome in the community.
**Consequence**: A private, written warning from community leaders, providing
clarity around the nature of the violation and an explanation of why the
behavior was inappropriate. A public apology may be requested.
### 2. Warning
**Community Impact**: A violation through a single incident or series
of actions.
**Consequence**: A warning with consequences for continued behavior. No
interaction with the people involved, including unsolicited interaction with
those enforcing the Code of Conduct, for a specified period of time. This
includes avoiding interactions in community spaces as well as external channels
like social media. Violating these terms may lead to a temporary or
permanent ban.
### 3. Temporary Ban
**Community Impact**: A serious violation of community standards, including
sustained inappropriate behavior.
**Consequence**: A temporary ban from any sort of interaction or public
communication with the community for a specified period of time. No public or
private interaction with the people involved, including unsolicited interaction
with those enforcing the Code of Conduct, is allowed during this period.
Violating these terms may lead to a permanent ban.
### 4. Permanent Ban
**Community Impact**: Demonstrating a pattern of violation of community
standards, including sustained inappropriate behavior, harassment of an
individual, or aggression toward or disparagement of classes of individuals.
**Consequence**: A permanent ban from any sort of public interaction within
the community.
## Attribution
This Code of Conduct is adapted from the [Contributor Covenant][homepage],
version 2.0, available at
[https://www.contributor-covenant.org/version/2/0/code_of_conduct.html](https://www.contributor-covenant.org/version/2/0/code_of_conduct.html).
Community Impact Guidelines were inspired by [Mozilla's code of conduct
enforcement ladder](https://github.com/mozilla/diversity).
[homepage]: https://www.contributor-covenant.org
For answers to common questions about this code of conduct, see the FAQ at
[https://www.contributor-covenant.org/faq](https://www.contributor-covenant.org/faq).
Translations are available at
[https://www.contributor-covenant.org/translations](https://www.contributor-covenant.org/translations).
================================================
FILE: CODEOWNERS
================================================
* @vmware-tanzu/tanzu-runtime-core-maintainers
================================================
FILE: CONTRIBUTING.md
================================================
# Contributing
## Table of Contents
* [Contributing](#contributing)
* [Communication](#communication)
* [Propose a Change](#propose-a-change)
* [Contribute a Change](#contribute-a-change)
* [Commit Messages](#commit-messages)
* [Pull Request Process](#pull-request-process)
* [Creating a Pull Request](#creating-a-pull-request)
* [Getting your Pull Request Reviewed, Approved, and Merged](#getting-your-pull-request-reviewed-approved-and-merged)
* [Merging a Pull Request](#merging-a-pull-request)
* [Contributor License Agreement](#contributor-license-agreement)
--------------
We’d love to accept your patches and contributions to this project. Please
review the following guidelines you'll need to follow in order to make a
contribution.
If you are interested in going beyond a single PR, take a look at our
[Contribution Ladder](docs/community/contribution-ladder.md) and learn how to become a
reviewer.
## Communication
We prefer communicating asynchronously through GitHub issues. We currently do
not have a slack channel or email list (hopefully soon).
## Propose a Change
We suggest beginning by submitting an issue so any high level feedback can be
addressed early, particularly if significant effort will be involved.
Please submit feature requests and bug reports by using GitHub issues and filling
in the supplied template with as much detail as you can.
Before submitting an issue, please search through open ones to ensure others
have not submitted something similar. If a similar issue exists, please add any
additional information as a comment.
## Contribute a Change
Pull requests are welcome for all changes, whether they are improving
documentation, fixing a bug, adding or enhancing a feature, or fixing a typo.
Changes to the behavior of the `tanzu-framework` itself will require that you
build and test your changes.
When adding new functionality, or fixing bugs, add appropriate test coverage
where possible. Different parts of the code base have different strategies and
patterns for testing, some of which may be in flux at any point in time.
Consider commenting on the issue to seek input or opening a draft pull
request to seek feedback on approaches to testing a particular change.
To build the project from source, please consider the docs on [local development](docs/dev/build.md).
### Commit Messages
* Commit messages should include a short (72 chars or less) title summarizing the change.
* They should also include a body with more detailed explanatory text, wrapped to 72 characters.
* The blank line separating the summary from the body is critical (unless you omit the body entirely).
* Commit messages should be written in the imperative: "Implement feature" and not "Implemented feature".
* Bulleted points are fine.
* Typically a hyphen or asterisk is used for the bullet, followed by a single space.
## Pull Request Process
### Creating a Pull Request
Use the pull request template to provide a complete description of the change.
The template aims to capture important information to streamline the review
process, ensure your changes are captured in release notes, and update related
issues. Your pull request description and any discussion that follows is a
contribution itself that will help the community and future contributors
understand the project better.
* Before submitting a pull request, please make sure you verify the changes
locally. The `Makefile` in this repository provides useful targets such as
`lint` and `test` to make verification easier.
* Prefer small commits and small pull requests over large changes.
Small changes are easier to digest and get reviewed faster. If you find
that your change is getting large, break up your PR into small, logical
commits. Consider breaking up large PRs into smaller PRs, if each of them
can be useful on its own.
* Have good commit messages. Please see the [Commit Messages](#commit-messages)
section for guidelines.
* Pull requests *should* reference an existing issue and include a `Fixes #NNNN`
or `Updates #NNNN` comment. Remember that `Fixes` will close the associated
issue, and `Updates` will link the PR to it.
* Pull requests should normally target the `main` branch.
### Getting your Pull Request Reviewed, Approved, and Merged
Once a pull request has been opened, the following must take place before it is merged:
* It needs the `ok-to-merge` label.
* It needs to pass all the checks.
* It needs to be approved by a [CODEOWNER](https://github.com/vmware-tanzu/tanzu-framework/blob/main/CODEOWNERS) for all files changed.
While these steps will not always take place in the same order, the following describes the process for a typical pull request once it is opened:
1. Review is automatically requested from CODEOWNERS.
2. Assignee is added to pull request to ensure it gets proper attention throughout the process.
Typically one of the CODEOWNERS will assign themselves, but they may choose to delegate to someone else.
3. Triage adds `ok-to-merge` if the pull request is generally aligned with product goals and does not conflict with current milestones; otherwise they may add a comment and a `do-not-merge/*` label.
4. Assignee may request others to do an initial review; anyone else may review.
5. Reviewers leave feedback.
6. Contributor updates pull request to address feedback.
7. Requested reviewer approves pull request.
8. Assignee approves pull request.
9. Assignee merges pull request or requests another member to merge it if necessary.
During the review process itself, direct discussion among contributors and reviewers is encouraged.
Throughout the process, and until the pull request has been merged, the following should be transparent to the contributor:
* Has the pull request been assigned to anyone yet?
* Has the pull request been labeled with `ok-to-merge` or `do-not-merge/*`?
* Has someone been requested to review the pull request?
* Has the PR been approved by a reviewer?
* Has the PR been approved by the approver?
If any of the above is unclear, and there has been no new activity for 2-3 days,
the contributor is encouraged to seek further information by commenting and
mentioning the assignee or @vmware-tanzu/tanzu-framework-reviewers if there is
no assignee or they themselves are unresponsive.
### Merging a Pull Request
Maintainers should prefer to merge pull requests with the [Squash and merge](https://help.github.com/en/github/collaborating-with-issues-and-pull-requests/about-pull-request-merges#squash-and-merge-your-pull-request-commits) option.
This option is preferred for a number of reasons.
First, it causes GitHub to insert the pull request number in the commit subject
which makes it easier to track which PR the changes landed in.
Second, a one-to-one correspondence between pull requests and commits makes it
easier to manage reverting changes.
At a maintainer's discretion, pull requests with multiple commits can be merged
with the [Rebase and merge](https://help.github.com/en/github/collaborating-with-issues-and-pull-requests/about-pull-request-merges#rebase-and-merge-your-pull-request-commits)
option. Merging pull requests with multiple commits can make sense in cases
where a change involves code generation or mechanical changes that can be
cleanly separated from semantic changes. The maintainer should review commit
messages for each commit and make sure that each commit builds and passes
tests.
## Contributor License Agreement
All contributors to this project must have a signed Contributor License
Agreement (**"CLA"**) on file with us. The CLA grants us the permissions we
need to use and redistribute your contributions as part of the project; you or
your employer retain the copyright to your contribution. Before a PR can pass
all required checks, our CLA action will prompt you to accept the agreement.
Head over to [https://cla.vmware.com/](https://cla.vmware.com/) to see your
current agreement(s) on file or to sign a new one.
We generally only need you (or your employer) to sign our CLA once and once
signed, you should be able to submit contributions to any VMware project.
Note: a signed CLA is required even for minor updates. If you see something
trivial that needs to be fixed, but are unable or unwilling to sign a CLA, the
maintainers will be happy to make the change on your behalf. If you can
describe the change in a [bug
report](https://github.com/vmware-tanzu/tanzu-framework/issues/new/choose),
it would be greatly appreciated.
================================================
FILE: Dockerfile
================================================
# Copyright 2023 VMware, Inc. All Rights Reserved.
# SPDX-License-Identifier: Apache-2.0
# This Dockerfile is currently consumed by build tooling https://github.com/vmware-tanzu/build-tooling-for-integrations
# to build components in tanzu-framework, check out build-tooling.mk to understand how this is being consumed.
ARG BUILDER_BASE_IMAGE=golang:1.19
ARG ENVTEST_K8S_VERSION=1.26.1
ARG TANZU_CLI_VERSION=0.90.0
FROM --platform=${BUILDPLATFORM} $BUILDER_BASE_IMAGE as base
ARG COMPONENT
ARG GOPROXY_ARG
ENV GOPROXY=${GOPROXY_ARG}
WORKDIR /workspace
RUN --mount=target=. \
--mount=type=cache,target=/go/pkg/mod \
cd $COMPONENT && go mod download
# Linting
FROM golangci/golangci-lint:v1.52.2 AS lint-base
FROM base AS lint
RUN --mount=target=. \
--mount=from=lint-base,src=/usr/bin/golangci-lint,target=/usr/bin/golangci-lint \
--mount=type=cache,target=/go/pkg/mod \
--mount=type=cache,target=/root/.cache/go-build \
--mount=type=cache,target=/root/.cache/golangci-lint \
cd $COMPONENT && golangci-lint run --config /workspace/.golangci.yaml --timeout 10m0s ./...
FROM base AS fmt
RUN --mount=target=. \
--mount=type=cache,target=/go/pkg/mod \
--mount=type=cache,target=/root/.cache/go-build \
cd $COMPONENT && go fmt ./...
FROM base AS vet
RUN --mount=target=. \
--mount=type=cache,target=/go/pkg/mod \
--mount=type=cache,target=/root/.cache/go-build \
cd $COMPONENT && go vet ./...
# Testing
FROM --platform=${BUILDPLATFORM} $BUILDER_BASE_IMAGE as test-base
ARG ENVTEST_K8S_VERSION
RUN go install sigs.k8s.io/controller-runtime/tools/setup-envtest@latest
RUN setup-envtest use ${ENVTEST_K8S_VERSION} --bin-dir /bin
FROM base AS test
ARG ENVTEST_K8S_VERSION
ARG BUILDARCH
RUN --mount=target=. \
--mount=type=cache,target=/go/pkg/mod \
--mount=type=cache,target=/root/.cache/go-build \
--mount=from=test-base,src=/bin/k8s,target=/bin/k8s \
cd $COMPONENT && mkdir /out && KUBEBUILDER_ASSETS=/bin/k8s/${ENVTEST_K8S_VERSION}-linux-${BUILDARCH} go test -v -coverprofile=/out/cover.out ./...
# Build the manager binary
FROM base as builder
ARG TARGETOS
ARG TARGETARCH
ARG LD_FLAGS
ENV LD_FLAGS="$LD_FLAGS "'-extldflags "-static"'
RUN --mount=target=. \
--mount=type=cache,target=/go/pkg/mod \
cd $COMPONENT && CGO_ENABLED=0 GOOS=${TARGETOS} GOARCH=${TARGETARCH} GO111MODULE=on go build -o /out/manager ./main.go
# Download and install Carvel's imgpkg program.
FROM --platform=${BUILDPLATFORM} $BUILDER_BASE_IMAGE as carvel-base
ARG IMGPKG_VERSION
ARG BUILDARCH
RUN wget -O /bin/imgpkg https://github.com/vmware-tanzu/carvel-imgpkg/releases/download/${IMGPKG_VERSION}/imgpkg-linux-${BUILDARCH} && \
chmod +x /bin/imgpkg
# Install Tanzu CLI Plugin Builder via Tanzu CLI or using Tanzu Builder binary, if it is provided.
# Note: We are temporarily using a deactivated plugin until a bug fix is made to the plugin builder.
FROM --platform=${BUILDPLATFORM} $BUILDER_BASE_IMAGE AS cli-plugin-builder-install
ARG TANZU_CLI_VERSION
RUN --mount=target=. \
if [ -e build/artifacts/plugins/tanzu-cli/tanzu_builder ]; then \
mkdir -p /root/.local/share/tanzu-cli/builder/ && \
cp build/artifacts/plugins/tanzu-cli/tanzu_builder /root/.local/share/tanzu-cli/builder/ && \
chmod +x /root/.local/share/tanzu-cli/builder/tanzu_builder && \
ln -s /root/.local/share/tanzu-cli/builder/tanzu_builder /usr/bin/tanzu_builder; \
else \
apt-get update && \
apt-get install -y ca-certificates && \
printf "deb https://storage.googleapis.com/tanzu-cli-os-packages/apt tanzu-cli-jessie main" | tee /etc/apt/sources.list.d/tanzu.list && \
apt-get update --allow-insecure-repositories && \
apt-get install -y tanzu-cli="${TANZU_CLI_VERSION}" --allow-unauthenticated && \
tanzu ceip set true && \
tanzu config eula accept && \
TANZU_CLI_INCLUDE_DEACTIVATED_PLUGINS_TEST_ONLY=true tanzu plugin install builder -v v0.90.0-alpha.2 && \
ln -s $(find /root/.local/share/tanzu-cli/builder/ -type f -name "v$TANZU_CLI_VERSION*") /usr/bin/tanzu_builder; \
fi
# Run Tanzu plugin builder and compile all plugins in the project's cmd/cli/plugin directory.
FROM base AS cli-plugin-build-prep
ARG CLI_PLUGIN_VERSION
ARG CLI_PLUGIN
ARG OCI_REGISTRY
ARG CLI_PLUGIN_GO_FLAGS
RUN --mount=type=bind,readwrite \
--mount=from=carvel-base,src=/bin/imgpkg,target=/bin/imgpkg \
--mount=from=cli-plugin-builder-install,src=/usr/bin/tanzu_builder,target=/usr/bin/tanzu_builder \
tanzu_builder plugin build \
--match "${CLI_PLUGIN}" \
--os-arch linux_amd64 --os-arch windows_amd64 --os-arch darwin_amd64 \
--version "${CLI_PLUGIN_VERSION}" \
--binary-artifacts "./artifacts/plugins" \
--goflags "${CLI_PLUGIN_GO_FLAGS}" && \
tanzu_builder plugin build-package \
--oci-registry "${OCI_REGISTRY}" && \
mkdir -p /out/plugin-artifacts && \
cp -r artifacts /out/plugin-artifacts
# Run Tanzu plugin builder and publish plugins listed in
# build/artifacts/packages/plugin_manifest.yaml.
FROM base AS cli-plugin-publish
ARG REPOSITORY
ARG PUBLISHER
ARG VENDOR
ARG IMGPKG_USERNAME
ARG IMGPKG_PASSWORD
ENV IMGPKG_USERNAME=${IMGPKG_USERNAME} IMGPKG_PASSWORD=${IMGPKG_PASSWORD}
RUN --mount=type=bind,readwrite \
--mount=from=carvel-base,src=/bin/imgpkg,target=/bin/imgpkg \
--mount=from=cli-plugin-builder-install,src=/usr/bin/tanzu_builder,target=/bin/tanzu_builder \
tanzu_builder plugin publish-package \
--repository "${REPOSITORY}" \
--publisher "${PUBLISHER}" \
--vendor "${VENDOR}" \
--package-artifacts "./build/artifacts/packages"
# Use distroless as minimal base image to package the manager binary
# Refer to https://github.com/GoogleContainerTools/distroless for more details
FROM gcr.io/distroless/static:nonroot as image
WORKDIR /
COPY --from=builder /out/manager .
USER nonroot:nonroot
ENTRYPOINT ["/manager"]
FROM scratch AS unit-test-coverage
COPY --from=test /out/cover.out /cover.out
FROM scratch AS bin-unix
COPY --from=builder /out/manager /
FROM bin-unix AS bin-linux
FROM bin-unix AS bin-darwin
FROM scratch AS bin-windows
COPY --from=builder /out/manager /manager.exe
FROM bin-${TARGETOS} as bin
FROM scratch as cli-plugin-build
COPY --from=cli-plugin-build-prep /out/plugin-artifacts/ .
================================================
FILE: GOVERNANCE.md
================================================
# Tanzu Framework Repository Governance
This document defines the project governance for Tanzu Framework, an open source project by VMware.
## Overview
Framework offers an open source repository that will serve multiple Tanzu products including [Tanzu Community Edition](https://github.com/vmware-tanzu/tce).
## The Framework Repository
Framework exists in a single repository and is governed by VMware and maintained under the vmware-tanzu organization.
* Framework: Multiple Tanzu products build atop our Framework. The Framework includes APIs, shared libraries, and
the Tanzu CLI and tools for integration.
## Community
* Users: Members who consume Framework and engage through valuable feedback and unique perspectives.
* Contributors: Members who contribute to Framework through documentation, code reviews, responding to
issues, participation in proposal discussions, contributing code, etc.
* Maintainers: Framework leaders are current employees of VMware. They are responsible for the overall
health and direction of the project; final reviewers of PRs and responsible for releases. Some Maintainers are
responsible for one or more components within Framework codebase, acting as technical leads, product managers and
engineering managers for that component. Maintainers are expected to contribute code and documentation, review PRs
including ensuring quality of code, triage issues, proactively fix bugs, and perform maintenance tasks for these
components. If a maintainer leaves VMware, he/she will also leave the maintainer position. The CODEOWNERS file in
the root directory specifies the maintainer list of people or team (via alias) for the responsibilities to the code
in the tree structure.
## Proposal Process
One of the most important aspects in any open source community is the concept of proposals. All large changes to the
codebase and / or new features, including ones proposed by maintainers, should be preceded by a proposal in our
community repo. This process allows for all members of the community to weigh in on the concept (including the technical details), share their comments and ideas, and offer to help. It also ensures that members are not duplicating work or inadvertently stepping on toes by making large conflicting changes.
The project roadmap is defined by accepted proposals.
Proposals should cover the high-level objectives, use cases, and technical recommendations on how to implement. In general,
the community member(s) interested in implementing the proposal should be either deeply engaged in the proposal process or
be an author of the proposal.
The proposal should be documented as a separated markdown file and pushed to the [design folder](docs/design) via PR. The name of the file should follow the name pattern `<short meaningful words joined by '-'>-design.md`,
e.g: `restore-hooks-design.md`.
Use the [Proposal Template](docs/dev/_proposal.md) as a starting point.
## Proposal Lifecycle
The proposal PR follows the GitHub lifecycle of the PR to indicate its status:
* Open: Proposal is created and under review and discussion.
* Accepted: Proposal has been reviewed and accepted, and labeled “accepted" for tracking purposes.
* Rejected: Proposal has been reviewed and rejected, and labeled “rejected” for tracking purposes.
* Merged: Proposal has been accepted and code is merged in the repo.
* Closed: Proposal has been finished by the lifecycle either Merged or Rejected.
### Lazy Consensus
To maintain velocity in a project, the concept of Lazy Consensus is practiced. Ideas and / or proposals should be shared by
maintainers via GitHub with the appropriate maintainer groups (e.g., @vmware-tanzu/tanzu-framework-reviewers) tagged. Out of respect
for other contributors, major changes should be listed in the [ROADMAP](ROADMAP.md) to centralize the direction of the project.
Author(s) of proposals, pull requests, issues, etc. will specify a time period of no less than five (5) working days for comment
and remain cognizant of popular observed world holidays.
Other maintainers may request additional time for review, but should avoid blocking progress and abstain from delaying progress
unless absolutely needed. The expectation is that blocking progress is accompanied by a guarantee to review and respond to the
relevant action(s) (proposals, PRs, issues, etc.) in short order. All pull requests need to be approved by two (2) maintainers.
================================================
FILE: LICENSE
================================================
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
================================================
FILE: MAINTAINERS.md
================================================
# Tanzu Framework Maintainers
## Maintainers
| Maintainer | GitHub ID | Affiliation |
|--------------|------------------------------------------|------------------------------------------|
| Jeff Moroski | [jmoroski](https://github.com/jmoroski ) | [VMware](https://www.github.com/vmware/) |
## Framework Core Contributors and Stakeholders
| Feature Area | Lead |
|------------------------|-------------------------------------------------------------------------------|
| Tech Lead | Jeff Moroski [jmoroski](https://github.com/jmoroski) |
| Engineering Management | Daniel Guo [danniel1205](https://github.com/danniel1205) |
| Engineering | Rajath Agasthya [rajathagasthya](https://github.com/rajathagasthya) |
| Engineering | Harish Yayi [yharish991](https://github.com/yharish991) |
| Engineering | Frankie Gold [codegold79](https://github.com/codegold79) |
| Engineering | Sathyanarayanan Saravanamuthu [sathyanarays](https://github.com/sathyanarays) |
| Engineering | Avi Sharma [avi-08](https://github.com/avi-08) |
| Engineering | Vandana Pathak [Vandy-P](https://github.com/Vandy-P) |
================================================
FILE: Makefile
================================================
# Copyright 2021 VMware, Inc. All Rights Reserved.
# SPDX-License-Identifier: Apache-2.0
include ./common.mk ./build.mk ./e2e.mk
.DEFAULT_GOAL:=help
SHELL := /usr/bin/env bash
# Produce CRDs that work back to Kubernetes 1.11 (no version conversion)
CRD_OPTIONS ?= "crd"
ifeq ($(GOHOSTOS), linux)
XDG_DATA_HOME := ${HOME}/.local/share
endif
ifeq ($(GOHOSTOS), darwin)
XDG_DATA_HOME := "$${HOME}/Library/Application Support"
endif
# Directories
TOOLS_DIR := $(abspath hack/tools)
TOOLS_BIN_DIR := $(TOOLS_DIR)/bin
BIN_DIR := bin
GO_MODULES=$(shell find . -path "*/go.mod" | xargs -I _ dirname _)
ifndef IS_OFFICIAL_BUILD
IS_OFFICIAL_BUILD = ""
endif
# Package tooling related variables
PACKAGE_VERSION ?= ${BUILD_VERSION}
REPO_BUNDLE_VERSION ?= ${BUILD_VERSION}
# OCI registry for hosting tanzu framework components (containers and packages)
OCI_REGISTRY ?= projects.registry.vmware.com/tanzu_framework
export OCI_REGISTRY
##
## Install targets
##
.PHONY: install
# Install CRDs into a cluster
install: manifests tools
kubectl apply -f apis/core/config/crd/bases
.PHONY: uninstall
# Uninstall CRDs from a cluster
uninstall: manifests
kubectl delete -f apis/core/config/crd/bases
##
## Version
##
.PHONY: version
# Show generated build version
version:
@echo $(BUILD_VERSION)
##
## Testing, verification, formating and cleanup
##
.PHONY: lint-all
# Run linting and misspell checks
lint-all: tools go-lint doc-lint misspell yamllint
# Check licenses in shell scripts and Makefiles
hack/check-license.sh
.PHONY: misspell
misspell:
hack/check/misspell.sh
.PHONY: yamllint
yamllint:
hack/check/check-yaml.sh
# These are the modules that still contain issues reported by golangci-lint.
# Once a module is updated to be lint-free, remove from list to catch lint regressions.
MODULES_NEEDING_LINT_FIX= . ./apis/core
.PHONY: go-lint
# Run linting of go source
go-lint: tools
@for i in $(GO_MODULES); do \
echo "-- Linting $$i --"; \
pushd $${i} > /dev/null; \
if echo ${MODULES_NEEDING_LINT_FIX} | tr ' ' '\n' | grep -q -x $$i; then \
$(GOLANGCI_LINT) run -v --timeout=10m; \
if [ $$? -eq 0 ]; then \
echo "****** NOTE: $$i is now lint-free. Recommend it be excluded from MODULES_NEEDING_LINT_FIX in Makefile"; \
else \
echo; echo "****** WARNING: module $$i needs lint fixes"; echo; \
fi; \
else \
$(GOLANGCI_LINT) run -v --timeout=10m || exit 1; \
fi; \
popd > /dev/null; \
done
# Prevent use of deprecated ioutils module
@CHECK=$$(grep -r --include="*.go" --exclude="zz_generated*" ioutil .); \
if [ -n "$${CHECK}" ]; then \
echo "ioutil is deprecated, use io or os replacements"; \
echo "https://go.dev/doc/go1.16#ioutil"; \
echo "$${CHECK}"; \
exit 1; \
fi
.PHONY: doc-lint
# Run linting checks for docs
doc-lint: tools
$(VALE) --config=.vale/config.ini --glob='*.md' ./
# mdlint rules with possible errors and fixes can be found here:
# https://github.com/DavidAnson/markdownlint/blob/main/doc/Rules.md
# Additional configuration can be found in the .markdownlintrc file.
hack/check-mdlint.sh
.PHONY: modules
# Runs go mod tidy to ensure modules are up to date.
modules:
@for i in $(GO_MODULES); do \
echo "-- Tidying $$i --"; \
pushd $${i}; \
$(GO) mod tidy || exit 1; \
popd; \
done
.PHONY: verify
# Run all verification scripts
verify: tools modules
$(MAKE) smoke-build generate-go generate
./hack/verify-dirty.sh
.PHONY: smoke-build
# Do a quick test that all directories can be built
smoke-build:
@for i in $(GO_MODULES); do \
echo "-- Building $$i --"; \
pushd $${i}; \
$(GO) build ./... || exit 1; \
$(GO) clean -i ./... || exit 1; \
popd; \
done
##
## Code scaffolding targets
##
.PHONY: manifests
# Generate manifests e.g. CRD, RBAC etc.
manifests:
$(MAKE) -C apis/config generate-manifests
$(MAKE) -C apis/core generate-manifests
.PHONY: generate-go
# Generate code via go generate.
generate-go: $(COUNTERFEITER)
@for i in $(GO_MODULES); do \
echo "-- Running go generate ./... $$i --"; \
pushd $${i}; \
PATH=$(abspath hack/tools/bin):"$(PATH)" go generate ./...; \
popd; \
done
.PHONY: generate
# Generate code (legacy)
generate: tools generate-controller-code
.PHONY: generate-fakes
# Generate fakes for writing unit tests
generate-fakes:
$(GO) generate ./...
$(MAKE) fmt
.PHONY: clean-generated-conversions
# Remove files generated by conversion-gen from the mentioned dirs. Example SRC_DIRS="./api/core/v1alpha1"
clean-generated-conversions:
(IFS=','; for i in $(SRC_DIRS); do find $$i -type f -name 'zz_generated.conversion*' -exec rm -f {} \;; done)
.PHONY: generate-go-conversions
# Generate conversions go code
generate-go-conversions: $(CONVERSION_GEN)
$(CONVERSION_GEN) \
-v 3 --logtostderr \
--input-dirs="./apis/core/v1alpha1,./apis/core/v1alpha2" \
--build-tag=ignore_autogenerated_core \
--output-base ./ \
--output-file-base=zz_generated.conversion \
--go-header-file=./hack/boilerplate.go.txt
.PHONY: generate-package-secret
# Generate the default package values secret. Usage: make generate-package-secret PACKAGE=capabilities tkr=v1.23.3---vmware.1-tkg.1 iaas=vsphere
generate-package-secret:
@if [ -z "$(PACKAGE)" ]; then \
echo "PACKAGE argument required"; \
exit 1 ;\
fi
@if [ $(PACKAGE) == 'capabilities' ]; then \
./capabilities/hack/generate-package-secret.sh -v tkr=${tkr} --data-value-yaml 'rbac.podSecurityPolicyNames=[${psp}]';\
else \
echo "invalid PACKAGE: $(PACKAGE)" ;\
exit 1 ;\
fi
.PHONY: create-package
# Stub out new package directories and manifests. Usage: make create-package PACKAGE_NAME=foobar
create-package:
@hack/packages/scripts/create-package.sh $(PACKAGE_NAME)
================================================
FILE: PROJECT
================================================
domain: tanzu.vmware.com
multigroup: true
repo: github.com/vmware-tanzu/tanzu-framework
resources:
- group: run
kind: TanzuKubernetesRelease
version: v1alpha1
- group: config
kind: Feature
version: v1alpha1
- group: run
kind: Capability
version: v1alpha1
- group: config
kind: FeatureGate
version: v1alpha1
- group: run
kind: ClusterBootstrap
version: v1alpha3
- group: run
kind: ClusterBootstrapTemplate
version: v1alpha3
- group: run
kind: KappControllerConfig
version: v1alpha3
- group: run
kind: TanzuKubernetesRelease
version: v1alpha3
- group: core
kind: Capability
version: v1alpha1
- group: core
kind: Capability
version: v1alpha2
- group: core
kind: FeatureGate
version: v1alpha2
- group: core
kind: Feature
version: v1alpha2
- group: core
kind: Readiness
version: v1alpha2
- group: core
kind: ReadinessProvider
version: v1alpha2
version: "2"
================================================
FILE: README.md
================================================
# Tanzu Framework
[](https://pkg.go.dev/github.com/vmware-tanzu/tanzu-framework)
## Overview
Tanzu Framework provides a set of building blocks to build on top of the [Tanzu](https://tanzu.vmware.com/tanzu)
platform.
Framework provides APIs and Packages that enables Tanzu Kubernetes clusters to function in an enterprise-ready way.
Framework leverages [Carvel](https://carvel.dev/) packaging and plugins to provide users with a much stronger, more
integrated experience than the loose coupling and stand-alone commands of the previous generation of tools.
## Documentation
The [documentation](docs) provides information about the project, including user and developer guides.
## Contributing
Thanks for taking the time to join our community and start contributing! We welcome pull requests. Feel free to dig
through the [issues](https://github.com/vmware-tanzu/tanzu-framework/issues) and jump in.
### Before you begin
* Check out the [contribution guidelines](CONTRIBUTING.md) to learn more about how to contribute
* Reference our [troubleshooting](docs/dev/troubleshooting.md) tips if you find yourself in need of more debug options.
* Check out this support process document [here](docs/community/support-process.md) to learn more about the process.
## Roadmap
Check out Framework's project [Roadmap](ROADMAP.md) and consider contributing!
## Release Process
Check quick instructions [here](./docs/release/README.md)
================================================
FILE: ROADMAP.md
================================================
# Tanzu Framework Roadmap
## About this document
This document provides an up to date description of items that are intended for future development. This should serve as a reference point for consumers of this repo and contributors alike to understand where the project is heading, and help determine if a contribution could be conflicting with a longer term plan.
## How to help?
Discussion on the roadmap should take place in threads under Issues. Please comment on an issue if you want to provide suggestions and feedback to an item in the roadmap. Please review the roadmap to avoid potential duplicated efforts.
### How to add an item to the roadmap?
Please open an issue to track any initiative on the roadmap of Framework. For smaller enhancements, you can just open an issue to track that initiative or feature request. We work with and rely on community feedback to focus our efforts to improve Framework and maintain a healthy roadmap.
## Current Roadmap
The following table includes the current roadmap for Framework.
If you would like to contribute and don't know where to start, we are always looking for contributors that will help us reduce technical, automation, and documentation debt.
Please take the timelines & dates as proposals and goals. Priorities and requirements change based on community feedback, roadblocks encountered, etc.
Last Updated: 7/8/21
## Framework items
|Issue|Description|
|---|---|
| TBD | TBD|
================================================
FILE: SECURITY.md
================================================
# Security Release Process
Framework is both the foundation for Tanzu editions and a set of building blocks that can be used to extend Tanzu. Framework enables APIs, code, and documentation to be shared.
This model provides a few primary benefits.
Enables re-use of existing work in Tanzu editions.
Improvements to Framework benefit all editions.
Fosters cross-team collaboration.
Allows extensions to Tanzu to be built following the same patterns as components of Tanzu.
The community has adopted this security disclosure and response policy to ensure we responsibly handle critical issues.
## Supported Versions
Tanzu Framework is released weekly. Versions that are used in downstream Tanzu projects (such as Tanzu Community Edition) and products (such as Tanzu Kubernetes Grid) will be supported for the published lifecycle of those projects and products.
## Reporting a Vulnerability - Private Disclosure Process
Security is of the highest importance and all security vulnerabilities or suspected security vulnerabilities should be reported to Tanzu Framework privately, to minimize attacks against current users of Tanzu Framework before they are fixed. Vulnerabilities will be investigated and patched on the next patch (or minor) release as soon as possible. This information could be kept entirely internal to the project.
If you know of a publicly disclosed security vulnerability for Tanzu Framework, please **IMMEDIATELY** contact the VMware Security Team (security@vmware.com). The use of encrypted email is encouraged. The public PGP key can be found [here](https://kb.vmware.com/kb/1055). **IMPORTANT: Do not file public issues on GitHub for security vulnerabilities**
To report a vulnerability or a security-related issue, please contact the VMware email address with the details of the vulnerability. The email will be fielded by the VMware Security Team and then shared with the Tanzu Framework maintainers who have committer and release permissions. Emails will be addressed within 3 business days, including a detailed plan to investigate the issue and any potential workarounds to perform in the meantime. Do not report non-security-impacting bugs through this channel. Use [GitHub issues](https://github.com/vmware-tanzu/tanzu-framework/issues) instead.
## Proposed Email Content
Provide a descriptive subject line and in the body of the email include the following information:
* Basic identity information, such as your name and your affiliation or company.
* Detailed steps to reproduce the vulnerability (POC scripts, screenshots, and logs are all helpful to us).
* Description of the effects of the vulnerability on Tanzu Framework and the related hardware and software configurations, so that the VMware Security Team can reproduce it.
* How the vulnerability affects Tanzu Framework usage and an estimation of the attack surface, if there is one.
* List other projects or dependencies that were used in conjunction with Tanzu Framework to produce the vulnerability.
## When to report a vulnerability
* When you think Tanzu Framework has a potential security vulnerability.
* When you suspect a potential vulnerability but you are unsure that it impacts Tanzu Framework.
* When you know of or suspect a potential vulnerability on another project that is used by Tanzu Framework.
## Patch, Release, and Disclosure
The VMware Security Team will respond to vulnerability reports as follows:
1. The Security Team will investigate the vulnerability and determine its effects and criticality.
2. If the issue is not deemed to be a vulnerability, the Security Team will follow up with a detailed reason for rejection.
3. The Security Team will initiate a conversation with the reporter within 3 business days.
4. If a vulnerability is acknowledged and the timeline for a fix is determined, the Security Team will work on a plan to communicate with the appropriate community, including identifying mitigating steps that affected users can take to protect themselves until the fix is rolled out.
5. The Security Team will also create a [CVSS](https://www.first.org/cvss/specification-document) using the [CVSS Calculator](https://www.first.org/cvss/calculator/3.0). The Security Team makes the final call on the calculated CVSS; it is better to move quickly than making the CVSS perfect. Issues may also be reported to [Mitre](https://cve.mitre.org/) using this [scoring calculator](https://nvd.nist.gov/vuln-metrics/cvss/v3-calculator). The CVE will initially be set to private.
6. The Security Team will work on fixing the vulnerability and perform internal testing before preparing to roll out the fix.
7. The Security Team will provide early disclosure of the vulnerability by emailing the [Tanzu Framework Distributors](tanzu-framework-distributors@googlegroups.com) mailing list. Distributors can initially plan for the vulnerability patch ahead of the fix, and later can test the fix and provide feedback to the Tanzu Framework team. See the section **Early Disclosure to Tanzu Framework Distributors List** for details about how to join this mailing list.
8. A public disclosure date is negotiated by the VMware SecurityTeam, the bug submitter, and the distributors list. We prefer to fully disclose the bug as soon as possible once a user mitigation or patch is available. It is reasonable to delay disclosure when the bug or the fix is not yet fully understood, the solution is not well-tested, or for distributor coordination. The timeframe for disclosure is from immediate (especially if it’s already publicly known) to a few weeks. For a critical vulnerability with a straightforward mitigation, we expect the report date for the public disclosure date to be on the order of 14 business days. The VMware Security Team holds the final say when setting a public disclosure date.
9. Once the fix is confirmed, the Security Team will patch the vulnerability in the next patch or minor release, and backport a patch release into all earlier supported releases. Upon release of the patched version of Tanzu Framework, we will follow the **Public Disclosure Process**.
## Public Disclosure Process
The Security Team publishes a [public advisory](https://github.com/vmware-tanzu/tanzu-framework/security/advisories) to the Tanzu Framework community via GitHub. In most cases, additional communication via Slack, Twitter, mailing lists, blog and other channels will assist in educating Tanzu Framework users and rolling out the patched release to affected users.
The Security Team will also publish any mitigating steps users can take until the fix can be applied to their Tanzu Framework instances. Tanzu Framework distributors will handle creating and publishing their own security advisories.
## Mailing lists
* Use security@vmware.com to report security concerns to the VMware Security Team, who uses the list to privately discuss security issues and fixes prior to disclosure.
* Join the [Tanzu Framework Distributors](tanzu-framework-distributors@googlegroups.com) mailing list for early private information and vulnerability disclosure. Early disclosure may include mitigating steps and additional information on security patch releases. See below for information on how Tanzu Framework distributors or vendors can apply to join this list.
## Early Disclosure to Tanzu Framework Distributors List
The private list is intended to be used primarily to provide actionable information to multiple distributor projects at once. This list is not intended to inform individuals about security issues.
## Membership Criteria
To be eligible to join the [Tanzu Framework Distributors](tanzu-framework-distributors@googlegroups.com) mailing list, you should:
1. Be an active distributor of Tanzu Framework.
2. Have a user base that is not limited to your own organization.
3. Have a publicly verifiable track record up to the present day of fixing security issues.
4. Not be a downstream or rebuild of another distributor.
5. Be a participant and active contributor in the Tanzu Framework community.
6. Accept the Embargo Policy that is outlined below.
7. Have someone who is already on the list vouch for the person requesting membership on behalf of your distribution.
**The terms and conditions of the Embargo Policy apply to all members of this mailing list. A request for membership represents your acceptance to the terms and conditions of the Embargo Policy.**
## Embargo Policy
The information that members receive on the Tanzu Framework Distributors mailing list must not be made public, shared, or even hinted at anywhere beyond those who need to know within your specific team, unless you receive explicit approval to do so from the VMware Security Team. This remains true until the public disclosure date/time agreed upon by the list. Members of the list and others cannot use the information for any reason other than to get the issue fixed for your respective distribution's users.
Before you share any information from the list with members of your team who are required to fix the issue, these team members must agree to the same terms, and only be provided with information on a need-to-know basis.
In the unfortunate event that you share information beyond what is permitted by this policy, you must urgently inform the VMware Security Team (security@vmware.com) of exactly what information was leaked and to whom. If you continue to leak information and break the policy outlined here, you will be permanently removed from the list.
## Requesting to Join
Send new membership requests to tanzu-framework-distributors@googlegroups.com. In the body of your request please specify how you qualify for membership and fulfill each criterion listed in the Membership Criteria section above.
## Confidentiality, integrity and availability
We consider vulnerabilities leading to the compromise of data confidentiality, elevation of privilege, or integrity to be our highest priority concerns. Availability, in particular in areas relating to DoS and resource exhaustion, is also a serious security concern. The VMware Security Team takes all vulnerabilities, potential vulnerabilities, and suspected vulnerabilities seriously and will investigate them in an urgent and expeditious manner.
Note that we do not currently consider the default settings for Tanzu Framework to be secure-by-default. It is necessary for operators to explicitly configure settings, role based access control, and other resource related features in Tanzu Framework to provide a hardened Tanzu Framework environment. We will not act on any security disclosure that relates to a lack of safe defaults. Over time, we will work towards improved safe-by-default configuration, taking into account backwards compatibility.
================================================
FILE: apis/config/Makefile
================================================
# Copyright 2022 VMware, Inc. All Rights Reserved.
# SPDX-License-Identifier: Apache-2.0
include ../../common.mk
================================================
FILE: apis/config/config/crd/bases/config.tanzu.vmware.com_featuregates.yaml
================================================
---
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.9.2
creationTimestamp: null
name: featuregates.config.tanzu.vmware.com
spec:
group: config.tanzu.vmware.com
names:
kind: FeatureGate
listKind: FeatureGateList
plural: featuregates
singular: featuregate
scope: Cluster
versions:
- deprecated: true
deprecationWarning: FeatureGate API in config.tanzu.vmware.com is deprecated.
Use FeatureGate API from core.tanzu.vmware.com instead
name: v1alpha1
schema:
openAPIV3Schema:
description: FeatureGate is the Schema for the featuregates API
properties:
apiVersion:
description: 'APIVersion defines the versioned schema of this representation
of an object. Servers should convert recognized schemas to the latest
internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
type: string
kind:
description: 'Kind is a string value representing the REST resource this
object represents. Servers may infer this from the endpoint the client
submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
type: string
metadata:
type: object
spec:
description: Spec is the specification for gating features.
properties:
features:
description: Features is a slice of FeatureReference to gate features.
The Feature resource specified may or may not be present in the
system. If the Feature is present, the FeatureGate controller and
webhook sets the specified activation state only if the Feature
is discoverable and its immutability constraint is satisfied. If
the Feature is not present, the activation intent is applied when
the Feature resource appears in the system. The actual activation
state of the Feature is reported in the status.
items:
description: FeatureReference refers to a Feature resource and specifies
its intended activation state.
properties:
activate:
description: Activate indicates the activation intent for the
feature.
type: boolean
name:
description: Name is the name of the Feature resource, which
represents a feature the system offers.
type: string
required:
- name
type: object
type: array
x-kubernetes-list-map-keys:
- name
x-kubernetes-list-type: map
namespaceSelector:
description: NamespaceSelector is a selector to specify namespaces
for which this feature gate applies. Use an empty LabelSelector
to match all namespaces.
properties:
matchExpressions:
description: matchExpressions is a list of label selector requirements.
The requirements are ANDed.
items:
description: A label selector requirement is a selector that
contains values, a key, and an operator that relates the key
and values.
properties:
key:
description: key is the label key that the selector applies
to.
type: string
operator:
description: operator represents a key's relationship to
a set of values. Valid operators are In, NotIn, Exists
and DoesNotExist.
type: string
values:
description: values is an array of string values. If the
operator is In or NotIn, the values array must be non-empty.
If the operator is Exists or DoesNotExist, the values
array must be empty. This array is replaced during a strategic
merge patch.
items:
type: string
type: array
required:
- key
- operator
type: object
type: array
matchLabels:
additionalProperties:
type: string
description: matchLabels is a map of {key,value} pairs. A single
{key,value} in the matchLabels map is equivalent to an element
of matchExpressions, whose key field is "key", the operator
is "In", and the values array contains only "value". The requirements
are ANDed.
type: object
type: object
x-kubernetes-map-type: atomic
required:
- namespaceSelector
type: object
status:
description: Status reports activation state and availability of features
in the system.
properties:
activatedFeatures:
description: ActivatedFeatures lists the discovered features that
are activated for the namespaces specified in the spec. This can
include features that are not explicitly gated in the spec, but
are already available in the system as Feature resources.
items:
type: string
type: array
deactivatedFeatures:
description: DeactivatedFeatures lists the discovered features that
are deactivated for the namespaces specified in the spec. This can
include features that are not explicitly gated in the spec, but
are already available in the system as Feature resources.
items:
type: string
type: array
namespaces:
description: Namespaces lists the existing namespaces for which this
feature gate applies. This is obtained from listing all namespaces
and applying the NamespaceSelector specified in spec.
items:
type: string
type: array
unavailableFeatures:
description: UnavailableFeatures lists the features that are gated
in the spec, but are not available in the system as Feature resources.
items:
type: string
type: array
type: object
type: object
served: true
storage: true
subresources:
status: {}
================================================
FILE: apis/config/config/crd/bases/config.tanzu.vmware.com_features.yaml
================================================
---
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.9.2
creationTimestamp: null
name: features.config.tanzu.vmware.com
spec:
group: config.tanzu.vmware.com
names:
kind: Feature
listKind: FeatureList
plural: features
singular: feature
scope: Cluster
versions:
- additionalPrinterColumns:
- jsonPath: .spec.activated
name: Activated
type: boolean
- jsonPath: .spec.description
name: Description
type: string
- jsonPath: .spec.immutable
name: Immutable
type: boolean
- jsonPath: .spec.maturity
name: Maturity
type: string
deprecated: true
deprecationWarning: Feature API in config.tanzu.vmware.com is deprecated. Use
Feature API from core.tanzu.vmware.com instead
name: v1alpha1
schema:
openAPIV3Schema:
description: Feature is the Schema for the features API
properties:
apiVersion:
description: 'APIVersion defines the versioned schema of this representation
of an object. Servers should convert recognized schemas to the latest
internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
type: string
kind:
description: 'Kind is a string value representing the REST resource this
object represents. Servers may infer this from the endpoint the client
submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
type: string
metadata:
type: object
spec:
description: FeatureSpec defines the desired state of Feature
properties:
activated:
description: Activated defines the default state of the features activation
type: boolean
description:
description: Description of the feature.
type: string
discoverable:
description: Discoverable indicates if clients should include consider
the Feature available for their use Allowing clients to control
discoverability is one of the ways the API allows gradual rollout
of functionality
type: boolean
immutable:
description: Immutable indicates this feature cannot be toggled once
set If set at creation time, this state will persist for the life
of the cluster
type: boolean
maturity:
description: 'Maturity indicates maturity level of this feature. Maturity
levels are Dev, Alpha, Beta, GA and Deprecated. - dev: the default
for new resources, represents local dev. intended to be hidden and
deactivated - alpha: the first milestone meant for limited wider
consumption, discoverable and defaults to deactivated - beta: greater
visibility for proven designs, discoverable and defaults to activated
- ga: intended to be part of the mainline codebase, non-optional
- deprecated: destined for future removal'
enum:
- dev
- alpha
- beta
- ga
- deprecated
type: string
required:
- activated
- discoverable
- immutable
- maturity
type: object
status:
description: FeatureStatus defines the observed state of Feature
type: object
type: object
served: true
storage: true
subresources: {}
================================================
FILE: apis/config/go.mod
================================================
module github.com/vmware-tanzu/tanzu-framework/apis/config
go 1.19
require (
github.com/google/go-cmp v0.5.8
k8s.io/api v0.24.2
k8s.io/apimachinery v0.24.2
k8s.io/client-go v0.24.2
sigs.k8s.io/controller-runtime v0.12.3
)
require (
github.com/PuerkitoBio/purell v1.1.1 // indirect
github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 // indirect
github.com/beorn7/perks v1.0.1 // indirect
github.com/cespare/xxhash/v2 v2.1.2 // indirect
github.com/davecgh/go-spew v1.1.1 // indirect
github.com/emicklei/go-restful/v3 v3.9.0 // indirect
github.com/evanphx/json-patch v4.12.0+incompatible // indirect
github.com/fsnotify/fsnotify v1.5.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/gogo/protobuf v1.3.2 // indirect
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
github.com/golang/protobuf v1.5.2 // indirect
github.com/google/gnostic v0.5.7-v3refs // indirect
github.com/google/gofuzz v1.1.0 // indirect
github.com/google/uuid v1.1.2 // indirect
github.com/imdario/mergo v0.3.12 // indirect
github.com/josharian/intern v1.0.0 // indirect
github.com/json-iterator/go v1.1.12 // indirect
github.com/mailru/easyjson v0.7.6 // indirect
github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369 // indirect
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
github.com/modern-go/reflect2 v1.0.2 // indirect
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
github.com/pkg/errors v0.9.1 // indirect
github.com/prometheus/client_golang v1.12.1 // indirect
github.com/prometheus/client_model v0.2.0 // indirect
github.com/prometheus/common v0.32.1 // indirect
github.com/prometheus/procfs v0.7.3 // indirect
github.com/spf13/pflag v1.0.5 // indirect
github.com/stretchr/testify v1.8.0 // indirect
golang.org/x/net v0.8.0 // indirect
golang.org/x/oauth2 v0.3.0 // indirect
golang.org/x/sys v0.6.0 // indirect
golang.org/x/term v0.6.0 // indirect
golang.org/x/text v0.8.0 // indirect
golang.org/x/time v0.3.0 // indirect
gomodules.xyz/jsonpatch/v2 v2.2.0 // indirect
google.golang.org/appengine v1.6.7 // indirect
google.golang.org/protobuf v1.28.0 // indirect
gopkg.in/inf.v0 v0.9.1 // indirect
gopkg.in/yaml.v2 v2.4.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
k8s.io/apiextensions-apiserver v0.24.2 // indirect
k8s.io/component-base v0.24.2 // indirect
k8s.io/klog/v2 v2.60.1 // indirect
k8s.io/kube-openapi v0.0.0-20221207184640-f3cff1453715 // indirect
k8s.io/utils v0.0.0-20220210201930-3a6ce19ff2f9 // indirect
sigs.k8s.io/json v0.0.0-20211208200746-9f7c6b3444d2 // indirect
sigs.k8s.io/structured-merge-diff/v4 v4.2.3 // indirect
sigs.k8s.io/yaml v1.3.0 // indirect
)
================================================
FILE: apis/config/go.sum
================================================
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU=
cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU=
cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY=
cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc=
cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0=
cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To=
cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4=
cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M=
cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc=
cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk=
cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs=
cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc=
cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY=
cloud.google.com/go v0.72.0/go.mod h1:M+5Vjvlc2wnp6tjzE102Dw08nGShTscUx2nZMufOKPI=
cloud.google.com/go v0.74.0/go.mod h1:VV1xSbzvo+9QJOxLDaJfTjx5e+MePCpCWwvftOeQmWk=
cloud.google.com/go v0.78.0/go.mod h1:QjdrLG0uq+YwhjoVOLsS1t7TW8fs36kLs4XO5R5ECHg=
cloud.google.com/go v0.79.0/go.mod h1:3bzgcEeQlzbuEAYu4mrWhKqWjmpprinYgKJLgKHnbb8=
cloud.google.com/go v0.81.0/go.mod h1:mk/AM35KwGk/Nm2YSeZbxXdrNK3KZOYHmLkOqC2V6E0=
cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o=
cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE=
cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc=
cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg=
cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc=
cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ=
cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE=
cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk=
cloud.google.com/go/firestore v1.1.0/go.mod h1:ulACoGHTpvq5r8rxGJ4ddJZBZqakUQqClKRT5SZwBmk=
cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I=
cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw=
cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA=
cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU=
cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw=
cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos=
cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk=
cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs=
cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0=
dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E=
github.com/Azure/go-autorest v14.2.0+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24=
github.com/Azure/go-autorest/autorest v0.11.18/go.mod h1:dSiJPy22c3u0OtOKDNttNgqpNFY/GeWa7GH/Pz56QRA=
github.com/Azure/go-autorest/autorest/adal v0.9.13/go.mod h1:W/MM4U6nLxnIskrw4UwWzlHfGjwUS50aOsc/I3yuU8M=
github.com/Azure/go-autorest/autorest/date v0.3.0/go.mod h1:BI0uouVdmngYNUzGWeSYnokU+TrmwEsOqdt8Y6sso74=
github.com/Azure/go-autorest/autorest/mocks v0.4.1/go.mod h1:LTp+uSrOhSkaKrUy935gNZuuIPPVsHlr9DSOxSayd+k=
github.com/Azure/go-autorest/logger v0.2.1/go.mod h1:T9E3cAhj2VqvPOtCYAvby9aBXkZmbF5NWuPV8+WeEW8=
github.com/Azure/go-autorest/tracing v0.6.0/go.mod h1:+vhtPC754Xsa23ID7GlGsrdKBpUA79WCAKPPZVC2DeU=
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/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ=
github.com/NYTimes/gziphandler v1.1.1/go.mod h1:n/CVRwUEOgIxrgPvAQhUUr9oeUtvrhMomdKFjzJNB0c=
github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU=
github.com/PuerkitoBio/purell v1.1.1 h1:WEQqlqaGbrPkxLJWfBwQmfEAE1Z7ONdDLqrN38tNFfI=
github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0=
github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 h1:d+Bc7a5rLufV/sSk/8dngufqelfh6jnri85riMAaF/M=
github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE=
github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho=
github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY=
github.com/antlr/antlr4/runtime/Go/antlr v0.0.0-20210826220005-b48c857c3a0e/go.mod h1:F7bn7fEU90QkQ3tnmaTx3LTKLEDqnwWODIYppRQ5hnY=
github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o=
github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY=
github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8=
github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs=
github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY=
github.com/benbjohnson/clock v1.0.3/go.mod h1:bGMdMPoPVvcYyt1gHDf4J2KE153Yf9BuiUKYMaxlTDM=
github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA=
github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=
github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8=
github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs=
github.com/bketelsen/crypt v0.0.3-0.20200106085610-5cbc8cc4026c/go.mod h1:MKsuJmJgSg28kpZDP6UIiPt0e0Oz0kqKNGyRaWEPv84=
github.com/blang/semver/v4 v4.0.0/go.mod h1:IbckMUScFkM3pff0VJDNKRiT6TG/YpiHIM2yvyW5YoQ=
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
github.com/certifi/gocertifi v0.0.0-20191021191039-0944d244cd40/go.mod h1:sGbDF6GwGcLpkNXPUTkMRoywsNa/ol15pxFe6ERfguA=
github.com/certifi/gocertifi v0.0.0-20200922220541-2c3bb06c6054/go.mod h1:sGbDF6GwGcLpkNXPUTkMRoywsNa/ol15pxFe6ERfguA=
github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc=
github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
github.com/cespare/xxhash/v2 v2.1.2 h1:YRXhKfTDauu4ajMg1TPgFO5jnlC2HCbmLXMcTG5cbYE=
github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI=
github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI=
github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU=
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk=
github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk=
github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
github.com/cockroachdb/datadriven v0.0.0-20200714090401-bf6692d28da5/go.mod h1:h6jFvWxBdQXxjopDMZyH2UVceIRfR84bdzbkoKrsWNo=
github.com/cockroachdb/errors v1.2.4/go.mod h1:rQD95gz6FARkaKkQXUksEje/d9a6wBJoCr5oaCLELYA=
github.com/cockroachdb/logtags v0.0.0-20190617123548-eb05cc24525f/go.mod h1:i/u985jwjWRlyHXQbwatDASoW0RMlZ/3i9yJHE2xLkI=
github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk=
github.com/coreos/etcd v3.3.13+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE=
github.com/coreos/go-oidc v2.1.0+incompatible/go.mod h1:CgnwVTmzoESiwO9qyAFEMiHoZ1nMCKZlZ9V6mm3/LKc=
github.com/coreos/go-semver v0.3.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/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/creack/pty v1.1.11/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/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/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/emicklei/go-restful v2.9.5+incompatible/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs=
github.com/emicklei/go-restful/v3 v3.9.0 h1:XwGDlfxEnQZzuopoqxwSEllNcCOM9DhhFyhFIIGKwxE=
github.com/emicklei/go-restful/v3 v3.9.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc=
github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
github.com/envoyproxy/go-control-plane v0.9.7/go.mod h1:cwu0lG7PUMfa9snN8LXBig5ynNVH9qI8YYLbd1fK2po=
github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk=
github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk=
github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ=
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
github.com/evanphx/json-patch v0.5.2/go.mod h1:ZWS5hhDbVDyob71nXKNL0+PWn6ToqBHMikGIFbs31qQ=
github.com/evanphx/json-patch v4.12.0+incompatible h1:4onqiflcdA9EOZ4RxV643DvftH5pOlLGNtQ5lPWQu84=
github.com/evanphx/json-patch v4.12.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk=
github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4=
github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U=
github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k=
github.com/form3tech-oss/jwt-go v3.2.3+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k=
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ=
github.com/fsnotify/fsnotify v1.5.1 h1:mZcQUHVQUQWoPXXtuf9yuEXKudkV2sx1E06UadKWpgI=
github.com/fsnotify/fsnotify v1.5.1/go.mod h1:T3375wBYaZdLLcVNkcVbzGHY7f1l/uK5T5Ai1i3InKU=
github.com/getkin/kin-openapi v0.76.0/go.mod h1:660oXbgy5JFMKreazJaQTw7o+X00qeSyhcnluiMv+Xg=
github.com/getsentry/raven-go v0.2.0/go.mod h1:KungGk8q33+aIAZUIVWZDr2OfAEBsO49PX4NzFV5kcQ=
github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU=
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY=
github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE=
github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk=
github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A=
github.com/go-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-logr/zapr v1.2.0 h1:n4JnPI1T3Qq1SFEi/F8rwLrZERp2bso19PJZDB9dayk=
github.com/go-logr/zapr v1.2.0/go.mod h1:Qa4Bsj2Vb+FAVeAKsLD8RLQ+YRJB8YDmOAKxaBQf7Ro=
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/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-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
github.com/godbus/dbus/v5 v5.0.4/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.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o=
github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
github.com/golang/glog v1.0.0/go.mod h1:EWib/APOK0SL3dFbYqvxE3UYd8E6s1ouQ7iEp/0LWV4=
github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE=
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y=
github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw=
github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw=
github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw=
github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4=
github.com/golang/mock v1.5.0/go.mod h1:CWnOUgYIOo4TcNZ0wHX3YZCqsaM1I1Jvs6v3mP3KVu8=
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw=
github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw=
github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk=
github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8=
github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA=
github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs=
github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=
github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=
github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8=
github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
github.com/golang/protobuf v1.5.1/go.mod h1:DopwsBzvsk0Fs44TXzsVbJyPhcCPeIwnvohx4u74HPM=
github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw=
github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
github.com/google/btree v1.0.1/go.mod h1:xXMiIv4Fb/0kKde4SpL7qlzvu5cMJDRkFDxJfI9uaxA=
github.com/google/cel-go v0.10.1/go.mod h1:U7ayypeSkw23szu4GaQTPJGx66c20mx8JklMSxrmI1w=
github.com/google/cel-spec v0.6.0/go.mod h1:Nwjgxy5CbjlPrtCWjeDjUyKMl8w41YBYGjsyDdqk0xA=
github.com/google/gnostic v0.5.7-v3refs h1:FhTMOKj2VhjpouxvWJAV1TL304uMlb9zcDqkl6cEI54=
github.com/google/gnostic v0.5.7-v3refs/go.mod h1:73MKFl6jIHelAJNaBGFzt3SPtZULs9dYrGFt8OiIsHQ=
github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.8 h1:e6P7q2lk1O+qJJb4BtCQXlK8vWEO8V1ZeuEdJNOqZyg=
github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
github.com/google/gofuzz v1.1.0 h1:Hsa8mG0dQ46ij8Sl2AYJDUv1oA9/d6Vk+3LG99Oe02g=
github.com/google/gofuzz v1.1.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs=
github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0=
github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0=
github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=
github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=
github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
github.com/google/pprof v0.0.0-20210122040257-d980be63207e/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
github.com/google/pprof v0.0.0-20210226084205-cbba55b83ad5/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
github.com/google/uuid v1.1.2 h1:EVhdT+1Kseyi1/pUmXKaFxYsDNy9RQYkMWRH68J/W7Y=
github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg=
github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk=
github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So=
github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA=
github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs=
github.com/grpc-ecosystem/go-grpc-middleware v1.3.0/go.mod h1:z0ButlSOZa5vEBq9m2m2hlwIgKw+rp3sdCBRoJY+30Y=
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/consul/api v1.1.0/go.mod h1:VmuI/Lkw1nC05EYQWNKwWGbkg+FbDBtguAZLlVdkD9Q=
github.com/hashicorp/consul/sdk v0.1.1/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8=
github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80=
github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60=
github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM=
github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk=
github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU=
github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU=
github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4=
github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro=
github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro=
github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA0oac0k90=
github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ=
github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64=
github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ=
github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I=
github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc=
github.com/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.5/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA=
github.com/imdario/mergo v0.3.12 h1:b6R2BslTbIEToALKP7LxUvijTsNI9TAe80pLWN2g/HU=
github.com/imdario/mergo v0.3.12/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA=
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/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo=
github.com/jonboulle/clockwork v0.2.2/go.mod h1:Pkfl5aHPm1nk2H9h0bjmnJD/BcgbGXUBGnn1kMkgxc8=
github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY=
github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y=
github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4=
github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU=
github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk=
github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU=
github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w=
github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM=
github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q=
github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00=
github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg=
github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc=
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
github.com/kr/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/magiconair/properties v1.8.1/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/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU=
github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4=
github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369 h1:I0XW9+e1XWDxdcEniV4rQAIOPUGDq67JSCiRCgGCZLI=
github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4=
github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg=
github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc=
github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI=
github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS42BGNg=
github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY=
github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
github.com/mitchellh/mapstructure v1.4.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
github.com/moby/spdystream v0.2.0/go.mod h1:f7i0iNDQJ059oMTcWxx8MA/zKFIuD/lY+0GqbN2Wy8c=
github.com/moby/term v0.0.0-20210619224110-3f7ff695adc6/go.mod h1:E2VnQOmVuvZB6UYnnDB0qG5Nq/1tD9acaOpo6xmt0Kw=
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M=
github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
github.com/munnerz/goautoneg v0.0.0-20120707110453-a547fc61f48d/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ=
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA=
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ=
github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
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 h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs=
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/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE=
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/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE=
github.com/onsi/ginkgo/v2 v2.1.4 h1:GNapqRSid3zijZ9H77KrgVG4/8KqiyRsxcSxe+7ApXY=
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/onsi/gomega v1.19.0 h1:4ieX6qQjPP/BfC3mpsAtIGGlxTWPeA3Inl/7DtXw1tw=
github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o=
github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc=
github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic=
github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU=
github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/sftp v1.10.1/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZI=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI=
github.com/pquerna/cachecontrol v0.0.0-20171018203845-0dec1b30a021/go.mod h1:prYjPmNq4d1NPVmpShWobRqXY3q7Vp+80DqgxxUrUIA=
github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw=
github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso=
github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo=
github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M=
github.com/prometheus/client_golang v1.11.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0=
github.com/prometheus/client_golang v1.12.1 h1:ZiaPsmm9uiBeaSMRznKsCDNtPCS0T3JVDGF+06gjBzk=
github.com/prometheus/client_golang v1.12.1/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY=
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 h1:uq5h0d+GuxiXLJLNABMgp2qUWDPiLvgCzz2dUR+/W/M=
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.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo=
github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc=
github.com/prometheus/common v0.32.1 h1:hWIdL3N2HoUx3B8j3YN9mWor0qhY/NlEKZEaXxuIRh4=
github.com/prometheus/common v0.32.1/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls=
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.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU=
github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA=
github.com/prometheus/procfs v0.7.3 h1:4jVXhlkAyzOScmCkXBTOLRLTz8EeU+eyjrwB/EPq0VU=
github.com/prometheus/procfs v0.7.3/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA=
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/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts=
github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc=
github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc=
github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88=
github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0=
github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0=
github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc=
github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA=
github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM=
github.com/soheilhy/cmux v0.1.5/go.mod h1:T7TcVDs9LWfQgPlPsdngu6I6QIoyIFZDDC6sNE1GqG0=
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/afero v1.6.0/go.mod h1:Ai8FlHk4v/PARR026UzYexafAt9roJ7LcLMAmO6Z93I=
github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE=
github.com/spf13/cobra v1.1.3/go.mod h1:pGADOWyqRD/YMrPZigI/zbliZ2wVD/23d+is3pSWzOo=
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 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
github.com/spf13/viper v1.7.0/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg=
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.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/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.8.0 h1:pSgiaMZlXftHpm5L7V1+rVB+AZJydKsMxsQBIJw4PKk=
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw=
github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U=
github.com/tmc/grpc-websocket-proxy v0.0.0-20201229170055-e5319fda7802/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U=
github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU=
github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
github.com/yuin/goldmark v1.4.1/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU=
go.etcd.io/bbolt v1.3.6/go.mod h1:qXsaaIqmgQH0T+OPdb99Bf+PKfBBQVAdyD6TY9G8XM4=
go.etcd.io/etcd/api/v3 v3.5.0/go.mod h1:cbVKeC6lCfl7j/8jBhAK6aIYO9XOjdptoxU/nLQcPvs=
go.etcd.io/etcd/api/v3 v3.5.1/go.mod h1:cbVKeC6lCfl7j/8jBhAK6aIYO9XOjdptoxU/nLQcPvs=
go.etcd.io/etcd/client/pkg/v3 v3.5.0/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g=
go.etcd.io/etcd/client/pkg/v3 v3.5.1/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g=
go.etcd.io/etcd/client/v2 v2.305.0/go.mod h1:h9puh54ZTgAKtEbut2oe9P4L/oqKCVB6xsXlzd7alYQ=
go.etcd.io/etcd/client/v3 v3.5.0/go.mod h1:AIKXXVX/DQXtfTEqBryiLTUXwON+GuvO6Z7lLS/oTh0=
go.etcd.io/etcd/client/v3 v3.5.1/go.mod h1:OnjH4M8OnAotwaB2l9bVgZzRFKru7/ZMoS46OtKyd3Q=
go.etcd.io/etcd/pkg/v3 v3.5.0/go.mod h1:UzJGatBQ1lXChBkQF0AuAtkRQMYnHubxAEYIrC3MSsE=
go.etcd.io/etcd/raft/v3 v3.5.0/go.mod h1:UFOHSIvO/nKwd4lhkwabrTD3cqW5yVyYYf/KlD00Szc=
go.etcd.io/etcd/server/v3 v3.5.0/go.mod h1:3Ah5ruV+M+7RZr0+Y/5mNLwC+eQlni+mQmOVdCRJoS4=
go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU=
go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8=
go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk=
go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E=
go.opentelemetry.io/contrib v0.20.0/go.mod h1:G/EtFaa6qaN7+LxqfIAT3GiZa7Wv5DTBUzl5H4LY0Kc=
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.20.0/go.mod h1:oVGt1LRbBOBq1A5BQLlUg9UaU/54aiHw8cgjV3aWZ/E=
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.20.0/go.mod h1:2AboqHi0CiIZU0qwhtUfCYD1GeUzvvIXWNkhDt7ZMG4=
go.opentelemetry.io/otel v0.20.0/go.mod h1:Y3ugLH2oa81t5QO+Lty+zXf8zC9L26ax4Nzoxm/dooo=
go.opentelemetry.io/otel/exporters/otlp v0.20.0/go.mod h1:YIieizyaN77rtLJra0buKiNBOm9XQfkPEKBeuhoMwAM=
go.opentelemetry.io/otel/metric v0.20.0/go.mod h1:598I5tYlH1vzBjn+BTuhzTCSb/9debfNp6R3s7Pr1eU=
go.opentelemetry.io/otel/oteltest v0.20.0/go.mod h1:L7bgKf9ZB7qCwT9Up7i9/pn0PWIa9FqQ2IQ8LoxiGnw=
go.opentelemetry.io/otel/sdk v0.20.0/go.mod h1:g/IcepuwNsoiX5Byy2nNV0ySUF1em498m7hBWC279Yc=
go.opentelemetry.io/otel/sdk/export/metric v0.20.0/go.mod h1:h7RBNMsDJ5pmI1zExLi+bJK+Dr8NQCh0qGhm1KDnNlE=
go.opentelemetry.io/otel/sdk/metric v0.20.0/go.mod h1:knxiS8Xd4E/N+ZqKmUPf3gTTZ4/0TjTXukfxjzSTpHE=
go.opentelemetry.io/otel/trace v0.20.0/go.mod h1:6GjCW8zgDjwGHGa6GkyeB8+/5vjT16gUEi0Nf1iBdgw=
go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI=
go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE=
go.uber.org/atomic v1.7.0 h1:ADUqmZGgLDDfbSL9ZmPxKTybcoEYHgpYfELNoN+7hsw=
go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc=
go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A=
go.uber.org/goleak v1.1.12 h1:gZAh5/EyT/HQwlpkCy6wTpqfH9H8Lz8zbm3dZh+OyzA=
go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0=
go.uber.org/multierr v1.6.0 h1:y6IPFStTAIT5Ytl7/XYmHvzXQ7S3g/IeZW9hyZ5thw4=
go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU=
go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q=
go.uber.org/zap v1.17.0/go.mod h1:MXVU+bhUf/A7Xi2HNOnopQOrmycQ5Ih87HtOu4q5SSo=
go.uber.org/zap v1.19.0/go.mod h1:xg/QME4nWcxGxrpdeYfq7UvYrLh66cuVKdrbD1XF/NI=
go.uber.org/zap v1.19.1 h1:ue41HOKd1vGURxrmeKIgELGb3jPW9DMUDGtsinblHwI=
golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/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=
golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20201002170205-7f63de1d35b0/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
golang.org/x/crypto v0.0.0-20220214200702-86341886e292/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek=
golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY=
golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=
golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=
golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=
golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM=
golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU=
golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js=
golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs=
golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
golang.org/x/lint v0.0.0-20210508222113-6edffad5e616/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE=
golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o=
golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc=
golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY=
golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.6.0-dev.0.20220106191415-9b9b3d81d5e3/go.mod h1:3p9vT2HGsQu2K1YbXdKPJLVgG5VJdoTa1poYQBtP1AY=
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-20181023162649-9b4f9f5ad519/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-20181201002055-351d144fa1fc/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-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=
golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
golang.org/x/net v0.0.0-20201202161906-c7110b5ffcbb/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc=
golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM=
golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
golang.org/x/net v0.0.0-20210825183410-e898025ed96a/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/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.8.0 h1:Zrh2ngAOFYneWTAIAPethzeaQLuHwhuBkuV6ZiRnUaQ=
golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/oauth2 v0.0.0-20200902213428-5d25da1a8d43/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
golang.org/x/oauth2 v0.0.0-20201109201403-9fd604954f58/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
golang.org/x/oauth2 v0.0.0-20210220000619-9bb904979d93/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
golang.org/x/oauth2 v0.0.0-20210313182246-cd4f82c27b84/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
golang.org/x/oauth2 v0.3.0 h1:6l90koy8/LaBLmLu8jpHeHexzMwEita0zFfYlggy2F8=
golang.org/x/oauth2 v0.3.0/go.mod h1:rQrIauxkUhJ6CuwEXwymO2/eh4xz2ZWF1nBkcxS+tGk=
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/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-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-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-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200519105757-fe76b779f299/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200923182605-d9f96fdee20d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-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-20210403161142-5e06dd20ab57/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-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20210831042530-f4d43177bf5e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220209214540-3681064d5158/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.6.0 h1:MVltZSvRTcU2ljQOhs94SXPftV6DCNnZViHeQps87pQ=
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
golang.org/x/term v0.6.0 h1:clScbb1cHjoCkyRbWwBEUZ5H/tIFu5TAXIqaZD0Gcjw=
golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U=
golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
golang.org/x/text v0.8.0 h1:57P1ETyNKtuIjB4SRd15iJxuhj8Gc416Y78H3qgMh68=
golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20210220033141-f8bda1e9f3ba/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20220210224613-90d013bbcef8/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4=
golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
golang.org/x/tools v0.0.0-20190624222133-a101b041ded4/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191108193012-7d206e10da11/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191112195655-aa38f8e97acc/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw=
golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw=
golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8=
golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20200505023115-26f46d2f7ef8/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
golang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE=
golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/tools v0.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.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
golang.org/x/tools v0.1.10-0.20220218145154-897bd77cd717/go.mod h1:Uh6Zz+xoGYZom868N8YTex3t7RhtHDBrE8Gzo9bV56E=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
gomodules.xyz/jsonpatch/v2 v2.2.0 h1:4pT439QV83L+G9FkcCriY6EkpcK6r6bK+A5FBUMI7qY=
gomodules.xyz/jsonpatch/v2 v2.2.0/go.mod h1:WXp+iVDkoLQqPudfQ9GBlwB2eZ5DKOnjQZCYdOS8GPY=
google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE=
google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M=
google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg=
google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg=
google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI=
google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI=
google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI=
google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
google.golang.org/api v0.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE=
google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE=
google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM=
google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc=
google.golang.org/api v0.35.0/go.mod h1:/XrVsuzM0rZmrsbjJutiuftIzeuTQcEeaYcSk/mQ1dg=
google.golang.org/api v0.36.0/go.mod h1:+z5ficQTmoYpPn8LCUNVpK5I7hwkpjbcgqA7I34qYtE=
google.golang.org/api v0.40.0/go.mod h1:fYKFpnQN0DsDSKRVRcQSDQNtqWPfM9i+zNPxepjRCQ8=
google.golang.org/api v0.41.0/go.mod h1:RkxM5lITDfTzmyKFPt+wGrCJbVfniCr2ool8kTBzRTU=
google.golang.org/api v0.43.0/go.mod h1:nQsDGjRXMo4lvh5hP0TKqF244gqhGcr/YSIykhUk/94=
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0=
google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c=
google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8=
google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA=
google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
google.golang.org/genproto v0.0.0-20200423170343-7949de9c1215/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U=
google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA=
google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20200904004341-0bd0a958aa1d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20201019141844-1ed22bb0c154/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20201102152239-715cce707fb0/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20201109203340-2640f1f9cdfb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20201201144952-b05cb90ed32e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20210222152913-aa3ee6e6a81c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20210303154014-9728d6b83eeb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20210310155132-4ce2db91004e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20210319143718-93e7006c17a6/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20210402141018-6c239bbf2bb1/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A=
google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0=
google.golang.org/genproto v0.0.0-20210831024726-fe130286e0e2/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY=
google.golang.org/genproto v0.0.0-20220107163113-42d7afdf6368/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc=
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38=
google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM=
google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY=
google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60=
google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk=
google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=
google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=
google.golang.org/grpc v1.31.1/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=
google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0=
google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc=
google.golang.org/grpc v1.34.0/go.mod h1:WotjhfgOW/POjDeRt8vscBtXq+2VjORFy659qA51WJ8=
google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU=
google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU=
google.golang.org/grpc v1.36.1/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU=
google.golang.org/grpc v1.37.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM=
google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM=
google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34=
google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE=
google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo=
google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4=
google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
google.golang.org/protobuf v1.28.0 h1:w43yiav+6bVFTBQFZX0r7ipe9JQ1QsbMgHwbBziscLw=
google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f h1:BLraFXnmrev5lT+xlilqcH8XK9/i0At2xKjWk4p6zsU=
gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc=
gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw=
gopkg.in/ini.v1 v1.51.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
gopkg.in/natefinch/lumberjack.v2 v2.0.0/go.mod h1:l0ndWWf7gzL7RNwBG7wST/UCcT4T24xpD6X8LsfU/+k=
gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo=
gopkg.in/square/go-jose.v2 v2.2.2/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI=
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ=
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74=
gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
gopkg.in/yaml.v3 v3.0.0-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/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gotest.tools/v3 v3.0.2/go.mod h1:3SzNCllyD9/Y+b5r9JIKQ474KzkZyqLqEfYqMsX94Bk=
gotest.tools/v3 v3.0.3/go.mod h1:Z7Lb0S5l+klDB31fvDQX8ss/FlKDxtlFlw3Oa8Ymbl8=
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=
honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
k8s.io/api v0.24.2 h1:g518dPU/L7VRLxWfcadQn2OnsiGWVOadTLpdnqgY2OI=
k8s.io/api v0.24.2/go.mod h1:AHqbSkTm6YrQ0ObxjO3Pmp/ubFF/KuM7jU+3khoBsOg=
k8s.io/apiextensions-apiserver v0.24.2 h1:/4NEQHKlEz1MlaK/wHT5KMKC9UKYz6NZz6JE6ov4G6k=
k8s.io/apiextensions-apiserver v0.24.2/go.mod h1:e5t2GMFVngUEHUd0wuCJzw8YDwZoqZfJiGOW6mm2hLQ=
k8s.io/apimachinery v0.24.2 h1:5QlH9SL2C8KMcrNJPor+LbXVTaZRReml7svPEh4OKDM=
k8s.io/apimachinery v0.24.2/go.mod h1:82Bi4sCzVBdpYjyI4jY6aHX+YCUchUIrZrXKedjd2UM=
k8s.io/apiserver v0.24.2/go.mod h1:pSuKzr3zV+L+MWqsEo0kHHYwCo77AT5qXbFXP2jbvFI=
k8s.io/client-go v0.24.2 h1:CoXFSf8if+bLEbinDqN9ePIDGzcLtqhfd6jpfnwGOFA=
k8s.io/client-go v0.24.2/go.mod h1:zg4Xaoo+umDsfCWr4fCnmLEtQXyCNXCvJuSsglNcV30=
k8s.io/code-generator v0.24.2/go.mod h1:dpVhs00hTuTdTY6jvVxvTFCk6gSMrtfRydbhZwHI15w=
k8s.io/component-base v0.24.2 h1:kwpQdoSfbcH+8MPN4tALtajLDfSfYxBDYlXobNWI6OU=
k8s.io/component-base v0.24.2/go.mod h1:ucHwW76dajvQ9B7+zecZAP3BVqvrHoOxm8olHEg0nmM=
k8s.io/gengo v0.0.0-20210813121822-485abfe95c7c/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E=
k8s.io/gengo v0.0.0-20211129171323-c02415ce4185/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-20221207184640-f3cff1453715 h1:tBEbstoM+K0FiBV5KGAKQ0kuvf54v/hwpldiJt69w1s=
k8s.io/kube-openapi v0.0.0-20221207184640-f3cff1453715/go.mod h1:+Axhij7bCpeqhklhUTe3xmOn6bWxolyZEeyaFpjGtl4=
k8s.io/utils v0.0.0-20210802155522-efc7438f0176/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA=
k8s.io/utils v0.0.0-20220210201930-3a6ce19ff2f9 h1:HNSDgDCrr/6Ly3WEGKZftiE7IY19Vz2GdbOCyI4qqhc=
k8s.io/utils v0.0.0-20220210201930-3a6ce19ff2f9/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA=
rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8=
rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0=
rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA=
sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.30/go.mod h1:fEO7lRTdivWO2qYVCVG7dEADOMo/MLDCVr8So2g88Uw=
sigs.k8s.io/controller-runtime v0.12.3 h1:FCM8xeY/FI8hoAfh/V4XbbYMY20gElh9yh+A98usMio=
sigs.k8s.io/controller-runtime v0.12.3/go.mod h1:qKsk4WE6zW2Hfj0G4v10EnNB2jMG1C+NTb8h+DwCoU0=
sigs.k8s.io/json v0.0.0-20211208200746-9f7c6b3444d2 h1:kDi4JBNAsJWfz1aEXhO8Jg87JJaPNLh5tIzYHgStQ9Y=
sigs.k8s.io/json v0.0.0-20211208200746-9f7c6b3444d2/go.mod h1:B+TnT182UBxE84DiCz4CVE26eOSDAeYCpfDnC2kdKMY=
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/structured-merge-diff/v4 v4.2.3 h1:PRbqxJClWWYMNV1dhaG4NsibJbArud9kFxnAMREiWFE=
sigs.k8s.io/structured-merge-diff/v4 v4.2.3/go.mod h1:qjx8mGObPmV2aSZepjQjbmb2ihdVs8cGKBraizNC69E=
sigs.k8s.io/yaml v1.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=
================================================
FILE: apis/config/v1alpha1/feature_types.go
================================================
// Copyright 2021 VMware, Inc. All Rights Reserved.
// SPDX-License-Identifier: Apache-2.0
package v1alpha1
import (
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)
// FeatureSpec defines the desired state of Feature
type FeatureSpec struct {
// Description of the feature.
Description string `json:"description,omitempty"`
// Immutable indicates this feature cannot be toggled once set
// If set at creation time, this state will persist for the life of the cluster
Immutable bool `json:"immutable"`
// Discoverable indicates if clients should include consider the Feature available for their use
// Allowing clients to control discoverability is one of the ways the API allows gradual rollout of functionality
Discoverable bool `json:"discoverable"`
// Activated defines the default state of the features activation
Activated bool `json:"activated"`
// Maturity indicates maturity level of this feature.
// Maturity levels are Dev, Alpha, Beta, GA and Deprecated.
// +kubebuilder:validation:Enum=dev;alpha;beta;ga;deprecated
// - dev: the default for new resources, represents local dev. intended to be hidden and deactivated
// - alpha: the first milestone meant for limited wider consumption, discoverable and defaults to deactivated
// - beta: greater visibility for proven designs, discoverable and defaults to activated
// - ga: intended to be part of the mainline codebase, non-optional
// - deprecated: destined for future removal
Maturity string `json:"maturity"`
}
// FeatureStatus defines the observed state of Feature
type FeatureStatus struct{}
// Feature is the Schema for the features API
// +kubebuilder:object:root=true
// +kubebuilder:resource:scope=Cluster
// +kubebuilder:printcolumn:name="Activated",type=boolean,JSONPath=.spec.activated
// +kubebuilder:printcolumn:name="Description",type=string,JSONPath=.spec.description
// +kubebuilder:printcolumn:name="Immutable",type=boolean,JSONPath=.spec.immutable
// +kubebuilder:printcolumn:name="Maturity",type=string,JSONPath=.spec.maturity
// +kubebuilder:deprecatedversion:warning="Feature API in config.tanzu.vmware.com is deprecated. Use Feature API from core.tanzu.vmware.com instead"
type Feature struct {
Status FeatureStatus `json:"status,omitempty"`
metav1.ObjectMeta `json:"metadata,omitempty"`
Spec FeatureSpec `json:"spec,omitempty"`
metav1.TypeMeta `json:",inline"`
}
// +kubebuilder:object:root=true
// FeatureList contains a list of Feature
type FeatureList struct {
metav1.TypeMeta `json:",inline"`
metav1.ListMeta `json:"metadata,omitempty"`
Items []Feature `json:"items"`
}
func init() {
SchemeBuilder.Register(&Feature{}, &FeatureList{})
}
================================================
FILE: apis/config/v1alpha1/featuregate_types.go
================================================
// Copyright 2021 VMware, Inc. All Rights Reserved.
// SPDX-License-Identifier: Apache-2.0
package v1alpha1
import (
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)
// FeatureReference refers to a Feature resource and specifies its intended activation state.
type FeatureReference struct {
// Name is the name of the Feature resource, which represents a feature the system offers.
// +kubebuilder:validation:Required
Name string `json:"name"`
// Activate indicates the activation intent for the feature.
Activate bool `json:"activate,omitempty"`
}
// FeatureGateSpec defines the desired state of FeatureGate
type FeatureGateSpec struct {
// NamespaceSelector is a selector to specify namespaces for which this feature gate applies.
// Use an empty LabelSelector to match all namespaces.
NamespaceSelector metav1.LabelSelector `json:"namespaceSelector"`
// Features is a slice of FeatureReference to gate features.
// The Feature resource specified may or may not be present in the system. If the Feature is present, the
// FeatureGate controller and webhook sets the specified activation state only if the Feature is discoverable and
// its immutability constraint is satisfied. If the Feature is not present, the activation intent is applied when
// the Feature resource appears in the system. The actual activation state of the Feature is reported in the status.
// +listType=map
// +listMapKey=name
Features []FeatureReference `json:"features,omitempty"`
}
// FeatureGateStatus defines the observed state of FeatureGate
type FeatureGateStatus struct {
// Namespaces lists the existing namespaces for which this feature gate applies. This is obtained from listing all
// namespaces and applying the NamespaceSelector specified in spec.
Namespaces []string `json:"namespaces,omitempty"`
// ActivatedFeatures lists the discovered features that are activated for the namespaces specified in the spec.
// This can include features that are not explicitly gated in the spec, but are already available in the system as
// Feature resources.
ActivatedFeatures []string `json:"activatedFeatures,omitempty"`
// DeactivatedFeatures lists the discovered features that are deactivated for the namespaces specified in the spec.
// This can include features that are not explicitly gated in the spec, but are already available in the system as
// Feature resources.
DeactivatedFeatures []string `json:"deactivatedFeatures,omitempty"`
// UnavailableFeatures lists the features that are gated in the spec, but are not available in the system as
// Feature resources.
UnavailableFeatures []string `json:"unavailableFeatures,omitempty"`
}
//+kubebuilder:object:root=true
//+kubebuilder:subresource:status
//+kubebuilder:resource:scope=Cluster
//+kubebuilder:deprecatedversion:warning="FeatureGate API in config.tanzu.vmware.com is deprecated. Use FeatureGate API from core.tanzu.vmware.com instead"
// FeatureGate is the Schema for the featuregates API
type FeatureGate struct {
metav1.TypeMeta `json:",inline"`
metav1.ObjectMeta `json:"metadata,omitempty"`
// Spec is the specification for gating features.
Spec FeatureGateSpec `json:"spec,omitempty"`
// Status reports activation state and availability of features in the system.
Status FeatureGateStatus `json:"status,omitempty"`
}
//+kubebuilder:object:root=true
// FeatureGateList contains a list of FeatureGate
type FeatureGateList struct {
metav1.TypeMeta `json:",inline"`
metav1.ListMeta `json:"metadata,omitempty"`
Items []FeatureGate `json:"items"`
}
func init() {
SchemeBuilder.Register(&FeatureGate{}, &FeatureGateList{})
}
================================================
FILE: apis/config/v1alpha1/featuregate_webhook.go
================================================
// Copyright 2021 VMware, Inc. All Rights Reserved.
// SPDX-License-Identifier: Apache-2.0
package v1alpha1
import (
"context"
"fmt"
"reflect"
corev1 "k8s.io/api/core/v1"
apierrors "k8s.io/apimachinery/pkg/api/errors"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/apimachinery/pkg/util/sets"
"k8s.io/apimachinery/pkg/util/validation/field"
k8sscheme "k8s.io/client-go/kubernetes/scheme"
ctrl "sigs.k8s.io/controller-runtime"
"sigs.k8s.io/controller-runtime/pkg/client"
"sigs.k8s.io/controller-runtime/pkg/client/config"
logf "sigs.k8s.io/controller-runtime/pkg/log"
"sigs.k8s.io/controller-runtime/pkg/webhook"
)
// log is for logging in this package.
var featuregatelog = logf.Log.WithName("featuregate-resource").WithValues("apigroup", "config")
var cl client.Client
func getScheme() (*runtime.Scheme, error) {
s, err := SchemeBuilder.Build()
if err != nil {
return nil, err
}
if err := k8sscheme.AddToScheme(s); err != nil {
return nil, err
}
return s, nil
}
// Get a cached client if it has been initiated.
func (r *FeatureGate) getClient() (client.Client, error) {
if cl != nil && !reflect.ValueOf(cl).IsNil() {
return cl, nil
}
s, err := getScheme()
if err != nil {
return nil, err
}
cfg, err := config.GetConfig()
if err != nil {
return nil, err
}
return client.New(cfg, client.Options{Scheme: s})
}
// SetupWebhookWithManager adds the webhook to the manager.
func (r *FeatureGate) SetupWebhookWithManager(mgr ctrl.Manager) error {
return ctrl.NewWebhookManagedBy(mgr).
For(r).
Complete()
}
//+kubebuilder:webhook:verbs=create;update,path=/validate-config-tanzu-vmware-com-v1alpha1-featuregate,mutating=false,failurePolicy=fail,groups=config.tanzu.vmware.com,resources=featuregates,versions=v1alpha1,name=vfeaturegate.kb.io
var _ webhook.Validator = &FeatureGate{}
// ValidateCreate implements webhook.Validator so a webhook will be registered for the type
func (r *FeatureGate) ValidateCreate() error {
featuregatelog.Info("validate create", "name", r.Name)
c, err := r.getClient()
if err != nil {
return apierrors.NewInternalError(err)
}
ctx := context.Background()
var allErrors field.ErrorList
allErrors = append(allErrors, r.validateNamespaceConflicts(ctx, c, field.NewPath("spec"))...)
if len(allErrors) == 0 {
return nil
}
return apierrors.NewInvalid(GroupVersion.WithKind("FeatureGate").GroupKind(), r.Name, allErrors)
}
// ValidateUpdate implements webhook.Validator so a webhook will be registered for the type
func (r *FeatureGate) ValidateUpdate(old runtime.Object) error {
featuregatelog.Info("validate update", "name", r.Name)
oldObj, ok := old.(*FeatureGate)
if !ok {
return apierrors.NewBadRequest(fmt.Sprintf("expected FeatureGate object, but got object of type %T", old))
}
if oldObj == nil {
return nil
}
c, err := r.getClient()
if err != nil {
return apierrors.NewInternalError(err)
}
ctx := context.Background()
var allErrors field.ErrorList
allErrors = append(allErrors, r.validateNamespaceConflicts(ctx, c, field.NewPath("spec"))...)
allErrors = append(allErrors, r.validateFeatureImmutability(ctx, c, oldObj, field.NewPath("spec").Child("features"))...)
if len(allErrors) == 0 {
return nil
}
return apierrors.NewInvalid(GroupVersion.WithKind("FeatureGate").GroupKind(), r.Name, allErrors)
}
// validateNamespaceConflicts validates that the namespaceSelector in spec does not conflict with namespaces gated by existing feature gates.
func (r *FeatureGate) validateNamespaceConflicts(ctx context.Context, c client.Client, fldPath *field.Path) field.ErrorList {
var allErrors field.ErrorList
conflicts, err := r.computeConflictingNamespaces(ctx, c)
if err != nil {
allErrors = append(allErrors, field.InternalError(fldPath.Child("namespaceSelector"), err))
return allErrors
}
for fg, namespaces := range conflicts {
if len(namespaces) == 0 {
continue
}
allErrors = append(allErrors, field.Invalid(fldPath.Child("namespaceSelector"), r.Spec.NamespaceSelector,
fmt.Sprintf("namespaces %v specified by namespaceSelector are already gated by FeatureGate %q", namespaces, fg)))
}
return allErrors
}
// computeConflictingNamespaces computes the namespaces that conflict with existing feature gates.
// This is a separate function for easier unit testing.
func (r *FeatureGate) computeConflictingNamespaces(ctx context.Context, c client.Client) (map[string][]string, error) {
featureGates := &FeatureGateList{}
if err := c.List(ctx, featureGates); err != nil {
return nil, err
}
namespacesInSpec, err := namespacesMatchingSelector(ctx, c, &r.Spec.NamespaceSelector)
if err != nil {
return nil, err
}
featureGateToNamespaces := make(map[string]sets.String)
for i := range featureGates.Items {
fg := featureGates.Items[i]
// Skip comparing the object to itself during updates.
if fg.Name == r.Name {
continue
}
featureGateToNamespaces[fg.Name] = sets.NewString(fg.Status.Namespaces...)
}
// Output is a map of an existing feature gate resource name and the list of namespaces that conflict with the current spec.
out := make(map[string][]string)
set := sets.NewString(namespacesInSpec...)
for fg, namespaces := range featureGateToNamespaces {
intersection := namespaces.Intersection(set).List()
if len(intersection) != 0 {
out[fg] = intersection
}
}
return out, nil
}
// validateFeatureImmutability validates that immutable features are not changed.
func (r *FeatureGate) validateFeatureImmutability(ctx context.Context, c client.Client, oldObject *FeatureGate, fldPath *field.Path) field.ErrorList {
var allErrors field.ErrorList
features := &FeatureList{}
if err := c.List(ctx, features); err != nil {
allErrors = append(allErrors, field.InternalError(fldPath, err))
return allErrors
}
invalid := computeChangedImmutableFeatures(r.Spec, features.Items, oldObject)
if len(invalid) != 0 {
allErrors = append(allErrors, field.Invalid(fldPath, r.Spec.Features, fmt.Sprintf("cannot change immutable features: %v", invalid)))
}
return allErrors
}
// computeChangedImmutableFeatures returns immutable features which are changed in the current spec.
// This is a separate function for easier unit testing.
func computeChangedImmutableFeatures(spec FeatureGateSpec, currentFeatures []Feature, oldObject *FeatureGate) []string {
immutable := sets.String{}
for i := range current
gitextract_d1c61wo8/
├── .codecov.yaml
├── .dockerignore
├── .github/
│ ├── ISSUE_TEMPLATE/
│ │ ├── bug_report.md
│ │ └── feature_request.md
│ ├── PULL_REQUEST_TEMPLATE.md
│ ├── dependabot.yml
│ └── workflows/
│ ├── build.yaml
│ ├── cve-scan.yaml
│ ├── lint-all.yaml
│ ├── verify-label.yaml
│ ├── verify.yaml
│ └── welcome-contributors.yaml
├── .gitignore
├── .golangci.yaml
├── .markdownlintrc
├── .trivy.yaml
├── .vale/
│ ├── config.ini
│ └── styles/
│ └── vmware/
│ └── inclusive.yml
├── ADOPTERS.md
├── CODE-OF-CONDUCT.md
├── CODEOWNERS
├── CONTRIBUTING.md
├── Dockerfile
├── GOVERNANCE.md
├── LICENSE
├── MAINTAINERS.md
├── Makefile
├── PROJECT
├── README.md
├── ROADMAP.md
├── SECURITY.md
├── apis/
│ ├── config/
│ │ ├── Makefile
│ │ ├── config/
│ │ │ └── crd/
│ │ │ └── bases/
│ │ │ ├── config.tanzu.vmware.com_featuregates.yaml
│ │ │ └── config.tanzu.vmware.com_features.yaml
│ │ ├── go.mod
│ │ ├── go.sum
│ │ └── v1alpha1/
│ │ ├── feature_types.go
│ │ ├── featuregate_types.go
│ │ ├── featuregate_webhook.go
│ │ ├── featuregate_webhook_test.go
│ │ ├── groupversion_info.go
│ │ └── zz_generated.deepcopy.go
│ └── core/
│ ├── Makefile
│ ├── config/
│ │ └── crd/
│ │ └── bases/
│ │ ├── core.tanzu.vmware.com_capabilities.yaml
│ │ ├── core.tanzu.vmware.com_featuregates.yaml
│ │ ├── core.tanzu.vmware.com_features.yaml
│ │ ├── core.tanzu.vmware.com_readinesses.yaml
│ │ └── core.tanzu.vmware.com_readinessproviders.yaml
│ ├── go.mod
│ ├── go.sum
│ ├── v1alpha1/
│ │ ├── capabilities_types.go
│ │ ├── groupversion_info.go
│ │ └── zz_generated.deepcopy.go
│ └── v1alpha2/
│ ├── capability_types.go
│ ├── feature_stability_policies.go
│ ├── feature_types.go
│ ├── featuregate_types.go
│ ├── featuregate_webhook.go
│ ├── featuregate_webhook_test.go
│ ├── groupversion_info.go
│ ├── readiness_types.go
│ ├── readinessprovider_types.go
│ ├── readinessprovider_webhook.go
│ └── zz_generated.deepcopy.go
├── build.mk
├── capabilities/
│ ├── client/
│ │ ├── README.md
│ │ ├── go.mod
│ │ ├── go.sum
│ │ └── pkg/
│ │ └── discovery/
│ │ ├── cluster_gvr.go
│ │ ├── cluster_object.go
│ │ ├── cluster_schema.go
│ │ ├── cluster_test.go
│ │ ├── discovery.go
│ │ ├── doc.go
│ │ ├── fake.go
│ │ ├── generate.go
│ │ ├── generate_test.go
│ │ └── tkg/
│ │ ├── README.md
│ │ ├── capabilities.go
│ │ ├── capabilities_test.go
│ │ ├── client.go
│ │ ├── cloudprovider.go
│ │ ├── cloudprovider_test.go
│ │ ├── clustermetadata.go
│ │ ├── doc.go
│ │ ├── fake.go
│ │ ├── infraprovider.go
│ │ ├── infraprovider_test.go
│ │ ├── resource.go
│ │ └── resource_test.go
│ ├── config/
│ │ ├── rbac.yaml
│ │ └── tanzu-capabilities-manager.yaml
│ ├── controller/
│ │ ├── go.mod
│ │ ├── go.sum
│ │ ├── main.go
│ │ └── pkg/
│ │ ├── capabilities/
│ │ │ ├── core/
│ │ │ │ ├── capability_controller.go
│ │ │ │ └── doc.go
│ │ │ ├── doc.go
│ │ │ └── suite_test.go
│ │ ├── config/
│ │ │ ├── config.go
│ │ │ ├── config_test.go
│ │ │ └── doc.go
│ │ └── constants/
│ │ ├── constants.go
│ │ └── doc.go
│ └── hack/
│ ├── generate-package-secret.sh
│ ├── generate-package-secret.test.sh
│ └── ytt/
│ ├── default-package-secret.yaml
│ ├── schema.yaml
│ └── values.yaml
├── cmd/
│ └── plugin/
│ ├── codegen/
│ │ ├── README.md
│ │ ├── generate.go
│ │ ├── generators/
│ │ │ └── feature/
│ │ │ ├── doc.go
│ │ │ ├── fakeData/
│ │ │ │ ├── bar.yaml
│ │ │ │ ├── baz.yaml
│ │ │ │ ├── cronjob_types.go
│ │ │ │ ├── doc.go
│ │ │ │ ├── foo.yaml
│ │ │ │ ├── memcached_types.go
│ │ │ │ └── mykind_types.go
│ │ │ ├── feature_suite_test.go
│ │ │ ├── gen.go
│ │ │ └── gen_integration_test.go
│ │ ├── go.mod
│ │ ├── go.sum
│ │ ├── main.go
│ │ └── test/
│ │ ├── fakeData/
│ │ │ └── mykind_types.go
│ │ └── main.go
│ └── feature/
│ ├── README.md
│ ├── activate.go
│ ├── activate_test.go
│ ├── deactivate.go
│ ├── deactivate_test.go
│ ├── go.mod
│ ├── go.sum
│ ├── list.go
│ ├── list_test.go
│ ├── main.go
│ ├── test/
│ │ └── main.go
│ └── testdata/
│ └── k8s_config.kube
├── common.mk
├── docs/
│ ├── README.md
│ ├── community/
│ │ ├── README.md
│ │ ├── contribution-ladder.md
│ │ ├── severity-definitions.md
│ │ └── support-process.md
│ ├── dev/
│ │ ├── README.md
│ │ ├── _proposal.md
│ │ ├── build.md
│ │ └── troubleshooting.md
│ ├── framework-use-cases.md
│ ├── glossary.md
│ ├── packages/
│ │ ├── README.md
│ │ ├── add-new-package-to-package-repo.md
│ │ ├── add-packageinstall-to-meta-package.md
│ │ ├── definitions.md
│ │ └── dev-workflow.md
│ ├── release/
│ │ ├── README.md
│ │ ├── cherry-pick.md
│ │ ├── kind-labels.md
│ │ ├── release-notes-gathering-process.md
│ │ ├── release-notes.md
│ │ └── release-process.md
│ ├── runtime-core/
│ │ ├── README.md
│ │ ├── capability-discovery.md
│ │ ├── features-and-featuregates.md
│ │ ├── guide/
│ │ │ ├── README.md
│ │ │ └── examples/
│ │ │ ├── controller.go.sample
│ │ │ └── megacache_types.go.sample
│ │ ├── readiness-framework/
│ │ │ ├── deploy-local-changes.md
│ │ │ └── guide-with-examples.md
│ │ ├── readiness-framework.md
│ │ └── tanzu-core-controllers.md
│ └── style-guide.md
├── e2e.mk
├── featuregates/
│ ├── client/
│ │ ├── go.mod
│ │ ├── go.sum
│ │ └── pkg/
│ │ ├── featuregateclient/
│ │ │ ├── client.go
│ │ │ ├── client_test.go
│ │ │ ├── doc.go
│ │ │ ├── errors.go
│ │ │ ├── fake/
│ │ │ │ ├── doc.go
│ │ │ │ └── objects.go
│ │ │ └── validation.go
│ │ └── util/
│ │ ├── doc.go
│ │ ├── featuregate.go
│ │ ├── featuregate_test.go
│ │ ├── namespace_selector.go
│ │ └── namespace_selector_test.go
│ └── controller/
│ ├── go.mod
│ ├── go.sum
│ ├── main.go
│ └── pkg/
│ ├── feature/
│ │ ├── doc.go
│ │ ├── feature_controller.go
│ │ ├── feature_suite_test.go
│ │ └── testdata/
│ │ └── webhook.yaml
│ └── featuregate/
│ ├── doc.go
│ └── featuregate_controller.go
├── go.mod
├── go.sum
├── hack/
│ ├── boilerplate.go.txt
│ ├── check/
│ │ ├── .misspellignore
│ │ ├── .yamllintconfig.yaml
│ │ ├── check-yaml.sh
│ │ └── misspell.sh
│ ├── check-license.sh
│ ├── check-mdlint.sh
│ ├── kind/
│ │ ├── Testing_Packages.md
│ │ ├── deploy_kind_with_capi_and_kapp.sh
│ │ └── kind_install_for_capd.sh
│ ├── packages/
│ │ ├── scripts/
│ │ │ └── create-package.sh
│ │ └── templates/
│ │ └── new-package/
│ │ ├── Makefile
│ │ ├── metadata.yaml
│ │ ├── package.yaml
│ │ ├── readme.md
│ │ ├── repo.yaml
│ │ ├── values.yaml
│ │ └── vendir.yml
│ ├── tools/
│ │ ├── Makefile
│ │ ├── go.mod
│ │ ├── go.sum
│ │ ├── main.go
│ │ └── tools.go
│ └── verify-dirty.sh
├── main.go
├── packages/
│ ├── README.md
│ ├── capabilities/
│ │ ├── Makefile
│ │ ├── README.md
│ │ ├── bundle/
│ │ │ └── config/
│ │ │ ├── overlays/
│ │ │ │ └── update-clusterrole-with-psp.yaml
│ │ │ ├── upstream/
│ │ │ │ ├── crds/
│ │ │ │ │ ├── core/
│ │ │ │ │ │ └── core.tanzu.vmware.com_capabilities.yaml
│ │ │ │ │ └── run/
│ │ │ │ │ └── run.tanzu.vmware.com_capabilities.yaml
│ │ │ │ ├── default-serviceaccount.yaml
│ │ │ │ ├── rbac.yaml
│ │ │ │ └── tanzu-capabilities-controller-manager.yaml
│ │ │ └── values.yaml
│ │ ├── kbld-config.yaml
│ │ ├── metadata.yaml
│ │ ├── package.yaml
│ │ ├── vendir.lock.yml
│ │ └── vendir.yml
│ ├── featuregates/
│ │ ├── Makefile
│ │ ├── README.md
│ │ ├── bundle/
│ │ │ └── config/
│ │ │ ├── upstream/
│ │ │ │ ├── crds/
│ │ │ │ │ ├── config/
│ │ │ │ │ │ ├── config.tanzu.vmware.com_featuregates.yaml
│ │ │ │ │ │ └── config.tanzu.vmware.com_features.yaml
│ │ │ │ │ └── core/
│ │ │ │ │ ├── core.tanzu.vmware.com_featuregates.yaml
│ │ │ │ │ └── core.tanzu.vmware.com_features.yaml
│ │ │ │ ├── helpers.star
│ │ │ │ ├── rbac.yaml
│ │ │ │ ├── service.yaml
│ │ │ │ ├── tanzu-featuregates-manager.yaml
│ │ │ │ ├── webhook-secret.yaml
│ │ │ │ └── webhooks/
│ │ │ │ ├── config/
│ │ │ │ │ └── webhook.yaml
│ │ │ │ └── core/
│ │ │ │ └── webhook.yaml
│ │ │ └── values.yaml
│ │ ├── kbld-config.yaml
│ │ ├── metadata.yaml
│ │ ├── package.yaml
│ │ ├── vendir.lock.yml
│ │ └── vendir.yml
│ ├── package-values.yaml
│ └── readiness/
│ ├── Makefile
│ ├── README.md
│ ├── bundle/
│ │ └── config/
│ │ ├── upstream/
│ │ │ ├── crds/
│ │ │ │ ├── core.tanzu.vmware.com_readinesses.yaml
│ │ │ │ └── core.tanzu.vmware.com_readinessproviders.yaml
│ │ │ ├── helpers.star
│ │ │ ├── rbac.yaml
│ │ │ ├── service.yaml
│ │ │ ├── tanzu-readiness-manager.yaml
│ │ │ ├── webhook-secret.yaml
│ │ │ └── webhooks/
│ │ │ └── core/
│ │ │ └── webhook.yaml
│ │ └── values.yaml
│ ├── kbld-config.yaml
│ ├── metadata.yaml
│ ├── package.yaml
│ ├── vendir.lock.yml
│ └── vendir.yml
├── readiness/
│ ├── controller/
│ │ ├── go.mod
│ │ ├── go.sum
│ │ ├── main.go
│ │ └── pkg/
│ │ ├── conditions/
│ │ │ ├── doc.go
│ │ │ ├── resourceexistence.go
│ │ │ ├── resourceexistence_test.go
│ │ │ └── testdata/
│ │ │ └── rbac.yaml
│ │ ├── readiness/
│ │ │ ├── doc.go
│ │ │ ├── readiness_controller.go
│ │ │ └── suite_test.go
│ │ └── readinessprovider/
│ │ ├── doc.go
│ │ ├── readinessprovider_controller.go
│ │ ├── suite_test.go
│ │ └── testdata/
│ │ ├── rbac.yaml
│ │ └── webhook.yaml
│ └── e2e/
│ ├── doc.go
│ ├── e2e_test.go
│ ├── go.mod
│ ├── go.sum
│ └── suite_test.go
└── util/
├── buildinfo/
│ ├── buildvar.go
│ └── metadata.go
├── cmp/
│ ├── compare.go
│ ├── compare_test.go
│ ├── doc.go
│ └── strings/
│ ├── doc.go
│ ├── slices.go
│ └── slices_test.go
├── go.mod
├── go.sum
├── kubeclient/
│ ├── doc.go
│ └── kubeclient.go
├── test/
│ ├── doc.go
│ └── kube.go
├── webhook/
│ └── certs/
│ ├── README.md
│ ├── certmanager.go
│ ├── certmanager_suite_test.go
│ ├── certmanager_test.go
│ ├── constants.go
│ ├── doc.go
│ └── options.go
└── ytt/
└── ytt.go
SYMBOL INDEX (595 symbols across 94 files)
FILE: apis/config/v1alpha1/feature_types.go
type FeatureSpec (line 11) | type FeatureSpec struct
type FeatureStatus (line 34) | type FeatureStatus struct
type Feature (line 44) | type Feature struct
type FeatureList (line 54) | type FeatureList struct
function init (line 60) | func init() {
FILE: apis/config/v1alpha1/featuregate_types.go
type FeatureReference (line 11) | type FeatureReference struct
type FeatureGateSpec (line 20) | type FeatureGateSpec struct
type FeatureGateStatus (line 35) | type FeatureGateStatus struct
type FeatureGate (line 58) | type FeatureGate struct
type FeatureGateList (line 71) | type FeatureGateList struct
function init (line 77) | func init() {
FILE: apis/config/v1alpha1/featuregate_webhook.go
function getScheme (line 30) | func getScheme() (*runtime.Scheme, error) {
method getClient (line 42) | func (r *FeatureGate) getClient() (client.Client, error) {
method SetupWebhookWithManager (line 60) | func (r *FeatureGate) SetupWebhookWithManager(mgr ctrl.Manager) error {
method ValidateCreate (line 71) | func (r *FeatureGate) ValidateCreate() error {
method ValidateUpdate (line 90) | func (r *FeatureGate) ValidateUpdate(old runtime.Object) error {
method validateNamespaceConflicts (line 119) | func (r *FeatureGate) validateNamespaceConflicts(ctx context.Context, c ...
method computeConflictingNamespaces (line 140) | func (r *FeatureGate) computeConflictingNamespaces(ctx context.Context, ...
method validateFeatureImmutability (line 174) | func (r *FeatureGate) validateFeatureImmutability(ctx context.Context, c...
function computeChangedImmutableFeatures (line 192) | func computeChangedImmutableFeatures(spec FeatureGateSpec, currentFeatur...
method ValidateDelete (line 219) | func (r *FeatureGate) ValidateDelete() error {
function namespacesMatchingSelector (line 227) | func namespacesMatchingSelector(ctx context.Context, c client.Client, se...
FILE: apis/config/v1alpha1/featuregate_webhook_test.go
function TestValidateFeatureImmutability (line 20) | func TestValidateFeatureImmutability(t *testing.T) {
function TestNamespaceConflicts (line 89) | func TestNamespaceConflicts(t *testing.T) {
function sliceDiffIgnoreOrder (line 343) | func sliceDiffIgnoreOrder(a, b []string) string {
FILE: apis/config/v1alpha1/zz_generated.deepcopy.go
method DeepCopyInto (line 16) | func (in *Feature) DeepCopyInto(out *Feature) {
method DeepCopy (line 25) | func (in *Feature) DeepCopy() *Feature {
method DeepCopyObject (line 35) | func (in *Feature) DeepCopyObject() runtime.Object {
method DeepCopyInto (line 43) | func (in *FeatureGate) DeepCopyInto(out *FeatureGate) {
method DeepCopy (line 52) | func (in *FeatureGate) DeepCopy() *FeatureGate {
method DeepCopyObject (line 62) | func (in *FeatureGate) DeepCopyObject() runtime.Object {
method DeepCopyInto (line 70) | func (in *FeatureGateList) DeepCopyInto(out *FeatureGateList) {
method DeepCopy (line 84) | func (in *FeatureGateList) DeepCopy() *FeatureGateList {
method DeepCopyObject (line 94) | func (in *FeatureGateList) DeepCopyObject() runtime.Object {
method DeepCopyInto (line 102) | func (in *FeatureGateSpec) DeepCopyInto(out *FeatureGateSpec) {
method DeepCopy (line 113) | func (in *FeatureGateSpec) DeepCopy() *FeatureGateSpec {
method DeepCopyInto (line 123) | func (in *FeatureGateStatus) DeepCopyInto(out *FeatureGateStatus) {
method DeepCopy (line 148) | func (in *FeatureGateStatus) DeepCopy() *FeatureGateStatus {
method DeepCopyInto (line 158) | func (in *FeatureList) DeepCopyInto(out *FeatureList) {
method DeepCopy (line 172) | func (in *FeatureList) DeepCopy() *FeatureList {
method DeepCopyObject (line 182) | func (in *FeatureList) DeepCopyObject() runtime.Object {
method DeepCopyInto (line 190) | func (in *FeatureReference) DeepCopyInto(out *FeatureReference) {
method DeepCopy (line 195) | func (in *FeatureReference) DeepCopy() *FeatureReference {
method DeepCopyInto (line 205) | func (in *FeatureSpec) DeepCopyInto(out *FeatureSpec) {
method DeepCopy (line 210) | func (in *FeatureSpec) DeepCopy() *FeatureSpec {
method DeepCopyInto (line 220) | func (in *FeatureStatus) DeepCopyInto(out *FeatureStatus) {
method DeepCopy (line 225) | func (in *FeatureStatus) DeepCopy() *FeatureStatus {
FILE: apis/core/v1alpha1/capabilities_types.go
type CapabilitySpec (line 12) | type CapabilitySpec struct
type Query (line 27) | type Query struct
type QueryObject (line 50) | type QueryObject struct
type QueryGVR (line 69) | type QueryGVR struct
type QueryPartialSchema (line 87) | type QueryPartialSchema struct
type CapabilityStatus (line 99) | type CapabilityStatus struct
type QueryResult (line 107) | type QueryResult struct
type Result (line 128) | type Result struct
type Capability (line 155) | type Capability struct
type CapabilityList (line 167) | type CapabilityList struct
function init (line 173) | func init() {
FILE: apis/core/v1alpha1/zz_generated.deepcopy.go
method DeepCopyInto (line 16) | func (in *Capability) DeepCopyInto(out *Capability) {
method DeepCopy (line 25) | func (in *Capability) DeepCopy() *Capability {
method DeepCopyObject (line 35) | func (in *Capability) DeepCopyObject() runtime.Object {
method DeepCopyInto (line 43) | func (in *CapabilityList) DeepCopyInto(out *CapabilityList) {
method DeepCopy (line 57) | func (in *CapabilityList) DeepCopy() *CapabilityList {
method DeepCopyObject (line 67) | func (in *CapabilityList) DeepCopyObject() runtime.Object {
method DeepCopyInto (line 75) | func (in *CapabilitySpec) DeepCopyInto(out *CapabilitySpec) {
method DeepCopy (line 87) | func (in *CapabilitySpec) DeepCopy() *CapabilitySpec {
method DeepCopyInto (line 97) | func (in *CapabilityStatus) DeepCopyInto(out *CapabilityStatus) {
method DeepCopy (line 109) | func (in *CapabilityStatus) DeepCopy() *CapabilityStatus {
method DeepCopyInto (line 119) | func (in *Query) DeepCopyInto(out *Query) {
method DeepCopy (line 143) | func (in *Query) DeepCopy() *Query {
method DeepCopyInto (line 153) | func (in *QueryGVR) DeepCopyInto(out *QueryGVR) {
method DeepCopy (line 163) | func (in *QueryGVR) DeepCopy() *QueryGVR {
method DeepCopyInto (line 173) | func (in *QueryObject) DeepCopyInto(out *QueryObject) {
method DeepCopy (line 193) | func (in *QueryObject) DeepCopy() *QueryObject {
method DeepCopyInto (line 203) | func (in *QueryPartialSchema) DeepCopyInto(out *QueryPartialSchema) {
method DeepCopy (line 208) | func (in *QueryPartialSchema) DeepCopy() *QueryPartialSchema {
method DeepCopyInto (line 218) | func (in *QueryResult) DeepCopyInto(out *QueryResult) {
method DeepCopy (line 223) | func (in *QueryResult) DeepCopy() *QueryResult {
method DeepCopyInto (line 233) | func (in *Result) DeepCopyInto(out *Result) {
method DeepCopy (line 253) | func (in *Result) DeepCopy() *Result {
FILE: apis/core/v1alpha2/capability_types.go
type CapabilitySpec (line 12) | type CapabilitySpec struct
type Query (line 27) | type Query struct
type QueryObject (line 50) | type QueryObject struct
type QueryGVR (line 69) | type QueryGVR struct
type QueryPartialSchema (line 87) | type QueryPartialSchema struct
type CapabilityStatus (line 99) | type CapabilityStatus struct
type QueryResult (line 107) | type QueryResult struct
type Result (line 128) | type Result struct
type Capability (line 155) | type Capability struct
type CapabilityList (line 167) | type CapabilityList struct
function init (line 173) | func init() {
FILE: apis/core/v1alpha2/feature_stability_policies.go
type Policy (line 7) | type Policy struct
function GetPolicyForStabilityLevel (line 59) | func GetPolicyForStabilityLevel(stability StabilityLevel) Policy {
FILE: apis/core/v1alpha2/feature_types.go
type StabilityLevel (line 11) | type StabilityLevel
constant WorkInProgress (line 14) | WorkInProgress StabilityLevel = "Work In Progress"
constant Experimental (line 15) | Experimental StabilityLevel = "Experimental"
constant TechnicalPreview (line 16) | TechnicalPreview StabilityLevel = "Technical Preview"
constant Stable (line 17) | Stable StabilityLevel = "Stable"
constant Deprecated (line 18) | Deprecated StabilityLevel = "Deprecated"
type FeatureSpec (line 22) | type FeatureSpec struct
type FeatureStatus (line 37) | type FeatureStatus struct
type Feature (line 49) | type Feature struct
type FeatureList (line 59) | type FeatureList struct
function init (line 65) | func init() {
FILE: apis/core/v1alpha2/featuregate_types.go
type FeatureReference (line 11) | type FeatureReference struct
type FeatureGateSpec (line 23) | type FeatureGateSpec struct
type FeatureGateStatus (line 32) | type FeatureGateStatus struct
type FeatureReferenceStatus (line 40) | type FeatureReferenceStatus
constant AppliedReferenceStatus (line 43) | AppliedReferenceStatus FeatureReferenceStatus = "Applied"
constant InvalidReferenceStatus (line 44) | InvalidReferenceStatus FeatureReferenceStatus = "Invalid"
type FeatureReferenceResult (line 48) | type FeatureReferenceResult struct
type FeatureGate (line 70) | type FeatureGate struct
type FeatureGateList (line 83) | type FeatureGateList struct
function init (line 89) | func init() {
FILE: apis/core/v1alpha2/featuregate_webhook.go
function getScheme (line 28) | func getScheme() (*runtime.Scheme, error) {
method getClient (line 40) | func (r *FeatureGate) getClient() (client.Client, error) {
method SetupWebhookWithManager (line 58) | func (r *FeatureGate) SetupWebhookWithManager(mgr ctrl.Manager) error {
method ValidateCreate (line 79) | func (r *FeatureGate) ValidateCreate() error {
method ValidateUpdate (line 101) | func (r *FeatureGate) ValidateUpdate(old runtime.Object) error {
method ValidateDelete (line 132) | func (r *FeatureGate) ValidateDelete() error {
method validateFeatureForStabilityPolicyViolation (line 139) | func (r *FeatureGate) validateFeatureForStabilityPolicyViolation(ctx con...
function computeFeaturesThatVoidSupportWarranty (line 169) | func computeFeaturesThatVoidSupportWarranty(spec FeatureGateSpec, featur...
function computeImmutableFeatures (line 190) | func computeImmutableFeatures(spec FeatureGateSpec, features *FeatureLis...
method validateWarrantyVoidOverride (line 208) | func (r *FeatureGate) validateWarrantyVoidOverride(oldObject *FeatureGat...
function computeFeaturesThatOverridedWarranyVoidOverride (line 223) | func computeFeaturesThatOverridedWarranyVoidOverride(spec FeatureGateSpe...
method validateFeatureExists (line 240) | func (r *FeatureGate) validateFeatureExists(ctx context.Context, c clien...
function computeFeaturesThatDoNotExist (line 261) | func computeFeaturesThatDoNotExist(spec FeatureGateSpec, features *Featu...
method validateConflictingFeaturesInFeatureGate (line 277) | func (r *FeatureGate) validateConflictingFeaturesInFeatureGate(ctx conte...
function computeConflictingFeatures (line 297) | func computeConflictingFeatures(featureGate *FeatureGate, featureGates *...
function getPermanentlyVoidAllSupportGuaranteesFieldForFeature (line 324) | func getPermanentlyVoidAllSupportGuaranteesFieldForFeature(featureGate *...
function getFeatureStabilityLevel (line 334) | func getFeatureStabilityLevel(list *FeatureList, featureName string) (St...
FILE: apis/core/v1alpha2/featuregate_webhook_test.go
function TestComputeFeaturesThatVoidSupportWarranty (line 15) | func TestComputeFeaturesThatVoidSupportWarranty(t *testing.T) {
function TestComputeImmutableFeatures (line 84) | func TestComputeImmutableFeatures(t *testing.T) {
function TestComputeInvalidStabilityPolicyOverridedFeatures (line 152) | func TestComputeInvalidStabilityPolicyOverridedFeatures(t *testing.T) {
function TestComputeConflictingFeatures (line 212) | func TestComputeConflictingFeatures(t *testing.T) {
function TestComputeFeaturesThatDoNotExist (line 317) | func TestComputeFeaturesThatDoNotExist(t *testing.T) {
function sliceDiffIgnoreOrder (line 389) | func sliceDiffIgnoreOrder(a, b []string) string {
FILE: apis/core/v1alpha2/readiness_types.go
type ReadinessCheckType (line 11) | type ReadinessCheckType
constant BasicReadinessCheck (line 15) | BasicReadinessCheck = ReadinessCheckType("basic")
constant CompositeReadinessCheck (line 18) | CompositeReadinessCheck = ReadinessCheckType("composite")
type ReadinessSpec (line 22) | type ReadinessSpec struct
type Check (line 27) | type Check struct
type ReadinessStatus (line 42) | type ReadinessStatus struct
type CheckStatus (line 51) | type CheckStatus struct
type Provider (line 62) | type Provider struct
type Readiness (line 77) | type Readiness struct
type ReadinessList (line 88) | type ReadinessList struct
function init (line 94) | func init() {
FILE: apis/core/v1alpha2/readinessprovider_types.go
type ReadinessProviderState (line 11) | type ReadinessProviderState
constant ProviderSuccessState (line 15) | ProviderSuccessState = ReadinessProviderState("success")
constant ProviderFailureState (line 18) | ProviderFailureState = ReadinessProviderState("failure")
constant ProviderInProgressState (line 21) | ProviderInProgressState = ReadinessProviderState("inprogress")
type ReadinessConditionState (line 25) | type ReadinessConditionState
constant ConditionSuccessState (line 29) | ConditionSuccessState = ReadinessConditionState("success")
constant ConditionFailureState (line 32) | ConditionFailureState = ReadinessConditionState("failure")
constant ConditionInProgressState (line 35) | ConditionInProgressState = ReadinessConditionState("inprogress")
type ReadinessProviderSpec (line 39) | type ReadinessProviderSpec struct
type ServiceAccountRef (line 55) | type ServiceAccountRef struct
type ReadinessProviderCondition (line 65) | type ReadinessProviderCondition struct
type ResourceExistenceCondition (line 75) | type ResourceExistenceCondition struct
type ReadinessProviderStatus (line 93) | type ReadinessProviderStatus struct
type ReadinessConditionStatus (line 106) | type ReadinessConditionStatus struct
type ReadinessProvider (line 126) | type ReadinessProvider struct
type ReadinessProviderList (line 137) | type ReadinessProviderList struct
function init (line 143) | func init() {
FILE: apis/core/v1alpha2/readinessprovider_webhook.go
method SetupWebhookWithManager (line 30) | func (r *ReadinessProvider) SetupWebhookWithManager(mgr ctrl.Manager) er...
method getClient (line 49) | func (r *ReadinessProvider) getClient() (client.Client, error) {
method ValidateCreate (line 67) | func (r *ReadinessProvider) ValidateCreate() error {
method ValidateUpdate (line 80) | func (r *ReadinessProvider) ValidateUpdate(_ runtime.Object) error {
method ValidateDelete (line 94) | func (r *ReadinessProvider) ValidateDelete() error {
method validateObject (line 99) | func (r *ReadinessProvider) validateObject(ctx context.Context, k8sClien...
FILE: apis/core/v1alpha2/zz_generated.deepcopy.go
method DeepCopyInto (line 16) | func (in *Capability) DeepCopyInto(out *Capability) {
method DeepCopy (line 25) | func (in *Capability) DeepCopy() *Capability {
method DeepCopyObject (line 35) | func (in *Capability) DeepCopyObject() runtime.Object {
method DeepCopyInto (line 43) | func (in *CapabilityList) DeepCopyInto(out *CapabilityList) {
method DeepCopy (line 57) | func (in *CapabilityList) DeepCopy() *CapabilityList {
method DeepCopyObject (line 67) | func (in *CapabilityList) DeepCopyObject() runtime.Object {
method DeepCopyInto (line 75) | func (in *CapabilitySpec) DeepCopyInto(out *CapabilitySpec) {
method DeepCopy (line 87) | func (in *CapabilitySpec) DeepCopy() *CapabilitySpec {
method DeepCopyInto (line 97) | func (in *CapabilityStatus) DeepCopyInto(out *CapabilityStatus) {
method DeepCopy (line 109) | func (in *CapabilityStatus) DeepCopy() *CapabilityStatus {
method DeepCopyInto (line 119) | func (in *Check) DeepCopyInto(out *Check) {
method DeepCopy (line 124) | func (in *Check) DeepCopy() *Check {
method DeepCopyInto (line 134) | func (in *CheckStatus) DeepCopyInto(out *CheckStatus) {
method DeepCopy (line 144) | func (in *CheckStatus) DeepCopy() *CheckStatus {
method DeepCopyInto (line 154) | func (in *Feature) DeepCopyInto(out *Feature) {
method DeepCopy (line 163) | func (in *Feature) DeepCopy() *Feature {
method DeepCopyObject (line 173) | func (in *Feature) DeepCopyObject() runtime.Object {
method DeepCopyInto (line 181) | func (in *FeatureGate) DeepCopyInto(out *FeatureGate) {
method DeepCopy (line 190) | func (in *FeatureGate) DeepCopy() *FeatureGate {
method DeepCopyObject (line 200) | func (in *FeatureGate) DeepCopyObject() runtime.Object {
method DeepCopyInto (line 208) | func (in *FeatureGateList) DeepCopyInto(out *FeatureGateList) {
method DeepCopy (line 222) | func (in *FeatureGateList) DeepCopy() *FeatureGateList {
method DeepCopyObject (line 232) | func (in *FeatureGateList) DeepCopyObject() runtime.Object {
method DeepCopyInto (line 240) | func (in *FeatureGateSpec) DeepCopyInto(out *FeatureGateSpec) {
method DeepCopy (line 250) | func (in *FeatureGateSpec) DeepCopy() *FeatureGateSpec {
method DeepCopyInto (line 260) | func (in *FeatureGateStatus) DeepCopyInto(out *FeatureGateStatus) {
method DeepCopy (line 270) | func (in *FeatureGateStatus) DeepCopy() *FeatureGateStatus {
method DeepCopyInto (line 280) | func (in *FeatureList) DeepCopyInto(out *FeatureList) {
method DeepCopy (line 294) | func (in *FeatureList) DeepCopy() *FeatureList {
method DeepCopyObject (line 304) | func (in *FeatureList) DeepCopyObject() runtime.Object {
method DeepCopyInto (line 312) | func (in *FeatureReference) DeepCopyInto(out *FeatureReference) {
method DeepCopy (line 317) | func (in *FeatureReference) DeepCopy() *FeatureReference {
method DeepCopyInto (line 327) | func (in *FeatureReferenceResult) DeepCopyInto(out *FeatureReferenceResu...
method DeepCopy (line 332) | func (in *FeatureReferenceResult) DeepCopy() *FeatureReferenceResult {
method DeepCopyInto (line 342) | func (in *FeatureSpec) DeepCopyInto(out *FeatureSpec) {
method DeepCopy (line 347) | func (in *FeatureSpec) DeepCopy() *FeatureSpec {
method DeepCopyInto (line 357) | func (in *FeatureStatus) DeepCopyInto(out *FeatureStatus) {
method DeepCopy (line 362) | func (in *FeatureStatus) DeepCopy() *FeatureStatus {
method DeepCopyInto (line 372) | func (in *Policy) DeepCopyInto(out *Policy) {
method DeepCopy (line 377) | func (in *Policy) DeepCopy() *Policy {
method DeepCopyInto (line 387) | func (in *Provider) DeepCopyInto(out *Provider) {
method DeepCopy (line 392) | func (in *Provider) DeepCopy() *Provider {
method DeepCopyInto (line 402) | func (in *Query) DeepCopyInto(out *Query) {
method DeepCopy (line 426) | func (in *Query) DeepCopy() *Query {
method DeepCopyInto (line 436) | func (in *QueryGVR) DeepCopyInto(out *QueryGVR) {
method DeepCopy (line 446) | func (in *QueryGVR) DeepCopy() *QueryGVR {
method DeepCopyInto (line 456) | func (in *QueryObject) DeepCopyInto(out *QueryObject) {
method DeepCopy (line 476) | func (in *QueryObject) DeepCopy() *QueryObject {
method DeepCopyInto (line 486) | func (in *QueryPartialSchema) DeepCopyInto(out *QueryPartialSchema) {
method DeepCopy (line 491) | func (in *QueryPartialSchema) DeepCopy() *QueryPartialSchema {
method DeepCopyInto (line 501) | func (in *QueryResult) DeepCopyInto(out *QueryResult) {
method DeepCopy (line 506) | func (in *QueryResult) DeepCopy() *QueryResult {
method DeepCopyInto (line 516) | func (in *Readiness) DeepCopyInto(out *Readiness) {
method DeepCopy (line 525) | func (in *Readiness) DeepCopy() *Readiness {
method DeepCopyObject (line 535) | func (in *Readiness) DeepCopyObject() runtime.Object {
method DeepCopyInto (line 543) | func (in *ReadinessConditionStatus) DeepCopyInto(out *ReadinessCondition...
method DeepCopy (line 548) | func (in *ReadinessConditionStatus) DeepCopy() *ReadinessConditionStatus {
method DeepCopyInto (line 558) | func (in *ReadinessList) DeepCopyInto(out *ReadinessList) {
method DeepCopy (line 572) | func (in *ReadinessList) DeepCopy() *ReadinessList {
method DeepCopyObject (line 582) | func (in *ReadinessList) DeepCopyObject() runtime.Object {
method DeepCopyInto (line 590) | func (in *ReadinessProvider) DeepCopyInto(out *ReadinessProvider) {
method DeepCopy (line 599) | func (in *ReadinessProvider) DeepCopy() *ReadinessProvider {
method DeepCopyObject (line 609) | func (in *ReadinessProvider) DeepCopyObject() runtime.Object {
method DeepCopyInto (line 617) | func (in *ReadinessProviderCondition) DeepCopyInto(out *ReadinessProvide...
method DeepCopy (line 627) | func (in *ReadinessProviderCondition) DeepCopy() *ReadinessProviderCondi...
method DeepCopyInto (line 637) | func (in *ReadinessProviderList) DeepCopyInto(out *ReadinessProviderList) {
method DeepCopy (line 651) | func (in *ReadinessProviderList) DeepCopy() *ReadinessProviderList {
method DeepCopyObject (line 661) | func (in *ReadinessProviderList) DeepCopyObject() runtime.Object {
method DeepCopyInto (line 669) | func (in *ReadinessProviderSpec) DeepCopyInto(out *ReadinessProviderSpec) {
method DeepCopy (line 691) | func (in *ReadinessProviderSpec) DeepCopy() *ReadinessProviderSpec {
method DeepCopyInto (line 701) | func (in *ReadinessProviderStatus) DeepCopyInto(out *ReadinessProviderSt...
method DeepCopy (line 711) | func (in *ReadinessProviderStatus) DeepCopy() *ReadinessProviderStatus {
method DeepCopyInto (line 721) | func (in *ReadinessSpec) DeepCopyInto(out *ReadinessSpec) {
method DeepCopy (line 731) | func (in *ReadinessSpec) DeepCopy() *ReadinessSpec {
method DeepCopyInto (line 741) | func (in *ReadinessStatus) DeepCopyInto(out *ReadinessStatus) {
method DeepCopy (line 753) | func (in *ReadinessStatus) DeepCopy() *ReadinessStatus {
method DeepCopyInto (line 763) | func (in *ResourceExistenceCondition) DeepCopyInto(out *ResourceExistenc...
method DeepCopy (line 773) | func (in *ResourceExistenceCondition) DeepCopy() *ResourceExistenceCondi...
method DeepCopyInto (line 783) | func (in *Result) DeepCopyInto(out *Result) {
method DeepCopy (line 803) | func (in *Result) DeepCopy() *Result {
method DeepCopyInto (line 813) | func (in *ServiceAccountRef) DeepCopyInto(out *ServiceAccountRef) {
method DeepCopy (line 818) | func (in *ServiceAccountRef) DeepCopy() *ServiceAccountRef {
FILE: capabilities/client/pkg/discovery/cluster_gvr.go
function Group (line 26) | func Group(queryName, group string) *QueryGVR {
type nullString (line 34) | type nullString struct
method set (line 39) | func (s *nullString) set(value string) {
type QueryGVR (line 47) | type QueryGVR struct
method Name (line 56) | func (q *QueryGVR) Name() string {
method WithVersions (line 62) | func (q *QueryGVR) WithVersions(versions ...string) *QueryGVR {
method WithResource (line 69) | func (q *QueryGVR) WithResource(resource string) *QueryGVR {
method Run (line 75) | func (q *QueryGVR) Run(config *clusterQueryClientConfig) (bool, error) {
method validate (line 111) | func (q *QueryGVR) validate(cfg *clusterQueryClientConfig) error {
method unmatchedGroupResource (line 138) | func (q *QueryGVR) unmatchedGroupResource(cfg *clusterQueryClientConfi...
method unmatchedGroupVersions (line 169) | func (q *QueryGVR) unmatchedGroupVersions(cfg *clusterQueryClientConfi...
method unmatchedGroupVersionResources (line 210) | func (q *QueryGVR) unmatchedGroupVersionResources(cfg *clusterQueryCli...
method containsGroup (line 238) | func (q *QueryGVR) containsGroup(groups []*metav1.APIGroup, group stri...
method resourceListInGroup (line 249) | func (q *QueryGVR) resourceListInGroup(resourceLists []*metav1.APIReso...
method groupFromGroupList (line 265) | func (q *QueryGVR) groupFromGroupList(groupList *metav1.APIGroupList) ...
method resourceExists (line 275) | func (q *QueryGVR) resourceExists(resources []*metav1.APIResourceList)...
method Reason (line 292) | func (q *QueryGVR) Reason() string {
function containsEmpty (line 128) | func containsEmpty(strs []string) bool {
FILE: capabilities/client/pkg/discovery/cluster_object.go
function Object (line 24) | func Object(queryName string, obj *corev1.ObjectReference) *QueryObject {
type QueryObject (line 33) | type QueryObject struct
method Name (line 42) | func (q *QueryObject) Name() string {
method WithoutAnnotations (line 47) | func (q *QueryObject) WithoutAnnotations(a map[string]string) *QueryOb...
method WithAnnotations (line 60) | func (q *QueryObject) WithAnnotations(a map[string]string) *QueryObject {
method Run (line 73) | func (q *QueryObject) Run(config *clusterQueryClientConfig) (bool, err...
method QueryObjectExists (line 93) | func (q *QueryObject) QueryObjectExists(resources []*restmapper.APIGro...
method objectExists (line 109) | func (q *QueryObject) objectExists(resources []*restmapper.APIGroupRes...
method checkAnnotations (line 137) | func (q *QueryObject) checkAnnotations(u *unstructured.Unstructured) b...
method Reason (line 155) | func (q *QueryObject) Reason() string {
method annotationsMap (line 159) | func (q *QueryObject) annotationsMap(presence bool) map[string]string {
type resourceAnnotation (line 169) | type resourceAnnotation struct
FILE: capabilities/client/pkg/discovery/cluster_schema.go
function Schema (line 12) | func Schema(name, partialSchema string) *QueryPartialSchema {
type QueryPartialSchema (line 22) | type QueryPartialSchema struct
method Name (line 29) | func (q *QueryPartialSchema) Name() string {
method Run (line 34) | func (q *QueryPartialSchema) Run(config *clusterQueryClientConfig) (bo...
method Reason (line 54) | func (q *QueryPartialSchema) Reason() string {
type QueryFailure (line 47) | type QueryFailure struct
FILE: capabilities/client/pkg/discovery/cluster_test.go
function init (line 21) | func init() {
function queryClientWithResourcesAndObjects (line 70) | func queryClientWithResourcesAndObjects() (*ClusterQueryClient, error) {
function queryClientWithNoResources (line 74) | func queryClientWithNoResources() (*ClusterQueryClient, error) {
function queryClientWithResourcesAndNoObjects (line 78) | func queryClientWithResourcesAndNoObjects() (*ClusterQueryClient, error) {
function queryClientWithSchema (line 83) | func queryClientWithSchema() (*ClusterQueryClient, error) {
function TestClusterQueries (line 88) | func TestClusterQueries(t *testing.T) {
function TestGVRQueries (line 176) | func TestGVRQueries(t *testing.T) {
FILE: capabilities/client/pkg/discovery/discovery.go
function NewClusterQueryClientForConfig (line 15) | func NewClusterQueryClientForConfig(config *rest.Config) (*ClusterQueryC...
function NewClusterQueryClient (line 28) | func NewClusterQueryClient(dynamicClient dynamic.Interface, discoveryCli...
type clusterQueryClientConfig (line 39) | type clusterQueryClientConfig struct
type ClusterQueryClient (line 45) | type ClusterQueryClient struct
method Query (line 50) | func (c *ClusterQueryClient) Query(targets ...QueryTarget) *ClusterQue...
method PreparedQuery (line 59) | func (c *ClusterQueryClient) PreparedQuery(targets ...QueryTarget) fun...
type QueryTarget (line 69) | type QueryTarget interface
type QueryResult (line 76) | type QueryResult struct
type Results (line 84) | type Results
method ForQuery (line 88) | func (r Results) ForQuery(queryName string) *QueryResult {
type ClusterQuery (line 93) | type ClusterQuery struct
method Execute (line 102) | func (c *ClusterQuery) Execute() (bool, error) {
method Prepare (line 133) | func (c *ClusterQuery) Prepare() func() (bool, error) {
method Results (line 138) | func (c *ClusterQuery) Results() Results {
FILE: capabilities/client/pkg/discovery/fake.go
function NewFakeClusterQueryClient (line 16) | func NewFakeClusterQueryClient(resources []*metav1.APIResourceList, sche...
type fakeWithSchema (line 27) | type fakeWithSchema struct
method OpenAPISchema (line 31) | func (fws fakeWithSchema) OpenAPISchema() (*openapi_v2.Document, error) {
function NewFakeClusterQueryClientWithSchema (line 44) | func NewFakeClusterQueryClientWithSchema(_ []*metav1.APIResourceList, sc...
FILE: capabilities/client/pkg/discovery/generate.go
function QueryTargetsToCapabilityResource (line 20) | func QueryTargetsToCapabilityResource(queryTargets []QueryTarget) (*runv...
function QueryTargetsToCapability (line 76) | func QueryTargetsToCapability(queryTargets []QueryTarget) (*corev1alpha2...
FILE: capabilities/client/pkg/discovery/generate_test.go
type unknownQueryType (line 20) | type unknownQueryType
method Name (line 22) | func (unk unknownQueryType) Name() string {
method Run (line 25) | func (unk unknownQueryType) Run(_ *clusterQueryClientConfig) (bool, er...
method Reason (line 28) | func (unk unknownQueryType) Reason() string {
function TestQueryTargetsToCapabilityResource (line 32) | func TestQueryTargetsToCapabilityResource(t *testing.T) {
function TestQueryTargetsToCapability (line 146) | func TestQueryTargetsToCapability(t *testing.T) {
FILE: capabilities/client/pkg/discovery/tkg/capabilities.go
constant clusterTypeManagement (line 21) | clusterTypeManagement = "management"
constant clusterTypeWorkload (line 23) | clusterTypeWorkload = "workload"
constant metadataConfigMapNamespace (line 26) | metadataConfigMapNamespace = "tkg-system-public"
constant metadataConfigMapName (line 28) | metadataConfigMapName = "tkg-metadata"
constant namespaceNSX (line 31) | namespaceNSX = "vmware-system-nsx"
method IsTKGm (line 36) | func (dc *DiscoveryClient) IsTKGm(ctx context.Context) (bool, error) {
method IsTKGS (line 42) | func (dc *DiscoveryClient) IsTKGS(_ context.Context) (bool, error) {
method IsManagementCluster (line 50) | func (dc *DiscoveryClient) IsManagementCluster(ctx context.Context) (boo...
method IsWorkloadCluster (line 60) | func (dc *DiscoveryClient) IsWorkloadCluster(ctx context.Context) (bool,...
function clusterTypeFromMetadataConfigMap (line 69) | func clusterTypeFromMetadataConfigMap(ctx context.Context, c client.Clie...
method HasNSX (line 96) | func (dc *DiscoveryClient) HasNSX(_ context.Context) (bool, error) {
FILE: capabilities/client/pkg/discovery/tkg/capabilities_test.go
function TestHasNSX (line 17) | func TestHasNSX(t *testing.T) {
function TestIsTKGS (line 50) | func TestIsTKGS(t *testing.T) {
function metadataConfigMapFor (line 96) | func metadataConfigMapFor(clusterType string) *corev1.ConfigMap {
function discoveryClientForConfigMap (line 109) | func discoveryClientForConfigMap(cm *corev1.ConfigMap) (*DiscoveryClient...
function TestIsManagementCluster (line 113) | func TestIsManagementCluster(t *testing.T) {
function TestIsWorkloadCluster (line 152) | func TestIsWorkloadCluster(t *testing.T) {
FILE: capabilities/client/pkg/discovery/tkg/client.go
function init (line 21) | func init() {
type DiscoveryClient (line 29) | type DiscoveryClient struct
function NewDiscoveryClientForConfig (line 36) | func NewDiscoveryClientForConfig(config *rest.Config) (*DiscoveryClient,...
function NewDiscoveryClient (line 50) | func NewDiscoveryClient(c client.Client, clusterQueryClient *discovery.C...
FILE: capabilities/client/pkg/discovery/tkg/cloudprovider.go
type CloudProvider (line 15) | type CloudProvider
constant CloudProviderAWS (line 19) | CloudProviderAWS = CloudProvider("aws")
constant CloudProviderAzure (line 21) | CloudProviderAzure = CloudProvider("azure")
constant CloudProviderVsphere (line 23) | CloudProviderVsphere = CloudProvider("vsphere")
method HasCloudProvider (line 28) | func (dc *DiscoveryClient) HasCloudProvider(ctx context.Context, cloudPr...
FILE: capabilities/client/pkg/discovery/tkg/cloudprovider_test.go
function nodeFor (line 17) | func nodeFor(cloudProvider CloudProvider) *corev1.Node {
function discoveryClientForNode (line 23) | func discoveryClientForNode(node *corev1.Node) (*DiscoveryClient, error) {
function TestHasCloudProvider (line 31) | func TestHasCloudProvider(t *testing.T) {
FILE: capabilities/client/pkg/discovery/tkg/clustermetadata.go
type ClusterMetadata (line 9) | type ClusterMetadata struct
type Cluster (line 15) | type Cluster struct
type Infrastructure (line 26) | type Infrastructure struct
FILE: capabilities/client/pkg/discovery/tkg/fake.go
function newFakeDiscoveryClient (line 86) | func newFakeDiscoveryClient(resources []*metav1.APIResourceList, scheme ...
FILE: capabilities/client/pkg/discovery/tkg/infraprovider.go
type InfrastructureProvider (line 15) | type InfrastructureProvider
constant InfrastructureProviderAWS (line 19) | InfrastructureProviderAWS = InfrastructureProvider("aws")
constant InfrastructureProviderAzure (line 21) | InfrastructureProviderAzure = InfrastructureProvider("azure")
constant InfrastructureProviderVsphere (line 23) | InfrastructureProviderVsphere = InfrastructureProvider("vsphere")
method HasInfrastructureProvider (line 28) | func (dc *DiscoveryClient) HasInfrastructureProvider(ctx context.Context...
FILE: capabilities/client/pkg/discovery/tkg/infraprovider_test.go
function providerFor (line 16) | func providerFor(infraProvider InfrastructureProvider) *clusterctl.Provi...
function discoveryClientForProvider (line 23) | func discoveryClientForProvider(provider *clusterctl.Provider) (*Discove...
function TestHasInfrastructureProvider (line 31) | func TestHasInfrastructureProvider(t *testing.T) {
FILE: capabilities/client/pkg/discovery/tkg/resource.go
method HasTanzuRunGroup (line 15) | func (dc *DiscoveryClient) HasTanzuRunGroup(_ context.Context, versions ...
method HasTanzuKubernetesClusterV1alpha1 (line 22) | func (dc *DiscoveryClient) HasTanzuKubernetesClusterV1alpha1(_ context.C...
method HasTanzuKubernetesReleaseV1alpha1 (line 31) | func (dc *DiscoveryClient) HasTanzuKubernetesReleaseV1alpha1(_ context.C...
FILE: capabilities/client/pkg/discovery/tkg/resource_test.go
function TestHasTanzuRunGroup (line 13) | func TestHasTanzuRunGroup(t *testing.T) {
function TestHasTanzuKubernetesCluster (line 59) | func TestHasTanzuKubernetesCluster(t *testing.T) {
function TestHasTanzuKubernetesRelease (line 94) | func TestHasTanzuKubernetesRelease(t *testing.T) {
FILE: capabilities/controller/main.go
function init (line 30) | func init() {
function main (line 37) | func main() {
FILE: capabilities/controller/pkg/capabilities/core/capability_controller.go
type CapabilityReconciler (line 22) | type CapabilityReconciler struct
method Reconcile (line 33) | func (r *CapabilityReconciler) Reconcile(ctx context.Context, req ctrl...
method queryGVRs (line 82) | func (r *CapabilityReconciler) queryGVRs(log logr.Logger, clusterQuery...
method queryObjects (line 95) | func (r *CapabilityReconciler) queryObjects(log logr.Logger, clusterQu...
method queryPartialSchemas (line 108) | func (r *CapabilityReconciler) queryPartialSchemas(log logr.Logger, cl...
method executeQueries (line 121) | func (r *CapabilityReconciler) executeQueries(log logr.Logger, cluster...
method SetupWithManager (line 145) | func (r *CapabilityReconciler) SetupWithManager(mgr ctrl.Manager) error {
FILE: capabilities/controller/pkg/capabilities/suite_test.go
function TestAPIs (line 27) | func TestAPIs(t *testing.T) {
FILE: capabilities/controller/pkg/config/config.go
function GetConfigForServiceAccount (line 16) | func GetConfigForServiceAccount(ctx context.Context, coreClient client.C...
function buildConfig (line 45) | func buildConfig(secret *corev1.Secret, host string) (*rest.Config, erro...
FILE: capabilities/controller/pkg/config/config_test.go
function TestGetConfigForServiceAccount (line 21) | func TestGetConfigForServiceAccount(t *testing.T) {
function getTestObjects (line 84) | func getTestObjects() ([]runtime.Object, map[string]*corev1.Secret) {
FILE: capabilities/controller/pkg/constants/constants.go
constant ContextTimeout (line 9) | ContextTimeout = 60 * time.Second
constant ServiceAccountWithDefaultPermissions (line 10) | ServiceAccountWithDefaultPermissions = "tanzu-capabilities-manager-defau...
constant CapabilitiesControllerNamespace (line 11) | CapabilitiesControllerNamespace = "tkg-system"
FILE: cmd/plugin/codegen/generate.go
function registerOptionsMarkers (line 42) | func registerOptionsMarkers() error {
function runGenerate (line 86) | func runGenerate(_ *cobra.Command, args []string) error {
FILE: cmd/plugin/codegen/generators/feature/fakeData/cronjob_types.go
type CronjobSpec (line 9) | type CronjobSpec struct
type CronjobStatus (line 14) | type CronjobStatus struct
type Cronjob (line 21) | type Cronjob struct
FILE: cmd/plugin/codegen/generators/feature/fakeData/memcached_types.go
type MemcachedSpec (line 9) | type MemcachedSpec struct
type MemcachedStatus (line 14) | type MemcachedStatus struct
type Memcached (line 18) | type Memcached struct
FILE: cmd/plugin/codegen/generators/feature/fakeData/mykind_types.go
type MyKindSpec (line 9) | type MyKindSpec struct
type MyKindStatus (line 14) | type MyKindStatus struct
type MyKind (line 20) | type MyKind struct
FILE: cmd/plugin/codegen/generators/feature/feature_suite_test.go
function TestFeatureGeneration (line 13) | func TestFeatureGeneration(t *testing.T) {
FILE: cmd/plugin/codegen/generators/feature/gen.go
constant markerName (line 14) | markerName = "tanzu:feature"
type Generator (line 22) | type Generator struct
method Generate (line 35) | func (g Generator) Generate(ctx *genall.GenerationContext) error {
method RegisterMarkers (line 50) | func (Generator) RegisterMarkers(reg *markers.Registry) error {
type Rule (line 25) | type Rule struct
function generateFeatures (line 78) | func generateFeatures(ctx *genall.GenerationContext) []interface{} {
function getMarkerValues (line 107) | func getMarkerValues(name string, markerValues map[string][]interface{})...
FILE: cmd/plugin/codegen/main.go
function main (line 23) | func main() {
FILE: cmd/plugin/codegen/test/fakeData/mykind_types.go
type MyKindSpec (line 9) | type MyKindSpec struct
type MyKindStatus (line 14) | type MyKindStatus struct
type MyKind (line 20) | type MyKind struct
FILE: cmd/plugin/codegen/test/main.go
function main (line 24) | func main() {
function initialize (line 36) | func initialize() error {
function test (line 67) | func test(c *cobra.Command, _ []string) error {
function Cleanup (line 81) | func Cleanup() error {
FILE: cmd/plugin/feature/activate.go
function init (line 33) | func init() {
function featureActivate (line 37) | func featureActivate(cmd *cobra.Command, args []string) error {
function activateFeature (line 62) | func activateFeature(ctx context.Context, fgClient *featuregateclient.Fe...
function displayActivationWarnings (line 96) | func displayActivationWarnings(feature *corev1alpha2.Feature) {
function willWarrantyBeVoided (line 117) | func willWarrantyBeVoided(ref corev1alpha2.FeatureReference, feature *co...
function userGivesPermissionToVoidWarranty (line 123) | func userGivesPermissionToVoidWarranty(feature *corev1alpha2.Feature, us...
function userAllowsByInteractiveCLI (line 133) | func userAllowsByInteractiveCLI(in *os.File) (bool, error) {
FILE: cmd/plugin/feature/activate_test.go
function TestActivateFeature (line 23) | func TestActivateFeature(t *testing.T) {
function TestUserAllowsByInteractiveCLI (line 137) | func TestUserAllowsByInteractiveCLI(t *testing.T) {
function TestExecuteFeatureActivateCommand (line 207) | func TestExecuteFeatureActivateCommand(t *testing.T) {
function restoreEnvVar (line 245) | func restoreEnvVar(env string, previousVal string, wasPreviouslySet bool...
FILE: cmd/plugin/feature/deactivate.go
function deactivateFeature (line 44) | func deactivateFeature(ctx context.Context, fgClient *featuregateclient....
FILE: cmd/plugin/feature/deactivate_test.go
function TestDeactivateFeature (line 22) | func TestDeactivateFeature(t *testing.T) {
function TestExecuteFeatureDeactivateCommand (line 99) | func TestExecuteFeatureDeactivateCommand(t *testing.T) {
FILE: cmd/plugin/feature/list.go
function init (line 35) | func init() {
type FeatureInfo (line 45) | type FeatureInfo struct
function printFeatures (line 56) | func printFeatures(cmd *cobra.Command, _ []string) error {
function featureInfoList (line 79) | func featureInfoList(ctx context.Context, cl *featuregateclient.FeatureG...
function collectFeaturesInfo (line 100) | func collectFeaturesInfo(gates []corev1alpha2.FeatureGate, features []co...
function setShowInList (line 142) | func setShowInList(infos map[string]*FeatureInfo, inclExperimental bool,...
function featuresFilteredByFlags (line 161) | func featuresFilteredByFlags(infos map[string]*FeatureInfo, activated, d...
function listExtended (line 181) | func listExtended(cmd *cobra.Command, features []FeatureInfo) error {
function listBasic (line 198) | func listBasic(cmd *cobra.Command, features []FeatureInfo) error {
FILE: cmd/plugin/feature/list_test.go
function TestFeatureInfoList (line 21) | func TestFeatureInfoList(t *testing.T) {
function TestListExtended (line 277) | func TestListExtended(t *testing.T) {
function TestListBasic (line 311) | func TestListBasic(t *testing.T) {
function TestExecuteFeatureListCommand (line 345) | func TestExecuteFeatureListCommand(t *testing.T) {
function featureInfoSliceContains (line 379) | func featureInfoSliceContains(features []FeatureInfo, name string) bool {
method String (line 388) | func (feature FeatureInfo) String() string {
FILE: cmd/plugin/feature/main.go
constant contextTimeout (line 26) | contextTimeout = 300 * time.Second
function main (line 28) | func main() {
FILE: cmd/plugin/feature/test/main.go
function main (line 18) | func main() {
function test (line 29) | func test(_ *cobra.Command, _ []string) error {
FILE: featuregates/client/pkg/featuregateclient/client.go
type FeatureGateClient (line 23) | type FeatureGateClient struct
method GetFeatureGate (line 79) | func (f *FeatureGateClient) GetFeatureGate(ctx context.Context, featur...
method GetFeatureGateList (line 92) | func (f *FeatureGateClient) GetFeatureGateList(ctx context.Context) (*...
method GetFeature (line 102) | func (f *FeatureGateClient) GetFeature(ctx context.Context, featureNam...
method GetFeatureList (line 115) | func (f *FeatureGateClient) GetFeatureList(ctx context.Context) (*core...
method ActivateFeature (line 128) | func (f *FeatureGateClient) ActivateFeature(ctx context.Context, featu...
method setVoidWarranty (line 214) | func (f *FeatureGateClient) setVoidWarranty(ctx context.Context, gate ...
method setActivated (line 225) | func (f *FeatureGateClient) setActivated(ctx context.Context, gate *co...
method DeactivateFeature (line 237) | func (f *FeatureGateClient) DeactivateFeature(ctx context.Context, fea...
method setDeactivated (line 269) | func (f *FeatureGateClient) setDeactivated(ctx context.Context, gate *...
function NewFeatureGateClient (line 28) | func NewFeatureGateClient(options ...Option) (*FeatureGateClient, error) {
type Option (line 45) | type Option
function WithClient (line 48) | func WithClient(cl client.Client) Option {
function getFeatureGateClient (line 56) | func getFeatureGateClient() (client.Client, error) {
function FeatureRefFromGateList (line 171) | func FeatureRefFromGateList(gates *corev1alpha2.FeatureGateList, feature...
function setVoidWarrantyChecksPass (line 196) | func setVoidWarrantyChecksPass(ref corev1alpha2.FeatureReference, featur...
function getCurrentClusterConfig (line 280) | func getCurrentClusterConfig() (*rest.Config, error) {
function getRestConfigWithContext (line 296) | func getRestConfigWithContext(ctx, kubeconfigPath string) (*rest.Config,...
FILE: featuregates/client/pkg/featuregateclient/client_test.go
constant contextTimeout (line 19) | contextTimeout = 30 * time.Second
function TestGetFeature (line 21) | func TestGetFeature(t *testing.T) {
function TestGetFeatureList (line 74) | func TestGetFeatureList(t *testing.T) {
function TestGetFeaturegate (line 127) | func TestGetFeaturegate(t *testing.T) {
function TestGetFeaturegateList (line 184) | func TestGetFeaturegateList(t *testing.T) {
function TestActivateFeature (line 228) | func TestActivateFeature(t *testing.T) {
function TestDeactivateFeature (line 368) | func TestDeactivateFeature(t *testing.T) {
function featureGateContainsFeature (line 487) | func featureGateContainsFeature(gate *corev1alpha2.FeatureGate, feature ...
function featureGateListContainsFeatureGate (line 496) | func featureGateListContainsFeatureGate(gates *corev1alpha2.FeatureGateL...
function featureListContainsFeature (line 505) | func featureListContainsFeature(features *corev1alpha2.FeatureList, feat...
FILE: featuregates/client/pkg/featuregateclient/errors.go
type ErrType (line 10) | type ErrType
method Error (line 22) | func (t ErrType) Error() string {
constant ErrTypeNotFound (line 14) | ErrTypeNotFound ErrType = "NotFound"
constant ErrTypeForbidden (line 16) | ErrTypeForbidden ErrType = "Forbidden"
constant ErrTypeTooMany (line 18) | ErrTypeTooMany ErrType = "TooMany"
FILE: featuregates/client/pkg/featuregateclient/fake/objects.go
function GetTestObjects (line 17) | func GetTestObjects() ([]runtime.Object, map[string]*corev1alpha2.Featur...
FILE: featuregates/client/pkg/featuregateclient/validation.go
function validateFeatureActivationToggle (line 13) | func validateFeatureActivationToggle(gates *corev1alpha2.FeatureGateList...
function featureExistsInOneAndOnlyOneFeaturegate (line 26) | func featureExistsInOneAndOnlyOneFeaturegate(gates *corev1alpha2.Feature...
function qtyFeatureGatesContainingFeature (line 39) | func qtyFeatureGatesContainingFeature(gates *corev1alpha2.FeatureGateLis...
function featureActivationToggleAllowed (line 53) | func featureActivationToggleAllowed(feature *corev1alpha2.Feature) error {
FILE: featuregates/client/pkg/util/featuregate.go
constant TKGSystemFeatureGate (line 21) | TKGSystemFeatureGate = "tkg-system"
function ComputeFeatureStates (line 35) | func ComputeFeatureStates(featureGateSpec configv1alpha1.FeatureGateSpec...
function FeatureActivatedInNamespace (line 93) | func FeatureActivatedInNamespace(ctx context.Context, c client.Client, n...
function FeaturesActivatedInNamespacesMatchingSelector (line 105) | func FeaturesActivatedInNamespacesMatchingSelector(ctx context.Context, ...
function IsFeatureActivated (line 145) | func IsFeatureActivated(ctx context.Context, c client.Client, featureNam...
function GetFeatureGateForFeature (line 157) | func GetFeatureGateForFeature(ctx context.Context, c client.Client, feat...
function GetFeatureGateWithFeatureInStatus (line 174) | func GetFeatureGateWithFeatureInStatus(ctx context.Context, c client.Cli...
function GetFeatureReferenceFromFeatureGate (line 191) | func GetFeatureReferenceFromFeatureGate(featureGate *corev1alpha2.Featur...
FILE: featuregates/client/pkg/util/featuregate_test.go
function TestComputeFeatureStates (line 23) | func TestComputeFeatureStates(t *testing.T) {
function TestFeaturesActivatedInNamespacesMatchingSelector (line 83) | func TestFeaturesActivatedInNamespacesMatchingSelector(t *testing.T) {
function TestIsFeatureActivated (line 311) | func TestIsFeatureActivated(t *testing.T) {
function TestGetFeatureGateForFeature (line 380) | func TestGetFeatureGateForFeature(t *testing.T) {
function TestGetFeatureGateWithFeatureInStatus (line 465) | func TestGetFeatureGateWithFeatureInStatus(t *testing.T) {
function TestGetFeatureReferenceFromFeatureGate (line 559) | func TestGetFeatureReferenceFromFeatureGate(t *testing.T) {
FILE: featuregates/client/pkg/util/namespace_selector.go
function NamespacesMatchingSelector (line 18) | func NamespacesMatchingSelector(ctx context.Context, c client.Client, se...
FILE: featuregates/client/pkg/util/namespace_selector_test.go
function TestNamespacesMatchingSelector (line 20) | func TestNamespacesMatchingSelector(t *testing.T) {
FILE: featuregates/controller/main.go
function init (line 43) | func init() {
function setCipherSuiteFunc (line 50) | func setCipherSuiteFunc(cipherSuiteString string) (func(cfg *tls.Config)...
function main (line 62) | func main() {
FILE: featuregates/controller/pkg/feature/feature_controller.go
constant contextTimeout (line 26) | contextTimeout = 30 * time.Second
type FeatureReconciler (line 29) | type FeatureReconciler struct
method Reconcile (line 41) | func (r *FeatureReconciler) Reconcile(ctx context.Context, req ctrl.Re...
method SetupWithManager (line 217) | func (r *FeatureReconciler) SetupWithManager(mgr ctrl.Manager) error {
method toFeatureRequests (line 226) | func (r *FeatureReconciler) toFeatureRequests(o client.Object) []recon...
function reconcileFeatureInFeatureGateSpec (line 89) | func reconcileFeatureInFeatureGateSpec(ctx context.Context, c client.Cli...
function reconcileDeletedFeature (line 109) | func reconcileDeletedFeature(ctx context.Context, c client.Client, featu...
function reconcileFeatureNotInFeatureGateSpec (line 130) | func reconcileFeatureNotInFeatureGateSpec(ctx context.Context, c client....
function applyPolicyToComputeFeatureResultAndActivation (line 158) | func applyPolicyToComputeFeatureResultAndActivation(policy corev1alpha2....
function computeFeatureGateStatusResults (line 180) | func computeFeatureGateStatusResults(featureGateStatus corev1alpha2.Feat...
FILE: featuregates/controller/pkg/feature/feature_suite_test.go
function TestFeaturegate (line 42) | func TestFeaturegate(t *testing.T) {
function generateCertificateAndManifests (line 62) | func generateCertificateAndManifests() error {
function getTestFeatureGate (line 177) | func getTestFeatureGate() *corev1alpha2.FeatureGate {
function getTestFeature (line 194) | func getTestFeature(stability corev1alpha2.StabilityLevel) *corev1alpha2...
FILE: featuregates/controller/pkg/featuregate/featuregate_controller.go
constant contextTimeout (line 24) | contextTimeout = 30 * time.Second
type FeatureGateReconciler (line 27) | type FeatureGateReconciler struct
method Reconcile (line 37) | func (r *FeatureGateReconciler) Reconcile(ctx context.Context, req ctr...
method SetupWithManager (line 73) | func (r *FeatureGateReconciler) SetupWithManager(mgr ctrl.Manager) err...
method toFeatureGateRequests (line 85) | func (r *FeatureGateReconciler) toFeatureGateRequests(_ client.Object)...
FILE: hack/tools/main.go
function main (line 8) | func main() {}
FILE: main.go
function main (line 6) | func main() {}
FILE: readiness/controller/main.go
function init (line 43) | func init() {
function setCipherSuiteFunc (line 50) | func setCipherSuiteFunc(cipherSuiteString string) (func(cfg *tls.Config)...
function main (line 62) | func main() {
FILE: readiness/controller/pkg/conditions/resourceexistence.go
function NewResourceExistenceConditionFunc (line 16) | func NewResourceExistenceConditionFunc() func(context.Context, *capabili...
FILE: readiness/controller/pkg/conditions/resourceexistence_test.go
constant defaultNamespace (line 43) | defaultNamespace = "default"
function TestResourceExistenceCondition (line 45) | func TestResourceExistenceCondition(t *testing.T) {
function getCustomQueryClient (line 243) | func getCustomQueryClient() (*capabilitiesdiscovery.ClusterQueryClient, ...
FILE: readiness/controller/pkg/readiness/readiness_controller.go
constant contextTimeout (line 23) | contextTimeout = 30 * time.Second
type ReadinessReconciler (line 26) | type ReadinessReconciler struct
method Reconcile (line 37) | func (r *ReadinessReconciler) Reconcile(ctx context.Context, req ctrl....
method SetupWithManager (line 119) | func (r *ReadinessReconciler) SetupWithManager(mgr ctrl.Manager) error {
method findObjectsForReadinessProvider (line 155) | func (r *ReadinessReconciler) findObjectsForReadinessProvider(readines...
FILE: readiness/controller/pkg/readiness/suite_test.go
function TestAPIs (line 41) | func TestAPIs(t *testing.T) {
function getTestReadiness (line 411) | func getTestReadiness() *corev1alpha2.Readiness {
function getTestReadinessProvider (line 422) | func getTestReadinessProvider() *corev1alpha2.ReadinessProvider {
FILE: readiness/controller/pkg/readinessprovider/readinessprovider_controller.go
constant requeueInterval (line 24) | requeueInterval = 60 * time.Second
constant contextTimeout (line 25) | contextTimeout = 60 * time.Second
type ReadinessProviderReconciler (line 29) | type ReadinessProviderReconciler struct
method Reconcile (line 44) | func (r *ReadinessProviderReconciler) Reconcile(ctx context.Context, r...
method SetupWithManager (line 118) | func (r *ReadinessProviderReconciler) SetupWithManager(mgr ctrl.Manage...
function determineProviderStatus (line 100) | func determineProviderStatus(log logr.Logger, conditionStatusList []core...
FILE: readiness/controller/pkg/readinessprovider/suite_test.go
function TestAPIs (line 56) | func TestAPIs(t *testing.T) {
function generateCertificateAndManifests (line 62) | func generateCertificateAndManifests() error {
function getTestReadinessProvider (line 456) | func getTestReadinessProvider() *corev1alpha2.ReadinessProvider {
FILE: readiness/e2e/e2e_test.go
function init (line 26) | func init() {
function TestE2E (line 32) | func TestE2E(t *testing.T) {
FILE: readiness/e2e/suite_test.go
function deleteReadinessProviders (line 617) | func deleteReadinessProviders(readinessNames ...string) {
function deleteReadinesses (line 624) | func deleteReadinesses(readinessNames ...string) {
function deleteSecrets (line 631) | func deleteSecrets(secretNames ...string) {
function deleteResources (line 638) | func deleteResources(typeMeta metav1.TypeMeta, objectNames ...string) {
FILE: util/cmp/compare.go
type Comparer (line 18) | type Comparer interface
type DeepEqualComparer (line 24) | type DeepEqualComparer struct
method Eq (line 27) | func (de *DeepEqualComparer) Eq(a, b interface{}) error {
type DefinedComparer (line 39) | type DefinedComparer struct
method Eq (line 43) | func (dc *DefinedComparer) Eq(a, b interface{}) error {
function Contains (line 80) | func Contains(list, contains interface{}, comparer Comparer) (err error) {
type IterableMessage (line 98) | type IterableMessage interface
FILE: util/cmp/compare_test.go
type TestStruct (line 12) | type TestStruct struct
type A (line 19) | type A struct
function TestDefined (line 23) | func TestDefined(t *testing.T) {
FILE: util/cmp/strings/slices.go
function SliceDiffIgnoreOrder (line 21) | func SliceDiffIgnoreOrder(a, b []string) string {
FILE: util/cmp/strings/slices_test.go
function TestSliceDiffIgnoreOrder (line 8) | func TestSliceDiffIgnoreOrder(t *testing.T) {
FILE: util/kubeclient/kubeclient.go
function GetConfigForServiceAccount (line 17) | func GetConfigForServiceAccount(ctx context.Context, clientset kubernete...
FILE: util/test/kube.go
function CreateResourcesFromManifest (line 22) | func CreateResourcesFromManifest(manifestBytes []byte, cfg *rest.Config,...
function getResource (line 44) | func getResource(decoder *yamlutil.YAMLOrJSONDecoder, mapper meta.RESTMa...
FILE: util/webhook/certs/certmanager.go
function New (line 24) | func New(options *Options) (*CertificateManager, error) {
type CertificateManager (line 35) | type CertificateManager struct
method Start (line 41) | func (cm *CertificateManager) Start(ctx context.Context) error {
method start (line 52) | func (cm *CertificateManager) start(ctx context.Context) error {
method rotateCerts (line 70) | func (cm *CertificateManager) rotateCerts(ctx context.Context, schedul...
method getNextRotationTime (line 153) | func (cm *CertificateManager) getNextRotationTime(secret *corev1.Secre...
method updateWebhookConfigs (line 171) | func (cm *CertificateManager) updateWebhookConfigs(ctx context.Context...
method generateWebhookCertSecretData (line 221) | func (cm *CertificateManager) generateWebhookCertSecretData(ctx contex...
method updateWebhookSecret (line 235) | func (cm *CertificateManager) updateWebhookSecret(ctx context.Context,...
method WaitForCertDirReady (line 248) | func (cm *CertificateManager) WaitForCertDirReady() error {
method certDirReady (line 259) | func (cm *CertificateManager) certDirReady() <-chan struct{} {
FILE: util/webhook/certs/certmanager_suite_test.go
function init (line 30) | func init() {
function TestCertificateManager (line 33) | func TestCertificateManager(t *testing.T) {
FILE: util/webhook/certs/constants.go
constant CACertName (line 10) | CACertName = "ca.crt"
constant ServerCertName (line 12) | ServerCertName = "tls.crt"
constant ServerKeyName (line 14) | ServerKeyName = "tls.key"
constant certExpirtationBuffer (line 18) | certExpirtationBuffer = time.Minute * 30
constant defaultRotationInterval (line 23) | defaultRotationInterval = time.Hour * 24
FILE: util/webhook/certs/options.go
type Options (line 13) | type Options struct
method defaultOpts (line 59) | func (o *Options) defaultOpts() error {
FILE: util/ytt/ytt.go
type Command (line 17) | type Command struct
method RenderTemplate (line 38) | func (ytt *Command) RenderTemplate(filePaths []string, input io.Reader...
method buildArgs (line 67) | func (ytt *Command) buildArgs(filePaths []string, input io.Reader) []s...
type CommandOptions (line 23) | type CommandOptions struct
function NewYttCommand (line 30) | func NewYttCommand(options CommandOptions) *Command {
function RenderYTTTemplate (line 94) | func RenderYTTTemplate(options CommandOptions, filePaths []string, input...
Condensed preview — 317 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (2,095K chars).
[
{
"path": ".codecov.yaml",
"chars": 507,
"preview": "# https://docs.codecov.com/docs/codecovyml-reference\ncoverage:\n precision: 2\n round: down\n range: 39..75\n\n status:\n "
},
{
"path": ".dockerignore",
"chars": 86,
"preview": "artifacts/\nartifacts-admin/\nbuild/\n!build/artifacts/\nhack/\npackages/\ndocs/\ntest/\nbin/\n"
},
{
"path": ".github/ISSUE_TEMPLATE/bug_report.md",
"chars": 597,
"preview": "---\nname: Bug report\nabout: Report a bug to help us improve Tanzu Framework\nlabels: needs-triage, kind/bug\n---\n\n**Bug de"
},
{
"path": ".github/ISSUE_TEMPLATE/feature_request.md",
"chars": 512,
"preview": "---\nname: Feature request\nabout: Suggest an idea to improve Tanzu Framework\nlabels: needs-triage, kind/feature\n---\n<!-- "
},
{
"path": ".github/PULL_REQUEST_TEMPLATE.md",
"chars": 2045,
"preview": "### What this PR does / why we need it\n\n### Which issue(s) this PR fixes\n<!--\n Usage: Fixes #<issue number>.\n\n U"
},
{
"path": ".github/dependabot.yml",
"chars": 519,
"preview": "# Dependabot config for go mod version upgrades\n#\n# TODO(vuil):\n# All version updates being disabled with\n# 'open-pull-r"
},
{
"path": ".github/workflows/build.yaml",
"chars": 1179,
"preview": "name: Build\n\non:\n push:\n branches: [main]\n pull_request:\n\njobs:\n build:\n name: build\n runs-on: ubuntu-latest"
},
{
"path": ".github/workflows/cve-scan.yaml",
"chars": 1218,
"preview": "name: CVE Scan\n\non: [pull_request]\n\npermissions:\n contents: read\n\nconcurrency:\n group: ${{ github.workflow }}-${{ gith"
},
{
"path": ".github/workflows/lint-all.yaml",
"chars": 1249,
"preview": "name: Lint\n\non:\n pull_request:\n branches: [ main, release-* ]\n\njobs:\n lint:\n name: lint\n runs-on: ubuntu-late"
},
{
"path": ".github/workflows/verify-label.yaml",
"chars": 427,
"preview": "---\nname: Merge Checker\non:\n pull_request:\n types:\n - opened\n - synchronize\n - reopened\n - label"
},
{
"path": ".github/workflows/verify.yaml",
"chars": 962,
"preview": "name: Verify\n\non:\n pull_request:\n branches: [ main, release-* ]\n\njobs:\n verify:\n name: verify\n runs-on: ubunt"
},
{
"path": ".github/workflows/welcome-contributors.yaml",
"chars": 758,
"preview": "name: 'Housekeeping - Welcome New Contributors'\n\non:\n issues:\n types: [opened]\n pull_request_target:\n types: [op"
},
{
"path": ".gitignore",
"chars": 755,
"preview": "# NOTE: do not add IDE, editor, or OS-specific patterns here.\n# Individuals should add these to their global gitignore.\n"
},
{
"path": ".golangci.yaml",
"chars": 3384,
"preview": "linters-settings:\n dupl:\n threshold: 100\n funlen:\n lines: 100\n statements: 50\n goheader:\n values:\n c"
},
{
"path": ".markdownlintrc",
"chars": 228,
"preview": "{\n \"default\": true,\n \"line_length\": false,\n \"MD024\": { \"allow_different_nesting\": true },\n \"MD026\": { \"punctuation\":"
},
{
"path": ".trivy.yaml",
"chars": 359,
"preview": "# Ref: https://aquasecurity.github.io/trivy/v0.33/docs/references/customization/config-file\n# Global Options\ndebug: true"
},
{
"path": ".vale/config.ini",
"chars": 94,
"preview": "StylesPath = styles\n\n[{README,CONTRIBUTING,CODE-OF-CONDUCT,docs/*}.md]\nBasedOnStyles = vmware\n"
},
{
"path": ".vale/styles/vmware/inclusive.yml",
"chars": 302,
"preview": "extends: substitution\nmessage: Use '%s' instead of '%s' for inclusivity\nlevel: error\nignorecase: true\nswap:\n blacklist:"
},
{
"path": "ADOPTERS.md",
"chars": 698,
"preview": "# Tanzu Framework Adopters\n\nIf you're using Tanzu Framework and want to add your organization to this list,\n[follow thes"
},
{
"path": "CODE-OF-CONDUCT.md",
"chars": 5408,
"preview": "# Contributor Covenant Code of Conduct\n\n## Our Pledge\n\nWe as members, contributors, and leaders pledge to make participa"
},
{
"path": "CODEOWNERS",
"chars": 46,
"preview": "* @vmware-tanzu/tanzu-runtime-core-maintainers"
},
{
"path": "CONTRIBUTING.md",
"chars": 8505,
"preview": "# Contributing\n\n## Table of Contents\n\n* [Contributing](#contributing)\n* [Communication](#communication)\n* [Propose a Cha"
},
{
"path": "Dockerfile",
"chars": 6377,
"preview": "# Copyright 2023 VMware, Inc. All Rights Reserved.\n# SPDX-License-Identifier: Apache-2.0\n\n# This Dockerfile is currently"
},
{
"path": "GOVERNANCE.md",
"chars": 4439,
"preview": "# Tanzu Framework Repository Governance\n\nThis document defines the project governance for Tanzu Framework, an open sourc"
},
{
"path": "LICENSE",
"chars": 10143,
"preview": "\n Apache License\n Version 2.0, January 2004\n "
},
{
"path": "MAINTAINERS.md",
"chars": 1476,
"preview": "# Tanzu Framework Maintainers\n\n## Maintainers\n\n| Maintainer | GitHub ID | Affiliation "
},
{
"path": "Makefile",
"chars": 5682,
"preview": "# Copyright 2021 VMware, Inc. All Rights Reserved.\n# SPDX-License-Identifier: Apache-2.0\n\ninclude ./common.mk ./build.mk"
},
{
"path": "PROJECT",
"chars": 908,
"preview": "domain: tanzu.vmware.com\nmultigroup: true\nrepo: github.com/vmware-tanzu/tanzu-framework\nresources:\n- group: run\n kind: "
},
{
"path": "README.md",
"chars": 1520,
"preview": "# Tanzu Framework\n\n[](https://pkg.g"
},
{
"path": "ROADMAP.md",
"chars": 1450,
"preview": "# Tanzu Framework Roadmap\n\n## About this document\n\nThis document provides an up to date description of items that are in"
},
{
"path": "SECURITY.md",
"chars": 10759,
"preview": "# Security Release Process\n\nFramework is both the foundation for Tanzu editions and a set of building blocks that can be"
},
{
"path": "apis/config/Makefile",
"chars": 114,
"preview": "# Copyright 2022 VMware, Inc. All Rights Reserved.\n# SPDX-License-Identifier: Apache-2.0\n\ninclude ../../common.mk\n"
},
{
"path": "apis/config/config/crd/bases/config.tanzu.vmware.com_featuregates.yaml",
"chars": 7467,
"preview": "---\napiVersion: apiextensions.k8s.io/v1\nkind: CustomResourceDefinition\nmetadata:\n annotations:\n controller-gen.kubeb"
},
{
"path": "apis/config/config/crd/bases/config.tanzu.vmware.com_features.yaml",
"chars": 3997,
"preview": "---\napiVersion: apiextensions.k8s.io/v1\nkind: CustomResourceDefinition\nmetadata:\n annotations:\n controller-gen.kubeb"
},
{
"path": "apis/config/go.mod",
"chars": 2932,
"preview": "module github.com/vmware-tanzu/tanzu-framework/apis/config\n\ngo 1.19\n\nrequire (\n\tgithub.com/google/go-cmp v0.5.8\n\tk8s.io/"
},
{
"path": "apis/config/go.sum",
"chars": 95058,
"preview": "cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=\ncloud.google.com/go v0.34.0/go.mod h1"
},
{
"path": "apis/config/v1alpha1/feature_types.go",
"chars": 2699,
"preview": "// Copyright 2021 VMware, Inc. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\npackage v1alpha1\n\nimport (\n\t"
},
{
"path": "apis/config/v1alpha1/featuregate_types.go",
"chars": 3634,
"preview": "// Copyright 2021 VMware, Inc. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\npackage v1alpha1\n\nimport (\n\t"
},
{
"path": "apis/config/v1alpha1/featuregate_webhook.go",
"chars": 8306,
"preview": "// Copyright 2021 VMware, Inc. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\npackage v1alpha1\n\nimport (\n\t"
},
{
"path": "apis/config/v1alpha1/featuregate_webhook_test.go",
"chars": 12149,
"preview": "// Copyright 2021 VMware, Inc. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\npackage v1alpha1\n\nimport (\n\t"
},
{
"path": "apis/config/v1alpha1/groupversion_info.go",
"chars": 785,
"preview": "// Copyright 2021 VMware, Inc. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\n// Package v1alpha1 contains"
},
{
"path": "apis/config/v1alpha1/zz_generated.deepcopy.go",
"chars": 6662,
"preview": "//go:build !ignore_autogenerated\n// +build !ignore_autogenerated\n\n// Copyright 2023 VMware, Inc. All Rights Reserved.\n//"
},
{
"path": "apis/core/Makefile",
"chars": 114,
"preview": "# Copyright 2022 VMware, Inc. All Rights Reserved.\n# SPDX-License-Identifier: Apache-2.0\n\ninclude ../../common.mk\n"
},
{
"path": "apis/core/config/crd/bases/core.tanzu.vmware.com_capabilities.yaml",
"chars": 32921,
"preview": "---\napiVersion: apiextensions.k8s.io/v1\nkind: CustomResourceDefinition\nmetadata:\n annotations:\n controller-gen.kubeb"
},
{
"path": "apis/core/config/crd/bases/core.tanzu.vmware.com_featuregates.yaml",
"chars": 4597,
"preview": "---\napiVersion: apiextensions.k8s.io/v1\nkind: CustomResourceDefinition\nmetadata:\n annotations:\n controller-gen.kubeb"
},
{
"path": "apis/core/config/crd/bases/core.tanzu.vmware.com_features.yaml",
"chars": 4319,
"preview": "---\napiVersion: apiextensions.k8s.io/v1\nkind: CustomResourceDefinition\nmetadata:\n annotations:\n controller-gen.kubeb"
},
{
"path": "apis/core/config/crd/bases/core.tanzu.vmware.com_readinesses.yaml",
"chars": 4817,
"preview": "---\napiVersion: apiextensions.k8s.io/v1\nkind: CustomResourceDefinition\nmetadata:\n annotations:\n controller-gen.kubeb"
},
{
"path": "apis/core/config/crd/bases/core.tanzu.vmware.com_readinessproviders.yaml",
"chars": 7145,
"preview": "---\napiVersion: apiextensions.k8s.io/v1\nkind: CustomResourceDefinition\nmetadata:\n annotations:\n controller-gen.kubeb"
},
{
"path": "apis/core/go.mod",
"chars": 2928,
"preview": "module github.com/vmware-tanzu/tanzu-framework/apis/core\n\ngo 1.19\n\nrequire (\n\tgithub.com/google/go-cmp v0.5.8\n\tk8s.io/ap"
},
{
"path": "apis/core/go.sum",
"chars": 96088,
"preview": "cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=\ncloud.google.com/go v0.34.0/go.mod h1"
},
{
"path": "apis/core/v1alpha1/capabilities_types.go",
"chars": 6392,
"preview": "// Copyright 2022 VMware, Inc. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\npackage v1alpha1\n\nimport (\n\t"
},
{
"path": "apis/core/v1alpha1/groupversion_info.go",
"chars": 779,
"preview": "// Copyright 2022 VMware, Inc. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\n// Package v1alpha1 contains"
},
{
"path": "apis/core/v1alpha1/zz_generated.deepcopy.go",
"chars": 7272,
"preview": "//go:build !ignore_autogenerated\n// +build !ignore_autogenerated\n\n// Copyright 2023 VMware, Inc. All Rights Reserved.\n//"
},
{
"path": "apis/core/v1alpha2/capability_types.go",
"chars": 6391,
"preview": "// Copyright YEAR VMware, Inc. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\npackage v1alpha2\n\nimport (\n\t"
},
{
"path": "apis/core/v1alpha2/feature_stability_policies.go",
"chars": 2021,
"preview": "// Copyright 2022 VMware, Inc. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\npackage v1alpha2\n\n// Policy "
},
{
"path": "apis/core/v1alpha2/feature_types.go",
"chars": 3300,
"preview": "// Copyright 2022 VMware, Inc. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\npackage v1alpha2\n\nimport (\n\t"
},
{
"path": "apis/core/v1alpha2/featuregate_types.go",
"chars": 3333,
"preview": "// Copyright 2022 VMware, Inc. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\npackage v1alpha2\n\nimport (\n\t"
},
{
"path": "apis/core/v1alpha2/featuregate_webhook.go",
"chars": 12498,
"preview": "// Copyright 2022 VMware, Inc. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\npackage v1alpha2\n\nimport (\n\t"
},
{
"path": "apis/core/v1alpha2/featuregate_webhook_test.go",
"chars": 14473,
"preview": "// Copyright 2022 VMware, Inc. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\npackage v1alpha2\n\nimport (\n\t"
},
{
"path": "apis/core/v1alpha2/groupversion_info.go",
"chars": 779,
"preview": "// Copyright 2022 VMware, Inc. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\n// Package v1alpha2 contains"
},
{
"path": "apis/core/v1alpha2/readiness_types.go",
"chars": 2930,
"preview": "// Copyright 2023 VMware, Inc. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\npackage v1alpha2\n\nimport (\n\t"
},
{
"path": "apis/core/v1alpha2/readinessprovider_types.go",
"chars": 5827,
"preview": "// Copyright 2023 VMware, Inc. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\npackage v1alpha2\n\nimport (\n\t"
},
{
"path": "apis/core/v1alpha2/readinessprovider_webhook.go",
"chars": 4007,
"preview": "// Copyright 2023 VMware, Inc. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\npackage v1alpha2\n\nimport (\n\t"
},
{
"path": "apis/core/v1alpha2/zz_generated.deepcopy.go",
"chars": 24062,
"preview": "//go:build !ignore_autogenerated\n// +build !ignore_autogenerated\n\n// Copyright 2023 VMware, Inc. All Rights Reserved.\n//"
},
{
"path": "build.mk",
"chars": 13526,
"preview": "# Copyright 2023 VMware, Inc. All Rights Reserved.\n# SPDX-License-Identifier: Apache-2.0\n\n.DEFAULT_GOAL := help\n\nREGISTR"
},
{
"path": "capabilities/client/README.md",
"chars": 1857,
"preview": "# Kubernetes Query Builder SDK\n\nThe discovery SDK provides means to prepare and query for the state of a clusters object"
},
{
"path": "capabilities/client/go.mod",
"chars": 3735,
"preview": "module github.com/vmware-tanzu/tanzu-framework/capabilities/client\n\ngo 1.19\n\nreplace github.com/vmware-tanzu/tanzu-frame"
},
{
"path": "capabilities/client/go.sum",
"chars": 105102,
"preview": "cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=\ncloud.google.com/go v0.34.0/go.mod h1"
},
{
"path": "capabilities/client/pkg/discovery/cluster_gvr.go",
"chars": 8495,
"preview": "// Copyright 2021 VMware, Inc. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\npackage discovery\n\nimport (\n"
},
{
"path": "capabilities/client/pkg/discovery/cluster_object.go",
"chars": 4225,
"preview": "// Copyright 2021 VMware, Inc. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\npackage discovery\n\nimport (\n"
},
{
"path": "capabilities/client/pkg/discovery/cluster_schema.go",
"chars": 1438,
"preview": "// Copyright 2021 VMware, Inc. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\npackage discovery\n\nimport (\n"
},
{
"path": "capabilities/client/pkg/discovery/cluster_test.go",
"chars": 12122,
"preview": "// Copyright 2021 VMware, Inc. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\npackage discovery\n\nimport (\n"
},
{
"path": "capabilities/client/pkg/discovery/discovery.go",
"chars": 3956,
"preview": "// Copyright 2021 VMware, Inc. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\npackage discovery\n\nimport (\n"
},
{
"path": "capabilities/client/pkg/discovery/doc.go",
"chars": 239,
"preview": "// Copyright 2021 VMware, Inc. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\n// Package discovery provide"
},
{
"path": "capabilities/client/pkg/discovery/fake.go",
"chars": 1867,
"preview": "// Copyright 2021 VMware, Inc. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\npackage discovery\n\nimport (\n"
},
{
"path": "capabilities/client/pkg/discovery/generate.go",
"chars": 3882,
"preview": "// Copyright 2021 VMware, Inc. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\npackage discovery\n\nimport (\n"
},
{
"path": "capabilities/client/pkg/discovery/generate_test.go",
"chars": 10201,
"preview": "// Copyright 2022 VMware, Inc. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\npackage discovery\n\nimport (\n"
},
{
"path": "capabilities/client/pkg/discovery/tkg/README.md",
"chars": 430,
"preview": "# TKG Discovery\n\nThis repository is a collection of constants and functions which expose Discovery queries aimed at maki"
},
{
"path": "capabilities/client/pkg/discovery/tkg/capabilities.go",
"chars": 3709,
"preview": "// Copyright 2021 VMware, Inc. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\npackage tkg\n\nimport (\n\t\"cont"
},
{
"path": "capabilities/client/pkg/discovery/tkg/capabilities_test.go",
"chars": 5036,
"preview": "// Copyright 2021 VMware, Inc. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\npackage tkg\n\nimport (\n\t\"cont"
},
{
"path": "capabilities/client/pkg/discovery/tkg/client.go",
"chars": 1949,
"preview": "// Copyright 2021 VMware, Inc. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\npackage tkg\n\nimport (\n\tcorev"
},
{
"path": "capabilities/client/pkg/discovery/tkg/cloudprovider.go",
"chars": 1522,
"preview": "// Copyright 2021 VMware, Inc. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\npackage tkg\n\nimport (\n\t\"cont"
},
{
"path": "capabilities/client/pkg/discovery/tkg/cloudprovider_test.go",
"chars": 1976,
"preview": "// Copyright 2021 VMware, Inc. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\npackage tkg\n\nimport (\n\t\"cont"
},
{
"path": "capabilities/client/pkg/discovery/tkg/clustermetadata.go",
"chars": 1199,
"preview": "// Copyright 2022 VMware, Inc. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\npackage tkg\n\n// ClusterMetad"
},
{
"path": "capabilities/client/pkg/discovery/tkg/doc.go",
"chars": 264,
"preview": "// Copyright 2021 VMware, Inc. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\n// Package tkg exports const"
},
{
"path": "capabilities/client/pkg/discovery/tkg/fake.go",
"chars": 2970,
"preview": "// Copyright 2021 VMware, Inc. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\npackage tkg\n\nimport (\n\tmetav"
},
{
"path": "capabilities/client/pkg/discovery/tkg/infraprovider.go",
"chars": 1712,
"preview": "// Copyright 2021 VMware, Inc. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\npackage tkg\n\nimport (\n\t\"cont"
},
{
"path": "capabilities/client/pkg/discovery/tkg/infraprovider_test.go",
"chars": 2045,
"preview": "// Copyright 2021 VMware, Inc. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\npackage tkg\n\nimport (\n\t\"cont"
},
{
"path": "capabilities/client/pkg/discovery/tkg/resource.go",
"chars": 1657,
"preview": "// Copyright 2021 VMware, Inc. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\npackage tkg\n\nimport (\n\t\"cont"
},
{
"path": "capabilities/client/pkg/discovery/tkg/resource_test.go",
"chars": 4113,
"preview": "// Copyright 2021 VMware, Inc. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\npackage tkg\n\nimport (\n\t\"cont"
},
{
"path": "capabilities/config/rbac.yaml",
"chars": 1255,
"preview": "apiVersion: v1\nkind: ServiceAccount\nmetadata:\n labels:\n app: tanzu-capabilities-manager\n name: tanzu-capabilities-m"
},
{
"path": "capabilities/config/tanzu-capabilities-manager.yaml",
"chars": 912,
"preview": "apiVersion: apps/v1\nkind: Deployment\nmetadata:\n labels:\n app: tanzu-capabilities-manager\n name: tanzu-capabilities-"
},
{
"path": "capabilities/controller/go.mod",
"chars": 4070,
"preview": "module github.com/vmware-tanzu/tanzu-framework/capabilities/controller\n\ngo 1.19\n\nreplace (\n\tgithub.com/vmware-tanzu/tanz"
},
{
"path": "capabilities/controller/go.sum",
"chars": 94350,
"preview": "cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=\ncloud.google.com/go v0.34.0/go.mod h1"
},
{
"path": "capabilities/controller/main.go",
"chars": 2326,
"preview": "// Copyright 2021 VMware, Inc. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\npackage main\n\nimport (\n\t\"fla"
},
{
"path": "capabilities/controller/pkg/capabilities/core/capability_controller.go",
"chars": 6083,
"preview": "// Copyright 2022 VMware, Inc. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\npackage core\n\nimport (\n\t\"con"
},
{
"path": "capabilities/controller/pkg/capabilities/core/doc.go",
"chars": 226,
"preview": "// Copyright 2022 VMware, Inc. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\n// Package core has the capa"
},
{
"path": "capabilities/controller/pkg/capabilities/doc.go",
"chars": 173,
"preview": "// Copyright 2021 VMware, Inc. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\n// Package capabilities has "
},
{
"path": "capabilities/controller/pkg/capabilities/suite_test.go",
"chars": 797,
"preview": "//go:build envtest\n\n// Copyright 2021 VMware, Inc. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\npackage "
},
{
"path": "capabilities/controller/pkg/config/config.go",
"chars": 1875,
"preview": "// Copyright 2021 VMware, Inc. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\npackage config\n\nimport (\n\t\"c"
},
{
"path": "capabilities/controller/pkg/config/config_test.go",
"chars": 6808,
"preview": "// Copyright 2021 VMware, Inc. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\npackage config\n\nimport (\n\t\"b"
},
{
"path": "capabilities/controller/pkg/config/doc.go",
"chars": 159,
"preview": "// Copyright 2022 VMware, Inc. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\n// Package config contains c"
},
{
"path": "capabilities/controller/pkg/constants/constants.go",
"chars": 326,
"preview": "// Copyright 2021 VMware, Inc. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\npackage constants\n\nimport \"t"
},
{
"path": "capabilities/controller/pkg/constants/doc.go",
"chars": 166,
"preview": "// Copyright 2022 VMware, Inc. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\n// Package constants related"
},
{
"path": "capabilities/hack/generate-package-secret.sh",
"chars": 530,
"preview": "#!/usr/bin/env bash\n\n# Copyright 2022 VMware, Inc. All Rights Reserved.\n# SPDX-License-Identifier: Apache-2.0\n\nset -euo "
},
{
"path": "capabilities/hack/generate-package-secret.test.sh",
"chars": 1576,
"preview": "#!/usr/bin/env bash\n\n# Copyright 2022 VMware, Inc. All Rights Reserved.\n# SPDX-License-Identifier: Apache-2.0\n\nset -euo "
},
{
"path": "capabilities/hack/ytt/default-package-secret.yaml",
"chars": 581,
"preview": "#@ load(\"@ytt:yaml\", \"yaml\")\n#@ load(\"@ytt:data\", \"data\")\n#@overlay/match-child-defaults missing_ok=True\n\n#@ def config("
},
{
"path": "capabilities/hack/ytt/schema.yaml",
"chars": 398,
"preview": "#@data/values-schema\n---\ntkr: \"\"\nnamespace: tkg-system\ndeployment:\n hostNetwork: false\n #@schema/type any=True\n nodeS"
},
{
"path": "capabilities/hack/ytt/values.yaml",
"chars": 288,
"preview": "#@data/values\n#@overlay/match-child-defaults missing_ok=True\n---\ntkr: v0.0.0\nnamespace: tkg-system\ndeployment:\n hostNet"
},
{
"path": "cmd/plugin/codegen/README.md",
"chars": 1056,
"preview": "# codegen\n\nTanzu codegen plugin is a place for generators for generating utility code and\nKubernetes YAML, and is based "
},
{
"path": "cmd/plugin/codegen/generate.go",
"chars": 3039,
"preview": "// Copyright 2021 VMware, Inc. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\npackage main\n\nimport (\n\t\"fmt"
},
{
"path": "cmd/plugin/codegen/generators/feature/doc.go",
"chars": 154,
"preview": "// Copyright 2021 VMware, Inc. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\n// Package feature provides "
},
{
"path": "cmd/plugin/codegen/generators/feature/fakeData/bar.yaml",
"chars": 121,
"preview": "\n---\napiVersion: core.tanzu.vmware.com/v1alpha2\nkind: Feature\nmetadata:\n name: bar\nspec:\n stability: Stable\nstatus: {}"
},
{
"path": "cmd/plugin/codegen/generators/feature/fakeData/baz.yaml",
"chars": 121,
"preview": "\n---\napiVersion: core.tanzu.vmware.com/v1alpha2\nkind: Feature\nmetadata:\n name: baz\nspec:\n stability: Stable\nstatus: {}"
},
{
"path": "cmd/plugin/codegen/generators/feature/fakeData/cronjob_types.go",
"chars": 720,
"preview": "// Copyright 2021 VMware, Inc. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\npackage fakedata\n\nimport met"
},
{
"path": "cmd/plugin/codegen/generators/feature/fakeData/doc.go",
"chars": 162,
"preview": "// Copyright 2021 VMware, Inc. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\n// Package fakedata provides"
},
{
"path": "cmd/plugin/codegen/generators/feature/fakeData/foo.yaml",
"chars": 132,
"preview": "\n---\napiVersion: core.tanzu.vmware.com/v1alpha2\nkind: Feature\nmetadata:\n name: foo\nspec:\n stability: Technical Preview"
},
{
"path": "cmd/plugin/codegen/generators/feature/fakeData/memcached_types.go",
"chars": 655,
"preview": "// Copyright 2021 VMware, Inc. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\npackage fakedata\n\nimport met"
},
{
"path": "cmd/plugin/codegen/generators/feature/fakeData/mykind_types.go",
"chars": 677,
"preview": "// Copyright 2021 VMware, Inc. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\npackage fakedata\n\nimport met"
},
{
"path": "cmd/plugin/codegen/generators/feature/feature_suite_test.go",
"chars": 302,
"preview": "// Copyright 2021 VMware, Inc. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\npackage feature\n\nimport (\n\t\""
},
{
"path": "cmd/plugin/codegen/generators/feature/gen.go",
"chars": 3004,
"preview": "// Copyright 2021 VMware, Inc. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\npackage feature\n\nimport (\n\tm"
},
{
"path": "cmd/plugin/codegen/generators/feature/gen_integration_test.go",
"chars": 3797,
"preview": "// Copyright 2021 VMware, Inc. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\npackage feature\n\nimport (\n\t\""
},
{
"path": "cmd/plugin/codegen/go.mod",
"chars": 4329,
"preview": "module github.com/vmware-tanzu/tanzu-framework/cmd/plugin/codegen\n\ngo 1.19\n\nreplace github.com/vmware-tanzu/tanzu-framew"
},
{
"path": "cmd/plugin/codegen/go.sum",
"chars": 104955,
"preview": "cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=\ncloud.google.com/go v0.34.0/go.mod h1"
},
{
"path": "cmd/plugin/codegen/main.go",
"chars": 775,
"preview": "// Copyright 2021 VMware, Inc. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\npackage main\n\nimport (\n\t\"git"
},
{
"path": "cmd/plugin/codegen/test/fakeData/mykind_types.go",
"chars": 666,
"preview": "// Copyright 2021 VMware, Inc. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\npackage fakedata\n\nimport met"
},
{
"path": "cmd/plugin/codegen/test/main.go",
"chars": 1860,
"preview": "// Copyright 2021 VMware, Inc. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\npackage main\n\nimport (\n\t\"fmt"
},
{
"path": "cmd/plugin/feature/README.md",
"chars": 2553,
"preview": "# Feature\n\nFeature plugin gives access to features using featuregates.\n\n## Usage\n\nFeature plugin has three commands:\n\n1."
},
{
"path": "cmd/plugin/feature/activate.go",
"chars": 6380,
"preview": "// Copyright 2022 VMware, Inc. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\npackage main\n\nimport (\n\t\"con"
},
{
"path": "cmd/plugin/feature/activate_test.go",
"chars": 6819,
"preview": "// Copyright 2022 VMware, Inc. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\npackage main\n\nimport (\n\t\"con"
},
{
"path": "cmd/plugin/feature/deactivate.go",
"chars": 1336,
"preview": "// Copyright 2022 VMware, Inc. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\npackage main\n\nimport (\n\t\"con"
},
{
"path": "cmd/plugin/feature/deactivate_test.go",
"chars": 3755,
"preview": "// Copyright 2022 VMware, Inc. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\npackage main\n\nimport (\n\t\"con"
},
{
"path": "cmd/plugin/feature/go.mod",
"chars": 4838,
"preview": "module github.com/vmware-tanzu/tanzu-framework/cmd/plugin/feature\n\ngo 1.19\n\nreplace (\n\tgithub.com/vmware-tanzu/tanzu-fra"
},
{
"path": "cmd/plugin/feature/go.sum",
"chars": 70222,
"preview": "cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=\ncloud.google.com/go v0.34.0/go.mod h1"
},
{
"path": "cmd/plugin/feature/list.go",
"chars": 7035,
"preview": "// Copyright 2022 VMware, Inc. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\npackage main\n\nimport (\n\t\"con"
},
{
"path": "cmd/plugin/feature/list_test.go",
"chars": 9480,
"preview": "// Copyright 2022 VMware, Inc. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\npackage main\n\nimport (\n\t\"con"
},
{
"path": "cmd/plugin/feature/main.go",
"chars": 882,
"preview": "// Copyright 2021 VMware, Inc. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\npackage main\n\nimport (\n\t\"os\""
},
{
"path": "cmd/plugin/feature/test/main.go",
"chars": 561,
"preview": "// Copyright 2021 VMware, Inc. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\npackage main\n\nimport (\n\t\"log"
},
{
"path": "cmd/plugin/feature/testdata/k8s_config.kube",
"chars": 72,
"preview": "apiVersion: v1\nclusters:\n- cluster:\n server: https://127.0.0.1:51628\n"
},
{
"path": "common.mk",
"chars": 3981,
"preview": "# Copyright 2021 VMware, Inc. All Rights Reserved.\n# SPDX-License-Identifier: Apache-2.0\n\nGOOS ?= $(shell go env GOOS)\nG"
},
{
"path": "docs/README.md",
"chars": 327,
"preview": "# Documentation\n\nThis directory contains documentation for this repo. Refer to the [documentation style guide](style-gui"
},
{
"path": "docs/community/README.md",
"chars": 253,
"preview": "# Community\n\nDocumentation for the Framework community related processes.\n\n## Table of Contents\n\n* [Contribution Ladder]"
},
{
"path": "docs/community/contribution-ladder.md",
"chars": 2307,
"preview": "# Contribution Ladder\n\nThis document outlines the various responsibilities of contributor roles for Tanzu Framework\nand "
},
{
"path": "docs/community/severity-definitions.md",
"chars": 1261,
"preview": "# Severity Definitions\n\nThis document provides definitions for various severity levels of the support\nprogram.\n\n## Sever"
},
{
"path": "docs/community/support-process.md",
"chars": 3790,
"preview": "# Framework Support Process\n\n## Definitions\n\n* **Framework member** - is a person who is an active contributor and with\n"
},
{
"path": "docs/dev/README.md",
"chars": 244,
"preview": "# Development Docs\n\nDocumentation centered on Tanzu Framework and its development process.\n\n## Table of Contents\n\n* [Loc"
},
{
"path": "docs/dev/_proposal.md",
"chars": 2171,
"preview": "# Design proposal template `<replace with your proposal's title>`\n\n_Note_: The name of the file should follow the name p"
},
{
"path": "docs/dev/build.md",
"chars": 2012,
"preview": "# Developing With Tanzu Framework\n\nFramework is meant to be extended, and these docs will help outline the available dev"
},
{
"path": "docs/dev/troubleshooting.md",
"chars": 189,
"preview": "# Troubleshooting\n\n## Open an Issue\n\nIf you stumble into a situation where a clean build of the main branch will not bui"
},
{
"path": "docs/framework-use-cases.md",
"chars": 2032,
"preview": "# Use cases\n\nThis document provides some use cases for Framework to understand the project's\ncontext.\n\n## Use Case #1 - "
},
{
"path": "docs/glossary.md",
"chars": 1694,
"preview": "# Tanzu Framework Glossary\n\n**Condition:** A Kubernetes concept that communicates the status of a resource during its li"
},
{
"path": "docs/packages/README.md",
"chars": 342,
"preview": "# Packages\n\nDocumentation related to packages and package tooling in Framework repo.\n\n## Table of Contents\n\n* [Definitio"
},
{
"path": "docs/packages/add-new-package-to-package-repo.md",
"chars": 3545,
"preview": "# Add a package to management package repository\n\nThis document provides guidance on how to add a package to a package r"
},
{
"path": "docs/packages/add-packageinstall-to-meta-package.md",
"chars": 2176,
"preview": "# Add PackageInstall CR to a Meta Package\n\nThis document provides guidance on how to add a PackageInstall CR to a meta p"
},
{
"path": "docs/packages/definitions.md",
"chars": 1074,
"preview": "# Definitions\n\nThis document provides definitions of some package terminology used in the Tanzu framework.\nTo learn abou"
},
{
"path": "docs/packages/dev-workflow.md",
"chars": 5904,
"preview": "# Dev workflow\n\nThis document provides guidance on how to build and publish package and repo bundles and test them on yo"
},
{
"path": "docs/release/README.md",
"chars": 293,
"preview": "# Release\n\nDocumentation for the release process.\n\n## Table of Contents\n\n* [Kind Labels](kind-labels.md)\n* [Release Note"
},
{
"path": "docs/release/cherry-pick.md",
"chars": 788,
"preview": "Cherry-pick process\n===================\n\n- Know the target release branches your PR must be cherry-picked into\n- Raise y"
},
{
"path": "docs/release/kind-labels.md",
"chars": 645,
"preview": "# Kind Labels\n\nThe kind label is used to help identify the types of changes going into the\nrelease over time.\n\nOne of th"
},
{
"path": "docs/release/release-notes-gathering-process.md",
"chars": 1576,
"preview": "# Release notes process\n\nThis document provides guidance on how to gather release notes from the pull\nrequests that have"
},
{
"path": "docs/release/release-notes.md",
"chars": 2859,
"preview": "# Release notes\n\nThis document provides guidance on providing release notes for changes made to\nTanzu Framework. Release"
},
{
"path": "docs/release/release-process.md",
"chars": 638,
"preview": "# Release process\n\nThe person who is responsible for cutting a release, pushes a tag to the\nGitHub repo to trigger the a"
},
{
"path": "docs/runtime-core/README.md",
"chars": 275,
"preview": "# API Machinery\n\nDocumentation for API Machinery related things.\n\n## Table of Contents\n\n* [Tanzu Framework Controllers U"
},
{
"path": "docs/runtime-core/capability-discovery.md",
"chars": 9325,
"preview": "# Capability Discovery\n\n## Table of Contents\n\n* [Capability Discovery](#capability-discovery)\n * [Discovery Go Package]"
},
{
"path": "docs/runtime-core/features-and-featuregates.md",
"chars": 7723,
"preview": "# Framework Features\n\nFramework offers Features and Featuregates APIs to allow developers to have a\nsystem to control ro"
},
{
"path": "docs/runtime-core/guide/README.md",
"chars": 8138,
"preview": "# Tanzu Framework API Machinery Guide\n\nThe purpose of this walkthrough is to provide a good starting place for those wri"
},
{
"path": "docs/runtime-core/guide/examples/controller.go.sample",
"chars": 3121,
"preview": "/*\nCopyright 2021.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in "
},
{
"path": "docs/runtime-core/guide/examples/megacache_types.go.sample",
"chars": 1712,
"preview": "/*\nCopyright 2021.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in "
},
{
"path": "docs/runtime-core/readiness-framework/deploy-local-changes.md",
"chars": 927,
"preview": "# Deploying the local changes to a Kind cluster\n\n## Pre-requisites\n\n1. Docker\n2. Kind\n3. ytt\n4. Kubectl\n5. Make\n\n### Cre"
},
{
"path": "docs/runtime-core/readiness-framework/guide-with-examples.md",
"chars": 12791,
"preview": "# Usage Guide\n\n## Abstractions\n\n### Readiness Check\n\nAn organization can have a set of approved checks. Each check is a "
},
{
"path": "docs/runtime-core/readiness-framework.md",
"chars": 3557,
"preview": "# Readiness Framework\n\nThe readiness framework provides functionality to define and evaluate k8s clusters for suitabilit"
},
{
"path": "docs/runtime-core/tanzu-core-controllers.md",
"chars": 16765,
"preview": "# Tanzu Framework Controllers Using Kubebuilder\n\n## Table of Contents\n\n* [Summary](#summary)\n* [Goals](#goals)\n* [Non Go"
},
{
"path": "docs/style-guide.md",
"chars": 13974,
"preview": "# Documentation Style Guide\n\n## Table of Contents\n\n* [Content best practices](#content-best-practices)\n * [Use present "
},
{
"path": "e2e.mk",
"chars": 792,
"preview": "# Copyright 2021 VMware, Inc. All Rights Reserved.\n# SPDX-License-Identifier: Apache-2.0\n\ncreate-kind-cluster:\n\tkind cre"
},
{
"path": "featuregates/client/go.mod",
"chars": 3481,
"preview": "module github.com/vmware-tanzu/tanzu-framework/featuregates/client\n\ngo 1.19\n\nreplace (\n\tgithub.com/vmware-tanzu/tanzu-fr"
},
{
"path": "featuregates/client/go.sum",
"chars": 62636,
"preview": "cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=\ncloud.google.com/go v0.34.0/go.mod h1"
},
{
"path": "featuregates/client/pkg/featuregateclient/client.go",
"chars": 11062,
"preview": "// Copyright 2022 VMware, Inc. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\npackage featuregateclient\n\ni"
},
{
"path": "featuregates/client/pkg/featuregateclient/client_test.go",
"chars": 14471,
"preview": "// Copyright 2022 VMware, Inc. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\npackage featuregateclient\n\ni"
},
{
"path": "featuregates/client/pkg/featuregateclient/doc.go",
"chars": 215,
"preview": "// Copyright 2021 VMware, Inc. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\n// Package featuregateclient"
},
{
"path": "featuregates/client/pkg/featuregateclient/errors.go",
"chars": 883,
"preview": "// Copyright 2022 VMware, Inc. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\npackage featuregateclient\n\ni"
},
{
"path": "featuregates/client/pkg/featuregateclient/fake/doc.go",
"chars": 154,
"preview": "// Copyright 2021 VMware, Inc. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\n// Package fake provides dat"
},
{
"path": "featuregates/client/pkg/featuregateclient/fake/objects.go",
"chars": 9873,
"preview": "// Copyright 2022 VMware, Inc. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\npackage fake\n\nimport (\n\tcore"
},
{
"path": "featuregates/client/pkg/featuregateclient/validation.go",
"chars": 2212,
"preview": "// Copyright 2022 VMware, Inc. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\npackage featuregateclient\n\ni"
},
{
"path": "featuregates/client/pkg/util/doc.go",
"chars": 184,
"preview": "// Copyright 2021 VMware, Inc. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\n// Package util provides uti"
},
{
"path": "featuregates/client/pkg/util/featuregate.go",
"chars": 8275,
"preview": "// Copyright 2021 VMware, Inc. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\npackage util\n\nimport (\n\t\"con"
},
{
"path": "featuregates/client/pkg/util/featuregate_test.go",
"chars": 21755,
"preview": "// Copyright 2021 VMware, Inc. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\npackage util\n\nimport (\n\t\"con"
},
{
"path": "featuregates/client/pkg/util/namespace_selector.go",
"chars": 1207,
"preview": "// Copyright 2021 VMware, Inc. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\npackage util\n\nimport (\n\t\"con"
},
{
"path": "featuregates/client/pkg/util/namespace_selector_test.go",
"chars": 4115,
"preview": "// Copyright 2021 VMware, Inc. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\npackage util\n\nimport (\n\t\"con"
},
{
"path": "featuregates/controller/go.mod",
"chars": 4048,
"preview": "module github.com/vmware-tanzu/tanzu-framework/featuregates/controller\n\ngo 1.19\n\nreplace (\n\tgithub.com/vmware-tanzu/tanz"
},
{
"path": "featuregates/controller/go.sum",
"chars": 65455,
"preview": "cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=\ncloud.google.com/go v0.34.0/go.mod h1"
},
{
"path": "featuregates/controller/main.go",
"chars": 7953,
"preview": "// Copyright 2021 VMware, Inc. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\npackage main\n\nimport (\n\t\"cry"
},
{
"path": "featuregates/controller/pkg/feature/doc.go",
"chars": 294,
"preview": "// Copyright 2022 VMware, Inc. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\n// Package feature has the c"
},
{
"path": "featuregates/controller/pkg/feature/feature_controller.go",
"chars": 10565,
"preview": "// Copyright 2022 VMware, Inc. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\npackage feature\n\nimport (\n\t\""
},
{
"path": "featuregates/controller/pkg/feature/feature_suite_test.go",
"chars": 15744,
"preview": "//go:build envtest\n\n// Copyright 2023 VMware, Inc. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\npackage "
},
{
"path": "featuregates/controller/pkg/feature/testdata/webhook.yaml",
"chars": 892,
"preview": "apiVersion: v1\nkind: Service\nmetadata:\n name: tanzu-featuregates-webhook-service\n namespace: tkg-system\nspec:\n type: "
},
{
"path": "featuregates/controller/pkg/featuregate/doc.go",
"chars": 191,
"preview": "// Copyright 2021 VMware, Inc. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\n// Package featuregate has t"
},
{
"path": "featuregates/controller/pkg/featuregate/featuregate_controller.go",
"chars": 3541,
"preview": "// Copyright 2021 VMware, Inc. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\npackage featuregate\n\nimport "
},
{
"path": "go.mod",
"chars": 372,
"preview": "module github.com/vmware-tanzu/tanzu-framework\n\ngo 1.19\n\nreplace (\n\tgithub.com/vmware-tanzu/tanzu-framework/apis/config "
},
{
"path": "go.sum",
"chars": 0,
"preview": ""
},
{
"path": "hack/boilerplate.go.txt",
"chars": 91,
"preview": "// Copyright YEAR VMware, Inc. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n"
}
]
// ... and 117 more files (download for full content)
About this extraction
This page contains the full source code of the vmware-tanzu/tanzu-framework GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 317 files (1.9 MB), approximately 804.3k tokens, and a symbol index with 595 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.